Mob Programming - An Experiment
Photo courtesy of Pexels.com

Mob Programming - An Experiment

What is Mob Programming?

Mob Programming is a practice where the whole team works on the same item of work. All heads are brought together to make decisions on design, quality, naming conventions, etc.

There are two roles: The Driver (person at the keyboard) and The Navigators (rest of the team)

The team should rotate in a given timeframe. Most people choose 15-20 minutes.

The team should self organize around how they want to work and for how long.

There is a good description of basic set up and how-to here:

http://mobprogramming.org/mob-programming-basics/

If you want more context and the 'why', Woody Zuill has been speaking all over the world about this practice.

Here is a talk he has given on it:

https://www.youtube.com/watch?v=8cy64qkgTyI 

What are the stated benefits of Mob Programming?

Queuing Theory suggests that the less work in process the more we can get done, with quality, which keeps the overall work queue down.

Just In Time Planning - The team works and makes decisions as a group on architecture. Decisions can be made at the team level in real time without waiting for or creating a meeting to discuss.

Small Batch Processing - Working on one small item at a time, with quality, means incremental iterations of 'done' happen more often, making for a more stable, cleaner codebase.

Quality and Code Reviews - Code reviews happen as the code is being written. With more eyes on the code, more mistakes will be caught before they are released into production.

Less Rework - Since the team is all working on one branch and checking in regularly, there is no risk of code conflicts which would result in rework.

More focus on the work, less on the people. By designating times when the work gets focus, we eliminate the variations that come from distractions, unplanned work, vacation days, etc. If one or two people are out, the code can still be worked on as the whole team should be familiar with the effort.

Increased Collaboration/Teamwork - Teams learn to work together. The format encourages all members to speak and participate. It increases shared understanding around the solution being built.

Experiment in Mob Programming

A team I was working with decided to try mob programming after doing a team code review. A member of the team had done some work on his own and presented it to the rest of the team. The team wanted to gather as a group and gain an understanding of the architecture and the work. In doing a team code review, they realized that there were a lot of conflicts with their overall schema. They realized that these problems would have been avoided if they made these decisions as a team.

They decided to try Mob Programming.

They started off with a few larger (4 hour) sessions. This felt too long, so they opted for smaller (1 hour) sessions.

Eventually they opted for one (2 hour) session in the afternoon and an informal pairing/mobbing in the morning.

Team guidelines: The team decided 20 minutes for each member at the keyboard. They each wanted to use their own laptop/system, so this required checking into a feature branch every time they switch. In this way all team members had access to the code changes in near real-time. Team members could come and go as needed/desired and were not obligated to participate. A web conference was spun up during mobbing exercises for those that would rather work remotely or from their desk.

What we learned

The first hurdle the team had to get over was having very different set ups. A lot of learning took place as team members learned best practices from other users in terms of tools and environment set up.

We had already broken our work down into small (1-3 day) efforts. We pulled the first one on the list and started working.

The team started making decisions together regarding naming structures and architecture patterns that they wanted to follow.

When the team got stuck on something such as library options, multiple team members could research until we found a suitable answer.

The team was able to collaborate on problem solving in real time. All options and perspectives could be discussed and the best option chosen by the team.

Team members were correcting typos in real time.

Team members were reminding each other to write tests first.

Bad logic was discovered as it was being written. The team was able to correct.

Switching every twenty minutes meant that the code had to be 'check in ready' regularly.

We eventually started to delineate types of work that could be done individually vs as a group. Any work that is simple and straight forward can be picked up individually. More complex work is done as a team.

Retrospective 

At our first retrospective after trying Mob Programming, the following feedback was recorded by the team:

- They felt more productive

- They enjoyed the coding discussions they had

- They learned a lot from each other

- They felt like more people had input into the architectural patterns and designs (and quieter voices were being heard)

Recommendation

Mob Programming is a great tool/way of working on new complex initiatives. If the team is not sure on architecture/direction, this style of working allows for everyone's best thinking to be present.

As the team learns and gains momentum, we intend to break out to work in parallel mobs/pairs.

It is a great tool for team building, cohesion and morale.

If your team is uncomfortable trying it, I recommend trying a group code review. In fact, I recommend spending a part of each day as a team to review team code. It's a great way to share learning and allow for socialization of the ideas/problems in the code. If/when the team breaks into two mobs, our intention is to have a shared code review at the end of each day.

Have you tried Mob Programming? What have you learned? What barriers does your team have in trying it?


I've been in a couple of teams that tried Mob Programming. First time we choose to do it because it sounded interesting and productive from the stories we'd heard. It didn't work out for us - we didn't know how to start, the logistics, the rules, etc. So we stopped, and I was left confused about how others had been successful with it. Second time was accidental and triggered by everyone in the team wanting to understand a foreign part of our system to solve a problem. It worked much better and we still talking about that positive experience nearly 2 years on. I think it comes down to having a Purpose, the willingness to Master the scary code, and the Autonomy to do it however our team wanted. (Dan Pink!) So many positives from it: * we all improved coding tactics like Test First, TDD, Clean Code, Vertical Slice Testing, Refactoring legacy code, continuous delivery * Juniors got better understanding of OOP things like SOLID principles, DRY, Separation of Concerns * Difficult personalities were overcome with humour, open and honest communication, and empathy * We tamed a scary code base, has new tests which more clearly explained the behaviours so that future maintenance would be easier * We produced the desired outcome to business

To view or add a comment, sign in

More articles by Don Eitel

  • Team Collaboration Experience Report

    I was recently asked to be a manager for a new team in a different geo. They are going to be working on the same…

    3 Comments
  • 3 Things to Try to Boost Team Productivity

    I'm sure we've all seen it. The team is spinning their wheels.

    9 Comments
  • A Paradigm for Modern Management

    This is by no means exhaustive, but I believe it will guide managers and leaders on the right path towards a focused…

    6 Comments
  • Promising Customers the World (and disappointing every one of them)

    I'm sure many of you are familiar with this scenario. Sales wants to know what the new shiny is going to be.

  • The Dysfunction of Goals

    My organization's HR department recently initiated a top down requirement that 100% of employees create and manage to…

    11 Comments
  • Agile Thought and Influences - A Timeline

    The following was an exercise to get a clear understanding of the history of ideas within agile. This is by no means…

    5 Comments
  • Frameworks and Fixed Mindsets

    "Hmmm..

  • Making Processes Explicit in Scrum

    I work in a scrum context, but I like to include elements of Kanban, lean, and systems thinking into my work. One of…

  • Planning Debt and Sunk Cost Fallacy

    The agile manifesto has a very clear view regarding plans. It's mentioned in one of the four statements: Responding to…

  • Teal, Scaling Agile, and Systems Thinking

    An article from Ash Sheikh and the twitter post below got me thinking about agility, teal, and scaling an organization.…

    10 Comments

Others also viewed

Explore content categories