What is System Design?

Design how the whole service works together

Imagine a small appointment-booking service. A customer sees available times, chooses one and receives a confirmation. The screen is only one part of the service: something must check availability, save the booking and make sure another customer cannot take the same time.

System design decides how these parts work together to meet the user’s needs. It includes where information lives, how requests travel, how failures are handled and how the system is operated. The design may be one application and one database; it does not need to begin with many services.

One booking, several responsibilitiesThe customer requests a booking. The application checks the request and writes to the database. After a successful durable write, the application returns confirmation and arranges follow-up notification.CustomerBrowser or appChooses Tuesday 10:00Booking applicationValidate the user andslotAsk the database tosaveDatabaseBooking table with aunique slot ruleCommit beforeconfirmationApplication responseConfirmed after commitConflict if the slot istakenNotificationEmail or SMS follows thesaveDelivery can be retried One booking, several responsibilitiesThe customer requests a booking. The application checks the request and writes to the database. After a successful durable write, the application returns confirmation and arranges follow-up notification.CustomerBrowser or appChooses Tuesday 10:00BookingapplicationValidate the user andslotAsk the database tosaveDatabaseBooking table with aunique slot ruleCommit beforeconfirmationApplicationresponseConfirmed aftercommitConflict if the slotis takenNotificationEmail or SMS followsthe saveDelivery can beretried
The customer’s screen is only the starting point. The application, data store and follow-up work must cooperate so the booking result is reliable.

What you’ll learn

  • Follow a booking request across the parts of a service.
  • Identify where durable data and important decisions belong.
  • Explain a design choice using requirements and failure behaviour.

Trace one action from start to finish

Begin with a user action: “book Tuesday at 10:00.” The browser or app sends a request to an application. The application checks who may book, validates the time and asks the database to save the reservation.

A database stores records the service needs later. A request asks another component to do something; a response reports its result. These names describe roles, not mandatory separate machines.

Draw arrows and label what moves along them. “Save booking” is more useful than an unexplained line. Mark which step must succeed before the user sees a confirmation. A good diagram explains behaviour, not just a collection of product logos.

Follow one booking requestChoose a slot, send a request, validate the input, commit the reservation, then respond to the customer.1Choose aslotCustomerselectsTuesday10:002SendrequestBrowsersends thebooking totheapplication3ValidateCheck theuser andinputTry therequestedslot4CommitApply theunique slotruleSave durably5RespondConfirm asavedbookingExplain anyconflict Follow one booking requestChoose a slot, send a request, validate the input, commit the reservation, then respond to the customer.1Choose a slotCustomer selectsTuesday 10:002Send requestBrowser sends thebooking to theapplication3ValidateCheck the user andinputTry the requestedslot4CommitApply the unique slotruleSave durably5RespondConfirm a savedbookingExplain any conflict
A request journey is easier to reason about when each step has a clear responsibility and the “must succeed before confirmation” point is visible.

Decide which result is authoritative

Two customers can both see the same available time before either booking finishes. Checking availability on the screen is therefore not enough. The saved reservation needs a rule that prevents both requests from owning that time.

For this example, a database uniqueness rule and a correctly handled transaction can enforce one booking for one slot. A transaction groups related data changes under the database’s guarantees. The application must handle a conflict and tell the second customer the slot is no longer available.

Keep the booking in durable storage before reporting success. A process’s memory can disappear on restart. Confirmation emails and convenient cached lists can be derived from the saved booking, but are not substitutes for the booking record.

The database decides who gets the slotCustomer A and Customer B request Tuesday at 10:00. The application submits both attempts to the authoritative store. In this illustrated outcome, Customer A wins the unique slot and Customer B receives a conflict.Customer ARequestsTuesday 10:00Customer BRequestsTuesday 10:00BookingapplicationReceives bothattemptsUses thedatabase resultAuthoritativestoreBooking table +unique slotruleTuesday 10:00belongs to AA: acceptedBookingcommittedApplicationconfirmsB: conflictSame slotalready ownedApplicationexplainsconflict The database decides who gets the slotCustomer A and Customer B request Tuesday at 10:00. The application submits both attempts to the authoritative store. In this illustrated outcome, Customer A wins the unique slot and Customer B receives a conflict.Customer ARequests Tuesday10:00Customer BRequests Tuesday10:00BookingapplicationReceives bothattemptsUses the databaseresultAuthoritativestoreBooking table +unique slot ruleTuesday 10:00belongs to AA: acceptedBooking committedApplication confirmsB: conflictSame slot alreadyownedApplication explainsconflict
When two people race for the same slot, the reliable decision must come from the authoritative write path, not from whichever screen looked available first.

