One bus shelter, twenty-two design methods

The brief. The Mill Street stop is a pole in the pavement. Riders stand at the kerb in the rain because they cannot see the bus coming from anywhere else. Design a shelter, and its arrival display, for under 25 thousand.

Each method below is applied to that same brief. The first nine are the design methods lineage, in the order they appeared. The next thirteen are later arrivals, some descended from it and some not. The examples are invented for illustration; the formats are the real ones.

1962

Morphological chart

Fritz Zwicky's method, brought to design at the first Design Methods conference

What it believes. A design is one choice per function. List the functions, list the options, and the whole space of designs is laid out in front of you.

Where it breaks. The chart assumes the rows are independent. A hedge windbreak and a mains-powered display are not independent of the roof, and nothing in the chart tells you which of the hundreds of combinations is any good.

1963

Systematic method

Bruce Archer, Royal College of Art

What it believes. Design is a sequence of stages with a checkable output at each one. Analysis comes before ideas, and a written performance specification is the contract.

Analytical phase

  1. Programming. Agree the brief, the budget, and who signs off.
  2. Data collection. Count boardings by hour. Measure pavement width. Log wind direction for a month.
  3. Analysis. Write the performance specification (below).

Creative phase

  1. Synthesis. Outline three proposals that meet every line of the specification.
  2. Development. Build one bay as a prototype and test it against the specification.

Executive phase

  1. Communication. Issue fabrication drawings and a maintenance schedule.

Performance specification, extract

RefRequirementTest
P1Seated rider sees a bus 150 m upstreamSightline survey
P2Dry seat in rain driven from the south-westHose test at 30°
P31.8 m clear pavement behind the shelterTape measure
P4Installed cost under 25 thousandTender price

Where it breaks. You cannot write P1 until someone has already half-imagined a shelter with a seat in it. The specification smuggles in a solution, which is what Archer himself later conceded.

1964

Decomposition

Christopher Alexander, Notes on the Synthesis of Form

What it believes. List every way the form could fail to fit its context. Link the requirements that interact. Then cut the graph where the links are fewest, and solve each piece with its own diagram.

1 2 6 3 4 5 7 8 9

Nine requirements, twelve interactions.

  1. Rider sees the bus coming
  2. Driver sees the rider
  3. Shelter from wind and rain
  4. Somewhere to sit
  5. Pavement stays clear
  6. Feels safe at night
  7. Arrival times readable
  8. Survives vandalism
  9. Cheap to maintain

Where it breaks. The three dashed links are the ones the method throws away, and the first of them, seeing against sheltering, is the entire brief. Alexander made this objection himself a year later in "A City Is Not a Tree".

1969

Satisficing search

Herbert Simon, The Sciences of the Artificial

What it believes. Design is search through a space of alternatives. You cannot look at them all, so set aspiration levels and stop at the first candidate that clears every one.

Where it breaks. Everything interesting happened before the search started: someone chose these three measures and this order of generation. Sightlines are not a column, so no setting of the sliders can find the answer to the brief.

1970

IBIS

Werner Kunz and Horst Rittel

What it believes. There is no correct shelter, only positions that people argue for. Record the issues, the positions taken on them, and the arguments, and the design is whatever survives.

IssueWhere should the Mill Street stop go?
PositionOutside the clinic
ForA third of riders are clinic patients.
AgainstThe pavement there is 2.1 m wide. A shelter leaves no room for a wheelchair to pass.
IssueCan the clinic give up its front planter?
PositionYes, in exchange for the transit authority maintaining the forecourt.
AgainstThe clinic board meets quarterly. The budget expires first.
PositionAt the grocery corner
ForWide pavement, and the shop lights it until ten.
AgainstThe bus would stop inside the junction's sightline.
IssueShould the route run along Mill Street at all?
PositionMove it one block east, where there is already a lay-by.
AgainstThat puts a hill between the stop and the clinic.

Where it breaks. The map grows faster than anyone can read it, and the third issue shows why: every problem turns out to be a symptom of another one. Keeping it tidy takes a trained facilitator, and the people who pay that cost are not the ones who benefit later.

