About
The Site
Software development is full of decisions, and those decisions have trade-offs. How you navigate those trade-offs depends on your values. This site is about my values as a software developer, and the patterns and practices I've found helpful for expressing them.
Uncertainty is pervasive. Technologies change, requirements change, teams change. We have limited knowledge and we're bad at estimating. We need practices that help us cope with an uncertain future.
Clear ownership. People have different values, which lead to different choices, which lead to conflict. Clear rules about who owns what and how to make shared decisions reduce those conflicts. Good fences make good neighbors.
The user comes first. You are building software for people. Every decision should reflect that. Maximize time spent solving business problems, minimize time spent solving technology problems.
Precision. Software is a model — of problems, algorithms, business domains and their processes. Ambiguous descriptions lead to messy outcomes. The more precisely you model your systems, the better the outcomes.
Control. It's your system. If it breaks, you fix it. If it needs to go faster, you speed it up. You need to understand it and have the ability to manipulate its behavior.