For this year's Ship It! conference I gave a talk on mob programming. Seeing that I had been given the time slot directly after lunch on the first day of the conference, I decided to switch things up a little. Thus, instead of giving an ordinary talk, I read a story for the audience...
Once upon a time, there was a developer called Nemah.
She was just like you and me. She worked in a team at a not too-big company, doing mostly backend stuff with a little bit of frontend code on the side.
She hated CSS, but was on occasion accused of doing UX. She hardly knew how to start photoshop so she wasn’t skilled as a graphical designer, but she did like to think about the usability of the things her team built, and not only of the beauty of the code.
She kind of, sort of, almost, liked her job. It wasn’t mind-blowingly fantastic every day, but she had an active life outside of work. A fairly sane life balance if you like.
She liked her team, even though she mostly interacted with her colleagues using Slack and Github.
You see, her team didn’t actually work together.
Sure, they had their bi-weekly planning sessions where all to often they were told what to do. Often how. Almost never, ever why. Nemah was initially good at asking why, but she was a single voice among many silent ones and therefore often ignored. After all, the planning meetings were scheduled to last an hour, but there was never enough time to go through all the things “the Others” had decided that the team should be working on.
Ah yes, “the Others”. The product owner, the business side, the “non-developers”. Those people that just don’t get how hard it is to develop, maintain, and nurture software. Doubly so when they kept coming with changes during the sprint. By then the stories and epics had been split into tasks and handed out to the individual developers. Most of the time people worked on what they were good at so Nemah and her teammates tended to do the same kind of thing over and over and over again. Details differed, but it started to get old. Nemah felt as if she was stagnating in her own personal development and it made work less fun.
Sometimes, a few of the developers pair-programmed.
It was the one time when they dropped their headsets of Greater Concentration Protection and actually engaged with one another through other means than semi-snarky pull request comments and goofy GIFs in the private Slack channel they used to vent about the latest mid-sprint changes raining down on them from “the Others”.
Nemah though pair-programming was fun, especially when she got to do it with Amadeus.
He was the latest addition to the team and didn’t really know the problem domain that well so Nemah got to explain how things worked. It made her feel smart and useful. In return, Amadeus, being of an almost perpetually cheery disposition, cracked jokes and dropped puns left and right. The days flew by when the two worked together. But despite having a lot of fun together, Nemah often felt exhausted by late afternoon. At two she had a hard time concentrating at the task at hand. By four the migraine kicked in and she had to leave early.
It never struck them that they had so much fun together that they forgot to take breaks.
The opposite held true whenever Nemah paired with Spex.
Spex, short for “Mr. Unexpected” - so called for his tendency in the evenings to rewrite entire pull requests made by his team mates only for them to show up the morning after, to find their work redone in accordance with Spex:s coding sensibilities. Protesting was hard because the code was always shorter and sweeter. The sting of seeing a full week’s worth of laboriously crafted code, be replaced by something succinct coming out of a night’s coding session by Spex hurt. Nemah didn’t say it, but she felt dumb whenever that happened.
She couldn’t argue with the code being better after Spex spending a night with it though.
Spex of course was constantly tired due to working nights. He always came in late, usually missed standup, and his brain didn’t engage until after lunch. Pairing with him was tough too, because he didn’t say much and never really explained his train of though. He simply took over the keyboard and started to type at a speed that was too swift for any other in the team to keep up with. Anyone paring with him tended to lean further and further back in the chair, flicking through the latest updates on Long-facebook, wondering if it wasn’t time to go home soon.
It’s not as if Spex was an ass or anything, he just wasn’t very good at taking the time to explain things so that his fellow coworkers understood them. These days he had even less time to do so as he had been “promoted” to lead developer. Mostly it entailed having to attend various meetings with “the Others” in order to handle the ever changing requirements. He did his best to tell the team what had been said in those meetings, but it wasn’t unusual for him to come out of a meeting only to sit down and start hacking away. His mood grew increasingly sour and dour as the days went past. Perhaps it was just a matter of time before the proverbial straw would break the camel’s back and he would pick up and leave for good.
“The Others” took notice so in an attempt to relieve the situation, they hired a few more developers.
Now there were five sets of headsets, five silos of coding, five slices of every story to meld together into a whole where there previously only had been three.
Nemah wondered if there was a better way of doing things. A better way of working, not only as a team, but with “the Others”.
- It can’t be only us having these kinds of problems, she said to herself. There must be other organisations that have gone through the exact same thing and figured out a solution.
So she went online and looked for articles and talks on the matter. Fairly soon she found something of interest, but she knew that she couldn’t do it on her own. Thus, the next day, she pulled Amadeus aside and told him what she had found. He was just as eager as her to do something about the situation and he liked what he heard.
- If you present this to the rest of the team, I will follow you. If you get the cart in motion, I will keep pulling it when you tire.
Heartened by this, Nemah grabbed a whiteboard while Amadeus gathered the rest of the team in front of it.
- Ok, so I have something I’d like for us to try, she began. It’s called mob programming. I know, I know, the name does leave something to long for, but it’s mob as in group, not mob as in mobbing or harassing. I like to think of it as pair-programming on steroids. Except you’re not just a pair of developers in front of the computer, but rather the entire team.
She paused for a second. One of the newcomers were rolling his eyes, but didn’t say anything, so she pressed on.
- Just like pair-programming, you have a driver that writes the code. The rest of the team acts as navigators. Now, there are a couple of rules to follow. Just to get started and comfortable with working this way.
- We rotate driver at a set interval. Every 15 minutes for example. We can just pick a number here and experiment with it. The idea is that no-one gets stuck in the driver’s seat.
- The navigators try to stay at a higher level of abstraction, not diving into details and shouting out what keys to press unless asked for by the driver.
- The driver...and here Nemah glanced at Spex...is not allowed to type anything without a navigator expressing an intention. The driver is like a really, really clever input device. But the driver should not act on its own.
- So, the driver gets to pull information and instructions from the navigators, and they in turn should avoid to push the same onto the driver, Amadeus interjected.
- Exactly, Nemah replied.
- Alright, Spex said. But what do we do when the driver is the only one that knows where we are going?
Anticipating this question, Nemah cleared her throat and stated matter of factly.
- Then the driver lets go of the keyboard and becomes a navigator. It’s the best way of avoiding the mob programming session turning into a spectator’s sport.
And thus they gave mob programming a try. The first time, as with so many other first times, was a bit awkward. It took a few rotations to just figure out what to do, which computer to use, agree on the text editor, and debate the superiority of certain shell aliases compared to others. But by the end of the day, they all had started to get into it and had actually made some headway. Sure, they hadn’t produced quite as much code as they would have done had they all been working solo, but what they had written, they all grasped. There was something quite intriguing about this way of working, though they couldn’t quite phrase it just yet.
- You know, Spex said, just as the mob was winding down for the day, I think we should try this again.
At this, Nemah was taken aback. Didn’t Spex hate working with others? After all, he was always complaining about being disturbed or slowed down and never having time to get things done! And here he was, suggesting that they should mob program again?
- Next month, he continued, after next sprint, we will be building an entirely new web service. And I think starting that as a mob would be perfect.
- Oh, the greenfield project? Amadeus asked. Do we finally get to do it?
Nemah’s team, as so many other teams, was of the misguided notion that if you only get to build things from scratch, you will not repeat all the mistakes that lead to technical debt in the old code base. We, of course, know better.
But let’s go on with the story.
- Do we need to wait until then? Nemah wondered. I mean, can’t we just continue mobbing tomorrow?
Spex studied her, chewing his lips for a moment before replying.
- I guess, he said. But we would have to change a couple of things.
- I agree, Amadeus agreed. This seating is killing my back. How about we rearrange the tables a little and move the screen a little to the left so that we get rid of the glare from the ceiling lights?
- Yes, Spex eagerly continued, and we should have a dedicated mob computer so that we’re not dependant on anyone of us in particular having to be here for the mob to start working.
The rest of the team voiced their agreement and willingness to continue mobbing the next day. And so they did.
A few weeks passed. Looking back, Nemah was surprised by how much had changed in such a short while. Some things she had been prepared for, simply by reading blog posts written by other mob programmers. Therefore, she had kept an eye out for the inevitable clashes of will and personalities, and moderated them to the best of her abilities. Often it was more than enough to simply point out the undesired behaviour for it to stop. She thought it was odd how much easier it was to do this when mobbing compared to doing the same when pairing.
The same held true for the fact that some in the team were quick to voice their ideas and instructions. Often to the detriment of the mob as other members were less inclined to burst out a half-thought idea when someone already had voiced one.
Nemah was prepared for this. So when it happened, she presented the notion of the pause.
Think. Listen. Allow others to speak. And listen. No, actively listen. Don’t merely sit there, waiting until the one speaking falls silent so you can say what you’ve been thinking. That’s a great way of not listening at all.
And conversely, if you’re typically the silent type, don’t wait until you’ve thought of every detail, every nuance of an idea before voicing it. Trust the mob to receive and refine your ideas. It’s not an alien concept. After all, isn’t it an open source mantra to release early?
She also had a battery of retorts to the expected questions about how what they were doing could possible be efficient. To her surprise, the questions never came. Instead, their activities and way of working was met with curiosity and interest. In fact, just after having mobbed for a few days, their product owner came by, without doubt to change something previously agreed upon in the sprint planning session.
- Spex, I need to talk...what are you folks doing?
- Mobbing, Amadeus said.
- Care to join us? Nemah half-joked.
- Sure, the product owner said.
And so, after just a few days worth of mobbing, Nemah and her team experienced something they had never done before. One of “the Others” sitting down and actually working with them, there and then. Afterwards, the PO and the team reflected on how much more straightforward it had been to together adapt the ongoing work to the changing needs of the organisation rather than having to tear up an elaborate plan and redo it ad hoc as the usually did.
It was the first of several visits. And the first of several visitors.
When the team had to add to the API for the mobile clients, it was a no-brainer to pull in the Android developer and do it together. They even gained a few insights on what to do to make the Android developer’s life a little easier and made mental notes of it.
When the mob was reworking the admin interface, it was so much easier to ask one from customer support to join them and work through the changes directly, then to make a few changes, deploy them to staging, and wait for feedback.
Just as easy as it was for others to join the mob, so to was it easy for the team members to join, leave, and rejoin the mob. Leaving early to pick up the kids at daycare? Having to attend a meeting? Popping out for an extended lunch with an old friend? No worries, the collective memory of the mob made it a breeze to keep working in your absence. And getting back into the work when you came back proved just as easy.
Gone were the days of looking at a week’s worth of code changes in a pull request.
Gone were the code reviews after the fact; replaced by the continuous code review that comes from having many eyes at the code as it is written.
Gone were painful merge conflicts as the mob worked on a single thing at a time.
There was no need to chop the stories into tiny little pieces, madly guesstimating the amount of work needed before you had even started to discover what the work entailed. Now, the mob took the most important story from the board and worked through it, discovering what they had to do as they did it. If a story proved to be much more complex than indicated by a first glance, now it was easy to have the PO join the mob for a brief discussion on whether the mob should continue working on the story or if something else was worthier of their time. Previously, such bad or unexpected news had often waited until the end of a sprint before being revealed. Saying “this is unclear to us” proved much simpler than saying “this is unclear to me”. The mob proved to be an excellent way of combatting imposter syndrome.
Surprisingly, it felt as if they were getting more things done. And not only more and better done, but also more timely done.
With story after story being finished, there was no longer any reason to wait until the end of a sprint before deploying. And with the team deploying changes that they all had been part of making, gone was the fear of deploying. The team had finally reached the state of collective code ownership. They, and the rest of the organisation, now felt the bliss of working in a single piece flow.
Naturally, the unexpected happened from time to time. Something came up, something broke, something had to be fixed now, now, now. But it was so easy and natural to split off from the mob, take care of business, and then rejoin it. All while the mob continued working uninterrupted on the most important thing.
The notion of working in sprints also felt increasingly peculiar, so they abandoned it.
- Good riddance, Nemah thought, as she had always had something against the term “sprint”. To her, it implied dashing the last few hundred meters of a race, over and over again, as opposed to running a marathon, in a sustainable pace.
They did keep a fixed cadence for retrospectives though, as they found that they didn’t have proper retrospectives if they didn’t plan them in advance. On the other hand, the team found that they could schedule short breaks every now and then during the day to pause and reflect on the way they were working. It was as if having micro-retrospectives, and they soon figured that they could use them to try things out. The barrier of trying something for a few rotations was next to none compared to spending an hour in a traditional retrospective to come up with a single experiment and committing to it for the next two weeks.
- Hands off the mouse. You only get to use the keyboard for this rotation, Nemah challenged her fellow mobsters.
- Okay, but in return, the rotation after I want you all to TDD like you really mean it, Spex countered.
And so the days went by. As they did, it became more and more evident to Nemah and her friends that they had become just that. Friends. Not just colleagues. Not just coworkers. But actually friends. Family even. They had left their headphones and text messages behind and replaced them with shared laughters and eye-to-eye contact.
The higher bandwidth proved communicative. By making sharing knowledge and thoughts as easy as to utter or listen to a sentence, knowledge was indeed shared. But more so, they began to understand one another as never before. By truly working together, all day, every day, they grew as individuals. It might seem completely obvious to us all that it is much easier to feel empathy for a living, breathing person than for an online avatar or screen handle.
At this thought, Nemah, under her breath muttered what had become her personal mantra.
Never read the comments.
And then her momentarily darkened thoughts were brightened by the mob laughing at one of Amadeus’ jokes. She smiled again. A mob working in silence should be seen as a warning that something is amiss. A mob that can be heard is a healthy one. And a mob that laughs is a thriving one.
After about a month of continuously mob programming, Nemah noticed that other teams started to mimic the behaviour. The mobile apps teams had rearranged their desks and managed to get hold of a couple of really big, nice displays. Some consultant had even dared to bring his green, bouncing yoga ball and used it instead of a chair. It was as if the simple act of Nemah’s team taking control of not only the way they worked, but also their working environment was contagious and had spread.
At their mob station, they now had multiple keyboards, some with quite esoteric layouts and keymaps. It was simple enough to plug them all into the mob computer and switch between them. There was no point in making the mob station feel less like home than a developer’s individual computer, they reasoned. Upgrading the screen to a larger one with higher resolution had also been straightforward.
- How many of these do you need?
- Well, okay.
But it was not only the development and working environment that became more comfortable over time. Nemah and the rest of the team felt more comfortable with the code base and their skills and capabilities as a team to solve anything coming their way. There was no question that a great deal of their increased productivity came from the accelerated learning mob programming had brought with it. In weeks they had all learnt, understood, and internalised more than they had done in months, even years.
With that shared knowledge came the confidence not to panic once a server broke down and Spex, who was the one who initially had configured it, was home ill.
Don’t worry, Amadeus assured the CEO, we got this, as Nemah and the rest of the team methodically homed in on the problem.
Gone were the days of relying on lone heroes. After this incident, gone too were the days of relying on single pieces of hardware for your mission critical apps. During the next retrospective a member of the team made an observation.
- You know, when we sat there fixing production, it struck me how much calmer we were than I had expected. At a previous job of mine, we did something similar to mob programming when things really broke, but never in a prepared, organised fashion and always in full panic mode.
- If it’s fine to throw everyone at a problem to fix it, doesn’t it make sense to keep working together to prevent problems in the first place? Amadeus asked.
- You realise that this was the first problem we had in production since we started mobbing and it was caused by something we never worked together on, Nemah filled in.
They all nodded. By now, everyone - even the initial skeptics - had fully embraced mob programming, and it seemed inconceivable to work any other way.
The week after, Spex was back on his feet and came in early, healthy and well rested. Beaming a smile towards his team, he sauntered over, grabbing a herbal tea on the way before joining the mob.
- Do you know what day it is today? Spex asked.
- Monday? Amadeus ventured.
- No, it is just another day of mob programming. A day when we truly work together as a team, Spex replied.
- My favourite day, Nemah smiled.
Do you recognise yourself and your team in this? Would you like to go through the same journey towards becoming better at working together? Contact me at [email protected].