Skip to main content

Whiteboard & Diagram Craft

Editorial

The diagram is not the deliverable

Two engineers can produce the same architecture and only one of them can be followed. That's not an aesthetic problem — nobody is scoring your handwriting — and it isn't fixed by drawing more carefully.

The useful reframe is this: the diagram is a shared thinking surface, not an artifact you hand in. It has exactly two jobs. It holds state so your working memory doesn't have to, and it gives two people something to point at and be sure they mean the same thing.

So the test for every choice in this lesson isn't does this look good. It's:

Can we both point at this and mean the same thing?

Which makes the real failure ambiguity, not ugliness. An ambiguous diagram doesn't produce a confused silence — it produces a confident conversation in which you and the interviewer are discussing two different systems, and neither of you finds out for several minutes.

A before-and-after comparison of the same system architecture drawn twice, so that the difference is legibility rather than content. The left panel, headed BEFORE in red, shows a cramped tangle: seven unlabelled or vaguely labelled boxes pushed into one corner of the canvas, several arrows crossing one another, one box simply reading business logic, a mixture of shapes used inconsistently, and no distinction between the blocking and non-blocking connections. Every arrow is a plain solid line pointing in an unconsidered direction. The right panel, headed AFTER in green, shows exactly the same six components and the same relationships, redrawn: the boxes are spread across the canvas with real space between them, each carries a specific name rather than a generic one, services are rectangles and the datastore is a cylinder used consistently, synchronous calls are solid arrows pointing from caller to callee, and the asynchronous publish is a dashed arrow pointing the way the messages travel. No lines cross. Annotations between the two panels list what actually changed — the same components, specific labels instead of vague ones, one shape vocabulary, arrows that state who calls whom, dashed lines for anything that does not block, and room left over to annotate during the deep dive. A closing line states the point the whole lesson turns on: nothing about the system changed between these two pictures, only whether a second person can read it — and the interviewer writes their notes from the picture, not from your intentions.

Nothing about the system changed between those two pictures. Same six components, same relationships. What changed is whether a second person can read it — and that matters more than it sounds, because the interviewer writes their feedback from the picture, not from your intentions. Communicating While Designing was about making your reasoning audible; this one is about not burying it under a diagram nobody can parse.

Your arrows mean three different things

Here's the part almost nobody teaches, and it's the single biggest upgrade available.

An arrow between two boxes can mean three different things:

  • Dependency — which component relies on the other
  • Control flow — which component initiates the connection
  • Data flow — which way the bytes actually move

Most of the time you get away with this, because for a simple call all three agree. Then you draw a service reading from a database, and they don't.

A figure showing that a single arrow between two boxes can mean three different things, using one concrete edge: an order service reading from an orders database. Across the top, the same pair of boxes is drawn three times with three different arrows. In the first, labelled DEPENDENCY, the arrow runs from the service to the database because the service is the one that relies on the other. In the second, labelled CONTROL FLOW, the arrow also runs service to database, because the service is the party that initiates the call. In the third, labelled DATA FLOW, the arrow runs the other way, database to service, because on a read it is the rows that travel back. A callout marks the collision: for this one edge, control flow and data flow point in opposite directions, so an arrow drawn without deciding which is meant will be read as whichever the reader assumes. Beneath sits the resolution as two rules in two panels. The synchronous panel says draw control flow, because it also matches dependency and so the picture reads the same way twice, and shows a solid arrow from caller to callee. The asynchronous panel says draw data flow, because control flow collapses when both the producer and the consumer dial the broker, and shows a dashed arrow following the messages. A line at the foot gives the convention that carries the distinction at no cost: solid means it blocks, dashed means it does not, and the reader knows which before they have to ask.

On a read, control flow and data flow point in opposite directions. The service calls the database; the rows come back. Both arrows are true. Draw one without deciding which you meant and the reader supplies their own answer.

There are two rules, and between them they cover everything you'll draw:

Synchronous → draw control flow. Point the arrow from caller to callee. This is the one that also matches dependency, so the picture says the same thing twice instead of two things once. It holds for anything request/response — a REST call, a query, a remote procedure call. Drawing the response arrow instead reads badly for a specific reason: the database neither connects to nor depends on the service, so an arrow pointing that way quietly claims something false.

Asynchronous → draw data flow. Here control flow stops being useful, because the producer and the consumer both dial the broker. Control-flow arrows would point inward from both sides and tell you nothing about how work moves. So follow the messages instead: producer → queue → worker.

And one convention that costs nothing and removes a whole class of ambiguity:

Solid means it blocks. Dashed means it doesn't.

Now a reader knows which calls are on the critical path before they have to ask — and when you say "this part is async so the write path doesn't wait," the picture already agreed with you.

Read your own diagram back

The trouble with arrow direction is that a wrong arrow doesn't look wrong. The diagram stays tidy and the mistake is entirely in what it claims.

So below is a small architecture with five edges, and you set the direction and line style on each one. As you do, the panel translates your picture back into plain English — the sentence a reader would take from it. Flip the database read around and watch it say "the orders database calls the order service." That is what a wrong arrow sounds like out loud, and it's the reason this is worth practising once rather than reading about twice.

Two of the five edges are the classic traps. There's also a whole-diagram check that catches something individual edges can't: mixing conventions halfway through.

Set every arrow, then have the diagram read back to you in plain English — including the sentences you didn't mean to write.

Shapes are a tiny alphabet

After arrows, shapes are almost an anticlimax — because the correct answer is use very few and never vary them.

  • Rectangle — a service, a process, anything that runs code
  • Cylinder — a datastore
  • Cloud or a plain box on the edge — something outside your system

