All of this content used to be spread over three different blogs at three different domains and it's now been merged into one. Why was it ever three? Because at the time it seemed reasonable that each of them was for a different audiences, and yet over time I've found that the lines between topic areas got blurrier and tended to overlap. So now they're all together in one place.

If you encounter things that seem broken, please let me know and I'll get them fixed.

Browse by topic area:


There's a lot here and if you're not sure where to start, here are some popular starting points. From these, you'll find crosslinks to even more topics. Enjoy!

Test Driven Development (TDD): A design activity

Test Driven Development (TDD) is often though of as a testing activity but it really isn’t. It’s a design activity that leaves a bunch of automated tests behind in its wake. It may sound as if we’re spending a lot of time on “tests” but we’re really focusing on the behaviour we want and allowing that behaviour to drive the design of our system.

Quality vs Testing: Solving the wrong problem

In the agile space, we talk a lot about testing. How will we test things? What should we test? How can we automate our testing? Yet, testing isn’t actually the point. What’s important instead, is quality. If we had amazing quality then it wouldn’t matter if we’d tested or not.

World Hypnosis Day

Today, January 4, is World Hypnosis Day. If you’re like most people, all you know about hypnosis is what you’ve seen on TV or in movies, and while entertaining, that’s mostly wrong. You may have even seen a live hypnosis show, and while there will certainly be real hypnosis being done, most of what you’re going to notice is showmanship and entertainment.

Attribute substitution

Attribute substitution is a situation where, when we are faced with a computationally difficult decision, we will often substitute a more easily calculated decision in it’s place and answer that instead, without even realizing that we did this.

Using LEGO to teach technical practices

Years ago now, Bryan Beecham came up with the idea of using LEGO to teach the concept of Test Driven Development (TDD). Since this is a topic most often used by developers, previous trainings had focused on demonstrating this technique on actual code. However, Bryan wanted to introduce it to a different audience; he initially wanted to explain TDD to management and then later to other non-developers on the teams. To do this, he needed to be able to illustrate the concepts away from the actual source code. And thus was LEGO-TDD first created.

Slicing stories

In an agile environment, we split our work down into what we call “stories”, that are the smallest unit of value passing through a workstream. Unfortunately, we have a tendency to over-complicate story writing, making it unnecessarily hard. Done well, it can be a simple process of taking small steps, repeatedly.

Premature optimization

We have a tendency to think that making any one part of the workflow more efficient will make the overall workflow also more efficient and that’s just not true. Part of that is that not all parts of the workflow are on the critical path and improving something that isn’t currently a bottleneck won’t help the overall flow. But there’s a second reason that’s less obvious - sometimes optimizing for simple cases in the workflow, can make other parts of the workflow much worse.

Improving meetings

When we look for opportunities for improvement, at some point every team will bring up meetings as being an ongoing problem for them. When we dig into what the actual problems are, we find they always fall into one of three categories:

Hero Culture

Hero culture is when we rely on individual heroics on a regular basis. Someone pulling an all-nighter to get one thing done, one time, may be ok. Relying on that on an ongoing basis is unsustainable and will destroy whatever teamwork and culture you used to have.