Continuous Development and Automation through DevOps
Understanding various DevOps phases and why DevOps is essential in order to achieve continuous development. What should be the DevOps team structure? The Development team should be cross-functional, taking care from developing the application to deploying it on the production server, and monitoring it continuously. But how people carry misconception about DevOps team structure which should be avoided in order to achieve efficiency.
- Author:
- Shweta Sadawarte, Software Craftsperson at Nelkinda Software Craft Pvt Ltd
- First Published:
- by Nelkinda Software Craft Private Limited
- Last Modified:
- by Shweta Sadawarte
- Approximate reading time:
1 DevOps
As the word suggests, it is the combination of two words Development and Operations. DevOps is not a tool, or a technology, or a framework. Instead, DevOps is a cultural shift and practice that aims to work on a single goal of deploying code to production as fast as possible. DevOps mainly focus on Automation. Automate Code, Testing, Workflows, Infrastructure and everything.
2 Why is DevOps needed?
Manual code deployment leads to human errors in production. Things that work well on the developer machine may not work on production environment due to inconsistency in environments like an upgraded version of a software, TLS etc. Due to high competition in the market, the requirement may change frequently. With the help of DevOps, you can ensure that you respond to the requirement change much faster. Ola came up with the feature of booking cab in advance, while Uber did not have that feature in place, but was quickly developed and available for the users. Another recent example is regarding adding a new feature for GST taxes in existing accounting software. There was competition in the market to deliver this features as fast as possible to sustain existing customers as well as to attract new customers.
Below are the advantages of having proper DevOps:
- Reproducibility: Version everything so that earlier version can be restored anytime.
- Maintainability: An effortless process of recovery in the event of bugs or crashes due to a new release.
- Time to market: DevOps helps organizations in shifting their code deployment cycles to weeks, days, hours even in minutes instead of months. Which makes organizations becoming more responsive to business needs.
- Greater Quality: DevOps helps the team to provide improved quality of application development as it incorporates infrastructure issues. For that, it uses infrastructure as code process.
- Feedback: There is constant feedback from the customer as the team is closely collaborating with the customer. Also, every phase is continuous & you proceed to the next phase only when one phase is successful. Each phase gives feedback before moving to the next stage.
3 DevOps Life Cycle
In DevOps, each and every phase is continuous.
- Continuous Development
- Continuous Testing
- Continuous Design Improvement
- Continuous Integration
- Continuous Deployment
- Continuous Monitoring
3.1 Continuous Development
In DevOps, development is a continuous process. The product is broken down into small deliverable, and you work on it in multiple sprints. For managing the code you use a version control software like Git or SVN and then wrapping the code into an executable is done using some build tool like Ant, Maven, Gradle.
3.2 Continuous Testing
Whatever you develop should be tested continuously before integrating. Every small addition should be tested. More frequently you run the test, the soon you find the bug, and less is the debug time. If the test has to be run frequently, they need to be fast. The test should be automated using tools like JUnit or Selenium. Automated tests make your work fast and easy.
3.3 Continuous Design Improvement
You need to follow good coding & design practices and principles in order to maintain a code quality. Refactoring should not be done as a separate task or work, but it should be a part of your development process. When you have a good suite of tests, you can easily check if the code is still working after refactoring. Not only source code, but also the test code should be refactored as well.
3.4 Continuous Integration
The process of adding your code with the existing code is integration. And when that process is done for every single change in the code, it becomes continuous integration. The Integration includes building, validating, unit testing, integration testing, packaging and deploying the integrated code to test environment. Jenkins is a very popular tool used for integration. Another important aspect in CI is that the developers should be notified with the feedback immediately and continuously so that proper action can be taken in right time.
3.5 Continuous Deployment
Continuous Deployment is an extension of Continuous Delivery. It is when the code is deployed to the production environment. It completely depends on the application if that should be automatically deployed to the production server or not. If the application is for banking, in that case, the developers might not have an access to production tables, and a lot of security checks might be needed. But it is good to have a production like a server, where it can be deployed. It makes the code ready for deployment.
3.6 Continuous Monitoring
The team has to continuously monitor/observe operations like inappropriate system behavior or bugs which are found in production. For this, the team uses popular tools like Sensu, NewRelic, Nagios and Splunk to resolve any system errors like low memory, unreachable server etc. before they have any kind of impact in the production environment.
4 Misconception about DevOps
A lot of organizations come up with a separate DevOps team. They collaborate with the existing development team for implementing DevOps. Now Agile emphasizes on cross-functional teams with an intention that such teams understand their situation quite well, and can inspect and adapt as per the situation. When an entity is not a part of the development team, which happens by having a separate DevOps team, they might not understand the exact issue that the development team is facing.
The Development team should be cross-functional, taking care from developing the application to deploying it on the production server, and monitoring it continuously. If that is achieved, Agility is achieved. When everything is looked into by the same team, they can inspect and adapt as they want, producing effective results.