---
title: "If Constraints Are Free, Which Constraints?"
description: "The April inversion said constraints are free for machines. It never said which constraints. Vertical slices, line caps, 500-word specs, and five structural checks that are true or false, nothing in between."
category: "AI Engineering"
pubDate: 2026-06-06T00:00:00.000Z
readingTime: 2
tags: ["ai", "constraints", "architecture", "lattice"]
canonical: https://salahmyn.me/blog/if-constraints-are-free-which-constraints/
lang: en
---

# If Constraints Are Free, Which Constraints?

> The April inversion said constraints are free for machines. It never said which constraints. Vertical slices, line caps, 500-word specs, and five structural checks that are true or false, nothing in between.

The April inversion said constraints are free for machines. It never said which constraints. This release commits to an answer, and committing was uncomfortable. Every cap is a number someone can argue with.

The shape: vertical slices (one feature, one folder), no cross-feature imports, file and method line caps, command/query separation, and a spec of at most 500 words per feature. That spec is what an agent loads instead of the whole repository. Five structural checks enforce the rules: cross-feature imports, scattered features, oversized files, oversized methods, mixed command/query capabilities. Each check is a decidable fact about the code. No model in the loop. True or false, nothing in between.

The 500-word spec is the piece I keep turning over. It works as a loading contract. If a change can't be made inside one slice plus its spec, the slice is shaped wrong. Split it, don't widen the context.

<div class="pull">Scope discipline becomes computable instead of a matter of taste.</div>

I made it all opt-in. Brownfield never auto-converts. I've seen what forced architecture migrations do to teams, and I'm not shipping one.

Doubt for the record: 150-line files, 25-line methods, 500 words. Defensible defaults or numerology? Time will tell.
