How mob programming leads to more effective teamwork
On February 9, 2023, we joined Woody Zuill in the Software Crafters Twitter Space. Woody talked about the origin and the evolution of mob programming. Woody brought up a number of interesting and actionable concepts, and here I will try to repeat some of the salient points that caught my attention.
A team only in name
Woody mentioned that in 1998 he had the first opportunity to develop software with other people who were on the same job. However, despite the fact that they called themselves ‘software development team’, they weren’t doing anything that resembled a teamwork. That puzzling fact led Woody to spend the ensuing 15 years or so on devising ways to transform the ‘herding the cats’ situation (where each team member was basically behaving like a cat, doing their own thing, working in isolation) into a more cohesive teamwork where the entire team is striving to establish and deliver the uninterrupted flow of value.
The ongoing challenge: almost everything we do gravitates toward teamwork, and yet we tend to continue to work in isolation.
Software development implies collaboration
Despite us interacting with other people on a daily basis (team members, customers, users, product owners, business analysts, etc.), we still tend to collaborate in a very low key, pretty much ineffective ways.
On average, we don’t invest enough into cultivating better ways to collaborate. To propose to work together requires establishing some sort of a protocol, or a working agreement. As an example, we may agree to adopt the protocol that any idea about how to change or structure the code must go through someone else’s hands. Right there, we see the improvement in sharing, the improvement in collaboration.
It’s important to recognize that collaboration is more desirable than communication, because communication usually fails, except by accident. In contrast, when we are collaborating, we increase the frequency of feedback which reduces the chances of failure and increases the chances of happy accidents.
Rather than trying to get better at communicating, let’s learn how to collaborate better. That way, the betting average of successfully delivering value increases.
Towards teaming
The ability to interact with each other very well leads to improved teaming. Team implies the whole team, including everyone who works toward delivering software. It goes beyond writing code.
The most important thing is focusing on learning to work well as a team. It’s amazing how much gets accomplish when we stop caring about the attribution. The ability to work in a team setting is a skill we should all cultivate. Woody suggested a pithy slogan: “My job today is to help everyone else be the best they can be.”
Software development is a process of discovery
When developing software, we are searching for better ways and discovering them via trial and error. It is the exact opposite of the assembly line activity, or something like assembling IKEA furniture by using prefabricated parts and following the prescribed schematics.
Working as a whole team we avoid hardening the silos. However, the essential prerequisite for successful teamwork is the skill, the ability to vertically slice the user stories. Since the team is working on one thing at a time (a single vertically sliced user story), the requisite knowledge necessary for delivering that story is fully present during the mob programming session. That arrangement facilitates the predictable flow of value.