Skip to content

The NFR Budget

You now have five families of requirement, each with numbers. Written separately, they look satisfiable. Put side by side, several of them are in direct competition, and every one of them is bounded by constraints that were never negotiable.

This topic assembles them into one artifact and makes you choose a corner.

A list of non-functional requirements implies that all of them can hold at once. A budget implies a finite resource being allocated — which is the accurate picture, and it changes the conversation from “is this requirement reasonable?” to “what are you taking it from?”

The resource being allocated is not money alone. It is the single interaction: how much context you can afford to retrieve, how many checks can sit in the path, how large a model can answer, how long the user will wait. Every requirement spends the same interaction.

Accuracy, cost and latency form a triangle, and the mechanism of each tension is worth stating because it tells you which lever to reach for.

Accuracy Cost Latency more context, bigger model more checks, more retries cheap model, trimmed context

You do not get three corners. You pick an operating point, and the dashed lines are the distances you are accepting — the short one to accuracy is the choice this budget makes.

Reading the triangle in both directions:

  • Toward accuracy — retrieve more context, use a larger model, add a verification pass, retry on low confidence. Each raises cost per interaction and adds latency.
  • Toward cost — route to a cheap model first, trim context, cache aggressively. Each gives up accuracy on some slice of requests, and caching gives up freshness.
  • Toward latency — fewer checks, smaller context, no second pass. Accuracy pays for all three.

Safety sits outside the triangle but spends from the same interaction: every guardrail call adds latency and cost, and a stricter filter trades usability for assurance.

Constraints bound the triangle before you start

Section titled “Constraints bound the triangle before you start”

A constraint is not a point in this space; it shrinks the space. Data residency may remove the models you would otherwise have chosen, which lowers the accuracy ceiling and raises the cost floor simultaneously — before you have made a single trade-off.

This is why the three kinds matter. Treating a constraint as a requirement invites someone to negotiate it, and the negotiation is always with the wrong person. The budget records constraints as the boundary of the page, not as rows to be traded.

A normal NFR table has target, measure and owner. Add a fourth column: the give.

For every line, what yields when the system cannot satisfy everything at once? Which requirement degrades, by how much, and who was told in advance?

This is uncomfortable to write and it is the whole point. Under pressure, something always gives. The only question is whether it was chosen deliberately in month one or by an engineer at 23:00 in month nine, in favour of whichever requirement their ticket happened to mention.

Then state the ordering once, in a sentence: when these collide, this one wins. An ordering everyone has seen is worth more than a set of individually reasonable numbers nobody has ranked.

Three real costs, in order of how much they sting.

Naming the give pre-authorises a sacrifice. Someone will later point at the row and take the degradation you wrote down. That is the system working, and it will not feel like it.

The ordering makes someone lose in advance. Whoever holds the requirement at the bottom now knows they lose. Better that they know now, from you, than discover it in a release meeting.

The budget will be wrong. The numbers rest on assumptions no one has measured yet. Date it, name the assumptions, and revisit after Module 3 picks a structure and again after the first real measurements. A budget revised with evidence builds credibility; a budget silently abandoned destroys it.

This is the NFR budget artifact, and it is the one Module 3 scores its style decision against. Include the give column and the ordering sentence — without them you have written a list.


→ Ten topics done. The requirements are testable and the conflicts are named. — Module 3 — Choosing a Structure

Optional workbook: Exercise 2 turns this module into artifacts. The exercises build on each other, so work them in order or not at all.