“Simply put, things always had to be in a production-ready state: if you wrote it, you darn well had to be there to get it running!”
– Mike Miller, General Partner, Liquid 2 Ventures, LLC
The state of any software at any moment of time should be production ready and this would not be possible unless Software Developers and Operation personnel are working in unison. Often, Development teams and Operations teams work without much collaboration. Other factors such as geographical distribution of teams reduces the traceability in work and ultimately leads to defects and delays in the software delivery process and poor customer service.
DevOps plays a very important role to bridge the gap between Developers and Operations. It ensures faster delivery of software to end users or customers, which would otherwise be impossible if the organization continues following traditional models of software delivery such as the Waterfall model. From the task of developing the software to ensuring quality check and then ultimately deploying the software to the customer end — every task should be done collaboratively by both the Development team and the Operations team of an organization. Below is a simple illustration demonstrating how a typical DevOps configuration plan for any organization is in general:
Typical DevOps configuration plan for an organization
There are multiple reasons as to why any organization should immediately adopt DevOps practices and boost the Software Delivery process. Some of the important reasons are listed as follows:
1. If not always but most of the time, the customer is happy and satisfied
From a business perspective, customer will always be happy if a software is delivered bug-free. Though it is highly unlikely that a complete error-free software would be delivered to a customer or that if the customer raises an issue to the software publisher or the organization, then the delivery process of the bug fix will be easy and relatively quicker had the organization followed a DevOps methodology. In addition, the customer will remain continuously updated about the state of their software through Continuous Deployment tool.
2. Speedy Software Delivery
The overall time of software delivery to the customer is reduced when the DevOps Continuous Delivery methodology is used along with the Agile methodology of development. In most of the cases, end-to-end software lifecycle processes starting from Requirement Analysis or User Story creations to Deployment are automated, which helps to minimize human intervention and accelerates the overall software delivery time.
3. Productive Association of Teams working in silos
In any organization, DevOps effectively bridges the gap between the Analyst, Development, Testing and Operations teams. Prior to the onset of the DevOps principle or methodology, teams used to work as separate entities and each team followed a different set of working practices. The result was that teams found it hard to keep their working processes aligned with each other and information continued to remain in silos. With the introduction of DevOps, achieving organizational goals became more prevalent rather than just individual team goals.
Thus, the sooner an organization decides to start implementing DevOps, the better will be its productivity gains. Keeping this in mind, an organization should plan in advance before adopting this new methodology!.
Steps that any organization should follow to implement DevOps
1. Create a Competent Team
Before shifting to a new technology or adopting a new methodology, proper identification of resources is very important. One of the most important skills that a resource should have is the zeal for learning new things. Identified resources should have the patience to troubleshoot and debug so that they can dig deeper to finding the root causes of problems. They should be experts or trained well in any latest DevOps tools that are available in the market and should always be ready to learn whenever they find a new one. It is also important for resources to have the ability to think out of the box when configuring complex scenarios. This team will be responsible for all aspects of the software delivery starting from gathering Requirements to Planning the implementation path for the Requirements followed by deploying and maintaining the software thereafter. Above all, they should possess the mentality to serve the company and its clients honestly and unconditionally.
2. Start with Small Initiatives
Before configuring any large DevOps scenario, it is always safe and sound to begin with small prototypes. A small configuration could be made and tested to see what the outcome is. For any organization, before approaching customers with a DevOps solution, it is important to implement the DevOps methodology within the organization first to see how it works. For example, after developers develop a code for a new feature and send it for build, the developed codes will need to be deployed in the QA instance for testing and verification. While testing, the QA team may find issues and log them in any Defect Management Tool. This process can repeat every day and needless to say that for any repeating task, automation is necessary. DevOps can help to seamlessly achieve the process by triggering automated application builds at specific intervals; especially during the night. It can also help to automate the deployment process to the QA server with the help of build automation tools such as Jenkins or TeamCity.
3. Follow Agile Principles
Organizations need to follow Agile principles along with DevOps methodologies to achieve the best results. This will ensure positive collaboration and enable Analysts, Developers and Testers to build a cross-functional team among themselves. Following Agile principles along with DevOps methodologies will reduce the average development time and the number of defects in the product, while eventually improving the product quality. Agile methods ensure that software is delivered to customers in iterations and for each iteration, Continuous Integration and Continuous Delivery of software should be implemented to get the feedback from the customers as early as possible and eventually achieve faster time to market.
4. Prepare the Environment
Infrastructure upgradation is important to venture into any new technology or practice.
Tools that will be part of the DevOps configuration need to be identified or selected first and this should be done in such a way that any organization, small or big, can afford incorporating those changes within itself. Tools should be wisely selected so that they can have a proper combination of both open source and paid tools that are the best in the business!
Though it is not always possible to recreate a production like environment, however, an environment as identical as the production environment should be created in the organization that will help in Continuous Deployment. This will help the team to detect the issues at an earlier stage before it gets deployed into the actual environment.
A Continuous Testing environment will also need to be prepared. Since there will be multiple QA personnel in the DevOps team, special emphasis should be given to Testing. Every small change in the application should be considered as an important deliverable to the customer and it should be tested at different phases of the delivery process — starting from code quality testing using tools like SonarQube, committing the code in to an SCM tool, moving over to unit testing of the code using tools like JUnit or NUnit, and finally executing automated tests using tools like Selenium followed by performance testing on the application.
A Continuous Delivery environment should also be prepared to ensure that change or addition of code is automatically deployed to production based on success or failure of the automated testing.
5. Customer Feedback
From the Requirement gathering to delivering the software — a customer should be involved in every step. Organizations should also take utmost care to change customer Requirements and proper care should be taken to incorporate those modifications with minimum changes in the code. This feedback mechanism will boost the confidence of the customer and will enable the organization to deliver a better-quality product.
Summarizing everything, shifting from traditional software development process to DevOps culture is not an easy task. There will be lots of challenges along the way that need to be eliminated with the right positive approach. But once successfully implemented, organizations will be capable of delivering products at a faster pace, lower development cost and with limited issues.