Skip to the content.

Why the World Is Doomed While You Write Test Cases

There is no chance to save the Amazon forests, the endangered species, or the clean air around us while we keep creating test cases for the sake of creating test cases. Somewhere along the way, we lost the plot on building quality products. We set ourselves a monstrous list of abstract test cases, billions of steps deep, and then we rush to hand that repetitive burden to automation.

Bill Gates said it best: “The first rule of any technology used in a business is that automation applied to an efficient operation will magnify the efficiency. The second is that automation applied to an inefficient operation will magnify the inefficiency.”

Read that second rule again. That is what most QA teams do every single day. To save the world you don’t need to fly to the Amazon. You need to stop writing test cases before the specification exists.

The One Distinction Everyone Blurs

Before we argue, let’s pin down two words the industry uses interchangeably and shouldn’t:

Catch the difference? A specification is the exact description of what we design, then build, then test. It exists before the first programmer types a single line of code.

It may never be formalized, but it is always there in someone’s head. The developer implements their interpretation of it. The tester tests their interpretation of it. When those two interpretations disagree, you find it during testing. When both interpretations disagree with the real specification, you find that out the worst possible way: when the customer opens the product.

Answer These Questions Honestly

Stop for a moment and answer for your own project:

  1. Are there formalized specifications at all?
  2. Are they up to date, and how exactly do you keep them current?
  3. How many of your specification checks are automated?

I am willing to bet that on most projects the specifications are either ignored or riddled with gaps around functionality that already ships. This isn’t the exception anymore. It has quietly become the rule.

The Seven Costs You Are Already Paying

When the specification is missing, the test suite tries to become the specification. It fails at the job, and here is the bill you pay for it. Each item is a mistake I have watched teams repeat, and each carries a visible cost:

Notice the shape of the problem. None of these are testing failures. They are all specification failures wearing a testing costume.

Shift Left Means Shift to the Spec

On most projects I’ve worked on, the requirements were described most accurately at the moment someone sat down to automate the tests. Think about how backwards that is. By then the feature is already built and the money is already spent. Automation at that stage does nothing to move the product closer to what the customer wanted. It just laminates whatever exists: at best it protects the current behavior from change, at worst it locks the implementation in place and blocks improvement.

Building a shed from scrap wood is cheaper and faster than drawing a blueprint first, right up until the roof leaks. Then you start counting the boards, the nails, and the weekends you threw away. Skipping the specification feels cheaper at the start for the same reason, and it fails for the same reason.

The foundation is the specification. Test cases are built on top of it. Test cases are secondary.

Here is the question that exposes the whole illusion. If I write 100 test cases, what fraction of the functionality have I covered? If I write 1,000, have I covered all of it? What number guarantees “enough”? When a feature changes, how many of those cases must I rewrite? Without a specification, every one of those answers is a shrug.

With a specification, the answers are arithmetic. You know precisely what must be checked and how. You can automate the whole chain, from validating the specifications themselves to collecting real coverage metrics. Gojko Adzic lays out exactly how to do this in his book Specification by Example, and the approach works even for specialists with no coding background. It also shows how to keep living documentation alive off the back of those specifications, so the spec never rots into another stale wiki.

Why We Keep Skipping the Step That Would Save Us

I keep asking myself why we don’t just write the specifications. We all say we want to “shift testing left,” yet the actual work of shifting left is formalizing the spec, and instead we shift left by automating test cases. We move the wrong thing.

My best guess is that the industry expects constant change, and constant change is the symptom of weak planning. When you plan badly, an exact blueprint feels like wasted effort, so you skip it and pay later.

This isn’t only your problem or your team’s problem. Running actions and checks against a guessed interpretation instead of a real specification wastes machine time on a massive scale. That waste is why we keep buying more servers and more power to brute-force our way through inefficient suites. The carbon footprint of that decision is the air you breathe when you step outside.

If you are still worried we’re living in the Matrix, relax. Humanity never has enough computing power. No machine could ever be built to withstand the full force of our inefficiency.

Start Before the First Line of Code

You cannot save the rainforest from your keyboard, but you can stop magnifying inefficiency with automation, and that is where the waste actually compounds. Pick your next feature. Before anyone writes a line of code, write the specification, then build the test cases on top of it, then automate the check on the spec itself.

Write specifications. Follow specifications. Make the world better.