How Mob Programming Helps Achieve Group Flow
Last night I witnessed something magical, and it was the second time I saw it in a few weeks. I saw the Standard Librarians invite four new people into the mob, work them into their Mob Programming rotation with basically no explanation of what we're doing, and then watched these people contribute. Some of them knew Ruby and Rails, some didn't. Some knew vim, some didn't. At the end of the night, we had a mini retrospective where we talked about the experience. The guy who didn't know vim pointed out he felt like he slowed things down because he doesn't know vim at all... I pointed out that he learned what he needed to in order to contribute to the group, right when he needed to know it.
The core idea of Flow is that you work on something challenging that you need to strive for. By having this constant challenge, you go into a state where you're fully engaged with the work, and we call that Flow.
The problem with Flow is that it can be hard to get into and maintain. If your challenge is too hard, the motivation gives way to frustration. Frustration knocks you right out of flow and now you have to figure out how to get back into it.
I think there's an even bigger problem, and it's about the way we think of Flow. People tend to think "I'm in Flow" or "I'm not in Flow and I need to get into Flow". It's an easy trap to fall into when you work alone - there's simply not enough energy flowing to see the Flow that is always naturally there. Flow is not a binary thing - on or off - it always exists, and we're either Flowing more or Flowing less. In a group, you can see this happen much more easily. With just a few people, you can trace how an idea flows through the team. One person can contribute a small idea, and someone else builds on it, and before long you have a powerful new idea that began with something laughably small. This can happen when you work alone, but in my experience it just doesn't happen nearly as often as in a group. When you work alone, you are solely responsible for getting yourself into a high Flow state. When you work in a group, you simply need to contribute something now and then and let those contributions Flow through the group. The combined energy and contributions create a shared high Flow state.
There's another reason that Mob Programming is so effective for Flow: it always puts you in that sweet spot of challenge, without getting to a point of frustration. When you sit in the driver's seat, you become acutely aware of what you don't know - the navigators tell you to do something, and you might have to ask how. You have time to figure it out on your own - that's the striving for challenge part of flow. But if you can't figure something out, you have the whole group to help you. You never get to a point of frustration, because your team helps you solve the problem that was too challenging for you in that moment. The result? You move on to another challenge, which again you either overcome on your own or with the help of your team. Either way, you are presented with a series of challenges which you contribute to as best you can - the very definition of flow.
I've seen this work, and it's pretty amazing. I created RubySteps as a way to get more people to experience this effect. I truly believe it is the best way to learn to create useful software. You don't need to know the ins and outs of a programming language - you need to know how to contribute to a group, which you've been doing your whole life, and which you can get better at. If you want to join a community of learners who work in a way that maximizes flow, sign up for RubySteps absolutely free.