I saw a post recently on a forum from a developer asking “How do I learn DevOps?”. I started to reply on the forum but ran past the character limit so I thought I’d publish a post on my thoughts in the hope that it helps developers move into either a greater understanding of the systems administration side of things or get started with managing their systems.

The first thing to say is that “DevOps” is not a toolset, it’s a state of mind and it will take time to move from Development to DevOps.

DevOps leans heavily on Agile Software Development practices, so if you’re not doing Test Driven Development, Scrum or Kanban, Daily Updates, and at least considering the Agile Manifesto in most of your daily work life, then start!

As far as “Server Side” is concerned, it depends which operating system you are most familiar with, but take time to install a copy in “expert” mode:

  •  Partition the disks manually and understand any volume management tools that might be available
  • If it’s linux, install the “server” version and spend time getting to know your way around the file system layout and the command line
  • Install software manually to understand how the software installation process works
  • Get to know and love your package manager
  • Get to understand how to tweak and improve the performance of your system without relying on throwing more RAM/CPU/SSD’s at the server

Once you have reached a point where you have a genuine understanding of what’s involved in installing and configuring your Operating System of choice, you can start to move on to infrastructure design.

  • Research how to scale out rather than up
  • Look at the move from monolith applications to service-orientated-architecture to micro-services and containers
  • Pick a Cloud Provider (I’d recommend AWS or Azure as they appear to be the most feature-complete) and learn how to apply what you’ve learnt from the above into the cloud environment
  • Read blogs, lots of them, but especially ones from Netflix, Etsy and similar companies who face challenges daily about how to run and operate in the cloud – unless you have very specific requirements then it’s unlikely that you’ll work with physical servers!
  • Learn about monitoring – Application, Infrastructure and User monitoring are all useful for different aspects of understanding the way your platform and code work together
  • Learn about logging – a centralised, secure logging infrastructure underpins many if not all of the technology requirements for all major compliance programs such as FISMA, SOX, HIPPA and PCI-DSS
  • Learn about how dashboards can pull information from Monitoring and Logging into a single location
  • Learn about how to send alerts – sign up to PagerDuty, VictorOps or OpsGenie and feed the output from your monitoring solution into it
  • Don’t be distracted by sales engineers telling you that their product can do “All the things” when it comes to monitoring – there are many good offerings out there, but none of them given you everything you might want.

Now that you understand how the operating system works, how to design for success and how to implement a cloud-based, fault-tolerant solution then you can move on to automating it.

  • Research configuration management tooling – It doesn’t really matter which one you pick to learn the theory, but I’d recommend Chef, Puppet or Ansible
  • Go back and re-install the same software that you did when you started learning how all this stuff works, but this time do it using the configuration management tool you’ve selected
  • Now repeat with some of the other configuration management tools out there so that you can make an informed decision about which tool is best for you at this point in time
  • Look at automated infrastructure management – Terraform, CloudFormation or Azure Resource Manager (ARM) and learn how to create Infrastructure as Code
  • Learn how to write tests for your configuration management and Infrastructure as Code roles, recipes, resources and modules

Now you are at a point where you can start to truly work with other Systems Administrators and act as a communication conduit between your fellow developers and the Operations people within your organisation.  It is this collaborative approach between all areas of the business that ensures that you can “do DevOps”, not the fact that you know how to install a CI server.

Above all, understand that this takes time.

Many of us who are working as “DevOps Engineers” started out nearly 20 years ago or more as “Systems Administrators” and we have had to go through the above process.  We have also had to understand how Developers work, what it means to be “Agile”, how to test infrastructure, what a build pipeline looks like and how we can adapt it to the tools that we work with – in short, it’s been a hell of a journey and we’re still learning every day!

Hopefully this is of some help and not too scary, good luck, may the odds be ever in your favour…