JA EN
LearnEngineering Process
·★ MEMBER·12 min read

The Craft of Requirements — Why "We Built Exactly What They Asked For" Fails

Why shipping precisely what a stakeholder asked for produces software that works and nobody uses. Stated versus latent needs, use cases, turning "fast" and "secure" into numbers, and a set of question templates that expose ambiguity on the spot.

ModalitytextTasksystems

A Quarter-Inch Drill and a Quarter-Inch Hole

There is an old line in marketing: people don't want a drill, they want a hole. What someone asks for is a tool. What they need is an outcome.

The same thing happens in software. Someone asks for a CSV export button. You build the button. It ships, it passes acceptance, everyone signs off. Six months later almost nobody uses it. Ask again and it turns out what they actually wanted was "get the month-end numbers to accounting," and CSV was simply the only mechanism they could think of at the time. The thing that would have mattered was pushing the numbers straight into the accounting system.

"We built exactly what they asked for" is the easiest excuse to say and the least useful one to have. Requirements engineering is the work of neither swallowing nor dismissing what a stakeholder says, but digging down to the outcome underneath it and rewriting it in a form you can verify. Sometimes the rewrite comes out identical to the original request. Even then, arriving there by checking is a completely different situation from arriving there by assuming.

Needs Come in Three Layers

What is in a stakeholder's head does not arrive in the order they say it. It sits roughly in three layers.

Stated needs are the ones they can put into words themselves. "I want a CSV export." "I need a login screen." These come out when you ask — but notice that by the time they surface, they have already been shaped into somebody's proposed solution.

Latent needs are the ones they would be delighted to have but will never volunteer, for the simple reason that they don't know such a thing can be built. "I spend twenty minutes a month retyping these figures by hand" will come out if you ask the right way. "Please automate that retyping" will not. People can only assemble requests out of options they already know exist.

Assumed needs are the ones considered too obvious to be worth saying. "The totals don't drift." "Nobody can see someone else's salary." "Pressing save actually saves." Meeting these earns you no credit; violating one destroys trust instantly. The Kano model in quality engineering names this asymmetry directly, separating must-be quality (expected by default, a source of dissatisfaction when absent) from attractive quality (not missed when absent, delightful when present). The layer that causes accidents is the first one: nobody said it, so nobody built it, and after release you hear "well, obviously."

So what happens if you carefully collect only the stated needs and build those? You get a system that behaves perfectly on the cases you heard about and falls apart on the ones you didn't. The shape of that failure is very close to overfitting in machine learning.

FIG 1As an analogy. The harder you fit the examples you gathered in interviews (the training data), the lower the error there — while the error on the cases you never heard about (the test data) starts climbing. The degree slider stands in for how tightly you fit "exactly what they asked for"

"Need" and "Requirement" Are Different Words

These get used interchangeably in conversation, but they belong to different stages of work. ISO/IEC/IEEE 29148, the international standard for requirements engineering, treats stakeholder requirements and system requirements as distinct artifacts.

"I want to stop retyping figures into accounting" is a need. "The system shall transmit the current month's journal entries to the accounting system's API by 09:00 on the first business day after close" is a requirement. Two different people can judge the second one identically. That is the whole test of requirement quality: can everyone who reads it write the same test?

Use Cases: Putting a Person Back in the Subject Position

Write features as a bullet list and the subject quietly becomes "the system" everywhere, which drops out who is doing this, why, and in what order. A use case rewrites the same thing from the human side. The minimum viable form has five parts.

Most of the value is in the last two. The main scenario comes out roughly the same no matter who writes it. But the moment you try to write alternate flows, you are forced to ask "and what happens when that fails?" — and any place where the answer is undefined becomes visible on the spot. Postconditions are the act of deciding, up front, what you will look at to declare the thing done.

If functional requirements say what the system can do, non-functional requirements say how well it does it. ISO/IEC 25010 organizes these as quality characteristics — performance efficiency, reliability, security, maintainability, usability, and others. The awkward part is that non-functional requirements constrain you

What's behind this

§

Members-only from here

371 walkthroughs, 26 textbook chapters, 48 student units and 6 close readings — all included for $4.99/mo, with three new explainers every day. Cancel any time; access runs to the end of the period.

Already a member? Sign in to keep reading

Comments

Sign in to comment