PRD §12 is a list of engineering quality criteria — file-size budgets, no explicit `any`, telemetry-per-feature, a perf gate. You can read those as constraints. The actual experience this build cycle was that every one of them returned more feature time than it cost.
The file-size budget is the clearest case. SplatCanvas started this cycle at 3,782 lines. By any normal "let me ship features fast" instinct that was fine — it worked, the canvas rendered, the vehicle drove. The §12.1 budget said no: 600 lines per file in lib/, 400 in app/_components/. Twenty-four extractions later (E1.1 through E1.24, every commit a refactor) the canvas sits at 489 lines and the supporting modules each own one thing. The cost was four solo days of an extraction agent. The return was that two coding agents could land features in parallel without colliding for the rest of the cycle. Half the shipped beats this build wouldn't have happened without that split.
No explicit `any` in lib/ sounds pedantic until you grep for it after a refactor. The E5 audit pass found zero — the discipline had held from the start — but it surfaced thirteen `as unknown as X` casts. Twelve of those were inherent (browser API typing gaps, PlayCanvas internals not in the published .d.ts). One was a duplicated OPFS async-iterable cast that collapsed into a four-line helper. The audit pays off the next time PlayCanvas publishes a more complete .d.ts and a quarter of the casts can simply disappear; the search will be one grep instead of a code review.
Telemetry-per-feature is the rule that's easiest to skip and most expensive to skip. Every feature this build cycle ships with at least one PostHog event in lib/telemetry.ts. When the calibration heuristic landed (E6) it added a `first_pixel` event payload extension. When camera modes landed (D1) it added `camera_mode_changed`. When the drift detector landed (D3) it added `drift_completed`. The data we wouldn't have collected otherwise told us, last week, that integrated-GPU users were spending 40% of their session in the top-down camera. That feedback shaped the cinematic camera profile changes shipped in the next release. The events cost one line each. The insight cost zero.
The perf gate is `pnpm bench` + a CI workflow. Today it measures bundle size and page count, with overage labels on PRs. Tomorrow when Playwright's WebGPU support stabilises it measures frame time. The scaffolding had to exist first — by the time the WebGPU measurement is ready, the JSON output shape is already settled, the override-label semantics are already settled, and the budget file is already in version control. The gate slots in without changing the developer flow.
There's a fifth quality discipline that isn't in §12 but shows up in every commit: photoreal-first. Five concrete "no" calls this cycle (see /devlog/photoreal-in-practice). Same shape as the §12 rules: a small constraint at the time, a hundred small "where do I put this" decisions resolved consistently afterwards.
These aren't engineering virtues. They're feature velocity in disguise.