Understanding DevOps with aid of Agile.
Agile is an alternative methodology in respect to the traditional project management, which is used for the development of software. It greatly helps the developers and operators teams to respond to unpredictability through incremental, iterative work cadences. Agile methods are an alternate to traditional sequential developmental methodologies.
Scrum is a popular way of introducing Agility, as it is quite simple and flexible. Since it is so popular, many organizations claim that they are doing Scrum while in fact, they may not be even close to what the definition of scrum is. Scrum lays emphasis on empirical feedback, team management and strives to build properly build tested product increments within short iterations.
Scrum only has three roles, Product Owner, Team and Scrum Master. The roles of a traditional manager are split up among these three Scrum roles. Scrum contains five meetings, namely, Backlog Grooming (which is also called Backlog Refinement), Sprint Planning, Daily Scrum (which is 15 minutes of stand up), the Sprint Review Meeting and finally the Sprint Retrospective Meeting.
In the decade of 70s, Dr. Winston Royce, a very famous American computer scientist presented a paper entitled “Managing the Development of Large Software Systems”, wherein he criticized the sequential development process. He very clearly asserted that software should not be developed on the principles of developing automobiles (as automobiles are built on an assembly line, in which each piece is added in a sequential phase). He said that in such sequential phases, every phase of the project in-hand should be completed before the next phase can begin. Dr. Royce recommended that the phase based approach, where the developers firstly gather all the project’s requirements, then complete all the designing and architecture of that product before proceeding on to write codes etc. lacks communication between the specialized groups that complete each phase of work.
This led him and many other developers and operators to think of a method where they can co-ordinate with each other and develop products side by side while running these products to see the response in market and to improve on the areas that appear to be lacking. This process made the products to be made according to the taste of the majority of consumers in the market.
The agile development methodology has provided greater opportunities for accessing the direction of any project, throughout the developmental lifecycle. This is achievable by regular cadences of work which is also called sprints or iterations. This simply means that at the end of the project cycle the teams must be able to present a potentially good, shippable product increment. In agile developmental methodology, the focus is on repetition of abbreviated work cycles and also on the functional product yield and that is how this developmental methodology becomes iterative and incremental. In non-agile development methodology, the development teams have only one chance to get, each aspect of a project done rightly. Comparatively, in an agile paradigm, each and every aspect of development, requirement, design etc. are continually revisited, throughout the project’s lifecycle. The teams re-evaluate the functioning of their product, after every two weeks and therefore have the option of steering it into best direction possible.
The outcome of this “inspect and adapt” approach for the development of products, greatly reduces the cost of development and the time that is consumed in marketing. Since, the teams can develop software at the same time when they are gathering requirements, a phenomena has been termed as ‘analysis paralysis’ is very likely to impede a team from making any progress. Another factor in this methodology is that the team’s work cycle is limited to not more than two weeks and this gives recurring opportunity to the stake holders for calibrating product releases in real world and having a successful product in the market. Agile working process, gives unlimited opportunities to the companies for development the best product that can be sold in the market rather than traditionally having a piece of software built and sent into the market for trial and then amend it again to match the need to the consumers and fix the flaws. Agile empowers the developers and operations teams, to continuously re-plan the releases, so that they can optimize the value of product throughout the development, allowing them to be as competitive as possible in the marketplace. Development of products using agile methodology ensures the preserves a product’s value in critical market and ensures that a team’s work does not end up on a shelf, having never released.
Agile Values –These are the foundational values and philosophy that are embodied in the Agile Manifesto.
Agile Principles –These are the agreed upon strategic approaches that support these values. The Agile Manifesto cites a dozens of these specific principles. It is not important to but if you are not following them, then you are not doing Agile.
Agile Methods These are the methods or rather specific processes that implement Agile Principles. There are not mandatory but are possible implementations. This is basically the practical methods of implementing the Agile Principles.
Agile Practices Agile Practices are highly specific tactical techniques that are used in conjunction with agile implementations.
Agile Tools The specific technical implementation of Agile Practices used by teams for facilitating their work according to these methods.
The repetitive nature of agile development lets the features of a product to be delivered incrementally. This enables some benefits which are to be realized as soon as the product continues to develop.
It has been suggested in a research that around 80% of all the market leaders were able to market first using agile methodology. Also, they got higher revenue from incremental delivery. This is all possible because agile developmental philosophy supports early and regular releases and perpetual beta.
One of the main principles of agile development is that testing of product is integrated throughout the lifecycle. This enables regular inspection of the working product while it is still developing. This also allows the owner of the product to make any adjustments which he/she might feel are important and gives the product team early sight of any quality issues that might arise thereafter.
As agile development principles focus on encouraging active user involvement during the entire process of product development and also on co-operation and collaboration between the developers and operators. This provides an excellent visibility for major shareholders to monitor both the product and its progress, which in turn leads to effective management and fulfillment of expectations.
When the product owners are able to see small incremental releases, they can keep an eye on the development of the product and also workout with the teams to see if the project is steering into a wrong direction. This early detection of the any future problem will help to make the product as desired and keep the risk of failing at bay.
Definition of DevOps
Before the emergence of the term DevOps, terms like, ‘agile system administration’ and ‘agile operations’ were used to define this process in which developers and operators collaborated. Agile is defined as the division of task into shorter phases like work, frequent re-assessment and adaption of plans.
A very good definition of DevOps could be given in the following words, “The practice where operation and developmental engineers, participate and collaborate in the entire service lifecycle (which is from design, developmental process until the production support)”.
Further, the term Ops is a very broad term for system administrators, system engineers, release engineers, operations staff, DBAs, security professionals, network engineers and various sub-disciplines and job titles. As mentioned in the beginning, the term Dev is a short form used for describing development or rather developers more extensively. Generally, it refers to all the people who are involved in the development of product(s), which may include quality and agility and other kinds of disciplines.
Let us try to understand DevOps by the following example, Dave works for a company that designs new and exciting products for its online customers, much faster and better than its competitors. Dave is developer who rights codes for new products, new features, and security updates and fixes bugs. Unfortunately, Dave has to wait for weeks to get his work to be placed into production. This delay increases the pressure of being competitive as some competitors are able to deploy new products and features faster. In addition to this, it becomes more challenging for Dave to both, manage the pending codes which is to be pushed into production and develop new features or products that he is responsible for production.
When, Dave’s work is finally deployed into production, an unforeseen error happens. This happens because, Dave is busy writing codes in his development environment which is not identical to production environment. Now, meet Dave’s co-worker Emily, she works as a system administrator in the operations department. She is responsible for maintaining and assuring the uptime of production environment. The number of servers that she needs to maintain is constantly growing as the launch of new products and consumers are consuming more of their services.
This increase in the number of servers has caused some problem for Emily. The tools with which she used to administer a limited number of servers are not capable of managing large number of servers. This challenge affects, how new code is deployed in her production environment. Usually, when a new code is released, it takes a little bit of massaging to fit into the new environment. This is why she requires code deployment to be scheduled and done only once a month. Once a new code is deployed, it becomes her duty to identify or diagnose any errors or problems caused by these new codes. Sometimes, she thinks that the developers have just tossed their work to her.
So, what can be done in order to make Dave and Emily work better, when they are working for the same company and want the same thing, which are happy customers. What if Dave the developer and Emily from the operations team could work together? So, that they can share their thoughts on a product, can break silos and share responsibility for their work. This would require them to change their mind on how Dev and Ops work.
This is where DevOps come into play. DevOps integrates developers and operation teams in order to improve collaboration and productivity by automating infrastructure workflow and continuously measuring application performance. If Dave and Emily’s teams were DevOps oriented, they would do some things differently. They would focus more on automation. DevOps teams focus on automating everything, from the testing of new codes to how the infrastructure is provisioned. They would write down software in small chunks which are integrated, tested, monitored and deployed usually in hours versus the traditional method of writing large software over weeks and months and then test them for weeks and months. Also, they will have the same integrated developer and production environment, based on the same configurations.
Writing small chunks of software would allow them to increase the frequency of deployments and deploy new codes. It also enables them to adopt iterative processes to monitor, measure codes every day. Improves their ability to respond to market needs on daily basis. Instead of building and configuring software and infrastructure manually on ad-hoc basis. Dave and Emily would write configuration codes that describes how things should be built and as a result, they will have the ability of building infrastructure for many & larger scale servers and at multiple locations, using different types of hardware.
Another important change that the DevOps team can do is to use a source control system to help manage all and document all the changes in application code and configuration management code. The change that Dave and Emily would implement is to adopt a discipline of application performance monitoring and optimization in almost real time. This allows all the developers to understand the performance impact of their changes. This results in better development of codes and software, which leads to better operations and that finally makes the customers satisfied and happy. This philosophy also leads to faster innovations, launch of new products, better collaboration, better communications and faster and timely release of quality software.
The DevOps from Agile
DevOps Values –The fundamental DevOps values are very well told in the Agile Manifesto with a slight emendation to focus on overall services instead of simply focusing on working software.
DevOps Principles –These principles are no some well framed principles or an agreed list of principles but widening of Agile Principles to include systems and operations also in the work frame rather than just stopping at code checking.
DevOps Methods –Many of the methods that are used here are the same. As one can use Scrum with operations, Kanban with operations etc. There also some distinct methods like Visible Opsstyle etc.
DevOps Practices –Very specific techniques that are used for implementation of the above said concepts and processes are termed as DevOps practices. These practices usually mean continuous integration and continuous deployment.
DevOps Tools – The tools that are used in the commissioning of these processes are termed as DevOps tools. Many good examples of which are, Jenkins, trvis, teamcity and configuration management like puppet, chef, ansible and cfengine etc.
Now, we can conclude that DevOps is indeed a bit tricky to define and to understand but on the whole, it is the collaboration of developers with operators to bring about the best in new production and deployment of codes and software. At Venttraffic, we work in agile keeping the DevOps philosophy in mind to give out the best to our customers and the earliest and best price.