"Toward a 3-Stage Software Development Lifecycle" an article written by Roost Co-Founder and CTO, Rishi Yadav, was recently published in The New Stack. We wanted to share an excerpt from the article along with the link so you can read the entire published article.
Two Critical Development Phases: Development and Production
The truth is the most important phases in the lifecycle are development and production. Development is where the application comes to life; production is where it actually lives. The software development lifecycle needs to focus on those two stages, the beginning and the end, and help applications move as quickly and efficiently as possible from one to the other. A five-stage software development lifecycle over-emphasizes the testing, integration and staging portions of an application’s life. Just as importantly, compared to more modern, cloud native approaches, this type of lifecycle is slower and more error-prone — exactly what we want to avoid.
Rethinking the Phases
Ideally, we’d be able to get all software completely production-ready before leaving the local developer’s machine. In reality, it makes sense to have an intermediate step between development and production to make sure the application has a chance to be evaluated by someone other than the original developer before going into production. But there’s no reason this step should require three separate environments — one intermediate environment should be enough. I think a good name for this environment is “production-like,” making the software development lifecycle into three stages: development —> production-like —> production.
The key to making this work, however, is to ensure that developers are as empowered as possible to test their applications — and that the developer environment and the intermediate environment are both as similar to production environments as possible. The goal is to make sure developers are able to test for as many sources of problems as possible so that the production-like environment is devoted to handling tests that can’t practically be done by developers, such as involving production data, ensuring configurations are correct and testing load.