Principles
Working engineering defaults
These are not universal laws. They are defaults I find useful when deciding how much machinery a system needs, where to put judgement, and how to keep work moving toward evidence rather than abstraction.
- 01
Prefer the smallest durable solution.
Solve the current problem in a way that can survive contact with the next one, without building the next five systems in advance.
- 02
Use deterministic code where the answer can be deterministic.
Models are useful for ambiguity and reasoning. Validation, invariants, state transitions, and repeatable transformations usually belong in code.
- 03
Treat evaluation as part of the system.
If a behaviour matters, define how it will be observed, reproduced, and judged before relying on it.
- 04
Prefer a working vertical slice over framework comparison.
A small end-to-end path exposes more useful constraints than an expanding catalogue of plausible technologies.
- 05
Make context explicit.
Important decisions, constraints, provenance, and operating knowledge should not depend on institutional memory or a particular chat session.
- 06
Optimise for convergence.
New ideas are useful when they resolve a concrete decision or blockage. Otherwise they can become another source of unfinished work.
- 07
Tools should reduce cognitive load.
Capability is not the same as usefulness. Good tooling removes repeated judgement, bookkeeping, and context reconstruction.