Techniques for creating software quality.
Building off How to create software quality..
TODO write this or consider pulling it into a distinct blog post entirely. I’m sort of leaning toward the latter given this is already going long, lol.
I’m somewhat torn between acknowledging that I’ll come to regret an attempt to document the standard techniques for addressing these varies sorts of quality challenges, and the recognition that the first question some readers will ask after reading this is, “But what should I do?”
My general recommendation would be to use the mental model to direct your own thinking, but for the curious here is a brief attempt to document the techniques that I’ve found effective for each of the three common sources of complexity (essential domain complexity, scaling complexity, and accidental complexity).
Generally, manage accidental complexity via:
- Employing strategies from Kent Beck’s Tidy First? to increase consistency and readability of your codebase
- engineering architecture
- engineering strategy: reduce languages, databases, etc
- on-call rotations
Generally, manage scaling complexity via:
- Operating an incident learning program that focuses on identifying and implementing a few impactful projects every year
- Fault injection
- Load testing
Generally, manage essential domain/business complexity via:
- developer-led testing versus quality assurance-led testing
- development partners or narrow release groups
- educating your team on problem domain
- embedding engineers into teams with high domain context, or shadowing roles with domain exposure