"Design the seam now. Build through it later. Reserving by interface is how you stay open without over-building."
A Map of What You'll Eventually Need
Once you decide to own the engine, a dangerous question follows: how much do you build? Build everything you can imagine and you drown before shipping. Build only today's need and you wall yourself in. The ceiling matrix is the tool that answers it — a grid of every capability the engine might ever need, each tagged with one of three states.
The Two Dimensions
The matrix has two axes. One is modality: image versus video. The other is weight location: local open weights you run yourself versus closed-weight APIs you call over the network. That gives four quadrants — local image, local video, API image, API video — and each gets a status.
'Reserved by Interface' Is the Key Move
The most important state is the middle one. Local image generation is built. Local video is not built — but the request schema already carries a modality field that can say video. The seam exists. When the video workflow finally demands implementation, you build through the seam without breaking a single existing caller. You designed the door now and you'll walk through it later.
modality: image | video in the schema on day one costs almost nothing and prevents an API break on day one hundred. Building the video pipeline on day one costs enormously and might be the wrong design by the time you need it. Reserve cheap, build late.Why This Isn't Just YAGNI
"You aren't gonna need it" says don't build speculative features. True — but naively applied, YAGNI also tells you not to leave room for them, and then the day you do need it, you pay with a breaking change that ripples through every client. The ceiling matrix threads the needle: don't build the speculative feature (YAGNI holds), but do reserve its interface seam (so the eventual build is additive, not a break). Cheap seam, deferred implementation.
Out of Scope Needs a Reason
The third state is just as disciplined. Some capabilities are deliberately excluded — and the matrix records why, not just that. A training tool is out of scope because the engine is inference-only. A face-swap feature is out of scope on its own merits. Writing the reason down means a future you (or a future contributor) doesn't relitigate the decision from scratch, and doesn't mistake 'out of scope' for 'forgotten.'