Software Development is Continuous Production
I'm not saying there's no need to have a version (identifying reference number so we know what we refer to), but I don't think having a version makes something discrete or not.
The way I'm thinking about this is this
Software is an continuous and infinite production process.
Yes, we can produce a version. Unlike a physical tool or device it is never finished. We decide to not develop on a software any more. As long as it is in active use it will receive invisible changes and it will receive visible changes. The world we operate in is constantly changing and has effects on software so that a "finished" piece of software of software is, effectively, abandoned.
Example: The Atom editor or Microsoft Visual FoxPro. They are products, they have an assigned version number and their development was stopped. Does that mean it is finished?
Why am I thinking about this?
It's not just philosophical. We want to converge towards product teams. Software doesn't have a single copy, quite the opposite. Once software exists copies are (mostly) free - as in gratis. That is unlike a hammer or a nail where each piece incurs a certain cost.
That has effects on our work. We are operating under the assumption that we can assign a budget and a timeline and we will be done. I don't believe this is true. If we stop to developing a piece of software it will rot away. If we build a hammer and do nothing it will exist forever (save for the laws of physics and breakdown of materials like oxidation).
Where does this lead us?
We, the IT vertical, have constantly shown that estimations are incorrect and will likely stay incorrect. No matter how much we plan or what kind of methodology we use.
We should start thinking about continuous and infinite production, that gives people a known terminology they can deal with. A "software factory" will not be something that creates a thing and then is done. We have to start thinking about these things with a focus of continuity.
Shorter prediction cycles with more concrete outcomes and less of a "project plan" might be useful. We can create software, we should avoid adding things because we might need them in the future. This is where the contiuous process comes in.
- Did you create a dashboard?
- Is it working?
- Can you answer both with a yes?
Good! Now let me introduce you to the following:
- changes to the data source that you're tapping into
- changes to dependencies that you use (e.g. security findings)
- changes to the requirements
That means it's not done. It means that it will keep changing until we decide that it will be abandoned.
Am I wrong with this?