A2.04 · Acceptance · dive 2
The example is the spec
A concrete example is not documentation about the specification. The example is the specification — one artifact read three ways and executed once.
The Confirmation of the three Cs (A2.02), written Given/When/Then, is the one artifact product, the Operator, and the Author all read — and the same artifact a test runner executes. One scenario, three readings, no translation between them. Switch the reader on the right to see who uses the same words for what.
One scenario, three readers · switch the reader
Concrete, not abstract
An example works because it is concrete. “Enrolled exactly once; a second enrol does not change the count” has one reading. “Enrolment works correctly” has many: two readers can both accept it and still mean different things, which is the argument the criterion was meant to end. A criterion with several defensible readings is a criterion nobody can accept against, because acceptance turns on whose reading wins.
Switch the view to compare a Confirmation in abstract prose with the same Confirmation as a concrete scenario. The abstract form is shown in burgundy. The readout reports how many defensible readings each form admits — many for the abstract claim, one for the concrete example — and whether it can be accepted against, computed from the model.
Abstract claim, or concrete example? · switch the form
A concrete example has one reading and can be accepted against; an abstract claim has many and cannot — acceptance should turn on a fact, not on whose “correct” wins.
Examples as the spec on the Portal
Take the Portal rung “enrol in a course”. Its Confirmation, promoted to the shared
definition of done, is one scenario. Product agrees this is the behaviour; the Operator accepts the
rung against it; the Author builds Portal.ID.generate(:enrolment) and the
enrol path to satisfy it. The same words serve all three — there is no separate “spec
document” for the rung, because the example is the spec.
# The Confirmation (A2.02) — now the shared definition of done for the rung. Scenario: enrolling twice does not duplicate the enrolment Given a learner already enrolled in "Functional Programming" When the learner enrols in "Functional Programming" again Then the learner appears in their enrolments exactly once # product reads it as the promise · the Operator accepts against it · the Author builds to it. id = Portal.ID.generate(:enrolment) # the Author's build target — one enrolment id
The principle
Make the acceptance criterion a concrete example, not a prose claim — the example is the spec, shared by everyone and executed as the test.
On the Portal
The enrol Confirmation, written Given/When/Then, is the rung’s spec — product’s promise, the Operator’s acceptance check, and the Author’s build target, in one artifact.
The example is the specification: written as a scenario, the Confirmation is one shared artifact — promise, acceptance check, and build target — with a single reading.
Recap — the spec is the example
A concrete example is not documentation about the spec; it is the spec. Written as a scenario, the Confirmation becomes one shared artifact — product’s promise, the Operator’s acceptance check, and the Author’s build target — with a single reading and no translation between the three. Abstract prose admits many readings and cannot be accepted against. With the example fixed as the spec, the closing dive turns it into the acceptance test itself.
Next in A2.04: A2.04.3 · Scenarios to tests — happy and sad paths, each an acceptance test the Author implements against and the Operator accepts against, and the seed of the A4 spec layer and its harness.
References
Primary sources for examples as the shared specification, and where it connects in the course.
Sources
- Adzic, G. — Specification by Example — concrete examples as the single, shared, executable specification.
- Cucumber — Gherkin reference — the scenario form the shared example is written in.
- Cohn, M. — User Stories Applied — the Confirmation as the story’s acceptance check.
Related in this course
- A2.04 · Acceptance criteria with Given/When/Then — the module hub.
- A2.04.1 · Given / When / Then — the previous dive.
- A2.04.3 · Scenarios to tests — the next dive.
- A2.02 · The Connextra form and the three Cs — the Confirmation this promotes.
- A1.04 · Two layers: roadmap and specs — the spec layer the scenario pins to.
- A2 · Decomposition — the chapter.