I did mob programming every day for 5 months
medium.com
medium.com
It has also helped achieve coherency in design patterns, stylistic differences (which we also use tools to enforce), and testing practices.
I get the kneejerk reaction of "it's hip or buzzwordy" but this is one that has worked well for us.
One thing we found useful though was using a timer for the 'driver' (person behind the keyboard). I made a terminal one here:
https://github.com/benbristow/agile-timer
It's more designed for Mac as it uses the 'say' command but could be tweaked easily for Linux users.
Although when I started at my new job I would have found it useful. Trying to figure out custom frameworks where the documentation was in a few people's heads wasn't fun.
In the early stage of starting a project you need to set up the structure of the application you are going to build. The architecture, and rough outline of where what needs to go.
By using mob programming we've been able to get an entire team ready to go at full speed in no time. Everyone knew the thought behind every decision made, and everyone had enough knowledge of the structure to hit the ground running.
That is way better than having the lead dev or architect do that work on his own and then having to spend time to explain it all to the rest of the team.
Mob programming has its advantages, but I wouldn't want to use it too often.
The main difference is walking out of the room with a pull-request setting up the structure in code instead of walking out the room with a photo made of a whiteboard.
Maybe it works for small projects or teams of mostly junior developers. But for anything remotely complex I can say from experience the architecture won't be ready in a few meetings but rather after much hammock time.
That architecture will then become a main factor in your productivity, maintainability and performance. These 3 are very, very hard to optimize for once the architecture is in place.
Other than for code reviews or mentoring junior developers, I've never seen pair/mob programming works with quality results. Its nearly impossible to solve complex problems when outside the zone, and its nearly impossible to get in the zone in a pair/mob setting.
Pair (and mob) programming makes a lot more sense when you think of it primarily as a mechanism to transfer skills and information about the project.
It's highly inefficient to have new joiners on a project getting stuck constantly. Pairing (or mobbing, if there's more than one new joiner) makes sense at least for the first two weeks.
All of the problems the author states are symptoms of other issues in the organization which will not be solved by this particular style of group work. Incomprehensible code is still incomprehensible regardless of whether it was written by 1 or 10 people. Everyone is bad at this to begin with, how can you expect to get better if you have someone else solve all of your problems? Going through a bit of a struggle is a good thing, as it gives you confidence that you can solve new problems as they arise.
"Jack of ~all~ many trades, master of ~none~ a few."
For less-experienced developers though, this would be a great way of building team cohesiveness, training/mentoring, plus likely boosting productivity.
Not to mention when I've seen experience developers show something they've been working on for the past two weeks, only to be told what they've shown is a disaster because they never had any other eyes on it to question their design decisions.
What I miss most is "the zone." Pretty much every single line of code requires a verbal interaction with my coworkers. I used to love the feeling of coming up for air after 2 hours of visualizing abstractions inside of my own head, kind of like that feeling of reading a novel and suddenly coming to and remembering all of the action like a movie had occurred in my imagination.
Programming used to be unbelievably fun because of that. It's still fun, but some of the magic is gone.
I definitely think ad-hoc mobbing has it's place and most if not all big design/redesign work the team undertakes should be in a mob form. I'm not sure I could see it being a good practice day to day for most teams/projects though.
Do you reckon 3 people in a mob is more productive in the short term than 3 people working independently?
I wonder if 3 people who typically work independently could time-share each other to work on projects in a mob.
If you've got VC money to burn, sticking a whole squad of expensive programmers in a room and gating their output to slightly more than a single person might be a reasonable option...
Collaborate on architecture, interfaces, design, etc.. sure. But, as an introvert, sitting in a room amongst a mob of code monkeys screaming and flinging feces about the room whilst trying to share a single keyboard doesn't sound like the best way to build good software. I'd have a blinding headache after an hour of this sort of thing.
When I am driving some times I get questions about things that I don't care at the moment, why I am using vim/sublime this way, why I named the variable like that. This causes me to lose concentration. If I am "navigating" (as the article mentions) I try to not make many comments but I feel very stressed about the other person not solving the problems the way I would.
I am very open to brainstorming meetings etc, but then just let me go back to my computer in my space to write code. Then I send a PR to someone in the team for review and we can discuss about it.
However there are scenario where I think pairing is very useful, for instance when doing risky changes to infrastructure. The driver share her screen and then it tells the other people watching every action before executing, like "I am going to switch the DNS record now to X.." and the copilot answer "go ahead", "I will wait 2 minutes"..."I am taking down this load balancer.. "
And, I hate it, especially when told to do it, as opposed to when it happens naturally.
Nice.
No one else on the team can handle integration with federated identity systems the way I can, though. I know all the technologies and their security pitfalls that have to be coded around. No one else knows those things. Are they nightmares for competent developers and not people who should be in the industry?