Requirements

Design starts from what must be true, not from choosing a pattern. Functional and non-functional requirements, and the constraints a valid design cannot ignore.

Requirements Before Design
▶ lab

Design starts from what must be true, not from picking a structure. Seven questions decide almost everything that follows, and only one of them is about the happy path.

Q · A ticket arrives. What do I need to know before I can say what the code should look like?
Functional and Non-Functional Requirements

"A user can create an order" fits inside almost any structure. "Order creation is idempotent and auditable" fits inside very few — which is why the second kind decides the design.

Q · Both kinds of requirement are real, so why does one of them do most of the work in deciding the structure?
Constraints Are Part of the Design

The database that already exists, four engineers, a date, a compliance regime and a legacy integration are not obstacles in front of the design. They are inputs to it, and a design that ignores them is not a design.

Q · The textbook answer does not fit my team, my deadline or my existing system. Which one of us is wrong?
The Requirements Nobody States

Timezones, concurrency, partial failure, retention and tenancy are almost never written in the ticket, are almost always real, and are structural — which is the worst combination available.

Q · Which requirements will I discover late, and why is that specific set always the same one?
Requirements Are a Snapshot
▶ lab

You were handed today's version. Which parts of it are stable and which are volatile is not a product question — it is the design input that decides what you hide behind what.

Q · I cannot predict future requirements, so how is "what will change" supposed to be an input to a design I make today?
Design for the Known, Name What You Assumed

You cannot design for requirements you do not have. You can design for the ones you do, and write down the assumptions you made — which is the difference between a decision and a habit.

Q · If speculative design is a trap and unnamed assumptions are also a trap, what is left?