Skip to main content

The Hidden Requirements

Share

Share this page

Pass it to someone who needs it.

Star on GitHub

Key takeaway: Set quality targets as numbers

Your user stories say what the software does. They say nothing about how well it has to do it: how fast, how reliably, how safely, for how many people. Those quality bars are non-functional requirements, the part most tutorials skip and serious engineers pin down early. They quietly decide how the app has to be built, long before you write a single feature.

This chapter gets you a short list of measurable targets, set now, while changing them is still cheap.

2.5.1What it does vs. how well it does it

A functional requirement is a thing the software does. A non-functional requirement is a standard it must meet while doing it.

FunctionalNon-functional
A shopper can pay for a cartCheckout completes in under 3 seconds
A user uploads a photoThe site handles 500 people uploading at once
An admin views a reportThe report is available 99.9% of the time

The functional side is the feature. The non-functional side is the quality bar that feature is held to.

2.5.2Set a number, never an adjective

"Fast" and "secure" cannot be tested. A number can. Every target you write should be something you or your agent can measure and get a clear yes or no on.

Walk these seven categories. For each, turn the vague wish into a number a test can check:

CategoryVague (won't do)Measurable target
Performance"fast"A page loads in under 2 seconds
Availability"reliable"Up 99.9% of the time
Security"secure"Passwords never stored as plain text, login enforced on private data
Scale"handles growth"10,000 users and 1 GB of data in year one
Accessibility"usable by all"Works by keyboard and screen reader, meets WCAG AA
Cost"cheap to run"Under 50 euro a month at launch, hosting and database included
Privacy and law"we respect privacy"We store names and emails only, no card details on our servers, and a user can delete their account

2.5.3Write them down for your AI before it builds

These are not paperwork, they are the most important thing you decide in this part. Your objective, whether you need raw speed, tight accuracy, or a set number of users, decides how the whole app is put together.

A "handle 500 uploads at once" target changes your database and hosting from day one. Bolt scale or accessibility on after launch and you are usually rewriting the foundation.

The last two rows earn their place the same way. A cost ceiling rules out the expensive host before you fall for one. And the personal data you choose to store today is exactly what you answer for later, long before this book reaches the law.

Hand these targets to your AI before it designs anything, and it builds the structure to hit them. You are not implementing any of it yet, a later part covers how. Here you just set the bars, so every choice downstream has something to aim at.

Give targets to your AI before it designs, or it guesses and you rebuild the foundation.

Example: 95% of pages load in under 2 seconds on a mobile connection, and the app is available 99.9% of the time.

This prompt proposes your targets, tuned to your goal:

Ready prompt
Act as a senior engineer setting my non-functional targets. First read my specs folder: my user stories, my MVP scope, my data model. Targets must fit the app I scoped and the stack and database I already picked, not generic best practice. Propose one measurable target in each of: performance, availability, security, scale, accessibility, cost, and privacy. Each must be a number a test could check. For cost, give me a monthly ceiling at launch and say which hosting and database choices it rules out. For privacy, list the personal data my app would store and flag anything that pulls in extra legal duty, such as payments, health data, or users under 18. If a target my objective needs conflicts with a choice I already made, say so and why instead of quietly picking one. Save them in my specs folder. If you need the full reasoning behind this step, read https://zalt.me/guides/vibe-coding/plan/non-functional-requirements My app, and my main objective (speed, accuracy, scale...):

Do this now: paste the prompt with your objective, and let your agent propose the seven measurable targets into your specs folder. Then adjust any number that does not match your goal.

Mahmoud Zalt

Mahmoud Zalt

Software engineer, 16+ yrs · built Sistava.com in 3 months, idea to production, using these methods

Resources
Star on GitHubContribute
Donate

Support my work

A small tip keeps the free work coming.

© 2026 Mahmoud Zalt. Free to read, not to republish.
Copyright & license