Demystifying DevOps – Part 1
After Cloud Computing, DevOps is the term that gained the attention of customers and industry analysts. Similar to Cloud, DevOps means different things to different people. I have observed architects, consultants and IT managers using this term without fully understanding what it really means to the business. In this series, I will try and explain DevOps in simple terms without using the confusing jargons and terminology.
Have you ever noticed GMail being down for maintenance? Did you notice Facebook silently rolling out new features like editing comments and even your status updates? Google cannot afford to send out an email to 425 million subscribers stating that they wouldn’t be able to send and receive mails for a period of time because they are performing an upgrade. Imagine Facebook becoming unavailable for feature upgrades. It’s not just Google and Facebook; most of the consumer web applications are going through frequent, rapid transformations without ever disrupting the user experience. In fact, most of the contemporary web shops deploy a new version of software multiple times in a week. Flickr does more than 10 deployments in a day. To understand and appreciate this phenomenon, think of the updates that occur to your Android or iOS apps installed in your smartphone/tablet. If you enable auto updates, you don’t even realize how and when you apps are getting upgraded. You would notice them only when you open them the next time. Days are gone where you had to patiently wait for the software vendor to ship a service pack that fixed all the bugs and an expensive new version that offered user interface enhancements. Web and mobile application development has challenged the status quo and changed the software industry forever.
The software application landscape has gone through a radical transformation. The expectations from users have increased manifold. There was a time when user experience was compromised for functionality. But in the current world, there is an equal or may be more emphasis on user experience along with the required functionality. End users expect beautiful looking applications that are equally powerful. It only takes them a few minutes to switch to a competitive product if they are not convinced. This enhanced user experience is expected across multiple form factors including desktop, web, mobile and televisions. It’s hard to be in the business of software development in the current times. There is tremendous pressure on the software product companies to meet the increasing demand from the users. Firstly, they need to deliver the best possible user experience across multiple form factors. Second, they need to deliver frequent enhancements to the functionality and the feature set. Finally, they need scalable and reliable infrastructure to meet the load that’s generated from multiple devices simultaneously talking to the backend application. How do businesses cope up with this?
Software product companies face fundamental challenges that prevent them from meeting the demand from their customers. These challenges are inherent to the traditional methodology that they have been using for decades for developing, testing and releasing software.
Let’s take a closer look at these challenges.
- Friction between the development team and the IT operations team – For a long time, there has been an invisible curtain between the developers and administrators. When developers write code, they don’t think of the infrastructure where their applications will ultimately run. It is the job of the IT engineers to deploy and making it available to the end users. Developers are responsible for writing applications that work well and work fast. They are appreciated for shipping more features, more often. In a development team, a programmer who contributed to more features and releases get promoted faster than his peers. On the other hand, IT operations team is responsible for deployment and maintenance of the applications that come from the development teams. Ask any IT team what they hate the most and the answer is change. IT Ops hates changes to the system and configuration. That’s mainly because change makes the system unstable and may result in downtime. The key metric to measure the effectiveness of the IT team is the uptime and stability. While a developer may get promoted for shipping more often, an IT engineer will be fired for increased downtime of the production system. So, the development team and the IT team are orthogonal to each other causing tension within the system. This becomes the barrier to ship software more often.
- Disparity between development, testing and production environments – When a new feature release of software breaks, it’s common to see “It-works-on-my machine” reaction from the developers. This is because of the gap that exists within the isolated environments that are used by developers, testers and the actual customers. In most of the companies, these are in silos with a huge discrepancy in the underlying platforms and the database. Developers use a specific version of the operating system, language, runtime, libraries and databases, which is different from the versions used by the testing team. The production environment that’s configured and managed by the IT team would be completely different from the development environment. As the software life cycle moves from one stage to the other, it leaves a wide gap. This gap proves to be very expensive for the businesses resulting in increased time between each cycle. It is extremely hard to ensure that the development, test, QA, staging are closer to the production environment. Achieving parity across these environments will result in shorter cycles in deploying new builds more often that ultimately results in increased customer satisfaction.
- Lack of communication & collaboration – While the above two factors increase the time it takes between each phase of software lifecycle, another important factor is the communication and collaboration among teams. There has to be direct channel of communication between the teams and also the customers. The development team, testing team and operations team should communicate more often to ensure that they are working on a common goal as defined by the business which is in turn driven by the customers. In most of the organizations, the development teams are never exposed to the user behavior and usage patterns. It’s important for the business to create a culture that encourages and rewards collaborative approach among the key stakeholders and the customers. This is more of a cultural issue that a technological issue.
Having seen the challenges that the software development companies face, let’s discuss how to overcome these hurdles.
- Emulate production environment for development and testing – By using modern tools and frameworks, the discrepancy between the environments can be avoided. Since the underlying environment becomes consistent, the time for each phase of software life cycle reduces. It also enables operations to contribute early in the cycle to understand how the application will behave when it eventually moves to production environment. This will bring better collaboration among the teams and also makes the teams more accountable.
- Ship more often – The only way to survive in the current world of ever-increasing demand from users is to follow the philosophy of learn fast, try fast and fail fast. By rapidly iterating through the versions, businesses can learn from customers and quickly adapt to their needs. Software development teams should embrace agile methodology that enables them to ship more often.
- Apply rinse & repeat model – Automation reduces human errors by creating processes that are iterative, frequent, repeatable and reliable. Whether it is replicating the dev, test and production environments, or managing the configuration of the software, businesses should invest in tools that automate most of the tasks related to the application life cycle management. This goes a long way in bringing higher efficiency.
- Monitor and capture the right metrics – Typically, monitoring is confined to production systems. IT Ops team monitors various metrics that reflect the health of the infrastructure and applications. This includes the average CPU load, memory usage and disk utilization to advanced metrics like the concurrent connections to the production database. By identifying the metrics that matter even during the development and testing, the operations team can detect issues with the software early in the cycle. This saves valuable time by enabling them fix the problems before they are discovered at the last stage.
- Establish an open channel of communication – Finally, by creating the healthy culture that encourages open communication, businesses will be able to achieve higher efficiency. There should be a channel for both internal and external stakeholders to openly and transparently communicate with each other. There should be a feedback channel opened for customers to interact with the respective teams. Every team should be made responsible to understand the customer needs and the expectations. This enables the development teams to adjust the cycles and prioritize the features based on the customer feedback.
In summary, I have discussed the changing landscape of application development, the challenges involved and the techniques to overcome those. If you are wondering how these issues are related to DevOps, stay tuned for part 2 where I will define what is DevOps and its relevance in the modern software development methodology.