Over the years, developers and their companies have aimed for faster delivery of products and features while improving quality and reducing cost. There were two broad approaches to achieving this goal:
• Using agile development to improve the processes and procedures of software delivery.
• Writing more custom code to automate repeatable tasks.
Agile development approaches such as scrum and devops focused on improving human processes and procedures to improve product delivery times. Scrum was, however, flexible enough to be customized and adapted to the needs of each organization. The short-term work goals set as part of scrum combined with the focus on having a shippable product tested and ready to be deployed at a moment’s notice helped development teams deliver more features and products in a shorter time frame. Yes, the development processes can be improved with the adoption of methods such as Scrum. But, to achieve greater productivity, developers need access to tools that when combined with human processes can deliver greater productivity.
In the past, when it came to tooling, developers created their custom scripts and programs to automate mundane and repeatable tasks. Each organization or even each developer or team adopted their own tooling and integrated that into their processes. The various scripts and custom code needed constant maintenance and even their own configuration changes to adapt to the ever-changing hardware in their data center. This custom approach worked very well in the era of fully on-premise deployments where hardware and software were delivered and configured separately. There was no underlying infrastructure software layer that brought an integrated approach to automation and orchestration of the IT environments. The cloud changed all that.
Cloud computing built on the concepts of virtualization by bringing an integrated approach to infrastructure delivery needed to run applications. One could now choose between getting an integrated “bare-bones” system that is comprised of just compute, network, and storage or an integrated application or development environment that comes preconfigured with the development or application environment of your choice. A pre-configured LAMP or MEAN stack or a stack for applications such as WordPress that are available from providers such as AWS.
Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), and other cloud platforms have abstracted and standardized various level of the IT stack that companies and developers can now leverage tools such as Ansible, HashiCorp. Terraform, and AWS CloudFormation to automate infrastructure creation and configuration. Besides the tools mentioned above, there are other tools such as Chef, Puppet, SaltStack, and Heat. All these tools fall under the broad and loosely defined category of Infrastructure-as-Code (IaC). Each of these tools has their strengths and weaknesses. You may choose to use a combination of tools in your DevOps environment. It is less about the tools and more about your team’s comfort-level, the benefits that you could derive from these tools, and the level of automation and integration you can achieve with these tools. It is critically important for both management and development teams to take a holistic view of their entire process and trying various tools before making decisions.
Enable Continuous Improvement with Automation Tools
Compared to the manual approach of provisioning servers, storage, and networking, infrastructure-as-code and configuration management tools can drive an order of magnitude productivity gain. Deployment and configuration activities that used to take hours, take minutes with these tools. The repeatable tasks can now be fully automated in both test and production environments reducing errors and standardizing deployments.
Balance People, Process, and Technology
The key to your success lies in finding the optimal balance and combination of people, process, and technology. The deep collaboration between management and development teams would decide the success of your automation project. Development teams are closest to their products and should be documenting the myriad ideas for workflow automation and improvement. Your first step should be in understanding your existing process and estimating the cycle-time for your DevOps process. Then tweaking and integrating these tools into your current processes. Next, you should focus on stabilizing this new process and ensure any bottlenecks are eliminated. Once you have a stable process, you can bring a life-cycle approach to your process and find new areas of improvements. It is important to understand and apply continuous improvement principles to your processes. Continuous improvement principles help you find ways to further improve your delivery times and reduce costs. Without this focus on continuous improvement, you stand the risk of having one-time gains that don’t offer a sustainable advantage.
These tools coupled with agile practices will boost productivity, reduce errors, reduce costs, and improve your time-to-market. It is important for you to focus on your entire process workflow. Process automation in IT is still in its infancy and there are more productivity gains to be had. Automation can lead to lower costs and improved margins. But, it’s not about tools, but people and processes. You will see better results when both management and IT teams are fully and wholeheartedly engaged in process improvement.
In this age of hyper-competition, continuous process automation and improvement holds the keys to higher revenue growth and profitability.