Mob programming is a software development approach where the whole team works on the same thing, at the same time, in the same space, and at the same computer.https://en.wikipedia.org/wiki/Mob_programming
Since February 2019, I moved to a team tasked to decommission legacy systems that became difficult to maintain as the years went by and technologies changed. As a result, we had to introduce new services using a more standardised stack (Java, Spring, AWS).
However, it meant that I worked with some very senior team members, we’re talking 10-20 years of experience. The team consisted of:
- A tech lead
- A test lead
- A contractor senior developer (who was previously a tech lead too)
- And myself
Management had encouraged us to do all of our development as a mob. Thus ensuring everyone was on board and there is a fair share of the knowledge transfer. To be honest, it felt like a bit of a guinea pig experiment. But I didn’t complain, it meant I would be working with veterans of the industry. I knew I had to switch myself on so that I could take as much as possible from them.
I want to share some experiences from the eyes of a (relatively) junior developer in a far more experienced team. What was it like? How do you have to adapt? Did you feel like you were contributing? Did you feel intimidated?
Impostor syndrome (also known as impostor phenomenon, impostorism, fraud syndrome or the impostor experience) is a psychological pattern in which an individual doubts his or her accomplishments and has a persistent internalized fear of being exposed as a “fraud”.https://en.wikipedia.org/wiki/Impostor_syndrome
Yeah, you will feel a lot of that.
I definitely did, and it’s something you need to face head-on. My way of handling it was to get a mentor. Luckily, I gelled quite well with my team, so I was quite open with getting feedback on how I was doing whether good or bad. And, more importantly, how to improve so I don’t repeat mistakes.
The worst thing you could possibly do to yourself is not speaking to somebody about how you feel and wallow in your own self-pity.
For all you know, you could actually be great! At one point I felt like I wasn’t contributing, however, it took one honest conversation with somebody on my team to completely change that opinion.
I was the youngest member of the team, and, naturally, that came with its downsides. Sometimes you’re childish, sometimes you joke around. However, that doesn’t necessarily make you unprofessional, what does make you unprofessional is not being aware of your surroundings.
It might sound like common sense. However, when you are working with people that are focused, then you need to match that level of commitment. Otherwise, you are being unfair to those that have to pick up your slack. Not good.
This is especially true in a mob programming session, you are all expected to be engaged. If you are not, then you are indirectly impacting your fellow colleagues and can make you seem lazy or disinterested.
Another thing I learnt was how to handle situations where things are blatantly not fair, as a result, you will want to complain, but sometimes it is better to hold your tongue and be clear about:
- What your pain points are
- How do you resolve it
People will appreciate you for being honest and respectful. There is usually a reason why something is broken, and it takes a mature individual to take initiative and work to fix it. Often times, if you justify your thinking, you’re going to be more successful in challenging the status quo.
The capacity to recover quickly from difficulties; toughness.https://en.oxforddictionaries.com/definition/resilience
It is to be expected that you get stuck on issues that will frustrate you. Mob programming is a really helpful way to power through this. The reason for this is that you have lots of people looking at one problem and it allows for creativity to flourish.
Although I lacked the experience and seniority of the rest of my team, I was able to contribute and solve various problems in mob programming sessions. Sometimes it just takes a little effort and following through with an idea in your mind. Don’t just blurt out whatever comes to mind, be thoughtful in your reasoning and think deeply about what you are trying to solve. It requires patience and effort to come up with good solutions.
I felt as though it took me longer than others to grasp concepts and patterns than others, and I think that just comes down to time. The more time you have spent in the game, the better you get at it. Eventually, concepts like multithreaded event-driven systems or good design patterns become second nature to you.
In summary: be strong, be consistent, be resilient.
Often times you have days where you will hardly interact with others or work directly with somebody for an extended period of time. This is especially true when you’re working on your own and you’re “wired in”. Mob programming can help you reconnect with teammates and a hidden benefit of this is that you can learn from them and rekindle conversation and bond. A happy team is a good team.
Additionally, you can benefit from others especially when they are senior to you and have a plethora of experiences to share, that knowledge is there for the taking and you could be missing out on gems that can really help you grow technically as well as professionally.
One thing I learnt was the use of thread pools for expensive operations such as REST calls, publishing and consuming of messages from SQS and saving files to S3. Then performance testing it all by varying the size of the thread pool. Cool stuff.
When you’re on your own, you might be tempted to cut a corner here and there. Most times the reason you want to do this is because of lack of understanding on how something works i.e. test frameworks, automation etc. However, when working as a mob, it is very difficult to do so. You have help and support to do something right the first time around, and it gives a great sense of achievement that something gets done properly.
I personally think if you want mobbing to work, you need the right mix of developers/testers with the right level of experience to be able to make design decisions. Everyone is different, some people enjoy working on their own and that’s great, but mobbing comes into its own when there is respect, trust and professionalism with one another. Things become complicated when disagreements are led by egos trying to one-up the other and people do not come to a compromise. I think size matters as well. A smaller team allows for more room for contribution and having a go. When teams get too big, it can become slow and not very engaging for everybody.
I would highly recommend you try mobbing in your teams. Happy mobbing!