In spirit of trying to not get into very long texts, I've extracted this from a larger piece, which might feel disconnected.

Single iteration loop, that can be taken from "base" software development process, one that's often taught during education usually is a simple one.

There are many variations but usually they all look like this:

Image of a basic software like cycle

I wouldn't say this representation is bad, but it has one nasty flaw.

It camouflages complexity. Complexity which accumulates over time from this naïvely basic process happening again and again and again.

Battle-scarred software engineers might agree with me that, in the end, software building process is something different.

Personally, I would present it like that:

Image of a basic software like cycle

This diagram took me much more time it should take me but it has some implicit knowledge and easter eggs outside of elements described below.

  • Needs not only come in groups but might even stack
  • Analysis sometimes is partial due to lack of time…
  • …or doesn't exist
  • …or have been done by a fresh hire blissfully oblivious to horrors of complexities within

The older the system, the more complex it is.

Eventually every system's development is bound to begin under a "how do I extend this friggin' thing so it won't explode into our faces" motto.

I've seen multiple approaches and none that would consistently work.

Complexity is an enemy and working around it is a struggle with unpredictable outcome (which I believe might be a reason why project management in software is so hard).

However, what is often omitted is that not only code changes.

The need that was a raison d'être of code in the first place changes too. Lucky those who were able to pluck non-relevant code from their systems!

But even when possible, it's a delicate process that might leave crumbs behind. No matter how scrupulous engineers are, by the law of Murphy (or of large numbers) some pieces will be forgotten.

And with every single line of code. Every single incoming feature request. Every single need and change there will be more of more of those crumbs. A crust of complexity.

Some try to track and manage and their success vary but in in the end what's left is a code itself. Code designed. Code deployed. Code glued together:

Image of a basic software like cycle

Giraffe is coincidental