Help us improve
Share bugs, ideas, or general feedback.
From great_cto
Catalogue of known SDLC anti-patterns to reject during architecture, planning, code review, and post-incident analysis. Provides named patterns for clear communication.
npx claudepluginhub avelikiy/great_ctoHow this skill is triggered — by the user, by Claude, or both
Slash command
/great_cto:anti-patternsWhen to use
Apply when: - architect is writing ARCH/ADR and might be tempted by a known bad pattern - pm is decomposing tasks and the breakdown smells like a known failure mode - senior-dev is implementing and considers a "quick fix" that is anti-pattern - l3-support is doing root-cause and finds an anti-pattern as the cause - any agent reviewing third-party code that exhibits anti-patterns
docs/**src/**lib/**This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Reference catalogue. Cite the anti-pattern by name when blocking a
Identify and avoid common architectural mistakes. Recognize patterns of failure. Use when reviewing designs or learning from mistakes.
Detects architecture, timeline, team, and process anti-patterns in proposals, plans, and structures to identify failure risks early.
Recommends creational, structural, behavioral, and distributed design patterns with implementations, unit tests, and trade-offs; detects anti-patterns like God Object, circular dependencies, and primitive obsession.
Share bugs, ideas, or general feedback.
Reference catalogue. Cite the anti-pattern by name when blocking a proposal — gives the user a clear vocabulary to discuss the issue.
Smell: One service does auth, billing, search, file storage, and email. Why bad: Single deploy unit, single point of failure, every team touches it, change velocity drops over time. Fix: Split by business capability (DDD bounded context).
Smell: 12 microservices but they share a database and deploy together. Why bad: All cost of distributed (latency, eventual consistency, ops overhead) with none of the benefits (independent deploy, isolation). Fix: Either truly separate (own DB, own deploy pipeline) or merge.
Smell: Request → Service A → Service B → Service C → Service D. Why bad: Compound failure probability, p99 latency adds up. Fix: Async with events, or co-locate hot path.
Smell: Custom Redis Lua scripts, hand-tuned binary protocols, before the first paying user. Why bad: Complexity cost paid up front, never recouped. Fix: Start simple. Optimize when you have load data.
Smell: "Let's use Kubernetes / GraphQL / event sourcing / DDD" with no current pain it solves. Why bad: Optimizes for engineer's resume, not user's outcome. Fix: Ask "what's the simplest thing that could work?"
Smell: "Let's rewrite this in ." Why bad: 80% of rewrites fail. The old system has years of bug fixes baked in. Fix: Strangler-fig. New behaviour in new code, old code coexists, delete when traffic moves.
Smell: "Senior X always fixes the 3am incidents." Why bad: Bus factor 1. X burns out. Knowledge doesn't transfer. Fix: Runbooks, post-mortems, rotating on-call, pair-debugging.
Smell: Plan ships a one-way door (data migration, public API change, breaking-contract release). Why bad: If wrong, recovery is days or weeks. Fix: Mandate dry-run + rollback path before approval.
Smell: Tasks named "implement feature X" with no end criteria. Why bad: Open scope, time inflates to fit. Fix: Each task ≤ 4 hours, with explicit "done = X" criteria.
Smell: A class > 500 lines or function > 100 lines doing 5 unrelated things. Why bad: Tests become integration tests. Diff readability collapses. Fix: Single responsibility. Extract collaborators.
Smell: Status passed as strings ("open", "closed", "blocked") with no enum. Why bad: Typos compile. New status forgotten in switch. Fix: Enum / discriminated union / branded type.
Smell:
try { doThing(); } catch (e) { console.log(e); }
Why bad: Hides bugs. Silent corruption. Fix: Catch only what you can handle; re-throw the rest; log with context.
Smell: API keys, passwords, DB URLs in source.
Why bad: Leaks in git history forever; rotation requires force-push (impossible).
Fix: Env vars or secret manager. Pre-commit hook to grep for sk-, ghp_, etc.
Smell: "Production seems slow today" but no SLO target. Why bad: Can't tell breach from normal. Fix: Set p99 latency, error rate, availability SLOs. Track burn.
Smell: Every error pages. Engineers stop reading alerts. Why bad: Real incidents get missed in noise. Fix: Page only on user-visible failure. Other signals to dashboard, not pager.
Smell: "Engineer X deployed without testing." Why bad: Suppresses future post-mortems. Blame doesn't fix the system. Fix: Blameless post-mortems. Focus on missing guardrails, not the human.
Smell: "Don't reboot SRV-PROD-3, it has special config that's not in IaC." Why bad: Disaster recovery impossible. Fix: Everything in IaC. Servers are cattle, not pets.
When you find one of these in a proposal/review:
// TODO delete in 2 weeks