Continually experimenting with new ideas and techniques — Reconstructing, Developing, Modernising.
I think that the social and environmental atmosphere are huge contributions to both my experience of work and the quality of that work. This post was inspired by my pairing partner’s habit of recognising small successes and celebrating them.
I recently started working Planswell, a young company. I had already worked with a couple of the Planswell team in a former job, and that eased the transition for me. The company’s doing something I believe meets regular folks’ need to be happy about their money, which gives me a sense of purpose in my work. We moved from a shared workspace to our own offices shortly after I joined, and there is a dedicated space for the development team. One of the tools we’re using is elixir, a language I have been interested in for some time now.
After many years of nominal pair programming (pairing,) I’m part of a development team where pairing is expected. For me the process of successful pairing is a delight to experience. I’ve had a few successful pairing experiences in the past, for a few weeks at OANDA and a couple of good sessions at Influitive. So far at Planswell pairing has been more consistently successful than in other places I have worked.
Perhaps the most powerful difference in my experience of solo and pair programming is the constant presence of someone in a complementary frame of mind. If one of us is driving then the other is navigating and has a different perspective on what we’re doing (though we share the same goal.) If one of us has a problem then we have someone who is already in context to explain it to and bounce ideas off. If one of us is sucked down a rat-hole then the other can notice. Most importantly: if one of us completes something and then dives right into the next thing then the other can say “Wait, let’s celebrate that achievement.” This helps us both build a sense of progress and momentum, and it helps keep the perception of successes and frustrations in alignment with reality.
Another useful thing pairing does for me is to let me explicitly set out goals and expectations and have someone around who will help me be honest about the reasonableness of the goals and whether they were met. This is a good habit to get into, and cultivates the use of “failure” as a useful tool to promote investigation into the cause of the miss, and formulation of strategies to improve our working practices.
Having goals and expectations allows us to reflect on how we did, and what we thought led to particular outcomes. As an example we tried various ways of dividing work and time, and at the end of a period we looked back and asked ourselves “Are there any things in common between the days we felt productive and seemed to nail it?” For us it seems that doing pomodoros and ping-pong pairing (admittedly we’re using existing tests and test cases, but we bounced driving and navigating) were useful ways to improve the chances of a good outcome.
Pair programming isn’t easy, we have come to the conclusion that we need an hour or two of less structured individual time as a full day of fairly disciplined pairing is intense and exhausting. We have learned a lot from each other’s particular setup and habits, and maybe changed a few of our own. Each pair will probably have different things that work for them, we have to be willing to experiment and reflect to see what works for a particular pair on a particular day for a specific task.
Just because pairing seems to work well for us, certainly better than programming alone, we shouldn’t dismiss other approaches like mob programming.
The most rewarding thing for me is the celebration of small successes, this makes the day lighter and more joyful.