Half a decade of mob programming - Ulrika Malmgren - NDC Oslo 2024

Learn how mob programming transforms software development through continuous collaboration, knowledge sharing, and higher quality solutions based on 5 years of experience.

Key takeaways
  • Software teaming involves the whole team working together on the same task simultaneously, with one driver at the keyboard and others as navigators

  • Key benefits include:

    • Organic knowledge sharing happens continuously without extra effort
    • Higher quality solutions through different perspectives and collective understanding
    • More consistent output as work leverages the highest skill level available
    • Reduced need for synchronization meetings and documentation
    • Better resilience and reduced bus factor
  • Success factors:

    • Patience with self and others during the learning curve
    • Curiosity and willingness to learn from others
    • Shared values and common ground within the team
    • 3-5 people is optimal team size
    • Regular retrospectives to improve the practice
  • Common challenges:

    • Initial discomfort and resistance to change
    • Energy level variations in the team
    • Some team members may prefer working alone
    • Learning to communicate effectively
    • Need for discipline to stay focused as a group
  • Works well remotely:

    • Use shared screen and remote access tools
    • Single team online presence/account
    • Clear audio setup for all participants
    • Digital whiteboarding tools for collaboration
  • Not every task needs full team attention:

    • Individual work can be appropriate for certain tasks
    • Juniors may need some solo time to build confidence
    • Time-boxed individual exploration can be valuable
    • Return to group to share learnings
  • The default approach should be software teaming rather than individual work, with exceptions made when appropriate

  • Quality improves through:

    • Collective understanding of problems
    • Multiple perspectives on solutions
    • Built-in code review and knowledge sharing
    • Consistent standards across the team
    • Fewer handoff errors
  • Focus should be on optimizing knowledge flow rather than individual utilization