← ClaudeAtlas

greenspuns-tenth-rulelisted

Apply Greenspun's Tenth Rule when reviewing complex codebases that have grown their own configuration systems, rule engines, templating languages, scripting layers, or workflow DSLs. Trigger on phrases like "we built our own config language", "we have a custom rules engine", "this template system has gotten really complex", "we're basically reimplementing X ourselves", or any time a team has reinvented a programming language feature or general-purpose tool inside their application. This rule is a useful diagnostic for spotting accidental complexity.
The-Artificer-of-Ciphers-LLC/skills-from-the-artificer · ★ 2 · AI & Automation · score 73
Install: claude install-skill The-Artificer-of-Ciphers-LLC/skills-from-the-artificer
# Greenspun's Tenth Rule > "Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp." > — Philip Greenspun ## The core idea When a program grows complex enough, developers eventually need features that their current language or framework doesn't easily provide: dynamic dispatch, higher-order functions, user-configurable behavior, extensibility hooks. Rather than adopting a language or tool that has these features natively, they build them from scratch — usually badly, incompletely, and without realizing that's what they're doing. The result is a half-implemented, poorly-documented programming language or runtime lurking inside a codebase that was never meant to host one. ## What this looks like in practice - A configuration file format that has grown conditionals, loops, and variables → you've built a scripting language - A "template engine" with logic, iteration, and state → you've built a programming language - A rules engine with complex precedence and side effects → you've built an interpreter - A workflow system with retries, timeouts, and branching → you've built a runtime - A plugin system with dynamic loading and lifecycle hooks → you've built a module system The key tell: these systems are always **informal** (undocumented), **incomplete** (missing features that users keep requesting), **buggy** (edge cases not handled), and **slow** (performance not considered in the or