Chapter 18

Draw the body plan

Draw parts, messages, jobs, and refusals before arranging equipment or writing code.

On this page

The equipment was in the garage, some of it still boxed. The obvious next move was placement: press here, cabinet there, drill the holes, begin.

Before arranging the room, write down the system.

Not a floor plan. Not an inventory. A drawing of the parts that have to exist, what each part does, what it refuses to know, and what crosses between them.

Try it before reading further. A system turns accepted components and prepared cases into ammunition you would trust, preserves enough identity to learn at the range, and remains a safe tenant of the garage. What parts must exist?

Take five minutes. The gap between that list and the equipment catalog is the work of this chapter.

A noun is not yet a part

"Press," "tumbler," and "notebook" name things. They do not say where those things belong in the organism.

A designed part needs four statements:

  1. its one job;
  2. what it receives;
  3. what it returns or permits;
  4. what it refuses to know.

The refusal is not an afterthought. It stops adjacent work from leaking into the nearest noun.

Part One job Receives and returns Refuses to know
Material storage hold components safely with lot identity intact receives identified primers, powder, bullets, and brass; releases material with identity processing order and station behavior
Case preparation turn recovered cases into candidates for the readiness line receives mixed brass; returns prepared cases and explicit exits load recipes and ammunition-production mechanics
Ammunition production execute one identified load specification on admitted cases and components receives production-ready cases, component lots, and one specification version; returns cartridges or a located halt how case preparation establishes readiness
Quality control own admission and release decisions receives material plus criteria; returns admission, reasons, or disposition how machines perform transformations
Instruments make hidden state observable at decisions receives a thing to observe; returns evidence policy, disposition, and transformation
Records and specifications preserve policy versions, provenance, and learning receives adopted standards, authored load versions, batch facts, and range results operating stations or moving material
Maintenance preserve equipment capability receives a machine and maintenance trigger; returns evidence of serviceability production schedule and load policy
Finished-goods storage hold released batches with identity intact receives released ammunition plus batch identity; returns the same identified batch for range use how the batch was produced

Read the final column as a set of settled arguments.

When 9mm appears after cleaning, the tumbler does not inherit caliber policy. When the magnifier reveals a crack, the lens does not inherit disposition. When range performance disappoints, the notebook does not decide the next load. The appropriate owner receives evidence and makes the decision.

A part without principled ignorance is not designed yet. It is only named.

Draw the crossings

Parts become a system through messages and material handoffs:

The arrows need labels. "Quality control talks to production" is too vague. Does it send a boolean, a prepared-case guarantee, a list of reasons, or an operator command? Those result shapes create different systems.

The external crossings need the same care.

Supply sends component identity in. If primer and powder lot numbers are discarded with their packaging, the later batch record cannot reconstruct them. The range receives an identified batch and returns observations. If identity does not survive that round trip, performance cannot find the load decision that produced it.

Boundaries are where meaning can be laundered away. Label what crosses before choosing storage or method names.

Trace one piece without opening a box

Take one recovered case and follow the arrows:

candidate
  -> free of range dirt
  -> classified
  -> sized, inspected, swaged, and prepared
  -> cleaned of processing residue and dried
  -> admitted at readiness
  -> produced under one load version
  -> finally inspected
  -> released with batch identity
  -> used at the range
  -> observation returns to the record

At this altitude we do not decide how cleaning works, how a Ruby object stores facts, or how a database versions a load. Those are implementation questions inside parts.

This book calls the drawing the body plan: what parts exist, what talks to what, where the joints and boundaries are, and what each part refuses to know. DNA is how a part works internally. Good DNA cannot rescue a creature whose organs are connected incorrectly.

The drawing test is simple:

  • If you cannot draw the system, its relationships are hidden.
  • If the arrows go everywhere, the body plan is tangled.
  • If one box owns all arrows, you found the god object.
  • If one box can be replaced through the same message without redrawing the rest, the joint may be real.

The last claim still needs an observed swap. A box on paper is not proof of a joint. Rejections and swaps adds two ways to interrogate the drawing.

Do not inflate the drawing

The table has eight parts because the real system needs eight different jobs. It is not an instruction to create eight services, base classes, or database schemas.

One physical part may serve more than one local operation. The Dillon does case preparation when it wears the sizing configuration and will later do ammunition production when it wears the live-loading configuration. The responsibilities remain distinct even though the chassis is shared. One software process may likewise contain several parts separated by objects and message protocols. One part may later split when test pressure reveals two owners. The body plan names responsibility and connection before deployment topology.

Nor is every important decision architecture. Bench coordinates can be expensive and emotional without changing the boxes or arrows. Decisions have gravity will identify the load-bearing subset. For now, preserve the distinction: this chapter draws what exists and connects. It does not rank permanence.

Draw your parts and refusals

Return to the subsystem from Norma's car must fit. Make two artifacts.

First, the table:

Part Job Receives Returns Refuses to know

Then draw the arrows. Label every arrow with data, material, authority, or a question and result. Mark external systems at the edge.

Interrogate it:

  1. Can one real item be traced from entry to release?
  2. Who owns each decision, and who designs how it is satisfied?
  3. What guarantee crosses each gate?
  4. Which object knows a vendor, framework, or global that the rest should not?
  5. What does every major part refuse to know?
  6. Does any part receive a promise no upstream part owns?

Do not extract classes yet. The drawing is a proposal for review. Code would make its unexamined assumptions more expensive.

What the drawing cannot prove

The preparation side of the reloading drawing has now carried a bounded set through case feeding, decapping, full-length sizing, headspace inspection, replacement, and swaging. The right side remains provisional. Final cleaning and drying have not released that set to loading, the primer, powder, seating, and crimp stations have not produced live ammunition, recovery has not been executed, and the range round trip has no produced batch.

The drawing makes those intended relationships inspectable. It does not turn them into observed facts. Reality may add a part, remove an arrow, or reveal that two jobs belong together.

That is one reason to draw early. Paper is the cheapest place for the creature to change shape.