Should a traceability record be generated from links in the work, or maintained as its own document?
answer
- Two ways to produce the same table
- One is computed, one is written
- Cost paid once, or paid per change
- Judgements have no field to derive from
basics
~20 sGenerate it wherever the links already live on the work itself: a generated view can only show what the work records, and costs nothing to reproduce. An authored document shows more, but is only as true as its last edit.
solid answer
~50 sA **derived** record is a query over reference fields the work already carries on its items, cases, changes and defects, and it has no existence between readings. An **authored** record is a document somebody writes and edits. The difference in what they can be asked is sharp: a derived record shows exactly the facts the work stores and is current by construction, while an authored one can show judgements that have no field anywhere, and vouches for none of them. Costs mirror that. Derivation is paid up front in identifier discipline, a genuinely required reference field, and one query; afterwards it is free. Authoring is paid on every rename, result and new statement, forever, and those edits get skipped exactly when delivery is busy. The workable answer is to generate the spine, author only the judgements, and label which columns are which.
code
pseudocode · 12 linesFOR each criterion IN requirements:
cases = ALL cases WHERE verifiesCriterion = criterion.id
results = ALL results WHERE case IN cases
EMIT ROW(
criterion.id,
criterion.text,
ids(cases),
newest(results).verdict,
newest(results).buildId,
ALL defects WHERE violatesCriterion = criterion.id
)
# nothing is stored; the row exists only while readgo deeper
Know that the same table can either be written by a person or computed from references the work already holds, and that a computed one is current whenever it is produced while a written one is only as fresh as its last edit.
Explain what each arrangement can and cannot be asked to show, and where each pays its cost: once and structurally for the derived one, on every change for the authored one.
Show the hybrid you would actually run: generate the spine, author only the judgements, mark authored columns, snapshot at decision points. Be ready to diagnose a generated table full of empty cells.
Own the trade between paying up front for identifier and reference discipline and paying forever in manual upkeep, and be ready to say which parts of the record you will refuse to fund at all.
## Two ways to produce the same table The same rows can be produced in two very different ways, and the choice determines what the result can be asked and what it costs to keep. **Derived (generated).** Nobody writes the table. Each work item, case, change and defect record already carries a reference field, and the table is a query over those fields, run when someone wants to look. The record has no existence between readings. **Authored (maintained).** Somebody writes and edits a document whose rows mirror the work. It exists as a file with a version history, and it says what its last editor said. ## What each can be asked to show | Question | Derived | Authored | |---|---|---| | Which checks name this criterion? | Yes, from the reference fields | Yes, as of the last edit | | What did each check last do, and on which build? | Yes, from stored results | Only if somebody copied it in | | Is this row current? | Trivially: it was computed just now | Unanswerable from the document itself | | Why was partial verification accepted here? | No: the work stores no such field | Yes, that is what free text is for | | What did we claim on the day we shipped? | Only if the query is snapshotted and kept | Yes, that is what a version history is | | What changed in the record since last month? | Only by comparing two snapshots | Yes, from the edit history | The rule underneath the table is short: **a derived record can show exactly the facts the work stores, and nothing else; an authored record can show anything and vouches for nothing.** Most of what people want from the record is in the first category, which is why derivation is the default answer. The exceptions are judgements, and judgements are the reason an authored column survives at all. ## Cost profiles Derived costs are **up front and structural**: stable identifiers, a reference field that is actually required, and one query to write. After that, producing the record is free, and it is free again tomorrow. The failure mode is not staleness but silence: a criterion nobody referenced simply does not appear as verified, which is honest but only useful if somebody looks. Authored costs are **per change and permanent**: every renamed case, every new result, every added criterion is a manual edit, and the edits are cheapest to skip when the delivery is busiest. The failure mode is a document that reads confidently and describes last month. ## Where the link lives, and who reads it there The two arrangements differ in a way that has nothing to do with the table and everything to do with attention. Where the link is **a field on the work item itself**, it sits in front of every person who opens that item for any reason, so a wrong or missing reference is spotted incidentally by whoever is doing the next piece of work. Where the link set is **a separate document**, it is read on purpose, by the small number of people whose job brings them to it, and usually near a release. The first arrangement has many casual readers and no owner; the second has one owner and few readers. That is the practical reason the field-on-the-item arrangement stays closer to the truth: it is checked constantly by people who are not checking it. ## The practical answer: generate the spine, author the exceptions The arrangement that works in real teams is not a pure choice. 1. **Generate the spine.** Criterion, verifying cases, latest verdict, build under test, linked defects. All of it exists in the work already; querying it is cheaper than agreeing on it. 2. **Author only what the work cannot hold.** A rationale for accepting something partially verified, a note that a criterion is verified by an argument rather than a check. These have no field anywhere else. 3. **Mark authored columns as authored**, with the date and the person. A reader can then apply different trust to the derived spine, which is as fresh as the query, and to the authored margin, which is as fresh as its last edit. 4. **Snapshot at decision points.** If somebody will later need to know what was claimed on the day a version shipped, store the generated table as it stood, rather than keeping a hand-maintained document year-round to serve that one need. Two failure modes to name if asked. **Deriving from weak references** produces a clean-looking table full of nulls, and the temptation is then to fill them in by hand, which quietly converts the whole thing into an authored document with a machine's typography. **Authoring what could be derived** produces a table that disagrees with the work, and when the two disagree, people believe the table, which is the more expensive of the two mistakes.
- What does a derived record do badly, and how do you cover that?It cannot hold a judgement, because the work stores no field for one: why partial verification was accepted, or why a statement is verified by argument rather than by a check. Cover it with a small authored margin beside the generated spine, marked as authored with a date and a person, so a reader knows which part is as fresh as the query and which part is as fresh as its last edit.
- How do you answer what was claimed on the day a version shipped, if nothing is stored?Snapshot the generated table at the decision point and keep the snapshot. That gives a fixed record of the claim without paying to maintain a hand-edited document year-round for a need that arises a few times a release. The snapshot is honest in a way a maintained document is not, because it is a computation over the work as it actually stood.
- The generated table comes out full of empty cells. What now?Treat it as a report on the reference discipline, not on the record. Empty cells mean the fields are optional, or identifiers are unstable, or people are linking by title. Fix that upstream. The tempting alternative, filling the cells in by hand, quietly converts the whole thing into an authored document that merely looks machine-produced, which is the worst of both arrangements.
A generated record is a photograph of the work and an authored one is a painting of it: the painting can include things the camera cannot see, and it stops resembling the subject the moment either of them changes.
saying these in an interview costs you the question
- Maintains by hand what the work already records
- Believes a table over the work when they disagree
- Fills empty derived cells in manually to look complete
- Assumes generation is free without identifier discipline
- Cannot say which columns are authored and which computed