Determine the object before selecting the mechanism.
Teams often choose frameworks, schemas, services, APIs, queues, classes, tickets, and deployment structures before agreeing on what the system must preserve. Software Before Code reverses that order.
Code is not the first software artifact.
Software engineering begins with a bounded representation of a domain and a theory of lawful change inside it. State is the information required for lawful continuation; implementation is where that representation becomes executable.
Software is a computational representation of a domain joined to an executable process. Code is the operational material of that representation, not the whole engineered object.
- 01DOMAIN
- 02REPRESENTATION
- 03EXECUTABLE TRANSFORMATION
- 04DELIVERED ARTIFACT
- 05WITNESS / CONSEQUENCE
Most software arguments begin downstream.
Those decisions become brittle when the team has not yet found the distinctions, invariants, and closure conditions the mechanisms are supposed to protect.
Nine questions before architecture hardens.
Representation
What world does the system claim to represent, and what does it omit?
Distinction
Which differences must remain visible, and which may be collapsed?
Boundary
Where does interaction occur and under what crossing conditions?
Admissibility
Which states, operations, transitions, and compositions are lawful?
Invariant
What must remain true?
Closure
What makes the process complete enough for the domain to recognize, verify, and use?
Defect
Which forgotten distinction returns as failure, residue, exception, or harm?
Witness
Who or what verifies the system's claim?
Consequence
Who receives the gain, cost, risk, or repair burden?
Distinction-to-Closure Software Analysis
- 01
Bound the domain
- 02
Inventory distinctions
- 03
Build the categorical map
- 04
Extract the grammar
- 05
Select representations
- 06
Draw translation and commutation diagrams
- 07
Build the delivery skeleton
- 08
Test closure
- 09
Trace defects upward
- 10
Promote or repair
Representation is controlled forgetting.
Every useful software representation makes the world smaller. A database row forgets most of a person. An API response forgets most of a database. A UI forgets implementation. A cache forgets freshness within tolerance. A queue forgets synchronous timing while preserving other semantics.
Forgetting becomes a defect when the system collapses a distinction that execution still needs.
A boundary is a licensed forgetting operator; a defect is the residue of a distinction forgotten without license.
Invoice Approval
Build an invoice status tracker.
- invoice.isApproved: boolean
- invoice.status: string
- received
- syntactically valid
- vendor recognized
- goods or services confirmed
- budget owner approval
- compliance approval
- accounting recognition
- payment authorization
- scheduled
- released
- settled
- disputed
- rejected
- revoked
- reversed
- expired
- duplicate or suspected duplicate
- requester cannot satisfy independent approval
- payment cannot release without authority and evidence
- reversal preserves original history
- duplicates cannot independently close without review
- approved identifies authority, time, policy, and evidence
- reported success is reconstructable from audit
Binary storage is easy; semantic adequacy is difficult; grammatical validity is consequential; closure is stronger than completion.
Symptoms become useful when they point back to a lost distinction.
Done is a claim. Closure needs a witness.
Architecture is invariant protection.
Architecture is justified when it protects continuation-sufficient state, consequential distinctions, responsibilities, admissible composition, authority, observability, and repair across execution boundaries. State, transition, persistence, and projection may share one implementation in a small system, but they should not be assumed identical.
AI makes Software Before Code more important, not less.
As implementation becomes cheaper, the cost of choosing the wrong representation becomes proportionally more important. Cheap code increases the value of knowing what the code is supposed to preserve.
Promotion depends on consequence, not formalism alone.
- 01Concept examples
- 02Formal toy models
- 03Executable reference implementation
- 04Comparative design study
- 05Legacy archaeology
- 06External replication
Compare baseline and Boundary First invoice-approval designs against a 25-fault mutation set and measure detection before deployment.
Formalism is a tool for consequence, not a ritual of sophistication.