A use case diagram tells you what the system does and who interacts with it. A use case scenario tells you how it does it — step by step, under specific conditions, from the actor's point of view. Together, the diagram and its scenarios form the complete use case model that drives design, testing, and validation.
This lesson focuses on the industry-standard fully-dressed template, introduced by Alistair Cockburn. It is the format you will produce for every significant use case in a professional project. You will learn each section, why it exists, and how to write it with precision using a clinic booking system as a running example.
Why the Fully-Dressed Format?
Brief use case descriptions (one or two sentences) work for initial scoping. But development teams, testers, and acceptance reviewers need much more:
Exactly what state the system must be in before the use case starts (preconditions).
A numbered sequence of interactions — the main success scenario (MSS) — that describes the ideal, happy-path outcome.
All the ways things can deviate — extensions (also called alternate and exception flows) — each tied to a specific step in the MSS.
The guaranteed postconditions (what is true at the end).
Without these details, developers make assumptions, tests miss edge cases, and the finished system surprises its stakeholders.
The Fully-Dressed Template
The standard sections and their purpose:
USE CASE: <ID> — <Name>
Scope: The system under design (e.g., Clinic Booking System)
Level: User-goal | Summary | Sub-function
Primary Actor: The main stakeholder who triggers the use case
Stakeholders & Interests:
- <Actor>: <What they want from this interaction>
- ...
Preconditions: What must be true before the use case can begin
Postconditions (Success Guarantee): What is guaranteed to be true if the use case succeeds
Main Success Scenario:
1. <Actor action or system response — numbered step>
2. ...
Extensions (Alternate / Exception Flows):
<step>a. <Condition that triggers the deviation>:
<step>a.1 <System or actor response>
<step>a.2 ... (resume at step N, or end with failure)
Special Requirements: Non-functional constraints for this use case
Frequency of Occurrence: How often this use case runs in production
Open Issues: Unresolved questions that must be answered before implementation
Level matters. A user-goal level use case describes one complete transaction that gives an actor a result of business value (e.g., "Book Appointment"). A summary level groups several user goals (e.g., "Manage Appointments"). A sub-function level captures a step used inside another use case (e.g., "Validate Insurance Card"). Write most of your use cases at the user-goal level — that is where the real analysis work happens.
Walking Through a Complete Example: Book Appointment
Imagine a private clinic. A patient calls the reception desk, and the receptionist uses the Clinic Booking System to record the appointment. Let us build the full scenario.
Use case diagram for the Clinic Booking System showing the Book Appointment use case with its include and extend relationships.
Now, here is the complete fully-dressed scenario for Book Appointment:
USE CASE: UC-01 — Book Appointment
Scope: Clinic Booking System
Level: User-goal
Primary Actor: Receptionist
Stakeholders & Interests:
- Receptionist: Wants to record the appointment quickly with minimal data entry.
- Patient: Wants a confirmed slot with the correct doctor at a convenient time.
- Doctor: Wants their schedule to reflect only valid, confirmed appointments.
- Clinic Admin: Wants every appointment linked to a patient record for billing.
Preconditions:
- The Receptionist is authenticated and has the "Booking" permission.
- The patient has an existing record in the system OR consent to create one.
- At least one doctor with the required specialty is on the system.
Postconditions (Success Guarantee):
- A new appointment record exists with status "Confirmed."
- The appointment appears on the doctor's schedule.
- A confirmation SMS/email is sent to the patient.
- An audit log entry records who created the appointment and when.
Main Success Scenario:
1. Receptionist searches for the patient by name or phone number.
2. System displays matching patient record(s).
3. Receptionist selects the correct patient.
4. Receptionist selects the required specialty and preferred doctor.
5. System displays available time slots for the next 30 days.
6. Receptionist selects a slot and enters the reason for visit (optional notes).
7. System validates the slot is still available and checks for scheduling conflicts.
8. System creates the appointment record with status "Confirmed."
9. System sends a confirmation message to the patient via their preferred channel.
10. System displays the confirmation code to the Receptionist.
Extensions (Alternate / Exception Flows):
3a. Patient record not found:
3a.1 System prompts Receptionist to create a new patient record.
3a.2 Receptionist enters name, DOB, contact number, insurance ID.
3a.3 System saves the new record and resumes at step 4.
5a. No available slots for the selected doctor within 30 days:
5a.1 System displays the message "No availability in the next 30 days."
5a.2 Receptionist may select a different doctor of the same specialty.
5a.3 If no alternative exists, use case ends with failure; Receptionist advises patient to call back.
7a. Slot was taken by another booking between steps 5 and 7 (race condition):
7a.1 System displays "That slot is no longer available. Please choose another."
7a.2 System refreshes the availability display.
7a.3 Resume at step 6.
7b. Scheduling conflict detected (doctor marked absent or on leave):
7b.1 System displays "Doctor unavailable on that date."
7b.2 Resume at step 5.
9a. Patient contact details are missing or invalid — confirmation cannot be sent:
9a.1 System logs a warning but does NOT block the booking.
9a.2 System displays "Confirmation could not be sent — please notify the patient manually."
9a.3 Resume at step 10.
Special Requirements:
- Slot selection must respond within 2 seconds (performance).
- The system must comply with HIPAA / local patient-data regulations (security).
Frequency of Occurrence: Approximately 80–150 bookings per day per clinic.
Open Issues:
- Should the system allow double-booking if the second appointment is flagged as "urgent"?
- What is the maximum advance booking window (30 days? 90 days?)?
Reading the Scenario: Key Observations
Study how the scenario is constructed:
Each MSS step is one observable interaction — either the actor does something, or the system responds. Steps are never compound actions (never "actor does X and Y and Z"). If you need three things to happen, write three steps.
Extensions use compound numbering — 3a, 5a, 7a, 7b. The first digit is the MSS step where the deviation can occur. The letter distinguishes multiple conditions at the same step. Nested actions within an extension are 3a.1, 3a.2, etc.
Every extension resolves explicitly — it either resumes at a named MSS step ("resume at step 5") or ends with a success/failure outcome. Leaving an extension hanging is a common defect in amateur scenarios.
Postconditions are guaranteed outcomes, not steps — they describe the state of the world after success, not what the system does. "A confirmation SMS is sent" is a postcondition, not "the system sends an SMS" (that is step 9).
Use active voice with a clear subject. Write "Receptionist selects the patient" or "System validates the slot" — never passive voice like "the slot is validated." Passive voice hides who is responsible, which creates implementation ambiguity.
A Second Example: Return Book (Library System)
Here is a shorter but complete scenario to reinforce the pattern with a different domain:
USE CASE: UC-12 — Return Book
Scope: Library Management System
Level: User-goal
Primary Actor: Librarian
Preconditions:
- Librarian is logged in.
- The book barcode and the borrower record exist in the system.
Postconditions:
- The book status is set to "Available."
- The loan record is closed with a return date.
- Any applicable late fine is calculated and added to the borrower account.
Main Success Scenario:
1. Librarian scans the book barcode.
2. System retrieves the active loan record for that book.
3. System calculates the number of days overdue (if any).
4. System marks the loan as returned and updates the book status to "Available."
5. System displays the return summary (borrower name, due date, fine if any).
6. Librarian confirms the transaction.
Extensions:
1a. Barcode not recognised:
1a.1 System displays "Book not found in catalogue."
1a.2 Librarian checks for manual entry or reports damaged barcode. Use case ends.
2a. No active loan found for the book (may have been returned already):
2a.1 System displays "No active loan on record for this book."
2a.2 Librarian investigates manually. Use case ends.
3a. Book is overdue — fine applies:
3a.1 System calculates fine using the configured daily rate.
3a.2 System adds fine to the borrower account.
3a.3 Resume at step 4.
The three core sections of a fully-dressed use case and how extensions branch from the main success scenario.
Common Mistakes to Avoid
Writing UI steps instead of logical steps. "Receptionist clicks the blue Save button" is a UI specification, not a use case step. Write "Receptionist saves the appointment." The design will determine which button to use.
Skipping preconditions. Developers assume they can call a use case from any state. Explicit preconditions prevent that assumption and expose missing authentication/authorisation requirements.
Incomplete extensions. An extension that says "system shows an error" with no resolution is not complete. Every extension must state where execution resumes or confirm the use case ends.
Conflating alternate flows with exception flows. An alternate flow is a valid variation that still achieves the goal (e.g., patient pays cash instead of card). An exception flow is an error condition that prevents normal completion (e.g., payment gateway timeout). Both use the same extension notation, but understanding the distinction helps you write more complete postconditions.
Do not gold-plate every use case. Reserve the fully-dressed format for high-risk and high-complexity interactions. Simple administrative functions (delete a record, update a profile field) may need only a brief or casual format. Spend your analysis effort where errors are most costly.
Key takeaway: The fully-dressed use case scenario — preconditions, main success scenario, extensions, postconditions — is the primary contract between analysts and development. Preconditions define the entry gate. The MSS defines the happy path. Extensions capture the real world, where things go wrong. Postconditions define what the system promises to deliver. Together, they eliminate ambiguity before a single line of code is written.