There’s a lot of excitement in a new project. The code flies from the fingertips and it isn’t too long before a developer can look back in amazement at how much has been written. In these early stages of development it is important to understand how software will be deployed into a production environment.
When it comes to software development, things like monitoring, logging, and configuration management are not at the forefront of a developer’s mind. Good practices are essential, especially at the beginning of a project. Every time a developer writes code to solve a specific problem, they need to think about many different cases that their code may eventually handle in a production environment. In each of these situations a developer will end up making decisions about default values to use, how to handle unexpected cases, or what messages to write to a log file.
To determine how the software should handle these cases, the production environment and operations processes should be considered. Different organizations will of course have different operations capabilities. Large organizations have specific ways to generate alerts, manage configuration changes, monitor processes and log files. In these cases a simple conversation with operations will answer all the questions that a developer will have when starting a project. In other cases, there may not be clear or common practices. This presents an opportunity to improve operation processes with great tools.
A good first step for a developer is to build interfaces around the essential aspects of their software. The initial implementations can make decisions about things like configuration file format that can be changed later. Next, operations staff should be consulted to prevent the need to go back and do large batch changes like introducing unique error codes to logging statements. Finally, a developer can implement concrete implementations of configuration management, logging, and alerting that work best for the production environment.
Software ends up running in production much longer than the active development of the software. With this end in mind, developers must start projects realizing that the real maintainers of the software they create are the operations staff that manage the software in a production environment. The tools at their disposal are configuration, monitoring, and management of the software processes. Having good interfaces for handling configuration, errors, and application management gives developers peace of mind knowing how to write and organize their code and allows operations staff the tools they need to maintain the software into the future.