ContentsAct I · DecideShrink the work
Move 14
Find the walking skeleton
It is not a prototype and it is not a spike. It is the day the architecture connects, and the rule that it never comes apart again.
Two weeks in, the reconciliation view has a query that works in a test, an endpoint that works in Postman, and a component that works against a fixture. Nothing has ever run end to end. Everyone would tell you the project is going well, and everyone would be guessing.
Alistair Cockburn’s definition is narrower and more useful than the version that gets repeated:
“A Walking Skeleton is a tiny implementation of the system that performs a small end-to-end function. It need not use the final architecture, but it should link together the main architectural components.”
The important half is the second sentence. This is not about delivering user value early, which is move twelve’s argument. It is about the day your architectural components are wired together, which is a different date and usually a much later one.
The thing that makes it a skeleton and not a spike
Cockburn is explicit about the distinction, and it is the whole chapter:
“A spike is ‘the smallest implementation that demonstrates plausible technical success.’ The spike typically takes between a few hours and a few days to complete, and is thrown away afterwards.”
A skeleton is not thrown away. It is production code, with tests, that stays running for the rest of the project. Everything else grows on it.
Which gives you the standing rule this move actually contributes. Cockburn describes his own project, systems passing messages around a ring: the technical leads decided to connect them in the first week so a single message could travel the whole loop, and then to keep that working every week afterwards.
That second commitment is the one people skip. Connecting things once is a demo. Keeping them connected is an architecture.
WHAT IT IS, CONCRETELY THE RULE THAT MAKES IT WORTH IT
client-server it is production code, not a spike
one screen, to the database, it has regression tests
and back it runs in CI from week one
it is never allowed to go red
multi-tier or multi-platform for more than a day
a working connection
across the tiers from that week on, "does it
connect?" is answered by a build
message-passing systems rather than by an opinion
one message travelling
the whole ring
Cockburn’s own examples, and none of them is a feature. A screen to the database and back does not do anything a user wants. It proves the wire exists.
The move
In the first week, make one trivial thing travel the entire system, then never let that stop working.
The same idea has other names
Worth knowing, because you will meet them and wonder whether they are different things. Cockburn says they are not: the Poppendiecks call it a spanning application, and Hunt and Thomas call it tracer bullets.
The Pragmatic Programmer tip is a good one to keep: use tracer bullets to find the target, because they “let you home in on your target by trying things and seeing how close they land.” And their neighbouring tip draws exactly Cockburn’s line, from the other side: prototype to learn, where “the value lies not in the code you produce, but in the lessons you learn.”
That is the whole taxonomy. Prototypes and spikes are for learning and get deleted. A skeleton is for connecting and gets kept.
What it costs
No measured evidence supports end-to-end-first over layer-first. I could not find any, and I am not going to imply it exists. The argument here is about when you discover integration problems, not about a demonstrated improvement in outcomes.
It front-loads the least satisfying work. Week one is deployment configuration, environment variables, a certificate, and the ninety minutes where nothing works for a reason that turns out to be a trailing slash. There is nothing to show for it except a build that passes, and you will be asked what you have been doing.
And it can calcify. A skeleton built to link components “need not use the final architecture”, in Cockburn’s words, but skeletons have a way of becoming the final architecture by inertia. Write down which parts were expedient, or the temporary auth shim will still be there in two years.
Try this week
Ask one question about the thing you are currently building: has anything at all travelled from the real front end, through the real API, to the real database, and back, in the real deployed environment?
If the answer is no, that is this week’s work, and it does not matter what it carries. A hardcoded string. A hello. One row that always says the same thing.
Then wire it into CI so that it runs on every commit, and treat it as broken-build-level urgent when it fails.
You will have replaced the most common question on a software project, is it nearly working?, with a build status. That question has never once been answered accurately by a human being.