On the way to lunch yesterday, a friend of mine was talking about how object oriented design works with the example of vehicles. It was a pretty good analogy. I've been considering processes a lot lately, and gardening works for that.
Of course, a lot of people won't understand the gardening aspect, but if they understand software development they may get some ideas on how gardening works. That's not a bad thing.
As it happens, after my father passed away I ended up doing some agriculture for a while - working on some land that he had passed down. Surrounding farmers advised me and I listened, but what I was really doing was applying software development principles to something else that has a life cycle, that needed to be managed and ultimately had value.
Let's start off with this simple principle: Everything has a life cycle, from seed (idea) to fruit, vegetable or flower.
In between there's an implementation, and that implementation - if planned well - can grow you rows of corn. The planning requires understanding the plant itself: How much light it will need, how much water, what soil nutrients are necessary and how much attention the land in between will need to keep out weeds and unwanted insects - where the analogy almost fails is with bugs, but some bugs are good (and those we call undocumented features in software development).
So if we plan everything well, we have well spaced plants that have room to grow around them, and where they don't compete for light or nutrients. Planned better, they are as close together as possible but not close enough to rob each other of nutrients. Planned even better, like the Three Sisters, they nurture each other and help sustain one another. Just like a well planned and executed software project.
Without planning, you will likely end up with clumps of plants that aren't doing very well. They rob each other of the resources that they need; they may even grow so tangled that it's impossible to separate them - they occupy valuable space, but they do not actually produce anything. Just like a poorly planned or executed software project - something that seems endemic to startup companies as they rush to get income and develop code amazingly fast but without a plan for sustainability. If you've been in software development long enough, you've untangled things as companies mature, and you should grok that. In gardening, you might have to start from scratch - in software development, you typically cannot, and in this regard gardening can be much less frustrating. As a software engineer, you might want to consider gardening as a hobby. Very relaxing and rewarding.
Like software development, there are processes. There's irrigation, fertilization, pest elimination (maintenance - bug removal without tickets), maybe some pruning (bonsai) or maybe some removal of sick plants. There's quality assurance, where a discerning eye assures that all processes are resulting in what they should. There's configuration management, assuring that different plants are treated differently. Ultimately, there's a plan. There's the start of a life cycle, and there is the end - the planned obsolescence.
Both can have markets. Sure, if you're doing a personal garden your profit may be pride, but maybe you're doing this for money and expecting a fiscal return. The market, though, is where software deviates from agricultural produce.
Maybe I'll write about that sometime.