lee ming liang home · about · use cases · portfolio
Lee Ming Liang at his laptop

I write down what the system can't tell you.

A case for specs as the real interface between people, AI agents, and large codebases — built from what's actually running in production, not from theory.

a working method, not a pitch

The bottleneck isn't generating code anymore. It's making intent legible to someone — or something — with no memory of yesterday.

Every AI session starts cold. It doesn't have the six months of hallway conversations, the incident that produced a rule, the reason a "wrong" pattern is actually deliberate. Code tells it what the system does. Nothing tells it why, or what not to touch, unless that gets written down somewhere durable.

So I build that layer: a small set of versioned specs, kept separate from the code, each one naming what it's derived from and when it was last checked against reality. A cold start — human or model — then starts from evidence instead of a guess.

an engineer new to the codebase an AI session cold start · no memory the spec layer intent · constraints · why source: named files checked: dated the codebase 18,000+ files 150+ modules derived from checked against
Both kinds of reader start from recorded intent, then touch only the code that matters. The dashed loop is what keeps the specs honest — every claim names its source and carries the date it was last verified.

It isn't a framework, and it doesn't depend on any particular AI tool. Think of it as the other half of AI memory: features like Claude's CLAUDE.md and session memory hold what the assistant has learned about you — this layer holds what the project knows. One is personal and fuzzy; the other is shared, versioned, and auditable. A team needs both.

I've been running this method on live systems for a while now — including the 18,000-file school platform I maintain. The specs are plain files, but they also render as a visual map a person can browse: one source of intent, two ways to read it — models read the text, people get the graph. The specifics of how it works, and what it caught, belong on their own pages.

what this actually fixes

Five things it changes in practice. The evidence lives on its own pages.

id: portable

Any model, any vendor — or none

Plain text, nothing tool-specific. Any AI can read it, and so can a person with no AI at all — if it only makes sense to one tool, it never encoded the intent in the first place.

logged in production · read the case
id: cold-start

Minutes to working context, not days

A fixed reading order replaces reverse-engineering intent from thousands of files — for a new engineer and a fresh session alike.

session log, 2026-08 · read the case
id: tokens

A fraction of the tokens to a decision

One logged session reached an architecture decision on roughly a fifth of the context that reading raw source would have cost — including facts the code alone would have answered wrongly.

session log, 2026-08 · read the case
id: scale

Scoped units, not one giant mental model

Nobody — person or context window — holds 150+ modules at once. A bigger project means more files, not a harder start.

running on an 18k-file system · read the case
id: security

A review a CI gate can't run

CI catches what's written. A per-module checklist catches what's missing — the rate limit that isn't there, the branch nobody guarded.

session log, 2026-08 · read the case

where this is going

What's here is running. What isn't, says so.

None of this is presented as finished. The same discipline it asks of a spec — write the claim, name the source, date it, delete it when it's wrong — applies to this page too. What's here is what's actually running; what isn't built yet is marked as such, not implied.