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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 05

    Make context explicit.

    Important decisions, constraints, provenance, and operating knowledge should not depend on institutional memory or a particular chat session.

  6. 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.

  7. 07

    Tools should reduce cognitive load.

    Capability is not the same as usefulness. Good tooling removes repeated judgement, bookkeeping, and context reconstruction.