Trailblaze and Pave – TDD Patterns
Sometimes, TDD goes smoothly from story to story, or micro-story to micro-story. Other times, we aren’t clear how to proceed, and do a spike. But there’s a third approach I use occasionally, when I’m...
View ArticleWho is the Customer?
It’s easy to throw around terms like Customer and User, but what do they mean? They’re actually complex concepts, and our goal for stories is sometimes not for the user’s direct benefit. Customers are...
View ArticleDisaster Strikes! A Design Dead End
In incremental development, we grow a system by adding capabilities one at a time. Our bet is that we won’t often hit a dead end, but if we do, the time we’ve already saved will let us dig our way...
View ArticleErrors and Exceptions – TDD Patterns
In a perfect world, we don’t have to worry about errors. That’s not this world, however. Here, handling errors can easily be half the effort of doing things. We’ll look at a basic test structure,...
View ArticleTree-Like Objects – TDD Patterns
When you have hierarchical information, a tree is a natural representation. We’ll look at ways to test-drive trees and their close variants. Trees A tree consists of nodes which may have child nodes....
View ArticleSet-Like Objects – TDD Patterns
Sets are fundamental in mathematics — and programming. We’ll look at some considerations when using Test-Driven Development (TDD) for set-like objects. This is the last in a series of articles...
View ArticleHalf-Waterfall: Extra Cost, Uncertain Benefits
Would-be agile teams sometimes get stuck in half-waterfall, a combination of waterfall and agile. Half-waterfall has the costs of both agile and waterfall approaches, but may not get enough benefit to...
View ArticleInput Validation – TDD Patterns
Input validation is the process of checking that an input value is legal according to some set of rules. We’ll look at some considerations of developing such code. Validation and Normalization...
View ArticleThe Gerrymander Game – Part 1, Puzzle
A few weeks ago, Mike Hill published this tweet: “q: how many ways are there to partition a 5×5 tile square into 5 pieces, each containing 5 orthogonally contiguous tiles?”...
View ArticleThe Gerrymander Game – Part 2, TDD
I implemented the core of the gerrymandering game using TDD, and it was a challenge. Why? Because I didn’t know in advance how to solve it. My Overall Strategy To make the gerrymandering game, I had...
View ArticleLimiting Beliefs About Evolutionary Design
Evolutionary design works by growing a system one capability at a time, keeping the design just sufficient for the system so far. As needs change, the system evolves to meet them. Evolutionary design...
View ArticleAuthorization – TDD Patterns
Authorization is the process of deciding whether to allow a user can access or use some resource. (Don’t confuse it with authentication, the process of deciding whether a user is who they claim to...
View ArticleReversible, Incremental Data Structures
Objects usually track state, but you can instead track history and derive the current state from the history. (For example, databases blend both modes behind the scenes.) Why might history be helpful?...
View ArticleScience-Intensive Apps: Handle with Care
A visualization of two fluids mixing. Public domain. A certain type of science-intensive application only has a few (or even no) control parameters. It is usually driven by a “big data” analysis. The...
View ArticleRevise Tests While Refactoring? It Depends
Some refactorings (e.g., Extract Method or Extract Class) introduce new elements. Should you revise the tests to take these into account? The classic consultant’s answer applies: It depends. The...
View ArticleTesting Objects and Relationships
Since Source Email Address Content Upgrades INVEST-ebook Testing-Graphics-Summary TDD-Impact-Calculator S-Curve Intensifying-Stories Refactorings-for-Conditionals DeliveryStrategies...
View ArticleAvoid Irrelevant Symmetry!
When we create test data in TDD, we do it to drive out new capabilities. But all test data is not of the same value. If your data has the wrong symmetry, it can mislead you about what’s working....
View ArticleForgotten Stories
When we’re creating or extending systems, there’s often one type of user that’s our main focus. We often have no trouble thinking up capabilities they need. But other types of users are often...
View ArticleOhio Scientific and Commodore 64 Environments
Environments vary substantially between computers, so you’ll often see environment-specific code hidden in the PEEKs and POKEs of old BASIC programs. We’ll take a brief tour of the Ohio Scientific...
View ArticleAll You Need is INVEST? No!
I developed the INVEST model years ago to help someone (and then many people) think about the user stories they were creating. Is INVEST all you need to create good stories? Unfortunately, no. INVEST...
View Article