Choose the order of the booking flow

Build a small decision record

When do you confirm the reservation?
How does the confirmation email relate to booking?

Compare the visible consequences. With JavaScript enabled, choose an option in each scenario to assemble your decision record.

This is an exploratory design exercise. It does not run infrastructure, measure capacity or replace the lesson’s quiz.

All choices and their consequences are visible. Select one choice in each scenario to assemble a design note; revise it as assumptions change.

Explore two choices for the same small service. The cards show what each choice implies. Select an option in both scenarios and read the combined design note.

For this lesson, a confirmed reservation must survive an application restart. Email delivery may happen later, but the user must receive an honest booking result. The exercise changes a design note, not a running database.

Ask what happens when a step fails

A database failure, a slow network or an unavailable email provider can interrupt the journey. State what the user sees, which work has already happened and how the service recovers.

A missing response does not prove the operation failed. If the booking committed but the response was lost, repeating the request needs to recognise the same intended action or safely check the saved result. This is part of retry and duplicate-handling design.

Look beyond the happy path. A service needs deployment, logs and metrics, backups and a way to investigate incorrect behaviour. More components add more relationships to understand; add them when a requirement justifies the work.

Separate the booking from its response and emailA failed database write means no confirmed booking. A lost response after commit leaves the client unsure. Failed email delivery does not undo a committed booking.Database write failsBooking was not durablysavedExplain the failure; offera safe retryNo confirmed bookingResponse is lostBooking may already becommittedCheck saved state andhandle duplicate retriesOutcome unknown to clientEmail delivery failsBooking may already becommittedTrack and retry follow-updeliveryA committed booking stillstands Separate the booking from its response and emailA failed database write means no confirmed booking. A lost response after commit leaves the client unsure. Failed email delivery does not undo a committed booking.Database writefailsBooking was notdurably savedExplain the failure;offer a safe retryNo confirmed bookingResponse is lostBooking may alreadybe committedCheck saved state andhandle duplicateretriesOutcome unknown toclientEmail deliveryfailsBooking may alreadybe committedTrack and retryfollow-up deliveryA committed bookingstill stands
Failure handling becomes clearer when you separate “did the booking commit?” from “did the user see the result?” and “did the follow-up action complete?”

Use tools to express a decision

A notebook, a diagram tool and a short decision record are enough to begin. Write the problem, assumptions, chosen approach, alternatives and the main cost or limitation. Someone else should be able to follow the reasoning without hearing the original conversation.

The C4 model offers diagram views at different levels of detail. Azure’s architecture guidance connects requirements with architecture choices. These are references for communicating and evaluating designs, rather than instructions to use every cloud component. Official sources checked 6 October 2026.

Use capacity estimation when volume matters, and measure actual behaviour when choosing software or hardware. A box labelled “database” does not state its guaranteed throughput.

A small toolkit for a clear decisionNotes capture requirements and assumptions, a diagram explains the flow, and a decision record describes the chosen approach and trade-offs.NotebookProblem andrequirementsAssumptionsDiagramComponents and requestflowFailure pointsDecision recordChosen approachAlternatives andtrade-offs A small toolkit for a clear decisionNotes capture requirements and assumptions, a diagram explains the flow, and a decision record describes the chosen approach and trade-offs.NotebookProblem andrequirementsAssumptionsDiagramComponents andrequest flowFailure pointsDecision recordChosen approachAlternatives andtrade-offs
You do not need a huge tool stack to begin. Clear notes, a readable diagram and a short decision record already support a useful review.

Check your design reasoning

Two customers request the same slot. Which rule should decide whether the second reservation is allowed?
Choose one answer. You can try again.

Answer and explanation

A reliably enforced rule at the authoritative booking write.

Both screens can be stale; the committed state must prevent the conflict.

Check your design reasoning

What makes a system diagram useful?
Choose one answer. You can try again.

Answer and explanation

It explains responsibilities, labelled flows and relevant failure behaviour.

A diagram should help people reason about how the service meets its goals.

Connect responsibilities with the pattern group

Use the design-pattern guide to distinguish local object structure from service-level coordination. The difference matters when a diagram promises durable or cross-process behaviour.

Begin with one honest request journey

System design connects a user’s action with the components, data and operations that make it work. Trace one request, choose where the authoritative result lives and describe failures as carefully as success.

Start with the simplest arrangement that meets the requirements. Explain the choices, validate their assumptions and add complexity when it solves a concrete problem.

Reaching the recap and completing the quizzes are separate milestones.

    Next lesson: Why learn system design? Solve problems across the whole service →