On growing software
People have tried to define programming since forever. Is it art, engineering, or perhaps craft? It may be that it's all, or neither. I tend to think about it more like gardening than craft or engineering or art. This is because software tend to take on a life of its own over time. This may sound a bit odd to some. But think about it a bit. Perhaps it will start to make sense.
As we work on a piece of software over time there are usually several different people who work on it (even if that's several incarnations of you). Each different author add their own thoughts and directions to the software. With some skill the people working on it will be able to keep it together enough that everyone feels at home. But for each incarnation of the software it changes a bit.
What we do as programmers is to guide that change. To help the software grow in the directions we need it to. This is where I find gardening being the best way to understand our role in relation to the software.
A good gardener does not really create anything. They make creation of what they want possible. They provide the soil, nutrition, light and support that the plants need to grow in the way that the gardner would like it to grow. With skill the things that grow will grow in the general direction intended. Sometimes this fail and we are forced to remove what we thought would grow well. The more understanding we have of the soil, plants, light conditions, rainfall and so on the better we are at finding a way forward.
What is also striking with this analogy is that the environment that we work in, in gardening and in software, is constantly changing. Every little tweak I make in the garden will change the conditions for everything else in that garden (and often beyond as well). Sometime as I anticipated, sometimes not. Weather, pollution, the neighbors new garden shed, changes how I can grow what I want to grow. Similarly, in software, the business who sponsored the software is changed by the software, creating new needs from the software. The world around the sponsors changes in ways that affect us, and in turn the software.
So in terms of finding analogies in other fields that matches what we do on a daily basis I think gardening is the only one that stands. At least as long as the software we create is malleable enough that it doesn't feel like a concrete bunker that can only be removed by serious explosives.