All software projects follow the same lifecycle pattern. What differs from project to project are the amount of time between stages and the release numbers.
- Embryonic projects consist of presentations, problem statements, solutions, and other forms of optimistic documentation
- Infant projects have proof of concept code
- Baby projects have a source code repository and programming guidelines. It might be possible to check out the code, build, and run it. Fat chance.
- Toddler projects have automated builds and unit tests
- Adolescent projects have bug tracking systems and prerelease users who are mostly unaware that they are unpaid testers
- Teenage projects have a release candidate that evolves, much longer than anyone expected, into "1.0"
- The teenager ages into adulthood via 1.0 bugfix releases and then finally into 2.0 which has documentation that someone was specifically paid to write
- The project regenerates itself Dr. Who style with fresh new team members and even code bases for hopefully many happy years and release parties
- But competitors, mergers, buyouts, technology disruption, security risks, old age, and, finally, death eventually win