Extreme Programming Practices

I’ve been practicing Extreme Programming (XP) for nearly twenty years. It’s an agile software development methodology that promotes taking good software practices to the extreme in order to provide maximum benefit.

For example, we know that writing tests is good; XP developers take testing to the extreme by writing tests for everything, and writing tests first. We know that code review is useful; XP developers take code review to the extreme by pair programming, which results in instant, continuous code review.

Other practices include daily stand-up meetings, weekly planning meetings, continuous integration, small releases, collective code ownership, and sustainable pace.

The Daily Diff

One practice that isn’t part of XP but that fits in nicely is the daily diff. I was first introduced to it by my former boss Greg Woodward. It’s a 10-20 minute exercise that is performed daily and familiarizes the team with all the changes happening in the codebase. That familiarity is important when practicing collective code ownership. I can’t count the number of times I’ve said while programming, “hey, didn’t we see something in diff the other day…”

I’ve practiced daily diff primarily with teams of 6-10 people. With much larger teams, it would presumably be very time consuming, and few people would have enough context to understand most of what they were seeing. Larger teams are often split into sub-teams; it’s probably best for those sub-teams to have their own daily diffs.


Step 1: Gather Around A Computer

Each morning, the entire team gathers around a computer. I’ve used a few different configurations over the years: a 27” iMac connected to a second 27” monitor mirroring the iMac’s built-in screen, an iMac connected to an 80” 4K TV, and a laptop sharing its screen over Zoom with a bunch of remote developers.

Step 2: Choose A Driver

I’ve found it useful to have a different person running diff each day. My favorite way to choose a person is to write each person’s name on an index card and randomly pick one. The stack of index cards also comes in handy for quickly deciding who will kickoff the daily standup meeting, who will lead the weekly retrospective meeting, and for choosing pairs for the day by randomly choosing cards in groups of two.

Step 3: Open The Diff

Daily diff is about looking at all the code that was changed since the last time diff was done (usually yesterday). My preferred way is to open my IDE (IntelliJ IDEA), select all the commits from yesterday, and do a single side-by-side diff of all the changes.

I’ve also used GitHub diff for this in the past, but I prefer to see entire files instead of just small parts of each file. I’ve never tried diffing one commit at a time; while it might be easier to understand the context, it seems like it would take longer.

When working on a team that is working on multiple projects at the same time, I diff each project separately.

Step 4: Briefly Discuss Each Change

When a change shows up on the screen, the person or people who made the change or know something about it can very briefly explain why the change was made, or mention something interesting about the change. If a similar change was already discussed, or if the change is obvious, there’s no need to make a comment. People who weren’t involved in the change can use the opportunity to ask questions or to give praise. It’s not the place for negative criticism or for detailed discussions.


I have found the daily diff to be a valuable part of my daily software development practice and I recommend that everyone try it. Like everything, it might not be a good fit or might need some adjustment for your particular situation.