# Build Anti Patterns

> Comprehensive catalog of build anti-patterns that degrade quality, increase maintenance, and introduce bugs. Includes detection frameworks and prevention strategies.

- Skill: `elevanaltd-hestai-mcp/build-anti-patterns` (Agent Skill)
- Install (CLI): `npx skillmds@latest add elevanaltd-hestai-mcp/build-anti-patterns`
- Raw SKILL.md: https://api.skillmd.com/api/skills/elevanaltd-hestai-mcp/build-anti-patterns/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: elevanaltd (https://skillmd.com/u/elevanaltd-hestai-mcp)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/elevanaltd-hestai-mcp/build-anti-patterns

---


===SKILL:BUILD_ANTI_PATTERNS===
META:
  TYPE::SKILL
  VERSION::"1.0"
  PURPOSE::"Comprehensive anti-pattern catalog for build phase"
  SOURCE::"Extracted from anti-patterns.oct.md"

§1::ISOLATED_EDITS
SYMPTOMS::"'I just changed one function' → unexpected failures in distant components"
EXAMPLE::"processUser(id)→processUser(userId): 15 call sites + db query builder + GraphQL resolver = 4hrs debugging"
DETECT::[
  "Changes without grepping usage",
  "Skip dependency analysis",
  "Quick fix mentality",
  "No test failures but prod breaks"
]
PREVENT::[
  "Ripple map before coding (git grep usage)",
  "Run full test suite (not just changed file)",
  "Check types (mypy/tsc)",
  "System impact analysis"
]

§2::FEATURE_BLOAT
SYMPTOMS::"'Since I'm here I'll also...' → features nobody asked for"
EXAMPLE::"Task: email validation. Also adds: disposable check + DNS verify + typo suggestions = 200 lines instead of 10"
DETECT::[
  "Implementing not in requirements",
  "Adding abstractions for future",
  "Improving unrelated code",
  "Multiple concerns one commit"
]
PREVENT::[
  "Scope validation: explicitly requested?",
  "Defer until needed (Rule of Three)",
  "Separate PRs for improvements",
  "One concern per commit"
]

§3::CONTEXT_DESTRUCTION
SYMPTOMS::"'Comment is obvious, removing it' → deleting architectural rationale"
EXAMPLE::"setTimeout comment explaining why not setInterval → deleted → future dev reintroduces bug"
DETECT::[
  "Deleting non-obvious comments",
  "Removing TODOs without resolution",
  "Stripping git history",
  "Cleanup PRs removing context"
]
PREVENT::[
  "Git handles versions, comments explain WHY not WHAT",
  "Preserve TODOs with explanations",
  "Architectural decisions in docs",
  "Commit messages explain WHY"
]

§4::PREMATURE_OPTIMIZATION
SYMPTOMS::"'This could be faster' → optimization without profiling"
EXAMPLE::"Optimize array iteration while real bottleneck is N+1 database queries"
DETECT::[
  "Optimizing without measuring",
  "Assuming bottlenecks",
  "Complexity added for theoretical speed",
  "Ignoring profiler results"
]
PREVENT::[
  "Profile first ALWAYS",
  "Optimize algorithms before code (O(n²)→O(n))",
  "Benchmark before/after",
  "Complexity cost must be justified"
]

§5::TEST_PROCRASTINATION
SYMPTOMS::"'I'll add tests later' → tests fit code not requirements"
EXAMPLE::"Implement feature → write tests after → tests pass but feature breaks edge cases"
DETECT::[
  "Tests added after code",
  "Commit message 'Add tests'",
  "Single commit with both test and implementation",
  "Test timestamp newer than implementation"
]
PREVENT::[
  "TDD discipline: RED→GREEN→REFACTOR",
  "Git history enforcement: test commit→feat commit",
  "Failing test proof required",
  "No merge without TDD evidence"
]

§6::ABSTRACTION_ADDICTION
SYMPTOMS::"'Future flexibility' → abstractions for 2 use cases"
EXAMPLE::"2 similar functions → DataProcessor class with generics → only 2 call sites + complex config"
DETECT::[
  "Abstraction before 3rd use",
  "Generic solutions for specific problems",
  "Indirection without clarity benefit",
  "Flexibility nobody needs"
]
PREVENT::[
  "Rule of Three: 1st concrete → 2nd note → 3rd abstract",
  "YAGNI: You Aren't Gonna Need It",
  "Abstractions must reduce cognitive load",
  "Must be understandable without docs"
]

§7::SNOWBALL_COMMITS
SYMPTOMS::"100+ files in one PR → impossible to review"
EXAMPLE::"Refactor user service + add feature + fix bugs + update deps = 247 files changed"
DETECT::[
  "PRs with 50+ files",
  "Multiple unrelated changes",
  "Commits with mixed concerns",
  "Reviewer comment: 'too large to review'"
]
PREVENT::[
  "Atomic commits: one logical change",
  "Feature flags for gradual rollout",
  "Separate refactor from features",
  "Stacked PRs: small incremental"
]

§8::DEPENDENCY_DRIFT
SYMPTOMS::"Outdated dependencies → security vulnerabilities + compatibility issues"
EXAMPLE::"react@16.8→18.0 without testing → breaking changes in hooks"
DETECT::[
  "Dependencies not updated 6mo+",
  "Security warnings ignored",
  "Version pinning without reason",
  "No dependency audit"
]
PREVENT::[
  "Regular updates: monthly review",
  "Security scanning: npm audit, Dependabot",
  "Test before update: integration suite",
  "Document version decisions"
]

§9::ENVIRONMENT_PARITY_GAPS
SYMPTOMS::"'Works locally' → production failures"
EXAMPLE::"Local: node@18 + sqlite | Prod: node@16 + postgres → crashes on deploy"
DETECT::[
  "No version specification",
  "Different DBs dev/prod",
  "Missing .env.example",
  "Manual environment setup"
]
PREVENT::[
  "Version specification: .nvmrc, engines",
  "Docker for consistency",
  "CI matches prod",
  "Env var validation on startup"
]

§10::DETECTION_FRAMEWORK
QUICK_CHECK::[
  "Changing without system analysis? → ISOLATED_EDITS",
  "Adding unrequested features? → FEATURE_BLOAT",
  "Deleting WHY comments? → CONTEXT_DESTRUCTION",
  "Optimizing without profiling? → PREMATURE_OPTIMIZATION",
  "Writing tests after? → TEST_PROCRASTINATION",
  "Abstracting for 2 cases? → ABSTRACTION_ADDICTION",
  "PR with 100+ files? → SNOWBALL_COMMITS",
  "Dependencies 6mo+ old? → DEPENDENCY_DRIFT",
  "Works locally not prod? → ENVIRONMENT_PARITY_GAPS"
]

§11::WISDOM
PREVENTION_OVER_CURE::"Recognize pattern early → apply prevention → avoid hours debugging"
CORE_TRUTH::"Anti-patterns are shortcuts creating technical debt. Pay now or pay later with interest"

===END===

