Drawing Diagrams That Communicate
A design interview is mostly a drawing exercise. A clear diagram makes you look organized and
competent; a chaotic one undermines even good ideas. Here’s how to draw so the interviewer follows
you.
Prerequisites: The Framework
Time to read: ~12 minutes
Why the diagram matters
🚨 The interviewer’s understanding of your design is the diagram — it’s the shared artifact you
both point at and reason over. A messy, disorganized diagram makes even a good design hard to follow and
makes you look disorganized; a clean one makes you look like someone who has run design reviews. The
diagram is your communication, and communication is graded.
Most interviews now use a shared drawing tool (Excalidraw, Miro, or a plain
doc). 🚨 Practice in the tool — fumbling with the UI burns real minutes and reads as flustered. Have
a blank tab open before the call starts.
The principles of a clear diagram
🚨 Six principles that separate a diagram that communicates from one that confuses:
1. Flow left-to-right or top-to-bottom. Requests enter one side, data stores are on the other.
Consistent direction lets the eye follow the request path.
Client → Load Balancer → Services → Cache → Database
↘ Queue → Workers
2. Standard shapes. Rectangles for services, cylinders for databases, a distinct shape for
queues/caches. Consistency means the interviewer doesn’t have to ask “what’s that box?”
3. Label everything. Every box gets a name; every arrow can get a label (the protocol, the data).
An unlabeled box is a question you’ll have to answer verbally anyway.
4. Show the data flow, not just the boxes. 🚨 Arrows with direction and meaning — “write path in
one colour, read path in another.” The flow is the design; static boxes aren’t.
5. Start high-level, add detail progressively. 🚨 Don’t draw everything at once. Start with the
major components (5-7 boxes), get agreement, then zoom into the part you’re deep-diving. A diagram that
starts with 40 boxes is unreadable.
6. Leave space. Don’t cram. You’ll add components as the design evolves (a cache, a replica, a
queue), so leave room to grow. A cramped diagram forces messy additions.
What to draw, in order
Match the diagram to the framework phases:
High-level (the main diagram):
[Clients: web, mobile]
↓
[Load Balancer]
↓
[API Gateway / Services]
↓ ↓
[Cache] [Queue → Workers]
↓ ↓
[Database (primary + replicas)] [Object Storage → CDN]
🚨 Then annotate with the request paths — trace a write and a read on the diagram, pointing as you
go: “A tweet comes in here, the service writes to the database, publishes to the queue, workers fan out
to feed caches…” The annotation is the explanation.
Deep-dive (zoom in): when you go deep on a component, draw just that component’s internals in
detail — the cache’s structure, the sharding scheme, the fan-out logic — without cluttering the main
diagram.
Diagrams for different design types
- Distributed systems → boxes and arrows (the above). Most common.
- Data model → a simple entity list or ER-style sketch (tables, keys, relationships).
- API → a list of endpoints, not a diagram.
- Sequence/flow (a request through services, a saga) → a sequence diagram (participants, ordered
messages) — 🚨 excellent for showing ordering and interactions over time.
- Low-level design → a class diagram (classes, relationships).
Pick the diagram type that fits what you’re showing. Don’t force everything into boxes-and-arrows.
Practical tips for the remote setting
🚨 Remote-specific things that matter more than people expect:
- Narrate while you draw. 🚨 Don’t draw silently — a frozen screen with no voice reads as being
stuck. Say what each box is as you place it: “I’ll add a cache here, in front of the database, for
the read-heavy feed.”
- Point/reference explicitly. “This service here,” “this arrow” — the interviewer is watching your
cursor; use it.
- Keep it legible. Text big enough to read, boxes not overlapping. On a shared canvas, illegible is
useless.
- Don’t over-invest in prettiness. 🚨 A clear rough sketch beats a beautiful slow one. You’re graded
on the design and communication, not the art. Speed and clarity, not polish.
- Erase/reorganize when it gets messy — a diagram that’s become a tangle is worth a quick cleanup,
and doing so shows you value clarity.
🚨 Interview traps
- A chaotic, unlabeled diagram — undermines good ideas.
- Drawing everything at once — start high-level, zoom in.
- Static boxes with no data flow — the flow is the design; show the paths.
- Drawing silently — narrate while you draw.
- Over-investing in prettiness — clarity and speed over polish.
- Not practicing in the tool — fumbling the UI wastes time and reads as flustered.
- Cramming with no space to grow.
🎙️ Soundbites
- “Let me sketch the high-level design first — I’ll start with the major components and we can zoom into
whatever you want to explore.”
- “I’ll trace a write path and a read path on the diagram so you can see how the pieces connect — a
tweet comes in here, writes to the database, and fans out through the queue to feed caches.”
- “I’ll add the cache here, in front of the database, because we established this is read-heavy — leaving
room to add replicas and a queue as we evolve it.”
- “Let me zoom into just the feed generation and draw its internals in detail without cluttering the
main diagram.”
🛠️ Try it
1. Draw ten high-level designs in Excalidraw, timed. For ten case studies, draw the high-level
architecture in under 10 minutes each — clean, labeled, left-to-right, with room to grow. Practicing in
the actual tool builds the fluency that stops you fumbling under pressure.
2. Annotate the paths. For each diagram, trace the write path and read path out loud while pointing,
as you would in the interview. The narration-while-drawing is the skill — practice until it’s natural.
3. Practice progressive detail. Draw a high-level design, then zoom into one component and draw its
internals separately. Feel the difference between a cluttered all-at-once diagram and a clean
zoom-in.
4. Do a full mock in the drawing tool. Run a complete 45-minute mock entirely in Excalidraw/Miro,
including the diagram evolving as the design does. This reproduces the real remote setting and
surfaces the UI-fumbling problems before they cost you in a real interview.
Check yourself
1. Why does the quality of your diagram matter beyond aesthetics?
Because the diagram *is* the shared artifact through which the interviewer understands your design — it's
what you both point at, reason over, and refer back to, so their comprehension of your architecture is
mediated entirely by it. A messy, disorganized, unlabeled diagram makes even a fundamentally good design
hard to follow (the interviewer can't tell what a box is or which way data flows), forces you to explain
everything verbally instead of letting the picture do the work, and — critically — makes *you* appear
disorganized, since a chaotic diagram reads as chaotic thinking. A clean diagram (consistent flow
direction, standard shapes, labels, visible data paths) makes the design legible at a glance, lets you
point at components while discussing them, and signals that you've run real design reviews where clear
communication matters. Since design interviews grade communication alongside technical judgment, and the
diagram is your primary communication channel, its clarity directly affects the outcome — not because
neatness is inherently valued, but because clarity of the diagram equals clarity of the design in the
interviewer's mind. It's not about art; it's that an unclear diagram obscures good ideas and a clear one
showcases them.
2. Why should you start high-level and add detail progressively rather than drawing everything at once?
Because a diagram that attempts to show every component, sub-component, and detail simultaneously becomes
an unreadable tangle — 40 boxes with crossing arrows that neither you nor the interviewer can follow —
whereas a diagram that starts with the 5-7 major components establishes a clear, comprehensible skeleton
that you both agree on before elaborating. Progressive detail mirrors how understanding is built: you
present the overall shape (clients → load balancer → services → cache → database → queue), get the
interviewer oriented and aligned, and *then* zoom into whichever component the discussion focuses on,
drawing its internals in detail without cluttering the main picture. This has several benefits: the main
diagram stays legible throughout; you control the level of abstraction to match the conversation (staying
high-level for the overview, going deep only where it matters); you avoid spending time detailing parts
that turn out not to be the focus; and you demonstrate the ability to reason at multiple levels of
abstraction, which is itself a senior skill. It also aligns with the framework's flow — high-level design
first, then deep dives — so the diagram evolves alongside the conversation rather than presenting an
overwhelming finished picture upfront that the interviewer has to decode. Detail added when it's relevant
is comprehensible; detail dumped all at once is noise.
3. Why is showing data flow more important than just drawing the boxes?
Because the *flow* — how requests and data move through the components — is what actually constitutes the
design, while a set of static boxes is just an inventory of parts that says nothing about how they work
together. Anyone can list "load balancer, service, cache, database"; the design is in the *paths*: does a
read hit the cache first and fall through to the database on a miss? Does a write go to the database and
then publish an event to a queue for asynchronous fan-out? Which service calls which, in what order? The
directed, labeled arrows carrying that flow are where the interesting decisions live and where you
demonstrate that you understand the system as a working whole rather than a pile of components. This is
why tracing a write path and a read path *on the diagram* — pointing at each box as the request moves
through it — is such a strong technique: it turns the static picture into a working system in the
interviewer's mind, reveals the justification for each component (you hit the cache *because* it's
read-heavy), and exposes any gaps (if you can't trace a clean path, a piece is missing or misconnected).
Distinguishing the paths (write path in one colour, read path in another) further clarifies that these
are usually different flows with different design considerations. A diagram of unconnected boxes leaves
the actual design — the interactions — unshown; the arrows and the traced paths are the design.
4. What remote-specific practices matter for diagramming, and why?
Several, because the remote setting changes the dynamics from an in-person whiteboard. **Narrate while
you draw** — in person, the interviewer sees you thinking and gesturing, but on a video call a silently
changing screen with no voice reads as being stuck or lost, so you must speak as you place each element
("I'll add a cache here, in front of the database, for the read-heavy feed"), turning the drawing into a
continuous explanation. **Practice in the actual tool** (Excalidraw, Miro) before the interview and have
a blank canvas open before the call starts, because fumbling with unfamiliar UI — hunting for the
rectangle tool, struggling to draw an arrow — burns real minutes and makes you look flustered, and that
friction is entirely avoidable with practice. **Point and reference explicitly** ("this service,"
"this arrow") since the interviewer is watching your cursor, using it as your pointing finger. **Keep it
legible** — text large enough to read on a shared screen, boxes not overlapping — because an illegible
shared canvas is useless to the person watching. And **don't over-invest in prettiness** — a clear rough
sketch produced quickly beats a beautiful one produced slowly, because you're graded on the design and
its communication, not the art, and time spent perfecting visuals is time not spent designing. These
practices address the specific ways the remote medium can undermine communication that wouldn't be
issues at a physical whiteboard.
5. When should you use a diagram type other than boxes-and-arrows?
When what you're showing is better expressed by a different structure. **Boxes-and-arrows** (components
connected by data-flow arrows) fits the high-level architecture of a distributed system — the most common
case — but other design elements have better representations. A **data model** is best shown as a simple
entity list or ER-style sketch (tables/entities with their key fields and relationships), because the
information is the entities and how they relate, not a flow. An **API** is best shown as a plain list of
endpoints (method, path, purpose), not a diagram at all, since it's an interface specification. A
**sequence or interaction flow** — a request passing through several services, a saga's steps, a
multi-party protocol — is best shown as a *sequence diagram* (participants across the top, ordered
messages flowing down), because it captures *ordering and timing of interactions* that boxes-and-arrows
can't express well; if you're explaining "first the order service does X, then it calls payment, which
responds, then it publishes an event," a sequence diagram makes the ordering visible where a static
architecture diagram would obscure it. A **low-level/object-oriented design** is best shown as a *class
diagram* (classes, their attributes and methods, and relationships like inheritance and composition). The
principle is to pick the representation that most clearly communicates the specific thing you're showing,
rather than forcing everything into the boxes-and-arrows mold — using a sequence diagram for a complex
interaction flow or a class diagram for an LLD question signals that you know the right tool for the
communication task, which is part of communicating well.
Further reading