Mob Programming: Working Well Together
Working well together is generally accepted as a good idea, and in many human activities, we naturally gather together to work as a team. We seek ways to make collaboration natural and easy.
On the other hand, there are endeavors where working alone is typically considered the only way to go: Authors, artists, and other creative folks often work alone—or at least that is how we envision how they work. This goes for knowledge work as well, such as with accountants, mathematicians, professors, researchers, architects, and software programmers.
I’ve noticed that in software development, we often divide up the work in such a way that individuals can work alone, and then later—sometimes much later—the results of that work are brought together during an integration effort. This is so common that countless practices and techniques have been devised for coordination and communication. We need many meetings, all sorts of documentation, protocols for seeking help from each other, and communication tools such as messaging apps, spreadsheets, and so on. Is this effective?
Do we believe that separating people, and the things they are working on, is a good thing? I believe we can do better.
With agile and lean software development, we recognize that collaboration is a good thing. If we are to do our best, it’s useful for the whole team to work on the same thing, at the same time, in the same space. To be able to do this, we need to discover a different set of practices and techniques—and adopt a new way of thinking. Let’s embrace smaller batches, flow, rapid feedback, elimination of queues and inventory, and other related concepts.
Seven years ago I was working on a team that focused on amplifying our ability to work well together, and this led to mob programming. Mob programming is a whole-team approach to creating software where all the brilliant minds work together on the same thing at the same computer. Everyone sits or stands at one computer, working together to create software—developers, testers, product experts, database experts, and whoever else is needed to get this work done.
It's not a bunch of people watching one person write code, but rather everyone thinking, discussing, designing, and collaborating in creating that code. With everyone on the team working together, things get done quickly, and with many pairs of eyes on the same thing, the quality of our designs, decisions, and code increases, and the overall results are a big improvement over the “let’s all work alone” approach.
We focus on flow of the work rather than the optimization of individual effort. We’ve found that communication and coordination costs dropped substantially and we all enjoyed our work a great deal more. This is good.
Can software development be done as a team activity? I think so. Many teams all over the world are now mob programming on a continuous or frequent basis, so it’s worth considering. Perhaps it can work for you.