1
 
 
Account
In your account you can view the status of your application, save incomplete applications and view current news and events

What is the article about?

While many of us are big fans of ‘mob’ (mafia) classics like ‘The Sopranos’ and ‘The Godfather’, in fact this article shows how mob (‘collective’) programming can help shape a new team and how great results can be achieved quickly through this collaborative working approach.

How it started

We launched our new team on 01.08.2021 with the mission to rebuild the whole process around handling drop-shipment orders. In top-level terms, our goal was to route new orders from the OTTO Marketplace for drop-shipment to the customer directly from the supplier, instead of routing them via OTTO warehouses. At the same time the suppliers were to provide us with core data such as tracking information etc. As we were not alone on this journey and were to be part of a bigger process, we opted to do this in a series of smaller steps, starting with an MVP.


As the new team began to form and the first members joined, the initial challenges started to crop up. Instead of leaving everybody on their own and giving them dedicated stories (we live and breathe Agile) we decided to try out ‘this mob thing’. As I had had (some) previous experiences with ‘strong’ mob sessions in my previous team, my goal was to convince our people to try this out. Easier said than done, as we were all new in this team and didn't know each other yet. So we established common ground and just did it! #einfachmalmachen #justdoit.

Our modus operandi

Our team consisted of four people. We worked together in an Agile manner, which means that every two weeks we jointly formulated new goals for our sprints.
Here’s a brief digest of "living in the mob" for several months – day in, day out. We almost exclusively used the ‘strong’ mob approach where we had the ‘driver’ sitting at the keyboard and the group as ‘navigators’ telling the driver what to do. For screen-sharing we used Microsoft Teams.

At the start, enthusiasm in the team for mob programming was not universally high. Some reasons for this were: 

  • most people were used to working on their own; some had used pairing
  • some had experienced mob as "people sit around and one developer does the work"
  • "management saw mob as a waste of time and over-expensive"management did not want to promote pairing or even mob programming, due to fear of costs being too high.

Arbeitssituation
Arbeitssituation

Our experiences after several months working exclusively with mob: Simply and briefly - awesome!

And here’s why:

  • mob is a great way to share knowledge between peers and establish working approaches: coding style, best practices, tools, IDE settings, git(hub) working approaches, bash hacks etc.
  • mob makes onboarding people easier – throw them in at the deep end and let them rotate between driver/navigator roles :)
  • the team can solve common setup troubles together, as everybody needs to get dev topics working locally: every developer machine needs to work in similar ways to be able to participate as driver
    • Terraform, GCP, Java, SDKs etc.
    • scripts need to run everywhere, not just in the CI/CD-pipeline (Linux, Mac, Windows)

  • there’s no pressure to perform as driver
    • just listen to what your navigators say
    • no need to think and type
    • less pressure on the driver than in a classic "I share my screen and do all the work" setups
    • people will be more willing to act as driver, especially juniors as they do not need to ‘perform’ in front of the group


  • navigators need to express their thoughts to everybody including the driver
    • so everyone can follow more easily (and the ten times developer ‘black-belt’ developers don’t run away)
  • the team can solve questions/challenges on the spot instead of later (read: “probably never”)
  • the team develops a shared feeling for the team sprint goal
  • a high bus factor’ develops – everybody knows what is going on and anybody can take over in case of a sudden absence
  • there’s no need for additional sync meetings as everybody is already in the loop
  • no peer reviews are needed as every Git commit gets a ‘reviewed-by’ from the navigators
  • it’s easier to develop common ground for code standards/style, architecture, ci/cd and testing, as the team members can share their opinions with everyone instantly
  • it’s easier to get to know your (new) colleagues when launching a team from scratch!

Tools we use:

  • greenfield on Google Cloud Platform (GCP)
  • APIs with two neighbouring teams, currently async; messaging via GCP Pub/Sub, later REST and UI integration into the big ‘supplier portal’
  • Java, Spring Boot, Docker, Terraform, Github (Actions), CI/CD, Google Cloud Platform (Pub/Sub, Cloud Spanner), DevSecOps (‘you build it, you run it’).

Challenges

After more than half a year in the mob, as I mentioned we’re thrilled with this form of collaboration. But of course, there are also some challenges and you need to be aware of these before you decide to try out this programming approach.


