Mob programming
Mob programming, or software teaming, is an innovative software development approach where an entire team works on the same task, at the same time, in the same space, and at the same computer.
This collaborative method, pioneered by Woody Zuill in the early 2010s, takes pair programming to the next level by involving the whole team. It has since gained traction among forward-thinking engineering teams.
It highlights the mismatch between the inherently collaborative nature of complex software development and the limitations of traditional individual-focused work methods, which leads to various team and product quality problems that mob programming aims to solve.
But how exactly does it work? When I should use it? Those questions and others will be answered below.
How does it work?
The setup for mob programming is deceptively simple, but crucial for its success. There are three roles:
the Driver, who controls the keyboard and acts purely as the team’s hands; they do not make independent decisions.
the Navigator, who co-ordinates the implementation, making tactical decisions about the task at hand
and the rest of the team, who actively participate in discussing solutions, spotting issues and contributing ideas.
These roles rotate frequently during the session, typically every 5-15 minutes. Doing so ensures that everyone stays engaged and contributes their expertise.
There are two ways to set up the session:
in office, the group gathers around a large screen or projector, with one computer connected
for remote teams, screen sharing and collaborate tools become essential - tooling like Visual Studio’s Live Share becomes really handy!
These sessions are almost always useful for knowledge sharing within an engineering team, but it’s also useful to know the situations in which they are most effective.
When I should run a session?
There might be organizational symptoms and problems that are a signal that a mob programming session could help. Here’s just a few of them:
knowledge silos and bus factor issues - when critical system knowledge is concentrated in a few key developers, creating dangerous dependencies and bottlenecks.
Mob programming excels at breaking down these silos by making knowledge sharing an organic, daily occurrence. It's particularly effective when onboarding new team members into complex legacy systems or when preparing for the departure of key team members.
team cohesion and communication gaps - when teams show signs of disconnection, misalignment on technical decisions, or frequent misunderstandings about requirements, mob programming can help bridge these gaps.
It's particularly effective for distributed teams working across time zones or teams that have recently merged and need to build shared understanding and practices.
learning and skill development bottlenecks - there might be a significant skill gap within the team; mob programming accelerates learning through active participation. It's especially useful when adopting new frameworks, implementing unfamiliar patterns, or helping junior developers level up quickly.
Other common areas include code quality and technical debt, complex problems to solve, cross-functional challenges, and quality assurance issues. And it doesn’t have to be production code - working on code katas, for example, can be a great way to get used to the knowledge sharing pattern.
Common problems
Like any collaborative practice, mob programming comes with its hurdles.
The most common challenge is managing different skill levels and personalities within the mob. Strong facilitators can help by ensuring everyone gets a chance to contribute, using techniques like time-boxed rotations for the Driver role and establishing clear communication protocols.
Another challenge is maintaining energy and focus during sessions, which can be addressed by taking regular breaks and switching between different types of tasks.
Summary
Mob programming is a powerful collaborative development practice where an entire team works together on the same code, using a single computer. The approach uses three rotating roles: the Driver (who types), the Navigator (who guides), and the rest of the team (who contribute ideas and spot issues), with participants switching roles frequently to maintain engagement and ensure diverse input.
This practice is particularly effective at solving common software development challenges such as knowledge silos, code quality issues, and team communication gaps. However, identifying these issues in your team can be challenging without the right insights.
That's where PureType can help. By mapping your team's knowledge landscape, it helps identify potential knowledge silos, skill gaps, and collaboration opportunities - making it easier to decide when and where mob programming could have the biggest impact on your team's effectiveness.