Matthew Boston

Slow Down to Speed Up

August 12, 2024

I speed up teams by making them slow down. I put two people on one keyboard, ask for a failing test before any code, and have everyone merge small changes to main many times a day. On the first day, each of those Extreme Programming practices looks like a tax. A few weeks in, the team is shipping reliable, maintainable software with fewer interruptions, and it isn’t burning out to do it.

Typing was never the bottleneck

Ask a team why a feature took three weeks and the answer is rarely “we were typing.” The time went somewhere else:

  • Waiting two days for a code review to come off the queue
  • Untangling a merge conflict from a branch that lived too long
  • Debugging a regression a test would have caught in seconds
  • Rediscovering how a module works because the one person who knew it is on vacation
  • Rebuilding a feature after a stakeholder finally saw it and said that isn’t what they meant

None of that shows up as coding time, and all of it is where schedules slip. Extreme Programming, the set of practices Kent Beck laid out in Extreme Programming Explained, goes after exactly these costs. The practices look slow because they move the effort earlier, to the point where a mistake is cheap to fix.

Ship as Fast as Possible, but Not Faster makes the case that quality is what makes speed last. XP is how I put that into practice on a team, day to day.

Pairing replaces the review queue

Pair programming looks like the most obvious waste in the list: two salaries, one keyboard. But a pair skips the pull request queue entirely. The review happens while the code is being written, when changing direction costs a sentence instead of a rewrite.

Pairing also spreads knowledge. Rotate pairs, and after a few weeks nobody owns a module alone. That’s collective code ownership in practice: anyone can change any part of the codebase, and everyone is responsible for its quality. The vacation problem goes away. So does the hero who is the only person allowed to touch the billing code.

Doing the work together is how a team gets to be greater than the sum of its parts. Every pairing session leaves two people who understand the change instead of one, and that understanding compounds like interest. Six people who have paired for six months can pick up any story on the board. Six people who have worked in parallel for six months have six private corners of the codebase.

Test first, integrate all day

TDD is the practice people most often call slow, because you write more code before the feature works. What you get back is feedback in seconds instead of days. A failing test describes what you’re about to build. A passing test tells you you’re done. The suite that piles up along the way is the safety net for everything else on this list.

Continuous integration means everyone merges to the main branch at least daily, and an automated build checks every merge. Small merges make small conflicts. A branch that lives for two weeks makes a conflict that eats an afternoon, usually the afternoon before a release. CI only works with a test suite the team trusts, which is why TDD and CI show up together.

Tests tell you the code does what you expected before it ships. Observability tells you what it does once real traffic hits it. I want both. A team that can see error rates and latency for every deploy finds out about a problem from a dashboard. A team that can’t finds out from a customer.

Refactor constantly, at a pace you can keep

A trusted test suite turns refactoring from a risky project into a habit. Clean up the code you touch as part of the change you’re making. Keep the design as simple as today’s requirements allow, and let the tests carry you when tomorrow’s requirements show up. Technical debt stays small when the team pays it down in installments, a little with every change, so it never grows into a rewrite.

Sustainable pace is the XP practice teams drop first. The first edition of Beck’s book called it the 40-hour week. Tired people write bugs, and bugs come back later as interruptions. A team working nights to hit a date is borrowing time from next month at a bad interest rate.

The last piece is keeping stakeholders close. Short iterations and regular demos mean a misunderstanding costs a few days instead of a release. That’s the cheapest rework there is. The team adapts when priorities change, because nothing it has built is so big or so tangled that changing course hurts.

The first week of pairing and TDD will feel slower. Judge the team over a quarter, and count the interruptions that didn’t happen.