C.W.K.
Stream
Lesson 04 of 04 · published

The Ceiling Matrix

~12 min · ceiling-matrix, interface-design, yagni, roadmap

Level 0Tool Renter
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"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.

The three states are: built, reserved-by-interface, and out of scope. Built means it ships now. Reserved means the schema has a seam for it but no implementation. Out of scope means deliberately excluded, with a stated reason. Every capability gets exactly one — no ambiguous 'maybe later' that quietly rots into a half-built feature.

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

Reserve the seam, defer the build. Putting 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.'

My instinct was always to either build it all now (because I can hold the whole thing in my head) or punt everything to 'later' (because shipping felt urgent). The matrix taught me a third move I kept missing: reserve the interface, skip the implementation, write down the why. It's the difference between a roadmap and a wish list. A roadmap has seams; a wish list just has hopes.

Code

Every capability gets exactly one state·text
                |  local (you run weights)  |  API (you call a service)
  --------------+---------------------------+--------------------------
  image         |  BUILT                    |  reserved-by-interface
                |  (the engine's core)      |  (adapter slot ready)
  --------------+---------------------------+--------------------------
  video         |  reserved-by-interface    |  reserved-by-interface
                |  (modality field exists)  |  (opens when both above ship)

  OUT OF SCOPE (with reasons, not just exclusions):
    - training / fine-tuning  -> engine is inference-only
    - face swap               -> excluded on its own merits
    (face *restore* stays in scope as post-processing)
A cheap seam prevents an expensive break·python
# The seam, present from day one, implementation deferred.
from typing import Literal
from pydantic import BaseModel

class GenerateRequest(BaseModel):
    prompt: str
    model: str
    # The reserved seam: 'video' is a legal value the schema accepts,
    # even though no video pipeline exists yet. Adding video later is
    # additive — every existing image caller keeps working unchanged.
    modality: Literal["image", "video"] = "image"
    steps: int = 30

# Day 1:   modality is always "image". Costs nothing to have the seam.
# Day 100: a VideoAdapter lands behind modality="video". No API break.

External links

Exercise

Take a project with a roadmap and build its ceiling matrix. List 6-10 capabilities. Tag each one: built, reserved-by-interface, or out-of-scope (with a reason). For every 'reserved' one, write the single schema field or seam that reserves it. For every 'out of scope,' write the reason in one sentence.
Hint
If a capability doesn't fit any of the three buckets, you haven't decided about it yet — and an undecided capability is the exact thing that rots into half-built scope creep.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.