Dev9 has a mantra for on-premises application projects: “start with the deployment." We call this idea, “Deployment-First strategy.” In this strategy, a team starts the project by deploying software to a production environment. Don’t start with code or tests. Start with a single deployment to production. This may seem counterintuitive because deploying an application that does nothing doesn’t seem to provide value for the customers. But, what we discovered that this simple technique paid off as the project progressed by preemptively revealing problems in ways that starting with code could not.
Deployment-First: An On-Premises Strategy
Deployment-First strategy for on-premises applications is effective and important because it addresses the complexity of deployment pipelines. Getting environments and access in place to allow test deployments can take up to 3 months. The time required to implement deployment-first strategies is the largest barrier to most organizations due to the perceived lack of value. Businesses and their stakeholders often assume applications are easily deployed once built, ignoring how difficult it is to line up teams and hardware.
The strategy aims to reduce deployment difficulties by exposing the issues before the software actually runs into them. This allows several important things for the team. First, it allows a small group to focus on and understand the path to production. A good rule of thumb is: 10% of the team should fully understand the on-premises deployment process. Second, it can also accommodate a staggered start in a project, where the team is ramped up after the environment is ready and they can be fully productive.
Monitoring-First: A Cloud Strategy
With the commercialization of the Cloud, long lead time for deployment is not an issue. Applications can now be deployed to a production-like environment on day one. Barriers stemming from deployment is gone, but the idea of starting with the hard part is still important. For Cloud applications, we have shifted our strategy from Deployment-First to Monitoring-First.
Cloud shifted application difficulties from deployment to running the software. Applications begin life deployed into an environment very similar to the one they will end up in. Unfortunately applications deployed into clouds or containers have some characteristics that make troubleshooting more difficult. They often interact with numerous applications making tracing more complex. In addition, infrastructure changes as the needs of the application scales, making tracking single issues more difficult. Storage is often distributed among members also making troubleshooting a process of finding needles in an ever-changing haystack.
When beginning with monitoring in a cloud-based project, technology teams are acknowledging the complexity of the deployment environment. Applications built with the Monitoring-First strategy are made with long-term maintainability in mind. Monitoring includes presenting application metrics, logging statements for detail, and building alerting into your cloud deployments. Monitoring is the maintainer’s interface to the application’s internals. It allows the team to see the problems as the evolve and act to fix them.
Beginning with a deployment-first strategy (for on-premises applications) and monitoring-first strategy (for cloud applications) provides both the software and organizations important benefits. First, it speeds up development by reducing time to respond to issues while developing the application. Second, because deployment- and/or monitoring-first reduces time to troubleshoot inevitable production problems, it also develops confidence in the application. Lastly, starting with these strategies sets the team up to think about running applications in the long-term.
All these benefits are important for managers to feel comfortable expanding platforms to address business needs. It tells the business and its stakeholders that quality and maintainability are important to the team. Overall, deployment-first and monitoring-first strategies builds confidence across technology teams and the business at every step of building and deploying applications.