Interactive concept map·Course structure·Worked-example project

A model end-to-end UX case study · BCSAI · IE University

Redesigning a city-transit ticketing app — the whole process, one artifact at a time.

This is what the group project from Sessions 19–24 looks like when it's done well: research before pixels, every decision traceable to an HCI principle, and a measurable usability gain at the end. No code — just the deliverables a UX team actually produces.

Product

CityHop — transit ticketing

Sessions exercised

2–24 (most of the course)

Method

Garrett's 5 planes

Outcome

SUS 54 → 82

01 Project overview

The brief, the constraint, and the deliverable — the "Strategy plane" stated in one breath before any design begins.

CityHop is a fictional mid-size city's official transit app. Riders can see times and routes, but buying a ticket is where they bail: 41% of sessions that reach the purchase screen end without a completed payment. Our job is to redesign the buy-a-ticket experience so that an anxious, time-pressured rider on a crowded platform can buy the right ticket in under 30 seconds — and trust that they did.

Strategy in one line. Help riders buy the correct ticket fast and confidently, on a phone, often one-handed, often under stress. Everything below this line — scope, structure, skeleton, surface — is judged against it (Garrett, 2011).
Goal

Reduce purchase abandonment

From 41% to under 20% at the payment step, without removing options power-users rely on.

Constraint

Phone, one-handed, hostile context

Bright sun, poor signal, a train arriving. The design must survive its worst-case environment, not its best.

Deliverable

A validated prototype + report

Personas, journey map, IA, lo-fi → hi-fi wireframes, a usability study with a SUS score, an accessibility audit, and an iteration log.

Success metric

Task time & SUS

Median time-to-purchase and System Usability Scale score, measured before and after redesign.

How this maps to the 5 planes

Strategy §1 goal & metrics Scope §2 prioritised requirements Structure §4 IA & flows Skeleton §5 wireframes Surface §5 hi-fi visual design

02 Discovery & user research

Before deciding what to build (Scope), we found out who we're building for and why the current app fails them. Methods chosen with the NN/g research-method framework in mind.

Methods used

A mix of attitudinal + behavioural

9 contextual interviews at three stations across the morning peak (qualitative, attitudinal — why people struggle).

Analytics funnel review of 12 weeks of sessions (quantitative, behavioural — where they drop).

5 moderated usability sessions on the existing app (behavioural — what people do, not what they say).

1 heuristic evaluation against Nielsen's 10 (expert review, cheap signal before recruiting users).

Why these methods

Triangulation beats any single source

Interviews tell us why; analytics tell us how much; usability sessions catch problems users can't articulate. Krug's point in Rocket Surgery Made Easy: five users surface most serious issues, so we tested small and often rather than running one big study late.

Heuristic before users. The expert review found obvious violations (no error recovery, hidden fares) for the cost of one afternoon — we fixed those first so test participants' time wasn't wasted on known bugs.

What we learned — top findings

Finding 01 · severe

"Which ticket do I even need?"

7/9 interviewees couldn't tell a single ride from a day pass without reading dense text. Zone names meant nothing to them.

Finding 02 · severe

Fare is hidden until the end

Price only appears after selecting payment. Users abandoned rather than risk an unknown charge — a violation of visibility of system status.

Finding 03 · moderate

Tiny tap targets, moving train

