Weâre talking with Woody Zuill today about all things Mob Programming. Woody leads Mob Programming workshops, heâs a speaker on agile related topics, and coaches and guides orgs interested in creating an environment where people can do their best work. We talk through it all and we even get some amazing advice from Woodyâs dad. We define what Mob Programming is and why itâs so effective. Is it a rigid process or can teams flex to make it work for them? How to introduce mob programming to a team. What kind of groundwork is necessary? And of course, are mob programmingâs virtues diminished by remote teams in virtual-only settings?
Woody Zuill: [35:54] But we need to learn to do it. So we donât automatically have these skills I think in programming because weâre not expected to ever really collaborate this way, except for in meetings. And thereâs a big difference between meetings and working as a team. Itâs the same thing as like, thereâs a difference between, âWeâre going to move all the furniture out of my house. All my friends will come over to help me moveâ, and talking about moving, right? We could talk about who will do what, and how weâre going to lift these heavier things, and so on. So weâre not going to take the couch apart, except weâre going to take the cushions off⌠So weâve got to lift that up. At least two or three of us will lift it up. Weâll talk about it a little bit, but thatâs not when things are going to happen. Itâs in the doing when weâre going to go, âWait, this wonât get through this doorâ weâll discover those problems.
So anyways, weâve been trained to really work alone - or weâve allowed this to happen, I donât know - where maybe sometimes working as a team could help. The way it happened for us originally I think is worth expressing here. I was hired to work with a team that was doing poorly, and the team lead had been asked to manage the team, to become the manager of the team. And she called me and said, âI donât want to be a manager.â Iâve heard that from a lot of developers over the years, âSo I donât want to be a manager.â And I worked with her for some projects, maybe 10 years earlier or so. She said, âI think you would be a good manager for this teamâ, because I really wanted to start doing agile stuff, which I had a reputation for.
So I came, I reviewed what the team was doing, I looked at their code, I talked with the other managers, I talked with the director who would make the ultimate decision to hire or not, and I decided Iâd like to work here, as long as we had some freedom. And I lined out four things. One is no interference. Youâre hiring me because you have a team that isnât working well. And clearly theyâre not working well because the managers donât know how to manage. And I did actually used those terms with them. I figured if I was that rude to them and they still hired me, I would have kind of a chance, because theyâd know upfront that I donât think very much of them.
I told them, no interference. I have the right to cancel work. If theyâre working on something and theyâre not able to do it, why are we trying to do it? And even bigger, they had two projects that were about a year late, and I think being a year late is excessive by about a year. And so if weâre working a year late on something, we should cancel that project, put our efforts on something thatâs delivering value. Iâm not going to do estimates. We donât need to get into the estimates stuff here, but I needed assurance that theyâre not going to ask me or my team for estimates. I made them sign a document that claimed that.
And then weâre not going to do projects. Youâve probably talked to people on your podcast that think of things as products rather than projects. A product is better than a project, because a project usually indicates that weâre going to gather people together, figure out what to do, do it, then disperse the team. Whereas a product is an ongoing thing. And most software, including at this company - thatâs a product. Itâs being used and it has to be supported for decades, or at least forâ in their case, they had some stuff that was around for decades. Itâs got to be changing all the time. What happens when Windows XP is no longer supported? Youâve got to do something. What happens when VB 6 is no longer supported? Things are going to change.
So anyways, this is whatâ I laid down those rules. And what I told the team was, âYouâre going to figure out how to manage yourselves. Iâm here to block the rest of the organization from you, but youâve got to figure this out. Iâll guide you through it, Iâll help the best I can, but youâre going to make most of the decisions.â Weâve made a lot of decisions about how we were going to accomplish this. They had a lot to learn. How are we going to learn?
We set aside three hours every week to sit together and study together. And we would pick the topics, the team would pick the topics and how we did it. They happened to pick to do a coding dojo, which is very similar to mob programming. We essentially have five or six people in one room, all working at one computer, and we switched the person whoâs at the keyboard and the person whoâs guiding them. Because in mob programming, we have this concept of â I call it a navigator; who navigates as we go through it. As we rotate, we are just really switching out the pair at the computer. Iâve found this to be an effective way to learn things, and the team had decided themselves to use this technique. We put all the techniques we could try, and thatâs the first one we tried. I think if we hadnât done that, we probably wouldâve never landed on mob programming.
We did that for almost six months. We were learning how to recognize what bad code looks like, recognize what it looked like so we could work on it and improve it and no longer write it. We were learning about how to decouple things, what cohesion is⌠All these sorts of things.
[40:29] At the end of that six months, we had a project that one of the developers had worked on before I got there that I was going to cancel, but I was really leaving that decision to the team. And they came to me and said, âBoy, weâve got to get working on this again, because our second deadline is coming up really fast.â So they took a look at the code, they came back to me and said, âThis is a mess.â Now they had learned how to look at code and see the problems in it. And we went into a room. I said, âWhat do you want to do about it?â They said, âLetâs show it to the whole team and see what we need to do. Whoâs going to work on it?â Now, remember, we havenât yet worked as a team. We have been learning how to collaborate over this time. We went into the room, we looked at the code for just a few minutes, and somebody said, âWhy donât we just start refactoring it?â And thereâs this concept of Read by Refactoring, where instead of reading the code to understand what it does, you just start refactoring it. And as you refactor it, youâll get a really good understanding. And now you have code thatâs easier to read, expresses itself, easier to work on. We started doing that.
After two hours, we had gotten pretty deep into this thing, and somebody came to the room and said, âYour timeâs up in here. We have this room reserved now.â And somebody on the team, with the same kind of excitement in their voice, they said, âLetâs just go find another room.â I hope you can see this, the power of this. What they were doing was saying, âLetâs turn up the good on this right now. I donât want to quit. This is really effective.â It was in the tone of their voice.
We went, we found another room. In a company in the size where we were at, we had about 50 rooms, and most of them are alwaysâ at the last minute, you canât find an empty room; we found one. We went there to work. And as soon as we got there, somebody said, âWell, why donât we just find rooms for the rest of the day?â
At the end of the day, we had this tradition of end of the day retrospective where we would ask each other, âWhat went well today?â And everybody said, âBoy, this working together was great.â And I asked them, âWhat was good about it?â Well, I was there the whole day, I knew. But I wanted to hear it.
We got a lot done. It was fun. We learned a lot and it was really high quality. Any one of those is enough for me to want to do more of it. And so I asked them, âWell, what do you want to do about it?â They said, âJust find rooms for tomorrow, and whoever can come, theyâll come.â
So this is how we started doing it. We spent six months learning how to be together. The coding dojo that we followed has very strict rules. The only person allowed to speak is the one whoâs navigating the person at the keyboard. The person at the keyboard is not allowed to do anything, unless theyâve been given a clear instruction of what to do. We were learning how to explain ourselves, we were learning how to listen to someone else and do what they asked, and we were also learning to keep our mouth shut; because until it was your turn to talk, you werenât allowed to talk. Those are all good skills to have if youâre going to work with other people. Itâs just like, if youâre going to learn to play soccer or football or whatever, youâre not just going to go in not knowing the rules, and youâre not going to go in until youâve learned the skills, so youâve got to practice the skills. And thatâs what we had been doing; and weâd really been doing it by accident. We didnât know this was leaning up to this. But after that day, how do we turn up the good? Letâs just do this again tomorrow. And for about five days, we just kept saying, âLetâs do it moreâ, and then somebody said, âTo make this easier, letâs find a permanent room.â
It only took us a week or two for this to change into our way of working. Now, you canât do that at your company, probably, whoever is listening to this, in that same way, but you can see the hint about how could we go from working all solo to working as a team? But this doesnât get into the idea of how do we convince anybody else that might be in control of our time that this is worth doing?