202205031410 Design stamina hypothesis
We should ask ourselves a critical question:
Is it worth the effort to design software well?1
Most, if not all, people would advocate for good design if asked directly. Why then do so many people create poor designs in practice?
Typically the answer is that we're taking some shortcuts to reduce quality to gain some sort of speed. Maybe it's to hit a deadline, maybe it's to bring a product to market, or maybe it's just that we don't feel like spending the time to do something properly right now.
No matter what, there's a hidden assumption that good design is slower and bad design is faster. We apparently have to trade off speed for design and just tolerate spending that time on design for some reason.
Even though this is the tacit assumption behind our everyday behaviors. I think it is wrong. Consider the following pseudo-graph from Martin Fowler.
We see that there's a simple relationship that tracks productivity as it relates to cumulative functionality and time.
As a hypothesis, the graph states that there's an initial tradeoff of speed for design. It's slower to get started in a well-designed way because we have to think through our designs or our 202205031435 Evolutionary approach to software design. As we continue through time and cumulative functionality, we see that this tradeoff flips and becomes more pronounced. The further we go, the more payoff there is for a good design.
This is only a hypothesis because there's no way we'll ever be able to definitively know whether it's true or not. Despite this, many people (including myself) take this hypothesis as axiomatic because it aligns perfectly with our lived experience as programmers.
One important corollary to the hypothesis is the payoff line. The corollary is that there is a payoff line, but not where the payoff line is. Since there's no objective way to measure this hypothesis, we'll never be able to know where the line is either. There's a lot of debate about the line even among developers who agree that the hypothesis is true.
There may be some ways that we could get closer to measuring these types of things using 202203210833 Systems thinking.
-
Fowler, M. (2007, June 20). Design Stamina Hypothesis. Martinfowler.Com. https://martinfowler.com/bliki/DesignStaminaHypothesis.html ↩ ↩2