While these are not hard fast rules (and the Rule of Specificity applies), we try and approach all of our work through these practices. If we’re ever not doing one of them, we’re doing so very intentionally and with a solid reason for that specific client or project. We don’t need to do them all the time in every situation, but they ought to be present at least sometimes in almost all of our work.
For example, we likely will pair some of the time, not all of the time. And we likely will unit test some of the things, not all of the things. And oftentimes it will make sense to build and deploy a feature without doing user testing in advance because it’s cheap and easy to do so and we strongly believe it will be successful.
These are the default.
Table stakes.
We start from here.
This is just a start. We will apply these along with other practices and criteria to each engagement, team, and product. Some of which we’re aware of, some of which we have yet to discover. I expect each Craft will go much deeper into the state-of-the-art defaults; and that those will change over time. But hopefully, this provides a good set of fundamentals, and I expect that these will remain relevant for a long time.