Every team has unwritten taste: how we name things, what we consider over-engineering, which patterns are banned because they burned us once. Left unwritten, that taste lives in review comments, repeated forever, applied inconsistently, and always slightly personal. I started encoding mine as lint rules instead.
Reviews don’t scale, rules do
A review comment teaches one person once. A lint rule teaches everyone on every commit, including future you at 1am. The first time CI caught something I would have written a paragraph about, the rule paid for itself. The tenth time, it had saved more review energy than any process doc I ever wrote.
Good rules name the real objection
Vague rules (“be simple”) get disabled. Good rules encode the reason. Instead of “don’t over-abstract,” I write rules against the specific shapes I’ve seen go wrong: wrapper types with a single call site, config options nobody toggles, comments that narrate instead of explain. When a rule fires, the message should explain the reason instead of only forbidding the pattern. A developer who understands why won’t route around it.
AI output is why this matters now
With AI assistants writing large volumes of plausible code, the failure mode changed. The output compiles, the tests pass, and the code is subtly not how you’d write it: slightly generic names, defensive copies nobody needs, abstractions for futures that won’t arrive. Human review can’t keep up with that volume line by line. Automated taste fixes this. Rules that flag the patterns you’ve decided against make AI-assisted development sustainable at speed.
Keep the rulebook small
The discipline that makes this work is deletion. Every rule has a cost: false positives, suppressed warnings, slower onboarding. I review the rule set the way I review dependencies. If a rule hasn’t fired meaningfully in months, or if people routinely suppress it, it’s either wrong or unnecessary. Ten enforced rules beat fifty aspirational ones.
Start with the three complaints you repeat most in review. Encode those. Everything else can wait until you’ve said it twice.