Learn Pair Programming and TDD “the right way”

Daniel Prager
EverestEngineering
Published in
3 min readSep 7, 2023

On 31 August, 2023 Everest Academy held a second in-person day-long intensive workshop in Melbourne, Australia introducing and practicing pair programming and Test-Driven Development (TDD).

Learning-by-doing: Gamified learning through mobbing and pairing with a variety of challenges

There are a lot of misconceptions about Pair Programming and TDD, but they can make magic happen when “done right”. At the very least, pairing helps partners keep the TDD discipline, and TDD can provide a pleasant rhythm for sharing control and role-swapping — a “secret” shared by many successful Agile/XP teams.

TDD + Pairing is also an ideal foundational workshop for working on Collaborative Excellence and Technical Excellence at the same time. Not only do we learn from whoever is running the workshop, but through pairing and swapping, we learn from each other.

At Everest Academy we use an adapted form of Code Retreat to create a near ideal learning environment to learn or refine these two skills in tandem.

“Great structure for the day, with good discussion throughout. Practical hands-on application of TDD with appropriate problem for the time scope.”
Liam Mullens, Software Engineer

After introductions and settling in, we reviewed classic TDD, and did a mob programming session on a simple exercise — the infamous FizzBuzz — with senior Everista and Technical Leader Paul Smith driving.

We introduced the problem of the day: a form of the Tennis Kata, and a series of one hour sprints. The problem is deliberately easy: the focus of the day is on learning TDD and pairing skills — not brain-busting algorithms.

“The code example was simple on the surface but very quickly became more challenging and resulted in great questions from the attendees. I was initially skeptical of using the same kata for all exercises, but it really allowed us to refine our understanding and focus on a single problem and I believe stopped us from being overwhelmed.”
Stephen Beattie, Senior Software Engineer

Tip: Some of the kinds of challenges that work best with TDD (especially when first learning) have the character of a set of “business rules” or simulation — i.e. something we can do manually, but want to reliably automate.

At the end of each sprint we hold a group debrief, swap partners, delete the code, and add a new “constraint”.

  1. Sprint #1: just pair, do strict TDD, and try to swap frequently.
  2. Sprint #2: ping-pong pair programming — this helps even out collaboration issues like the “watch the master” anti-pattern
  3. Sprint #3: refactor towards three line functions — this helps us to focus on the often-neglected refactoring step
  4. Sprint #4: Stay with the same partner, don’t delete the code, and explore using ChatGPT with TDD — henceforth to be known as ChatGPTDD ;-) — to get suggestions on refactoring, tests, or coding. And test the suggestions, critically!

Along the way there were additional insights from Everest experts and also from other experienced participants, and “ahas” for everyone.

“It was really great to have multiple Everest engineers present — with various specialties to give different and complementary points of view. It was engaging and fun. Although I have some experience with pairing and TDD, I gained some really great ideas to make it more appealing to team members who may be hesitant, and ways to show them how it can be beneficial.”

Participants came from a range of organisations: Coles Digital, Culture Amp, Estimate One, RealTime Learning, Kogan, and Village Cinemas.

To find out more about future editions of this workshop and other technical public or in-house workshops, you can sign up to our newsletter, and read other blog posts at everest.engineering/academy.html

--

--