What Is Mob Programming?
Simply put, mob programming is about getting together with at least three developers and start coding on a single keyboard. At any given time one developer is actually typing, the ‘Driver’. All other developers take the ‘Navigator’ role. They all review, discuss and describe what the Driver should be doing and the Driver narrates. The roles are swapped very frequently to keep everyone fresh and engaged. It’s the ultimate form of collaboration and peer review.
Mobbing During Lock Down
So now you know that mob programming is about live coding together on the same piece of code. But how do you do this when everyone is working remotely during this pandemic. With my current team we decided to give it a go regardless. There’s excellent online collaboration tools available these days, so it must be possible to exercise mob programming fully online. We’ve practiced for three days in a row in a mob programming hackathon. Below I’ll describe my experience.
My current team consists of five developers, two full stack and three backend developers (including myself). We were all very excited about this online mob programming experiment. The first thing we needed to decide on was which tools to use. We already knew we would use Slack or Zoom to setup a video call. It’s very important to be able to talk to each other and read each other (e.g. facial expressions). Since we were all using IntelliJ as an IDE we saw roughly two options:
- Use the built-in screen sharing Slack or Zoom offers
- Use an additional collaborative development tool that integrates with IntelliJ (e.g. Code With Me or CodeTogether)
Why We Needed More Than Screen Sharing
We all already had experience with pair programming using screen sharing tools. In general it works pretty well, but there are a couple of down sides.
- Switching Driver is usually not a smooth experience. The current Driver has to stop the screen share before the new one can take over. The code has to be synchronised using VCS and the new Driver has to lookup the place to continue coding. Due to this “burden” switching roles won’t happen often enough. Drivers become fatigued and Navigators zone out.
- It’s hard to Navigate when someone else is controlling the screen. As a Navigator it’s usually not easy to just point at the place on the screen you want to make a remark about. Anybody that shared code using screen sharing before, e.g. during a code review session, will recognise the frantic screams: “CAN YOU PLEASE STOP SCROLLING”.
- Screen sharing is usually draining resources such as CPU and network bandwidth.
Let’s Take This To The Next Level
The short comings mentioned above made us look beyond screen sharing tools. Someone in my team mentioned Code With Me and we decided to try that out for a change. Code With Me is a plugin for IntelliJ developed by JetBrains that offers simultaneous editing. One developer hosts a session and shares a link for others to join. When joining a session (in the background) an IntelliJ Client is downloaded and started, allowing you see and edit the code on the host’s IDE.
Five Developers, One Editor
Besides a few connection problems at the start the first experience was great. Switching Driver is fast. Very fast. In fact, there’s no switching involved at all. All participants have their own cursor and can write code. This makes it really easy to get ideas or suggestions across. There’s no need to dictate the Driver, you can just type it yourself. Everyone felt very engaged and we were off to a great start of a fruitful coding session.
In all fairness the simultaneous editing also has some pitfalls. It can be quite chaotic at times. The clear separation of the Driver and Navigator role is gone. This can lead to confusion. “Do you want me to type it or are you going to?” In the chaos Navigators might forget they can jump into the action and start dictating others again. Or they zone out in the midst of the anarchy.
So it does require a certain discipline from all participants. Be patient. Give others time and space to show their ideas. Make sure everyone stays involved. If you notice people start dictating, offer them to write down their suggestion instead (This happened frequently in our case, probably also because of getting used to this new form of collaboration.) When someone has been quiet or inactive for a while, try to get their involvement again by asking for an opinion or make an explicit switch of the Driver role.
Another thing we noticed is that when joining a Code With Me session, you’re stuck with the key bindings of the host. It might definitely impact productivity if you are not able to use your favourite short cuts. A counter measure could be to try to align your IDE setup as much as possible within your mob. Maybe it could also be a nice feature of the plugin to ensure everyone can use their local key bindings. This might already be supported by other tools or plugins which we haven’t tried yet.
Lastly, there were some occasional network hiccups and synchronisation glitches. Sometimes code you already typed disappeared as a result. This was a little frustrating, but overall didn’t have a large negative impact on the total experience.
It would be great to try out alternatives to Code With Me, e.g. CodeTogether, to see how they compare. If you have any suggestions for tools to try, please leave them in the comments!
We’ve practiced online mob programming for three consecutive days. It has been a quite intense, but mostly exciting and fun experience. Everyone felt energised and inspired. We were all happy with the end result as well and felt real ownership of it. Everybody contributed by writing and reviewing code. We kind of embedded peer code review and knowledge transfer in the coding process, while that usually is a separate and additional activity. It almost felt like cheating and skipping one step in the development process.
The whole experience made us realise that this is something we’d like to do more often. It was great to see we could reach this level of collaboration during the COVID-19 lock down.
Thanks for reading my story. I’d love to hear your thoughts and own experiences as well as suggestions to improve online mob programming!