Our challenges summarized in brief:

  • ‘hiding’ in the mob: it can be harder to evaluate new team members as there is a chance for them to ‘seek cover’ in the mob
  • potential high pressure to perform when joining the mob, especially for people who are used to working on their own and deliver a ‘fixed’ product
  • over-detailed discussions – somebody needs to moderate and focus on the story and sprint goals
  • hard to leave the mob behind – I work part-time so there is always that point in the afternoon where I have to say "see you tomorrow"
  • hard to parallelize on stories as the mob works on one story at a time
  • living in the mob can sometimes be hard and exhausting – focusing, discussing, and coding together can and will drain your batteries
  • there’s a danger of leaving people behind who cannot follow and express their thoughts
  • you quickly get used to working with other people, which can trigger a fear of working and/or deciding on your own without input or backup from the mob
  • it’s harder for junior team members to actively discuss topics in the mob approach.

Our Learnings

When we started programming in the mob, I had already gained some experience. Half a year later, however, we are much smarter and have learned a lot!

Our most important learnings:

  • before you start, give a clear intro to the mob sessions and explain the ‘why’
    • set the stage so that everybody feels comfortable
    • give everybody the chance to show ‘weakness’
    • there is nobody in the world who knows everything and nobody is perfect
    • failure is part of the business #failfast
  • make sure everybody is able to screen-share (sufficient Internet bandwidth at home, good enough camera, quiet space, etc.)
  • rotate often (15 min.) – we use the Cuckoo timer 
  • create a dedicated MS Teams channel to host your mob sessions, e.g. named ‘mob sessions / calls calls calls’

Teams Calls
Teams Calls
  • start a video session where everybody can join (Devs, Agile Master (AM), Product Owner (PO)                   etc.) and knows where you are
  • give the video sessions funny names :)
Techblog
Techblog
Mob Sessions Part 1
Mob Sessions Part 1
  • AM and PO can join the mob session for your daily stand-up
  • git commit message with ‘reviewed-by:’ mob members (use template)
Review
Review
  • consider getting an external coach to set up your initial mob sessions
  • new people joining described our sessions as "jumping on a fast-running train"
  • when interviewing new people/candidates (for remote positions) ask about their experience with mob, pairing, working environment at home (internet connection, quiet space, camera) and make it explicit that you do mob/pair-programming and ask directly how they feel about it
  • talk openly about your feelings in retro sessions at the end of the sprint and listen to complaints, fears and doubts concerning the mob/pairing sessions
  • take breaks every hour or so – designate somebody as the ‘break-watcher’ and use tools to enforce this
  • tough or new problems can be more easily focused on/explored in the mob
  • mob intelligence = collective sum of knowledge
  • find time to break out of the mob – e.g. everybody reads up on a topic or issue on their own and then discusses the findings/learnings in the mob
  • not every task suits the mob – be brave enough to make this explicit and encourage people to raise their voices whenever in doubt!

Future

‘Once in the mob, forever in the mob’? Well, we have not yet been able to determine this. As new team members join, our group will grow. We will then re-evaluate whether mob programming is still for us. More likely, we will then opt for pair programming and some mob sessions to share expertise within the team. We will also temporarily invite team members from other teams to our sessions. Currently we are all working 100% from our the mobile offices. Time will tell where we go from here – but we feel well-prepared and are looking forward to new challenges. 😊

Ein Touchpad wird bedient
Ein Touchpad wird bedient

Join our team remote as  Software Developer 

3 people like this.

1Comments

  • Thomas
    22.03.2022 17:59 Clock

    Thank you Marcel for sharing these insides for mob programming. Well written by explaining the approach and outlining pro's and con's. The most valuable part I think is what you have shared in-between: as our Organisations grow and change we need to test and try various techniques in working together under various circumstances. It needs people like you pushing them forward. It was a pleasure to read... Thomas

Write a comment
Answer to: Reply directly to the topic

Written by

Marcel Sauer
Marcel Sauer
Senior Developer

Similar Articles

We want to improve out content with your feedback.

How interesting is this blogpost?

We have received your feedback.

Allow cookies?

OTTO and three partners need your consent (click on "OK") for individual data uses in order to store and/or retrieve information on your device (IP address, user ID, browser information).
Data is used for personalized ads and content, ad and content measurement, and to gain insights about target groups and product development. More information on consent can be found here at any time. You can refuse your consent at any time by clicking on the link "refuse cookies".

Data uses

OTTO works with partners who also process data retrieved from your end device (tracking data) for their own purposes (e.g. profiling) / for the purposes of third parties. Against this background, not only the collection of tracking data, but also its further processing by these providers requires consent. The tracking data will only be collected when you click on the "OK" button in the banner on otto.de. The partners are the following companies:
Google Ireland Limited, Meta Platforms Ireland Limited, LinkedIn Ireland Unlimited Company
For more information on the data processing by these partners, please see the privacy policy at otto.de/jobs. The information can also be accessed via a link in the banner.