Tests as a Form of Documentation

Your tests are like a special type of documentation. Because they show exactly how things actually work. They can show every API call, and every way to construct an object, and every exception that can occur. And the tests are written in the language developers can read fluently: software code! They are unambiguous, executable, and never drift out of sync with the application. Good tests are small, independent units that describe behavior. Ideally they shouldn’t be tightly coupled and rely on each other. That independence turns them into a special type of living documentation. ...

2025 June 13

Minimize Your Time in the Debugger

Spend less time chasing bugs and more time shipping value. Imagine if as you work on developing the software, you’re always working in a state where everything was worked a minute ago. Nothing has been broken for an extended amount of time. Because the development loop is so small and rapid, and always giving you feedback that you’re hardly ever in a situation where you need to start up debugging tools. ...

2025 June 12

Three Rules of Test-Driven-Development

The Three Rules of TDD are simple: Write no production code until you have a failing test. Write only enough tests to fail. Write only enough production code to pass. When builders follow this discipline, their work is verifiable every minute. Small, frequent checks catch errors early and keep risk manageable. TDD is the balance sheet that helps us avoid catastrophes. Discussions for your team Which high-risk parts of our software would benefit from requiring strict TDD? In which areas of our software are we resisting writing tests first, and why? What tooling would make TDD easier?

2025 June 11

Double-Entry Bookkeeping

You may have heard the comparisons of software building with accounting. Accountants create dense, technical records, and utilize the method of double-entry to keep their bookkeeping in order. Every transaction is entered twice so the balance sheet always sums to zero. Accountants check balances frequently, catching mistakes early. A discipline enforced by law in many regions around the world. Test-Driven Development (TDD) is the developers’ double-entry bookkeeping. Writing an executable automated test first and then running it frequently lets developers detect and identify errors immediately, keeping the feedback loop tight, and preventing cascading failures. ...

2025 June 10

Core Habits

The agile software development approach includes a core set of principles, practices, and disciplines that help teams build software projects. It offers a shared language and clear expectations for how people behave toward each other, the project, and the deliverable. Some of the practices seem odd at first, but they’re the backbone of success. Over the years some of the practices have become common place and others have been left by the wayside. I’ve seen teams shrink their focus and efforts on TDD, Refactoring, Simple Design, or even Pair Programming. And so resulting team becomes a weak shell of its true potential. ...

2025 June 9