That's essentially the whole vocabulary, and it's enough. The reason to keep it small is blunt: if you've labelled everything, the shape is decoration. Inventing a distinct shape for a cache, a queue, a load balancer and a search index doesn't add information — it adds a legend the reader has to learn while also trying to follow your design.

What genuinely matters is consistency. Pick your handful of shapes and hold them for the whole board. A rectangle that means "service" in one corner and "data store" in another is worse than having no convention at all, because the reader has already trusted the first one.

Colour: use less than you think. A diagram in one colour with good labels is completely readable. Reach for a second colour only to mark something specific — the hot path, the component you're about to open up — and then say what it means.

Labels that carry their weight

Label every box. Label the connections whenever the relationship isn't obvious from context — what protocol, what's on the wire, what the trigger is.

But the rule that actually changes diagrams is about which words. These labels are worth nothing:

business logic · integration logic · processing · handler · manager · service

They have no self-descriptive power — they're the diagram equivalent of a variable called data. Compare business logic with order validation & pricing. The second one took two extra seconds and told the interviewer what the box is for, which is the only reason it's on the board.

Same for acronyms. If it isn't universal, expand it once.

And the reason all this matters more than it seems: anything the diagram doesn't say is missing. You explained it beautifully out loud, but the written feedback gets composed from the board, sometimes after you've left the call. A box labelled service is a box that contributes nothing to the record of what you designed.

Space, and one level at a time

Two layout habits do most of the work, and both are about what happens later in the interview rather than right now.

A two-part figure about using the canvas. The upper half, headed START IN THE MIDDLE, shows a canvas with the first components placed centrally and free space in every direction, annotated to explain why: you cannot predict which component the deep dive will open, and the interview leaves very little room to re-lay-out a diagram once it is drawn. Beside it a contrasting sketch shows the same components crammed into the top-left corner with the rest of the canvas empty, marked with a note that the deep dive has nowhere to go and annotations will have to be squeezed on top of existing boxes. The lower half, headed ONE LEVEL AT A TIME, shows two diagrams side by side. The left mixes abstraction levels — a service box sitting next to a class name and a thread pool detail — and is marked as the most common source of confusion, because the reader cannot tell what kind of thing a box is meant to be. The right keeps a single level, showing services and stores only, with a separate zoomed panel for the one component being examined in depth, connected by a marker showing that the deep dive is a zoom rather than an addition. A closing line states the working rule: the high-level design stays at one level and the deep dive opens a new frame beside it, so the overview survives being drilled into and both pictures remain readable.

Start in the middle and work outward. You do not know yet which component the deep dive will open — that's often the interviewer's choice — and there is very little slack in the clock for re-laying-out a diagram. Components pushed into the top-left corner mean the deep dive has nowhere to go and your annotations end up written on top of existing boxes.

Leave real gaps between boxes. That space isn't waste; it's where the deep dive gets written — the replica count, the partition key, the retry policy, the thing the interviewer just asked about.

Keep one abstraction level per picture. Mixing them is the most common source of confusion in any architecture diagram: a service box next to a class name next to a thread pool leaves the reader unable to tell what kind of thing a box is meant to be.

So when the deep dive arrives, zoom rather than cram. Draw the internals of that one component in a fresh frame beside the high-level design instead of stuffing detail into the existing box. Your overview survives being drilled into, and — usefully — you can point at both at once when you explain how the piece fits back into the whole.

When the picture grows past roughly seven or eight boxes, draw a boundary around related components and label the group. One outlined region called order pipeline turns four boxes into one thing the reader can hold in their head.

Erase it

This one is counterintuitive enough to be worth stating on its own, because almost everyone gets it backwards.

You draw a component. Four minutes later you realise it was the wrong call. The instinct is to leave it there and work around it, because deleting feels like admitting a mistake in front of someone who is evaluating you.

Erase it. Two reasons, and both are strong.

First, noticing is the signal. Catching your own error and correcting it is the behaviour being assessed — it's the same coachability the previous lesson was about, just applied to your own work instead of the interviewer's hint.

Second, and more practically: a board that still shows your abandoned idea will be read as your design. Whoever writes the feedback — possibly reviewing a screenshot later — has no way to know which boxes you disowned. The wrong component sitting quietly in the corner is not neutral. It's part of what you submitted.

Say it as you do it, in about four words: "actually, let me pull that out — it doesn't earn its place now that we're caching." Now the erasure is visibly a decision rather than a correction.

What a readable diagram buys you

None of this is scored directly. There's no diagram-quality line on the rubric, and nobody gets hired for tidy rectangles.

What a readable diagram does is stop everything else from leaking. Your judgment shows up in the components you chose; your depth shows up in the one you opened; your communication is carried by a picture you're both pointing at. Every one of those is transmitted through the drawing, and an unreadable drawing attenuates all of them at once.

And there's a second payoff that's easy to miss. A clear diagram is a better thinking tool. When the boxes are spaced and the arrows say who calls whom, you can see the single point of failure, the synchronous chain that's three hops deep, the component everything depends on. Candidates with clean boards spot their own bottlenecks — not because they're smarter, but because the picture is doing part of the thinking for them. That's what boxes that help you think actually means.

So: decide what your arrows mean and be consistent. Solid blocks, dashed doesn't. Three shapes, held all the way through. Labels that say what a thing is for. Start in the middle, leave room for the deep dive, keep one level per frame, and erase what you've abandoned.

You now have the clock, the board, the voice, and the picture — the whole method. What's left are the questions everyone still has at this point, the ones that keep people up the night before: how much detail is enough, what to do about a technology you've never used, whether the numbers have to be right. That's The Questions Everyone Asks, next.