What belongs in a high-level design
standardintermediateA high-level design answers "what are the moving parts, and how does data get between them". Its vocabulary is components and services, the data stores each one owns, the queues and streams that connect them asynchronously, the network and trust boundaries they sit inside, and the major flows — the two or three paths that carry most of the system's traffic and value. The boundaries deserve particular attention, because a boundary is where the properties change: a call that crosses a process boundary can fail in ways an in-process call cannot, a call that crosses a trust boundary needs authentication and authorization, and a call that crosses a network boundary needs a timeout. Marking them is what makes the diagram say something rather than merely arrange things. What does not belong is anything about the inside of a box: class names, method signatures, schema columns, algorithms. Not because those are unimportant, but because a reader at this level is asking a different question, and mixing the two produces a diagram that is too detailed to see the shape and too incomplete to implement from. A good test is whether the design still reads correctly if one component's internals were replaced entirely — if it does, the level is right.
Think of it as
A map of a city's transport network. It shows lines, interchanges, zones and where the river is. It deliberately does not show the seat layout of a carriage, and adding that would make the map worse at the one thing it exists for. A high-level design is that map: the right level of detail is the level at which someone can see how to get from one place to another and where the crossings are.
- Client
- leads to Edge / CDN
- Edge / CDN — trust boundary crossed here
- leads to API gateway
- API gateway
- leads to Orders service (sync)
- Orders service — owns the orders database
- leads to Orders database
- leads to Event stream (async)
- Orders database
- Event stream — asynchronous edge
- leads to Search indexer
- Search indexer — owns the search index
In a high-level design, and not
Remember: A high-level design names the components and services, the stores each one owns, the queues between them, the network and trust boundaries, and the two or three major flows — and marks which edges are synchronous. Boundaries matter most, because they are where failure modes and security requirements change. Nothing about the inside of a box belongs here: if a component's internals could be replaced entirely and the design still read correctly, the level is right.
See also: what belongs in a low level design · moving between abstraction levels · the high level design checklist · layered architecture · architecture vs implementation