1977

Pattern

Christopher Alexander and colleagues, A Pattern Language; then the software version, 1994

What it believes. Good places resolve recurring conflicts between human forces. Name the conflict, state the resolving arrangement loosely enough that it never comes out the same way twice, and link it to the patterns above and below it.

Waiting in sight of the road

This pattern helps complete a neighbourhood stop and gives shape to the small public places along a street.

A person waiting for a bus wants two things that pull apart: to get out of the weather, and to keep watching the road. A shelter that serves only one makes the wait anxious or miserable.

Watch any walled shelter in the rain. Half the riders stand outside it, at the kerb, looking upstream. The walls that keep them dry are the walls that hide the bus.

Therefore:

Open the shelter toward oncoming traffic. Put the solid wall behind the seat and on the windward side only. Turn the seat so that someone sitting down can see two blocks up the road without standing.

bus solid wall, windward open toward traffic angled seat

Then give the seat a back, put a light at the open edge, and place something worth reading where the eye rests between buses.

Observer, for the arrival display

Intent
Let many displays update when the arrival feed changes, without the feed knowing about displays.
Applicability
Use when a change to one object requires changing others, and you do not know how many.
Participants
Subject (ArrivalFeed), Observer (Display), ConcreteObserver (ShelterDisplay, PhoneApp).
Consequences
Loose coupling between feed and displays. Updates can cascade unexpectedly.
Related patterns
Mediator, Singleton.

Same section headings, different subject. The forces here belong to the code and the programmer. No rider appears, nothing says what to do next, and the entry sits in a catalogue rather than a language.

Where it breaks. A pattern is only as good as the claim that the conflict is real and recurring, and Alexander's test for that was whether the place feels alive. Architects found the test unscientific. Programmers dropped it.

1983

Reflective practice

Donald Schön, The Reflective Practitioner

What it believes. Designers do not solve a given problem. They make a move, the situation talks back, and the problem gets renamed. The method is that conversation.

  • Move. Put the bench against the back wall, under the deepest cover.
  • Back-talk. From the bench you see the far kerb and nothing else. People will stand up to look.
  • Reframe. This is a place for watching in comfort. Staying dry is secondary.
  • Move. Swing the bench thirty degrees toward the traffic and drop the upstream wall.
  • Back-talk. The angle leaves a wedge behind the bench, out of the walking line.
  • Move. Keep the wedge. It is where the pushchair goes.

Where it breaks. It describes what skilled designers do and gives a beginner nothing to follow. It cannot be audited, scheduled, or handed to a committee.

2004

Double Diamond

UK Design Council; the house diagram of design thinking

What it believes. Diverge before you converge, twice: once to find the right problem, once to find the right answer. Anyone can do it with real users and a wall of notes.

DiscoverDefine DevelopDeliver
DiscoverRide the route for a week. Riders stand at the kerb in the rain, next to an empty shelter two stops down.
DefineHow might we let a rider stop watching the road?
DevelopCountdown display. Angled seat. A light that tells the driver someone is waiting. A chime at two minutes.
DeliverCardboard bay and a tablet taped to a post. Test for five mornings. Keep the countdown and the angled seat.

Where it breaks. The diagram is true of nearly any project in hindsight and tells you little in advance. Run as a workshop, it produces a wall of notes and a prototype nobody has budget to build.

2011

Decision record

Michael Nygard's architecture decision records; IBIS, shrunk until it stuck

What it believes. Nobody will maintain a map of the whole argument. One short note per decision, written by the person who decided, kept beside the thing it describes, will actually get written.

7. The shelter display pulls arrival times

Status
Accepted. Supersedes record 3.
Context
The display runs on a solar panel and a mobile data link that drops several times a day. A pushed feed needs a connection held open, and a display that misses a push shows a wrong time with no sign that it is wrong.
Decision
The display asks for times every 30 seconds. If its last answer is older than 90 seconds, it shows the timetable and says so.
Consequences
Times can be up to 30 seconds stale. The radio wakes more often, which costs battery in winter. A dropped link degrades to a printed-timetable equivalent instead of a lie.

