engineers as gardeners
We need to let go of the idea that software development is about planning and execution.
Never forget, agile is here to save management, not software.
Architecture is for consultants. Period. Now let's talk about engineering.
Software doesn't work like blueprints. Requirements change. Hardware changes. Understanding deepens. The advice to never rewrite software is over twenty years old and it was wrong then too. Sometimes the old roots need to come out. Gardeners replant. That is not failure. That is tending.
Software development is closer to gardening than architecture. You prepare the soil first. Good CI, good tests, good devops. Foundations you can build on. Not a blueprint of the finished garden — nobody knows what the finished garden looks like. You plant, observe, adapt.
Naur said it in 1985: the aim of programming is not to produce programs, but to build theories. The code is a lossy representation of that understanding. Engineering is understanding. On top of those foundations you grow. You learn your tools deeply. Your compiler, your language, your operating system, your hardware. Engineering is more than modeling the world. It is understanding the ground beneath it.
Le Guin wrote that true leaders tend. They don't control. They create conditions for things to grow and then get out of the way. The best codebases feel like that. Nobody owns them. Everyone tends them.
Good soil first. Everything else follows.