跪拜 Guibai
← All articles
Frontend · Claude · AI Programming

AI Took Over Tactical Code; Strategic Software Engineering Is What Remains

By 乘风gg ·
Read original on juejin.cn ↗ Google Translate ↗ Alt translation

Software engineering discipline now determines how much value AI coding actually delivers, because the model handles the tactical layer while a human owns the strategic layer. Teams that add deterministic checks and a shared vocabulary get reliable AI output; teams that trust the model's confidence inherit unverified, tangled code that fails months later.

Summary

AI coding has shifted the bottleneck from knowledge to judgment. Syntax, APIs, and usage patterns are nearly free; the scarce part is deciding whether a module should exist, where its boundaries sit, and where complexity should hide. Tactical work, such as fixing a local bug or adding a field, surfaces errors in minutes and AI covers most of it. Strategic mistakes, like a tangled data flow, can take months to show up, and AI is only useful there when it makes that feedback loop shorter.

A concrete version of that idea lives in Matt Pocock's open-source skills repo. Tasks are split vertically into tracer bullets: each small slice crosses database, API, page, and tests so it can be demoed and verified on its own, and the slice should fit one fresh context window. Some changes, like altering a field type with thousands of call sites, cannot be split and need the add-migrate-delete sequence. Before any implementation, the two most popular skills, grill-me and grill-with-docs, force the AI to ask questions, because a model that will not ask turns a half-understood requirement into confidently wrong code.

Feedback loops make the difference. The workflow pairs a shared CONTEXT.md glossary derived from DDD's Ubiquitous Language with a red-green test discipline: write the failing test first, and derive expected values from outside the implementation. Code writing and reviewing happen in separate sessions, with coding standards sent only to the reviewer. Constraints that can be enforced mechanically belong in lint rules, type checks, or pre-commit hooks rather than CLAUDE.md, because deterministic failure costs nothing on success and cannot be talked out of.

Takeaways
— AI coding tools handle an estimated 90% or more of tactical coding; strategic decisions about module existence, boundaries, and complexity stay with humans.
— Tactical mistakes surface in minutes, while strategic mistakes like tangled data flow can take about nine months to surface.
— Knowledge of syntax and APIs is nearly free, while judgment about when not to use something remains rare and is what people pay for.
— Breadth-first AI work by layers produces a pile of half-finished code; tasks should instead be vertical slices that cross every layer and can be demonstrated.
— A vertical slice should be small enough to fit in one fresh context window.
— Changes that cannot be split, such as changing a field type with thousands of call sites, require three steps: add the new while keeping the old, migrate call sites in batches, then delete the old.
— AI should be forced to ask clarifying questions before implementation; grill-me and grill-with-docs in the skills repo do this.
— A shared project glossary such as CONTEXT.md, with a canonical name and banned synonyms, prevents people and AI from treating one concept as three.
— Write a failing test first (red) and then code that makes it pass (green); this blocks AI from passing off plausible-looking code as correct.
— Test expectations must be calculated independently, not derived from the implementation, or a typo in the implementation keeps the test green.
— Writing code and reviewing it should happen in separate sessions; a fresh session criticizes while the writing session only drives tests green.
— Pre-commit checks that feel slow to humans are acceptable to AI, so checks previously skipped can now be added.
— Constraints belong in lint rules and pre-commit hooks instead of CLAUDE.md, because deterministic checks fail fast and cost nothing on success, while prompt instructions burn tokens and may be ignored.
Conclusions

Strategic mistakes carry a nine-month feedback delay, so the most useful thing AI can do is shorten that loop, not generate more code.

AI will not ask for clarification, so requirements elicitation becomes a hard prerequisite; a model that charges ahead on a half-understood spec turns ambiguity into confidently wrong code.

Tests that reuse the implementation's own values are structurally blind; the 'correct answer from outside' rule separates genuine regression protection from ritual.

Separate write/review sessions work because an LLM is a poor self-critic inside the same context; changing the context is a cheap substitute for a second engineer.

Mechanical enforcement beats prompt instructions because a lint failure is deterministic and free when passing, while a CLAUDE.md rule is probabilistic and costs tokens on every call.

Concepts & terms
Tracer bullet
A development approach where each increment is a small vertical slice through all layers, from database to UI, so it can be demonstrated and checked before more is built. In AI coding, the slice should also fit one fresh context window.
Ubiquitous Language
A shared vocabulary from Domain-Driven Design. One concept has one exact name used by business, engineering, and AI, so a term in a requirements meeting is the same term in code.
Red-green
The two test-driven development states: write a failing test first (red), then write the minimum code to make it pass (green). The red state is used as proof the AI has not faked a fix.
CONTEXT.md
A project file in Matt Pocock's skills used as a glossary. Each entry defines a canonical term and lists synonyms to stop using, so humans and AI share one vocabulary.
CLAUDE.md
A project instructions file sent to Claude on every request. It keeps persistent context but costs tokens each time and only influences the model probabilistically; deterministic checks are cheaper and more reliable.
Context window
The finite amount of text a large language model can use in one session. A vertical slice of AI work should be small enough to fit into one fresh context window so the model can complete and verify it end to end.
Source: juejin.cn ↗ Google Translate ↗ Backup ↗