Where it breaks. It records the winning position and its consequences, and loses the positions that lost. Rittel would say the argument is the part worth keeping.

Later arrivals and outsiders

Thirteen more, from 1988 to now. Some descend from the methods above. Others came in from manufacturing, safety engineering and economics, and never heard of Rittel or Alexander.

1988

Inverse design

Bendsøe and Kikuchi's topology optimisation; now routine in photonics and protein design

What it believes. Do not draw the form. State the loads, the limits and the objective, and let an optimiser remove every bit of material that is not doing work.

Design spaceA 2.4 m by 1.1 m box where the roof bracket may exist
FixedBolted to the post along the left edge
LoadsSnow at 1.5 kN/m² along the top; wind uplift as a second case
LimitsTip deflection under 12 mm; at most 30% of the box filled
ObjectiveMaximum stiffness for the steel used
design space, 100% filled 28% of the steel, 11 mm at the tip

Where it breaks. The result is optimal for the two load cases in the table and for nothing else. A child swinging on the tip is not a load case. Neither is the fabricator, who has to cut that shape, unless you add manufacturability as a limit. And nothing here asks whether a cantilever was the right roof.

1995

Set-based design

Toyota's practice, described by Ward, Liker, Cristiano and Sobek

What it believes. Picking one design early and iterating on it is the slow way. Carry whole sets of options forward. Let each specialty strike out only what it cannot live with. Decide at the last responsible gate, and never reopen a gate.

    The point-based alternative would have chosen a steel cantilever with an LED sign in week one, and met the December power problem in week nine with the steelwork already ordered.

    Where it breaks. Carrying several options costs real money until the last gate, so it needs an organisation patient enough to pay for prototypes it will throw away. It also only narrows the sets you started with. An option nobody listed in week one never appears.

    1998

    Assurance case

    Goal Structuring Notation, Tim Kelly, University of York

    What it believes. A design is acceptable when you can lay out the argument for it, from top claim down to evidence someone can inspect. Every goal is either broken into sub-goals by a stated strategy, or closed by a piece of evidence. Anything else is marked as undeveloped.

    Goal G1The shelter is acceptably safe for riders and passers-by
    Context C1Mill Street: 30 mph limit, pavement 2.1 to 3.4 m, lit until 22:00.
    Strategy S1Argue over each hazard in the hazard log
    Assumption A1The hazard log is complete.
    Goal G2Broken glazing does not cause injury
    Evidence E1Impact test certificate for the laminated panels.
    Goal G3The roof stays on in a one-in-fifty-year wind
    Evidence E2Structural calculation, revision C.
    Evidence E3Pull test on the prototype bay, 14 March.
    Goal G4A waiting rider is visible to an approaching driver at night
    UndevelopedNo evidence yet. Light survey not commissioned.

    Where it breaks. You build the case for the conclusion you already want, so it invites confirmation bias. The whole structure also hangs from assumption A1. If a hazard is missing from the log, the argument is complete, well evidenced, and wrong.

    1999

    Lightweight formal methods

    Leslie Lamport's TLA+; property-based testing from QuickCheck, 2000

    What it believes. Before building, write down what must always be true. Then let a machine try every sequence of events it can find to break that statement. The bugs worth finding live in orderings no person would think to try.

    The display from the decision record, as a specification

    VARIABLES clock, fetchedAt, mode, trueAge
    
    FetchOk  == /\ fetchedAt' = clock
                /\ trueAge'   = 0
                /\ mode'      = "live"
                /\ UNCHANGED clock
    
    Tick     == /\ clock'   = clock + 1
                /\ trueAge' = trueAge + 1
                /\ mode'    = IF clock' - fetchedAt > 90
                              THEN "timetable" ELSE mode
                /\ UNCHANGED fetchedAt
    
    Brownout == /\ clock' = 0      \* the panel loses power at dusk
                /\ UNCHANGED <<fetchedAt, mode, trueAge>>
    
    NeverLie == mode = "live" => trueAge <= 90

    What the model checker reports

    StepActionclockfetchedAttrueAgemode
    1FetchOk5005000live
    2Brownout05000live
    3 to 93Tick, 91 times9150091live

    NeverLie is violated. After a power dip the clock restarts at zero, so the age works out as 91 minus 500. That is never greater than 90, and the display shows stale times as live until the link returns.

    The same property as a test against the real code

    @given(lists(one_of(tick(), fetch_ok(), fetch_fail(), brownout())))
    def test_never_shows_stale_as_live(events):
        d = Display()
        for e in events:
            d.apply(e)
        assert not (d.mode == "live" and d.true_age() > 90)
    
    # Falsifying example, shrunk:
    #   [fetch_ok(), brownout(), tick(91)]

    Where it breaks. The checker proves things about the model, and the model is whatever you thought to write down. Brownout is in this one only because somebody had seen a panel fail at dusk. And the property that matters most on Mill Street, that a seated rider can see the bus, cannot be stated in this language at all.

    2004

    STPA

    Nancy Leveson, MIT; hazard analysis from systems theory

    What it believes. Accidents are rarely a broken part. They are a control problem: someone issued the wrong action, or the right one at the wrong time, because their picture of the situation was wrong. So draw who controls what, then interrogate every control action four ways.

    RiderDriverDisplayBusArrival feed is seen, hails brakes, opens doors position times time shown

    Control action: the driver stops at the shelter

    Unsafe whenScenario
    Not providedA rider is waiting but the bus drives past. The rider is seated behind the solid wall and the driver never saw them.
    Provided wronglyThe bus stops while people sheltering from rain are standing in the kerb lane.
    Too lateThe rider stands only when the bus is level with the shelter. The driver brakes hard; standing passengers fall.
    Ended too soonThe doors close before a rider who was seated has reached them.

    Requirements that fall out

    R1. A seated rider is visible to a driver from 60 m upstream, day and night.
    R2. The display gives two minutes' warning, so that riders stand before the bus is in view.
    R3. Standing room under cover lies behind the kerb line.

    Where it breaks. It is slow and it is thorough, and the output is a long flat list of requirements with no ranking and no budget attached. It also takes the control structure as given. If the diagram leaves out the dispatcher who tells drivers to skip stops when running late, so does the analysis.

    2012

    Quadratic voting

    Glen Weyl and colleagues; mechanism design applied to group choice

    What it believes. Design the rule for choosing, and good choices follow. One person, one vote hides how much each person cares. Give everyone the same budget of credits and charge the square of the votes cast on any one item, so that caring a lot is allowed but expensive.

    You are one resident with 25 credits. Spend them.

    Where it breaks. Two neighbours who split their votes between them pay less than one person casting the same total, so the rule is only as strong as the check that each ballot is one real person. And someone still wrote the four items on the ballot. Moving the route off Mill Street is not among them.

    2012

    Opinion clustering

    Pol.is; used in Taiwan's vTaiwan consultations

    What it believes. A thousand people cannot hold a debate, but they can each write a sentence and tap agree, disagree or pass on other people's sentences. Group people by how they voted. Then look for the statements that every group supports, and start there.

    104 residents, 37 statements. Two groups emerge from the votes: group A, 41 people, mostly clinic users; group B, 63 people, mostly commuters and shopkeepers. Share agreeing:

    DividesThe stop should be outside the clinic.
    Group A92%
    Group B18%
    DividesThe grocery corner is safer after dark.
    Group A30%
    Group B85%
    SharedI would sit down if I knew when the bus was coming.
    Group A88%
    Group B81%
    SharedBuses drive past people who are waiting.
    Group A83%
    Group B77%
    SharedThe stop as it is blocks the pavement.
    Group A74%
    Group B79%

    Where it breaks. It tells you where agreement lies and stops there. Somebody still has to turn "I would sit down if I knew" into a shelter, and somebody with a budget has to have promised in advance to act on the result. Without that promise it is a survey.

    2013

    Event Storming

    Alberto Brandolini; Event Modeling, Adam Dymitruk, 2018

    What it believes. The people who understand a business never share one room or one vocabulary. Put them at a long wall with sticky notes. Start with events only, written in the past tense, in time order. Arguments about wording are the point, and each unresolved one gets a red note.

    EventCommandActorPolicyExternal systemRead modelHot spot
    Dispatcher
    Publish trip
    Trip scheduled
    Vehicle GPS
    Vehicle position reported
    Whenever a position arrives, recalculate
    Recalculate arrival
    Arrival time predicted
    Next arrivals at this stop
    Display
    Fetch arrivals
    Arrivals fetched
    Fetch failed
    After 90 s with no fetch, fall back
    Display fell back to timetable
    Dispatcher
    Divert route
    Route diverted
    Who corrects the printed timetable the display falls back to?
    Bus arrived at stop
    Bus departed stop
    If the bus drove past without stopping, did it arrive?

    One slice, written as Event Modeling would

    GivenTrip scheduled; Vehicle position reported, 1.2 km from Mill Street
    WhenRecalculate arrival
    ThenArrival time predicted: route 14, Mill Street, 4 minutes

    The session is run in passes: events first, then the commands and actors that cause them, then policies, then boundaries drawn around clusters that share a vocabulary. Those clusters become the candidate services.

    Where it breaks. The wall records one afternoon and the people who came. A dispatcher, an engineer and a planner produced this one, and no rider did, so the timeline ends when the bus departs and says nothing about the person left on the bench. It is also tempting to treat the notes as a design and code them directly.

    2016

    Opportunity solution tree

    Teresa Torres, continuous discovery

    What it believes. Teams jump from a target straight to a feature. Force a layer in between: the needs you heard in interviews, in the customer's words. Compare several solutions under one need, and test the assumption each one rests on before building any of them.

    OutcomeWinter boardings at Mill Street up 15%
    Opportunity"I never know if I've just missed it."
    Opportunity"I can't see the road from the seat."
    SolutionAngled seat, upstream side left open
    AssumesRiders will accept more wind in exchange for the view.
    TestRemove one panel from the shelter at the next stop for two weeks. Count who sits.
    SolutionMirror on the lamp post
    AssumesA bus is recognisable in a 40 cm convex mirror at 150 m.
    TestBorrow a mirror from the depot. Ten riders, one morning.
    Opportunity"The timetable is never right."
    SolutionCountdown display
    AssumesRiders trust the number enough to stop watching the road.
    TestTablet on a post, five mornings. Count riders seated against riders at the kerb.
    AssumesA solar panel can run it through December.
    TestBench test at the December light level for one week.
    Opportunity"I don't like waiting there after dark."
    Not explored this quarter. Parked, with the three interview quotes attached.
    Opportunity"There's nowhere for the pushchair."
    Not explored this quarter.

    The working rhythm is a weekly interview, one opportunity chosen at a time, three solutions compared, and the riskiest assumption tested first.

    Where it breaks. The outcome at the root came from the transit authority and the tree has no way to question it. The opportunities come only from people you could interview, which means people still standing at the stop. Those who gave up and now drive are not on the tree.

    2019

    Shape Up

    Ryan Singer, Basecamp; draws openly on Alexander's Notes

    What it believes. Estimates are fiction. Fix the time you are willing to spend, called the appetite, and let the scope move. A senior person shapes the work first: rough enough to leave room, solved enough that the known traps are marked. Then a small team gets six uninterrupted weeks.

    Problem
    Riders at Mill Street stand at the kerb because the display, when it works, shows times they have learned not to trust.
    Appetite
    Six weeks, one programmer and one designer. If it cannot be done in six, it is the wrong shape.
    Solution, as a breadboard
    Arrivals screen
      - next three buses, minutes only
      - age of data, shown when over 30 s
            |
            |  no fetch for 90 s
            v
    Timetable screen
      - scheduled times from the printed table
      - "Live times unavailable"
            |
            |  fetch succeeds
            v
    Arrivals screen
    Rabbit holes
    Clock resets after a power dip: use time since boot and treat any reset as stale. Diverted routes: out of scope, show the timetable.
    No-gos
    No maps. No adverts. No per-rider alerts. No second language in this cycle.

    Hill chart, week four

    Night dimmingLegible at 10 mFetch and fallback Figuring it outGetting it done

    A dot that stays on the left for two weeks is the signal to cut that scope, not to extend the cycle.

    Where it breaks. Everything depends on the shaper, who must already understand the problem well enough to mark the traps. The method says little about how they got there. It also assumes you own your roadmap. A contractor with a signed specification cannot let scope move.

    2023

    Generate and select

    Common practice with generative models; Simon's search with the cost of generation removed

    What it believes. When a model can produce forty candidate designs in a minute, drawing one carefully is the wrong use of a person. Write the checks a good design must pass. The checks are the specification, and the design is whatever survives them.

    task: display layout, 800 x 480, one colour
    generate: 40 candidates
    
    checks:
      - glyph_height_mm >= 40        # legible from the seat
      - arrivals_shown >= 3
      - shows_data_age == true
      - contrast_ratio >= 7
      - render_ms <= 50              # on the shelter's own hardware
      - judge: "Would a first-time rider know when the
                next bus to the clinic comes? Answer yes or no."
    After checkLeft
    Generated40
    Glyph height26
    Three arrivals19
    Data age, contrast11
    Render time9
    Model judge4

    A person looks at the last four and picks one. When a bad layout gets through, the fix is a new check, and all forty run again.

    Where it breaks. Candidates drift toward whatever the checks reward: forty-millimetre numerals with everything else unreadable. The model judge is a stand-in for a rider and has never waited in the rain. And the old question returns in a new place. Whoever writes the checks is the designer, and holds the authority.

    2024

    Machine-kept rationale

    Language models applied to the capture problem that sank IBIS

    What it believes. Nobody would keep the argument map because keeping it was a job. Let a model listen to the meeting, file each remark as an issue, position or argument, link it to the line where it was said, and point out what is missing.

    Transcript, site meeting

    1PlannerSo are we agreed it goes outside the clinic?
    2Clinic managerA third of your riders are our patients. Half of them use sticks.
    3EngineerIt's 2.1 metres there. With a shelter a wheelchair can't get past.
    4Shop ownerThe corner's safer anyway.
    5Clinic managerWe could lose the planter. I'd have to ask the board.

    What the model files

    IssueWhere should the stop go? line 1
    PositionOutside the clinic line 1
    ForA third of riders are patients, many with limited mobility. Line 2.
    AgainstPavement is 2.1 m; a shelter blocks wheelchairs. Line 3.
    IssueCan the planter be removed? Raised at line 5. Open; depends on the clinic board.
    PositionAt the corner line 4
    Flag"Safer" was asserted with no reason given. Safer from traffic, or after dark? Ask.
    FlagLine 1 was phrased as settled. Three of four speakers then raised objections. Not recorded as a decision.
    FlagOverlaps with an issue filed on 12 March, "Pavement width on Mill Street". Merge?

    Where it breaks. The model files what was said. The person who sat silent through the meeting, and the objection made afterwards in the car park, are not in the map. A map that cost nobody any effort is also a map nobody feels they own, and its errors are plausible enough to go unread.

    2025

    Malleable software

    Ink & Switch and others; end-user programming with a model as the builder

    What it believes. The people who live with a tool know what is wrong with it and have never been able to change it. Keep a fixed core that must not break. Let everything else be reshaped by its users, in plain words, with a model doing the construction.

    Requests from the street. Tap to apply or remove.

    Fixed coreThe arrival feed. The fall-back to the timetable when data is stale. Minimum numeral size.
    Open to changeLayout, which lines appear, extra local information, wording.

    Where it breaks. It reopens the oldest question on this page. A display on a public street has many users, and the method does not say which of them may change it, or who removes the shop owner's line when the shop closes. The line between core and open is also drawn by whoever built it.