| Ansible is not Python | Jinja2 abuse: complex filters, nested conditionals, inline Python logic in templates |
| YAML sucks for coding | Overly clever YAML tricks, deep nesting, complex data transformations in vars |
| Playbooks are not for programming | Control flow abuse: excessive when chains, recursive includes, loop-within-loop patterns |
| Clear is better than cluttered | Noisy tasks: too many parameters on one task, unclear variable names, mixed concerns |
| Concise is better than verbose | Unnecessary repetition, copy-pasted tasks that should be loops, overly wordy task names |
| Simple is better than complex | Over-engineered roles, unnecessary abstractions, premature generalization |
| Readability counts | Poor formatting, missing task names, cryptic variable names, inconsistent style |
| Helping users get things done | Missing docs, unclear defaults, no examples, hard-to-use interface |
| User experience beats ideological purity | Overly strict validation that blocks users, rigid patterns that don't adapt |
| "Magic" conquers the manual | Manual steps that could be automated, missing handlers, no default values |
| Convention over configuration | Too many knobs, unnecessary options, no sensible defaults |
| Declarative is better than imperative | command:/shell: used where a module exists, procedural task chains |
| Focus avoids complexity | Roles that do too many things, mixed responsibilities, scope creep |
| Complexity kills productivity | Hard-to-understand logic, deep variable indirection, over-abstracted patterns |
| Hard to explain = bad idea | Code that requires extensive comments to understand, non-obvious behavior |
| Opportunity to automate | Manual steps documented but not automated, TODO comments for automation |
| Can always be improved | Stale patterns, deprecated module usage, known better alternatives |
| Eliminate friction | Unnecessary prerequisites, manual setup steps, poor error messages |