More Kent Beck Wisdom

Published: 2025-09-19

I have had Kent Beck's 2015 talk on YouTube at the Lean IT Summit queued up for some time, and today I found myself on a plane flight from Sydney to Perth with hours to spare. Having skipped over this one a few times I decided it was time to watch it.

Titled "Extreme Programming 20 Years Later", I was expecting a presentation on the principles and processes of Extreme Programming, and how they had changed over the years. A kind of retrospective. Instead, it is a high-level timeline on Kent's journey through programming, consulting, TDD, JUnit and Extreme Programming through to his time at Facebook, but that doesn't prevent him from dropping a number of gems which I couldn't resist jotting down.

Part way throught his talk, he relays an anecdote about how he wrote most of the Extreme Programming book on a train from Zurich to Munich. Apparently it is a good stretch of railway for writing. Taking a leaf from Kent's book, while on the flight from Sydney to Perth I decided not to procrastinate and write this blog post with everything fresh in my mind. Hopefully it is a good stretch of air-way.

Without further ado, here are the parts of the video that jumped out to me.

Extreme Programming Title

The Inspiration for TDD

Kent explains that his father (also a programmer) would bring home books on programming which Kent would read. Being the 1970s, the books dealt with computers at the time which were largely tape-driven. One book that he read described the following process of writing software:

  1. Take an 'input' tape, and generate an 'output' tape containing the data that you expect your program to generate
  2. Do some programming
  3. Run the program and compare its 'output' tape to your desired 'output' tape
  4. Adjust and go to 2

This was the basic programming cycle, given the limitations of the equipment at the time. It was also a direct inspiration of TDD. As Kent tells it, it was simply an obvious way of programming. Let's convert it into TDD:

  1. Take your input to the system or function, and generate the output (i.e. a test) that you expect the new system/function to generate (or 'pass')
  2. Write your function
  3. Run the test and see if it passes
  4. Adjust and go to 2

Look familiar? Thus, from an existing discipline, was born TDD. It's amazing to me that the standard way of programming 50 years ago still contains valuable lessons in how to work effectively. Perhaps the 'old' is never really old.

TDD Benefits Recap

I think that too many programmers still run steps 1 and 3 in their heads, which is to their detriment. The benefits of writing the tests first that I have encountered include:

TDD Makes You a Crafstman

Before TDD, it was typical, perhaps ubiquitous, for developers to write some code and then pass it over to a QA team to evaluate whether it was working or not. This was not only a separation of process and workflow, but also a separation of accountability. Working this way (and hopefully nobody reading this is working this way) meant that software developers were effectively stating that quality was not their problem.

How could this be? If a tradesman came to your house to repair or install something, would you expect them to walk away while a quality inspector decided if the work was suitable, then to call the tradesman back again? I hope not.

The book "The Pragmatic Programmer" is written around software development being a craft, and craftsmen own their own quality. By saying "I'm finished", you should also be saying "I have completed this task to the specification you wanted and I can prove it". This is a big deal, and Kent refers to this as a bit "Political Shift" in the industry.

Developers that don't own the quality of their work don't have a place on my team.

Never stop learning

Always Be Learning

Three weeks into joining Facebook, Kent admits that he was out of his depth. As he puts it: "Either they were morons, or I was. Turns out I was." At this point he "decided to forget almost everything I knew about software development" and started learning again.

This is a big lesson. I am currently reading a well-timed chapter in "Ego Is The Enemy" about how we should always be students. A passage I highlighted is

The pretense of knowledge is our most dangerous vice, because it prevents us from getting any better.

To his great credit, in this moment Kent shows how he was willing to become the student again. After introducing his own paradigm-shifts in TDD and XP, he was able to clearly see another shift that was happening to him, and embrace it as an opportunity.

We should all be like this. There is always something to be learning, and there is always a teacher to find.

The Staring Dog Problem

This one was new to me. The staring dog problem is that when you point out something to your dog, it will focus on your finger rather than what your finger is pointing at. But how does this relate to Software Engineering?

Kent tends to write his books (on my sample size of 2) using a values/principles/practices model.

I have recently embraced this triad-model of drilling down in my own development when I started writing things in terms of Tasks, Impacts and Progress; I look for a positive impact on the team or system, then I look for the measurements that can show an improvement in these impacts, then I look for tasks we can implement that can improve the measurements.

It is my new way of ensuring my work has purpose, and even if you are staring at the master's finger, it can still lead you to big impacts.

A data graph

"It Turns Out" that Data is Important

Measuring your impact is important. Kent acknowledges that another value he had to learn at Facebook was to always be informed by data. Data shows insights, reveals problems and shows progress (as described above).

I attended a talk given by Atlassian engineers which focussed on exactly this; if the team wanted to remove Tech Debt in some way, they were asked to provide a measure of their progress and use it to demonstrate the improvement while they were completing the task.

This inspired me to start thinking in the Task/Impact/Progress format above, as not only should I be demonstrating progress along improving impact, I can also be demonstrating progress of implementation.

Kent then reveals the "most exciting words an engineer can say", and it is exacly the gathering of data that allows it to be said:

"It turns out that..."

If you can begin a phrase with "it turns out that...", it means that you have hypothesized, experimented and analyzed. And then, you are an engineer, my friend.

Epilogue: Naming is Still Important

As part of his "Lessons Learned" of what he would do differently, Kent higlighted the naming of "Extreme Programming" itself. He admits he would have chosen another name because there were a number of assumptions and inferences that could be made with a word such as "Extreme". Curiously enough, this is one reason why I didn't explore it when I first heard it in the early 2000s.

I knew there were shifts happening in the industry and I wanted to get on board. Scrum was a thing, Iterative Development was a thing, Unit Testing was a thing, and there was also something called Extreme Programming. I didn't look into it too hard because, as part of a professional team, I thought that something with a name like that would be a hard sell to my team leader.

Little did I know that the concepts of all the other things I was looking into were all wrapped up in Extreme Programming. So yes, names do matter. Perhaps with a different name I would have jumped on board much, much earlier.

So here is your chance to start exploring it!