The ticket-type selector used 28px text links spaced 6px apart. On a moving train, mis-taps were constant (a Fitts's Law failure).

Finding 04 · moderate

No proof of purchase at a glance

After paying, users weren't sure it worked. They re-opened the app repeatedly at the gate — anxiety, not confidence.

Finding 05 · minor

Sign-in wall before browsing

The app demanded an account before showing any fares, adding friction for the most time-critical task (the single ride).

Finding 06 · minor

Colour-only status

Active vs. expired tickets differed only by a green/red dot — invisible to ~8% of male riders with colour-vision deficiency.

From findings to scope. These six findings become the prioritised requirements on the Scope plane. Findings 1, 2 and 4 attack the "confidence" half of the goal; 3 and 5 attack the "fast" half. If everything were a "must", nothing would be — so we ranked them with MoSCoW.

Scope plane — MoSCoW prioritisation

PriorityRequirementWhy it's here
MUSTShow fare up-front, before paymentDirectly fixes the #1 abandonment cause (Finding 02).
MUSTPlain-language ticket types with a recommended defaultRemoves the "which ticket?" paralysis (Finding 01).
MUSTLarge, well-spaced tap targets (≥48px)Survives the moving-train context (Finding 03, Fitts).
MUSTUnmistakable post-purchase confirmation + active-ticket screenBuilds confidence at the gate (Finding 04).
SHOULDGuest checkout for single ridesRemoves the sign-in wall for the most urgent task (Finding 05).
SHOULDStatus shown by icon + label, never colour aloneAccessibility baseline (Finding 06, WCAG 1.4.1).
COULDSaved favourite routes; Apple/Google PaySpeeds up repeat users; not blocking the core goal.
WON'TSocial features, trip gamification, in-app chatOut of scope this release — pure scope-creep risk.

03 Personas & journey map

Two personas distilled from the interviews — concrete people to design for, not a vague "the user". Then a journey map of the primary persona buying a ticket on today's app, exposing the emotional low points.

N

Nadia, 24

Commuter · primary persona

"I just want the right ticket before the train comes — I don't want to think."
  • ContextCatches the 8:12 daily; phone in one hand, coffee in the other.
  • GoalBuy a single ride in seconds, every weekday, without re-reading the options.
  • FrustrationNever sure she picked the cheapest valid ticket; the price only shows at the end.
  • Tech comfortHigh — but zero patience for friction on a task she does 10× a week.
T

Tomás, 61

Occasional rider · secondary persona

"I take the tram twice a month. I forget how it works every single time."
  • ContextVisits the city centre occasionally; bright outdoor light, reading glasses sometimes off.
  • GoalFigure out which ticket covers his trip without asking a stranger.
  • FrustrationSmall text, jargon zone names, fear of being fined for the wrong ticket.
  • Tech comfortModerate — needs larger type, plain language, and forgiving controls.
Why two, not five. Nadia represents the high-frequency / low-attention case; Tomás the low-frequency / low-confidence case. A design that serves both extremes serves almost everyone in between. Tomás also pushes accessibility (type size, contrast, plain language) into the core design, not a bolt-on.

Journey map — Nadia buys a single ride (current app)

Mapping the existing experience makes the pain points impossible to ignore — and tells us exactly where to intervene.

Stage1 · Open app2 · Find tickets3 · Choose type4 · Pay5 · At the gate
ActionUnlocks phone on the platform, opens CityHopHunts for the "Buy" entry point among route infoReads ticket names, guesses which zone she's inForced to sign in, then enter card, then sees priceOpens app again to show the ticket, unsure it's valid
Thinking"Train's in 3 min.""Where's the buy button?""Is 'Zone A' me? What's a day pass cost?""Why do I need an account to buy one ticket?""Did that even work?"
Emotion🙂😐😟😣😰
Pain pointBuy action buried (Finding 02)Jargon + no recommended default (Finding 01)Sign-in wall + hidden fare (Findings 02, 05)No confident confirmation (Finding 04)
OpportunityResume to a "Buy" homePersistent primary "Buy a ticket" CTARecommend "Single ride – €2.40" by defaultGuest checkout, fare shown firstBig active-ticket screen with live validity

💡 The emotional curve dips hardest at stages 3–5 — exactly where our four MUST requirements land. The journey map didn't just describe the problem; it prioritised the work.

04 Information architecture & user flows

The Structure plane. A card sort with 8 participants told us how riders actually group functions — so the navigation matches their mental model, not the transit authority's org chart.

Card sort result

Riders think in 3 buckets

Open card sort (8 participants, 18 cards) converged on three top-level groups: Buy, My tickets, and Travel info. "Account" was consistently seen as settings, not a primary destination — confirming that the sign-in wall was an IA mistake.

Match between system and the real world (Nielsen #2): labels use rider language — "My tickets", not "Entitlements".
Sitemap

Flat, shallow, buy-first

The primary task (buy) is reachable in one tap from anywhere. Depth is kept to two levels so users never feel lost — supporting recognition rather than recall (Nielsen #6).

CityHop (home / tab bar) │ ├── Buy a ticket ← primary, always one tap away │ ├── Single ride (recommended default, fare shown) │ ├── Day pass │ ├── Multi-day / zones (progressive disclosure — advanced) │ └── Review & pay (guest or account) │ ├── My tickets │ ├── Active ticket (large, live validity countdown) │ └── History / receipts │ ├── Travel info │ ├── Routes & times │ └── Service alerts │ └── Account (settings — deliberately NOT in the buy path) ├── Payment methods ├── Saved routes └── Accessibility & text size

Primary flow — buy a single ride (redesigned)

Four taps, fare visible from tap one, no mandatory sign-in. Compare to the old flow's seven steps with a sign-in detour.

Open app Tap "Buy a ticket" Single ride €2.40 (pre-selected) Confirm & pay (guest) Active ticket shown
Need a different ticket? Expand "More ticket types" …rejoins Confirm & pay
Progressive disclosure. The single ride — chosen by ~70% of sessions — is the default. Power options exist but stay folded away, so the common case is effortless and the rare case is still possible (Nielsen #8, aesthetic & minimalist design).

05 Wireframes — lo-fi → hi-fi

The Skeleton plane, then the Surface plane. We sketch arrangement first (low fidelity, deliberately ugly so feedback targets layout not colour), validate it, then layer visual design on the validated structure.

Lo-fi · Buy screen — paper-grade wireframe. The point is hierarchy and tap-target size, not aesthetics.

┌─────────────────────────────┐
│  ☰   CityHop          ⓘ      │  ← lightweight header
├─────────────────────────────┤
│                             │
│   Buy a ticket              │  ← H1, plain language
│                             │
│  ┌───────────────────────┐  │
│  │  ● Single ride        │  │  ← RECOMMENDED, pre-selected
│  │    Valid 90 min       │  │     big card, full-width tap target
│  │    € 2.40             │  │  ← FARE VISIBLE NOW (fixes Finding 02)
│  └───────────────────────┘  │
│  ┌───────────────────────┐  │
│  │  ○ Day pass    € 6.00 │  │
│  └───────────────────────┘  │
│   ▸ More ticket types       │  ← progressive disclosure
│                             │
│  ┌───────────────────────┐  │
│  │     Confirm & pay  →   │  │  ← 56px primary CTA, thumb zone
│  └───────────────────────┘  │
│        Continue as guest     │  ← no sign-in wall
└─────────────────────────────┘

Lo-fi · Active ticket screen — the confidence payoff. Fixes Finding 04.

┌─────────────────────────────┐
│  ←  Active ticket           │
├─────────────────────────────┤
│   ✓  VALID                  │  ← icon + WORD, never colour alone
│                             │
│   Single ride               │
│   ███████████  23:41 left   │  ← live countdown = system status
│                             │
│   [ animated validity band ]│  ← hard to screenshot/forge
│                             │
│   Show this to the inspector│
└─────────────────────────────┘

Design rationale — why each choice

Fitts's Law

Big targets, thumb zone

The primary CTA is a 56px full-width button at the bottom — large W, short D for a thumb. Ticket cards are full-width too. On a moving train this is the difference between a tap and a mis-tap (Finding 03).

Hick's Law

Fewer visible choices

Only two ticket types show by default; the rest hide behind "More". Fewer options → faster decision. Decision time grows with the number of alternatives, so we reduced them for the common case.

Gestalt — proximity

Grouping by spacing

Fare sits inside the same card as the ticket name, so they read as one unit. Generous gaps separate distinct choices, so users perceive discrete options at a glance.

Visibility of status

Fare & validity always shown

Price appears the instant a ticket is highlighted; the active ticket shows a live countdown. Nielsen heuristic #1 — the system keeps the user informed at every moment.

Hi-fi · Surface plane — applying the visual system

With structure validated, we apply the design tokens: a single brand hue, an 8px spacing scale, 12px corner radius, and a type ramp topping out at 28px for the H1 so Tomás can read it in sunlight. Described hi-fi:

06 Usability test & SUS results

A moderated usability test of the hi-fi prototype with 8 participants (5 Nadia-type, 3 Tomás-type). Three task scenarios, think-aloud protocol, success/time/error recorded, followed by the 10-item System Usability Scale questionnaire.

Test tasks

#Task scenarioSuccess criterion
T1"You need to get into town now. Buy a single ride."Valid single-ride ticket purchased
T2"You'll be sightseeing all day. Get the cheapest ticket that covers that."Day pass selected & purchased
T3"An inspector asks for your ticket. Show it's valid."Reaches active-ticket screen unprompted

Results — before (old app) vs. after (prototype)

MetricOld appRedesignChange
T1 success rate63%100%+37 pts
T1 median time-to-purchase71 s22 s−69%
T2 success rate50%88%+38 pts
T3 success (found proof of validity)38%100%+62 pts
Mean errors / participant2.40.5−79%
Simulated purchase abandonment41%14%goal met (<20%)

System Usability Scale (SUS)

SUS converts ten 1–5 agree/disagree items into a 0–100 score. ~68 is the industry average; 80+ is the top ~10% of products (the "A" range).

54

old app · grade F

82

redesign · grade A

+28 points — crossing from "below average / not acceptable" to "excellent".

Synthesis — what the data says

  • The goal was met: simulated abandonment fell from 41% to 14%, under the 20% target.
  • Confidence was the biggest win: T3 jumped 38% → 100%. Showing validity unmistakably ended the "did it work?" anxiety.
  • Speed followed structure: the 69% time drop on T1 came from the recommended default + visible fare + guest checkout — not from "making it prettier".
  • Two issues remained (see Iteration §08) — usability testing is never one-and-done.

07 Accessibility audit — WCAG 2.2 AA

Accessibility isn't a phase at the end — Tomás's needs shaped the design from §03 onward. This checklist is the formal verification against WCAG 2.2 Level AA. "Not extra; the baseline."

1.4.3 Contrast (Minimum)

All body text ≥ 4.5:1 and large text/CTA ≥ 3:1 against their backgrounds. Transit-blue CTA on white measures 5.9:1.

PASS
1.4.1 Use of Color

Ticket validity uses a ✓/✕ icon + the word "VALID"/"EXPIRED", not colour alone — fixes Finding 06.

PASS
2.5.5 / 2.5.8 Target Size

Every interactive control is ≥ 48×48px with ≥ 8px spacing — comfortably above the 24px AA minimum (and aligned with Fitts).

PASS
1.4.4 Resize Text

Layout reflows without loss of content up to 200% OS text size — verified for Tomás's larger-type setting.

PASS
4.1.2 Name, Role, Value

Ticket cards are labelled radio controls; the CTA announces "Confirm and pay, button" to screen readers (VoiceOver/TalkBack tested).

PASS
3.3.1 / 3.3.3 Error Identification & Suggestion

A declined payment states what went wrong in text and offers a fix ("Card declined — try another card") — Nielsen #9, help users recover.

PASS
2.4.7 Focus Visible

Initial prototype lost the keyboard focus ring on the custom cards. Added a 2px high-contrast focus outline in iteration. Resolved.

FIXED
1.3.1 Info & Relationships

Countdown was announced as raw digits. Added an aria-live label ("23 minutes remaining"). Resolved in iteration.

FIXED
Inclusive design dividend. Every choice made for Tomás (bigger type, plain language, icon+label status, generous targets) also made the app faster for Nadia. Designing for the edges improved the centre — the core argument of Horton & Quesenbery's A Web for Everyone.

08 Iteration & next steps

UX is a loop, not a line. The test surfaced two residual problems; here's what changed in round two, plus where the project goes next.

Round 1 — issues found
  • Day-pass discoverability: 2 Tomás-type users didn't notice "More ticket types" and bought a single ride for an all-day trip.
  • Guest-checkout receipts: guest buyers had no way to retrieve a receipt later for expenses.
  • Lost focus ring on custom cards (WCAG 2.4.7).
  • Countdown read as bare digits to screen readers (WCAG 1.3.1).
Round 2 — changes made
  • Surfaced a "Travelling all day?" hint next to the single-ride card that expands the day-pass option in context.
  • Added an optional "email me the receipt" field on the guest confirmation — no account required.
  • Restored a 2px high-contrast focus outline on all interactive cards.
  • Added an aria-live region announcing remaining validity in words.

Next steps

Validate

Round-2 test & A/B

Re-test the day-pass hint with occasional riders; A/B the guest-vs-account conversion in production.

Could-haves

Apple/Google Pay + saved routes

Promote the COULD requirements now the core flow is proven — shave more seconds off repeat purchases.

Measure live

Funnel analytics

Instrument the real funnel to confirm the lab's 14% abandonment holds in the wild across signal conditions.

Multi-platform

Smartwatch glance

Explore a watch "active ticket" complication for the at-the-gate moment (Sessions 17–18, multi-platform).

09 Mapping to course learning outcomes

Every learning objective from the syllabus, and the exact section of this project where it's demonstrated. This is the "show, don't tell" half of the assessment.

LO1

Understand the foundations & user-centred design principles of HCI.

Structured the whole project on Garrett's 5 planes — see §1.
LO2

Create user personas and scenarios to inform interface design.

Two evidence-based personas + task scenarios — §3, §6.
LO3

Conduct user research with appropriate methods.

Interviews, analytics, heuristic eval, MoSCoW synthesis — §2.
LO4

Design and prototype user-friendly interfaces.

IA + flows + lo-fi → hi-fi wireframes with rationale — §4, §5.
LO5

Design and run usability evaluations.

Task-based moderated test + SUS, before/after metrics — §6.
LO6

Apply accessibility & inclusive design.

WCAG 2.2 AA audit; inclusive design shaped the core, not a bolt-on — §7.
LO7

Reflect, iterate, and communicate results.

Iteration log, next steps, and this entire documented case study — §8.

10 References

The course's core sources that ground each decision above.

Garrett, J. J. (2011). The Elements of User Experience: User-Centered Design for the Web and Beyond (2nd ed.). New Riders. — the five-planes framework structuring this project.
Nielsen, J. (1994). 10 Usability Heuristics for User Interface Design. Nielsen Norman Group. — visibility of status, error recovery, minimalist design.
Fitts, P. M. (1954). The information capacity of the human motor system in controlling the amplitude of movement. Journal of Experimental Psychology, 47(6). — target size & distance rationale.
Hick, W. E. (1952). On the rate of gain of information. Quarterly Journal of Experimental Psychology, 4(1). — limiting visible choices in the buy flow.
Krug, S. (2010). Rocket Surgery Made Easy: The Do-It-Yourself Guide to Finding and Fixing Usability Problems. New Riders. — small, frequent usability tests.
Brooke, J. (1996). SUS: A "quick and dirty" usability scale. In Usability Evaluation in Industry. — the System Usability Scale used in §6.
Nielsen Norman Group. When to Use Which User-Experience Research Methods. — the method-selection framework in §2.
Horton, S. & Quesenbery, W. (2014). A Web for Everyone: Designing Accessible User Experiences. Rosenfeld Media. — inclusive-design argument in §7.
W3C (2023). Web Content Accessibility Guidelines (WCAG) 2.2. — the AA success criteria audited in §7.