Learning and Adapting to DevOps

by Akshay Ranganath
417

I’m in a professional services role associated with content delivery, and as such, I’ve been a bit removed from actual development. You could say I’d lost touch with my coding background. However, over the last 6-8 months, I’ve been focusing on DevOps at Akamai, and swimming in the deep end of the pool. Since there are are other developers out there embarking on a similar journey, I’d thought I’d share some of my journey with you.

cocoon

As with most people, I had heard a lot about the cloud providers – Amazon AWS, Google Cloud Services and Azure, coupled with names like Github, Chef, Puppet and so on. I had assumed all of these amorphous things fit into a neat system that magically transformed into DevOps. And yet I knew this understanding was totally wrong.

I quickly realized I needed solid footing, so I took the Linux Academy course DevOps Essentials , which was very useful. It gave me a gentle introduction to DevOps as a technical practice, and how the common tools fit in.

Theory on DevOps

Now that I had a rough idea on the what of DevOps, I wanted to get the reason on why this had become so important. My search brought me to the book The Phoenix Project. It introduced the concept of the pains that a typically organization feels in delivering software, and walks through the transformation as a fast-paced novel. I’m still a big fan of this book and would highly suggest this for anyone coming from an IT Service background. I did collect a list of quotes from this book.

Within the Phoenix Project , there were references to an earlier book called The Goal. This was written in the manufacturing transformation era of the ’80s and spoke about how to optimize the assembly line. Since it was referenced so heavily, I decided to pick this up – and I was amazed! The parallels between code development and assembly line manufacturing was spot on. It was one of those moments when you feel like “I could have thought of that!” And yet, it took over 20 years of painful lessons in bad software management to arrive at the same wisdom. If you’d like to understand the fundamentals of DevOps better, read this book and learn about the theory of constraints.

After reading these two books, I realized that there were so many things that I was doing in my previous life that resonated with the hardships faced by the protagonists in the novels. We used to have constant delays, missed features, a Javascript pop-up saying “Hi” that made it to production, and a lot of other horrendous code management and people management issues. We seemed to have no control. And yet, we would fill out a load of documents and be certified at the highest levels of Capability Maturity Model (CMM) ratings! The cynic in me had finally found some answers!

Getting Involved…

pottery making

The next step was to get a more in-depth view and learn the how of devops. Actually, this step included more understanding of the what and why as well. For this purpose, I would highly recommend the book The DevOps Handbook. It explains in a very clear manner how organizations can approach the DevOps transformation. The authors cover various aspects from culture, the tooling, and the process necessary to make this transformation. I have published a collection of quotes from DevOps handbook as well.

Apart from the theory, I felt that I needed to understand the various things tools and techniques necessary that leads up to a DevOps organization.

Gaining Hands-On Experience

For hands-on experience, I decided to build some software and adopt the methods being taught by the books. So I used the following things:

Purpose Tool / Technique Comments
Programming Python I was already familiar with Python and it just made sense to use it. I had lost touch with Java over the past decade.
Environment creation Virtualenv Creating virtual environments is essential to provide the exact same foundation for code development. So I had to learn the use of virtual environment. Using virtual environment and the command pip freeze, I was able to generate the dependency list for my project. Once this became part of github project, my code could be easily deployed and worked with no surprises.
Code repository Github / BitBucket The holy grail of most DevOps initiatives is that everything must be an artifact that is tracked in a repository. This includes the project source code and the code necessary to build environments, the test scripts and the various design documents.
I used Github, since it’s widely used. For all my private coding efforts, I used BitBucket as they offer a private repository for free users.
Automated testing python unittest Automation testing is an indispensable part of the DevOps transformation. So I had to learn how to write unit tests using a simple framework that is supported by the platform. For my projects, unittest is sufficient.
Theory on DevOps recommends more robust testing like Acceptance Test Driven Development / Behavioral Driven Development. Since I am just picking up, this was an overkill and I skipped it!
Build automation Bitbucket pipeline

Travis

To get a feel for the concept of build automation, I enabled the build pipeline on BitBucket. Basically, it takes my requirements.txt file and installs all the libraries defined for a virtual python environment. I also defined it to run my automation tests once the environment was created.
This process ensured that was able to check:

  • Environment creation was successful
  • Checked in code did not break any pre-defined tests
Build hardening git hooks As I was still learning, I experimented with the use of `pre-commit hook within git. This would ensure that a pre-defined set of tests would run on my local machine before the code was committed to be checked in. I wish this had existed long ago and it would have saved so many late night effort on code cleanup!

Standing on the Shoulder of Giants

standing on shoulders

My learning effort was based on the amazing work being done in this field by so many authors, writes, bloggers and practitioners. I wanted call out a few of them that you could follow as well:

  • Jez Humble: Author of the book and maintainer of eponymous website Continuous Delivery, he posts interesting nuggets on Twitter.
  • Gene Kim: Co-author of the books Phoenix Project and DevOps Handbook, he’s a good person to follow on Twitter.
  • Martin Fowler: A veteran at ThoughtWorks, his blog at MartinFowler.com has very good resources and concise definition on the concepts of DevOps.
  • DevOps.com: I recently started to follow the blogs from this website. They are quite well written and a good resource.

Developing a DevOps Strategy

At the culmination of my effort, I was able to put out a strategy for adopting DevOps with Akamai. I documented this in another blog post, Planning a DevOps Strategy.

That’s it for now, I hope this has been useful. I’m in the process of taking this further forward, and you can expect to see updates here as I learn more.

Categories: DevOps Articles

Suggested Article