"A bowl is meant to stay being a bowl, it’s not supposed to turn into a plate or a vase, or to become square, or bigger or smaller. While the target is static, the world is dynamic, which is what makes it break."<p>This is lucid analogy since many times in software, people think the target (goal) is static, or static enough.<p>Sometimes though, there might be pressure to make the bowl bigger, smaller, into a plate, a vase and attach a straw, all at the same time.
There is one angle I really like in this concept: letting go and acknowledging that something is imperfect rather than continuing to try to make it ideal. I saw so many times people arguing and spending countless hours to reimplement or refactor something just to end up with a different version of the very same problem (i.e. imperfections in architecture).<p>To clarify: I've also done the same thing (i.e. refactor in pursuit of perfect architecture) and I'm not saying refactoring is bad. My point is that it takes some experience and humility to be able to say "stop" when it does not make more sense to continue to refactor.