In order to understand what DevOps is all about, let us look at the typical office scenario at a traditional IT company that does things the old-fashioned way:
Bob is a Developer. He is always working on new products, incoming projects, new updates, security features, and troubleshooting bugs. He is always constrained by having to wait long, sometimes weeks before being able to push his changes to Production. This tremendous delay makes life difficult for Bob since he is unable to stay afloat in the competitive market against aggressive competitors who are able to come up with product demonstrations much quicker. This delay in pushing changes to Production is also hampering Bob from working on the development of his next feature that he is keen to produce. When Bob's code is finally pushed to the Production environment, it has issues since Bob generally focuses on developing code for the Development infrastructure, which is not identical to the Production setup.
Susan, a colleague of Bob, is a UNIX system administrator. She and her team have to maintain a large number of servers. These pose their own challenges for Susan and her team members. The bandaid scripts that Susan has written for and used to work successfully when the number of servers was small does not scale now that she has a massive hardware infrastructure to manage. This affects her productivity, and delays/impairs how new code is implemented by her team in the Production environment. It involves lots of tweaking the code before releasing them to and making them work on Production. Susan requires code deployments to be regularly scheduled but due to constraints she is allowed to do only once a month. And once the new code is in place it's her team's responsibility to correct errors caused by these changes. No wonder Susan feels that the developers have simply passed the buck over the wall to her and her team.
What can be done to collectively make Bob and Susan and their team of Developers and Operations work better with each other for the common interest of the organization ?
What can be done to collectively make Bob and Susan and their team of Developers and Operations work better with each other for the common interest of the organization ?
Bob and Susan's teams can now do everything differently. They can bring in lots of automation to the fore:
This would help make the two environments, Development and Production identical.
Writing small chunks of code will help increase the frequency of deployments and improve the speed to deploy new code. This also enables the two teams to put in place an iterative process to improvise, measure and monitor the code and operations every day. This results in being able to respond to the market needs that impact their business.
Thus, by developing configuration management code that describes how things should be built, Bob and Susan's teams will now have the ability to build infrastructure that can scale to hundreds or even thousands of servers in multiple locations across the world using a variety of hardware.
Another feature or advantage that the DevOps team would have is to be able to control, manage and track all application and management code changes using a source control system. This discipline helps them to monitor application performance and optimization in real time. This allows Bob and the rest of his Developer team to understand the performance impact of their changes. This will ultimately lead to the goal of having a positive impact on your customers running your applications with high performance throughput on your Production environment.
So, how does DevOps achieve all this ? There needs to be change in the way of thinking. The DevOps personnel need to be open to a fast-paced world and be ready to adopt new tools to jump on the DevOps bandwagon.
They need to use new tools like Jenkins and GitHub. Jenkins is used, for example, to build and test code continuously. The DevOps will also need GitHub to manage source code control, and to manage, control, document and track all changes to the application code and configuration management code. They will also need configuration management tools like one or more of Puppet, Ansible, Chef and Salt which will help them automate code changes across hundreds or even thousands of servers across Data Centers.