BEFORE AND AFTER OF DevOps: A PEEK INTO AGILE DevOps
WHAT IS DEVOPS??
DEVOPS is consisting of two tasks simultaneously. DEV(DEVELOPMENT) + OPS(OPERATIONS) = DEVOPS. In short, DEVOPS is a set of practices which combines the software development along with the operations which result in better and faster software development cycle with high software quality and enables Agile Development. In short, DevOps is agile development + agile operations.
BEFORE DevOps
BEFORE DEVOPS, the model used for software development was the “WATERFALL” Model. This model is best suited when all the requirements are present beforehand. Here beforehand signifies the planning stage. All the requirements should be finalized at that time only. No later changes can be entertained. No work is in parallel for our software development in this model. Previously, After the product planning phase, we move to the product development phase and then the testing phase and then the product building phase. No effort is done in parallel. So, the software release lifecycle is also very very long. No new feature can be proposed in the product development cycle. There is no flexibility to change the requirements after the planning phase is over. Also, previously as there were no integrated build mechanism, development team may use an environment while operations team might try to maintain it in a different environment. So, at the time or integration, if the operations team get any bug, development team may respond that the feature is working fine in their dev setup and they may ask to sync the same setof setup. Now, different dev teams might be using different different dev setups. It will be very difficult for the integration team to sync to every dev team setup and a lot of time gets wasted unnecessarily.
USE CASE OF FACEBOOK BEFORE DevOps
Facebook released several new features in 2011. One of the most important features was the Timeline. They released the feature worldwide in a single go. They faced some tough challenges. At that time, Facebook had 500 million consumers and all the consumers tried to use the new features which caused the server meltdown as Facebook was not ready for the popularity of their new features. If they would have released the features in multiple releases, then from prior they could have predicted the huge payload and taken prior management so that uninterrupted service can be provided. Also due to this breakdown, Facebook could not get feedback on the features perfectly.
DARK LAUNCHING TECHNIQUE: FACEBOOK
After this incident of 2011 and the associated challenges, Facebook came up with a new technique named the “Dark Launching Technique”. Currently, most organizations use this technique for any new release. This technique has three parts.
- The new features first developed for smaller and specific userbase. Generally, these releases are called beta release or alpha release.
- They are continuously monitored and feedback is continuously collected and tested.
- Once the features are stable, they are deployed on the entire userbase in multiple releases
AFTER DevOps
DevOps changed the concept of software development procedure completely. The following image will make you understand that better.
I will discuss each component here one by one and explain how it is different than that of the older waterfall model.
- Continuous Business Planning
Business Planning provides us the requirements for any new feature. In the Waterfall model, once the requirements are fixed and development began, we can not add new requirements or modify any requirement. But in the DevOps model and with the help of DevOps tools, new feature requirements can be continuously placed and taken care of. Version of the product is decided in the Planning phase itself.
2. Collaborative Development
Collaborative Development is a continuous development process that facilities the development of individual features by different teams independently. And as the development also follows the dark launching technique, a version control tool is very important for development. And as we all may know, Git is the most popular version control tool. The usage of Git I have already discussed in another blog. You can find that blog in the below link.
Collaborative development ensures that features can be developed independently and requirements can be changed at any time possible. Mutiple programming languages can be used for muliple tasks. Bug tracking is done by using “JIRA” tool.
Why Version Control is Important?
- Versions are useful to keep a single source of application in a central server and keep the feature up to date with the corresponding version.
- Using the centralized repository, operations can access the code which they are planning to release.
- Easy to Rollout the faulty snippet of code or complete release.
- Every team can work independently on their new feature with one central working version. Any issues in the particular feature don't affect the development of the other features. Decentralized development is possible with version control.
Working copy in different workspace makes the distributed development a reality. The second phase is called the staged area, where only the committed changes are staged. Then staged change is then pushed to the central repository.
3. Continuous Testing
Each version of the feature is continuously tested by test teams to make sure it is functionally accurate and also performance-wise it is the best. This is called performance and functional testing. Before that developer himself performs a unit test for the feature. The integration team runs tests also to ensure that no not supported package is used anywhere in the code or there is no security vulnerability. Generally, these tests are run by automated scripts. Verification and validation tests can bedone by Jenkins server using different test tools such as Selenium. The tests can be run using any other method or self written script as well. The main advantage of this continuous testing is that the test is separately performed on each and every small release, so that later are not many issues of integration or testing at the time of release. Continuous testing model can verify if the new change is breaking earlier working copy or not.
4. Continuous Release and Deployment
Continuous integration(CI) is the most important part of the continuous release. CI ties with continuous deployment and continuous delivery.
- CI consists of automated build and automated tests.
2. CI helps to detect errors quickly and locate them more easily.
3. CI is very helpful to find the bugs easily and quickly.
4. CI notifies the responsible dev team to fix the bug as soon as it spots it. This helps the dev team, as the dev team don't develop more features on the faulty code, fix the bug and then proceed with adding another functionality.
If CI is not implemented, we face the issues depicted in the above diagram. The automation testing is performed at a far later stage and integration becomes very difficult to process with. It becomes very difficult for developers also to find out which change has caused the problem because developers have developed a lot of features after the buggy code. This whole drama will cause significant delay in the release.
If CI is enabled, then the following benefits will help in the integration phase.
a. Since after every commit, the auto-build is triggered and then it is automatically deployed on the test server.
b. If there is any bug in the code, developers need to make the change only in that specific commit.
c. This increases the frequency of software releases.
d. The concerned teams are always provided with relevant feedback.
e. CI helps in catching all the issues before production itself.
Continuous Delivery is the practice of keeping the codebase ready for deployment at any point in time. Beyond making sure all the test suite is getting passed, we have to make sure all the configuration is ready to be pushed in the production.
Continuous Deployment
Continuous Deployment means deploy any build to all the servers available with the organization.
Continuous Deployment can be further divided into two parts.
Configuration Management
Configuration Management is about managing the configuration of the deployed build and its requirements.
a. Configuration management establishes and maintain the application’s functional requirements and Performance.
b. Releasing deployments across all the servers.
c. Scheduling updates on all the servers.
d. Maintain configuration consistency on all the servers.
All the servers will be configured to run the build independently and configuration management makes sure all the dependencies and resources (eg. RAM, CPU, GPU) are properly met.
Containerization
Containerization is a process through which consistency across environments (eg. Windows OS, Linux OS) are maintained. Docker is the first containerization tool. This maintains configuration consistency on all the servers. Containerization is very important as the same functionality may be work across different environments because of local changes in the environment. Docker is very useful for this purpose.
5. Continuous Monitoring
Continuous Monitoring is the process of monitoring the states of the servers continuously and also the performance of our application in real-life environments. Continuous monitoring helps us to access the future load on the servers if a new feature is released or what should be the configuration of that server. It also sends feedback to integration and dev teams about the overall performance of the application and hence this data is very important in the DevOps procedure.
6. Collaborative Customer Feedback & Optimization
Collaborative Customer Feedback is very important nowadays. Because of that purpose only, any organization nowadays releases a beta version before the final release. They ask specific customer base to use the application and provide them with feedback about features and performance. Somedays paid surveys are conducted to collect customer feedback. Customer feedback is very important in the DevOps cycle. Genuine feedback about features and performance helps the developer to provide changes in features accordingly and deployment engineer to understand the server configuration required for smooth conduct of the service. Beta version provides early feedback which helps in the development process immensely as userbase is limited and repetitive feedback will be less in number than that of the stable release.
DevOps Tools
The tools mentioned in the above picture are really useful for implementing DevOps. I will talk about the DevOps tools in the coming blogs. Please follow me on medium to be present in the entire journey of DevOps. Please clap, comment, share if you like my article or if you need to give me any feedback please mail me at mainakdutta76@gmail.com.
Already published DevOps related blogs: