Ensemble, pairing, solo; what to choose and when

There’s more than one way to write code within a team, whether that’s as an ensemble (mob), in pairs or working solo with code reviews. Teams and individuals often have preferences over which they prefer, but (at least in my experience) don’t always talk about the implications of that choice.

What follows is a summary of the advantages and disadvantages for each of the different options. For these, I’ve assumed that you’re working within a team and that code changes need to be seen by at least one other person.

Quote from Jez Humble

So, which is better? The quote above from Jez Humble sums it up nicely. Teams should pick what works best for them at that time, keeping in mind those basic principles, while understanding how the choice affects the team as a whole and each of the individual team members. Many teams use just one of these approaches all of the time and it works fine for them, others pick and chose depending the problem and the mood within the team. Taking a mix and match approach is also an option, for example by working as an ensemble with one or two people dropping out to work solo or in a pair at different times.

This is based on a blog post and talk by Andy L https://blogs.blueskyline.com/2020/08/31/pull-the-other-one/

Ensemble

Also called mobbing

  • Provides the most contextual knowledge; whether that’s of the tech stack, domain, etc
  • Optimises for flow
  • Good for risk mitigation, as knowledge transfer is built in
  • Good for learning; whether that’s a new domain or how more experienced people work
  • Not so good if the sole expert is on holiday
  • Need to be comfortable working in a group
  • Synchronous, with options to break out and work solo without interrupting the flow of work

See https://linuxlucy.dev/post/remote-mobbing/

Also https://github.com/JayBazuzi/Mobbing-Pattern-Language

Pairing

  • Lower contextual knowledge; usually two engineers, which misses other disciplines
  • Provides some knowledge sharing. Can rotate pairs to increase knowledge sharing, but this slows delivery
  • Good for learning when senior/junior paired together
  • Work progresses at roughly the same speed as working solo with PRs
  • Need to be comfortable working in a (small) group
  • Synchronous

Good advice https://hatwell.github.io/tips-for-remote-pairing/

Solo (with pull requests)

  • Low contextual knowledge; reliant on the knowledge of a single engineer, with occasional communication out to other colleagues
  • Limited knowledge transfer. Any context is usually lost
  • Slow feedback loop; with most feedback usually at the end of the work
  • Learning is slower
  • Pull requests can be painful. Needs skill to be done well
  • Good for low bandwidth connections/slow equipment
  • Can be good for neurodiverse people or those just not wanting to work in a group for a bit
  • Can be used to solidify learning done in larger groups
  • If everyone works solo, there will be more work in progress, so more context switching and longer cycle times
  • Mostly asynchronous. Work when it suits you

Lucy B

Lucy B
Lucy is a software engineer. She's passionate about python, does devops, advocates agile ways of working, and loves Linux.

Async Pairing

What happens if you want to the advantages of a pair or ensemble, but you don't have much time together with the person you're working wi...… Continue reading

Mob programming remotely during a pandemic

Published on November 30, 2020

PyCon UK 2019

Published on September 20, 2019