Coming from the University of Melbourne into this job, I had learnt the basics of computer science, but nothing could prepare me for what I will cover in this blog below.
The best way I could describe it was like moving to a foreign country and trying to learn the language.
You can be guaranteed that the first six months will be painful. It will be okay, and if you survive you will be stronger for it.
What is DevOps?
Firstly, I have found that DevOps is many things and is perhaps best summed up in the following poetic Haiku:
Ahh, DevOps my friend.
When you are good you are good
But sometimes, you suck.
Less poetically defined, DevOps is the marriage of development and operations for software.
It was birthed in the 'agile movement' out of the desire for harder, better, faster and stronger software (yes that is a Daft Punk song reference).
Okay, that’s all good and nice, but what does that mean?
DevOps lets you do two key things in software development:
Improve the quality of your product; and
Increase the rate of change for your product.
This means you are streamlining the entire delivery process of your software, namely; planning, coding, building, testing, packaging, releasing, configuring and monitoring – and making it repeatable with the click of a button.
Get used to words like 'continuous delivery', 'deployment pipelines', 'continuous integration (CI)', 'automation' and accepting that Martin Fowler is now your oracle.
Why would you need DevOps in a business?
The role of DevOps within a business basically means you are critical to the one metric that matters most – delivering value quickly to your customers.
Where time, updates, new releases and bug fixes are the wreck-it-Ralph of your humble computer world, you are the fix-it-Felix of all things nerdy, and critical to delivering your product.
With your magical hammer of computer skills, you can revive the crumbling complexities around you and ensure momentary stability.
Also, get ready to wear many hats.
Some of the hats and titles that I have acquired at SEED are; Mr DevOps, SysAdmin, Cloud Captain, Database Maintenance Guy and Monitoring Man.
Essentially, someone who works in DevOps can be summed up as a 'Super Full Stack Cloud, Automation Developer'.
Ansible for Infrastructure as Code, or you may end up using Puppet or Chef. Essentially, these Infrastructure as Code tools allow you to replicate builds within a remote server or Virtual Machine (VM).
Amazon Web Services (AWS) for running instances on the cloud. You may end up using Azure, Digital Ocean or one of the other cloud providers. Keep in mind that you will probably be in charge of all the networking and security involved with the cloud as well. The good thing is that there are many online tutorials on how to set these up. You will then know really quickly if you didn’t set things up correctly.
Docker is used for consistency across development, staging and production servers. Docker is a phenomenon that has swept the development world off its feet in the last three years. It’s awesome, it can make you a sandwich and save your life so enjoy it and use it responsibly.
Rancher for Docker container orchestration across multiple hosts. You may end up using Kubernetes, Mesos or Swarm for container orchestration. These are fantastic tools for efficiency and insight into the container world.
Drone for Continuous Integration (CI) in web development. Docker inside Docker – or “Docker inception” – still blows my mind, but it works. Using Drone, the code is pushed and deployed to our staging environments the moment a git commit is made. For production, we still have the push button just in case.
Fastlane for CI of Apple product development. If you have not tried this, it is amazing!
Elasticsearch, Logstash and Kibana (ELK stack) are used to monitor all our logs internally and for our clients.
That seems like a lot and I can assure you, it is.
The use of each one of these incredible products is a blog in itself. But I won’t go into detail now.
Currently, I am in charge of about 20 servers in the cloud and all deployment to those servers at SEED.
In addition to server deployments for clients like iBackpacker and Alice McCALL, we also deploy one or more times each week to the Apple app store for apps that we are developing for some of our startup clients.
We have set up our DevOps and CI process from the bottom up.
The following are some tidbits I’ve learned along the way:
Things will break! It happens. Facebook recently went offline, AWS has outages, Github has been unavailable to the point where you want to cry. These things happen. It's part of the fallen world we live in, so have a fallback strategy.
When (not if) your servers go down or your updates do not go as you planned, relax, breath and put on some Jack Johnson, or worship music, or whatever brings you peace and fix it with that backup plan you put in place.
I have once had a rollback fail after an update failed due to database changes. I thought I was going to die. But here I am, still alive and still happy.
Don’t compare yourself. You will see tutorials and blogs from the programming community and think that everyone else has all the answers. But, just remember, these people got to where they are because they worked hard and overcame their failures, then wrote about them.
All you have to do is work hard and, as Bill and Ted say, “be excellent to yourself" and you too will rise to the top.
Things evolve over time, so get used to change. Your product is always changing, which means your code base is always changing. In fact, the moment you download a new version of an application is probably the moment a new release will come out. Consider it a blessing and curse in this cutting-edge, open source community.
You will have to problem solve. There are things that you will not find on the Stack Overflow website or any other forums. It will be okay, you can fix it. Go back to first principles and use your logs.
Software is messy. Most software may have a shiny face, but can be a mess on the back side. That is why we need DevOps and why you have been offered a job to do this.
When things go wrong, consider it a test of your character. True character comes out in times of difficulty.
Docker is amazing, but be weary of images built on other images. This can give you some serious headaches later on. Especially in the fast-paced world of releases. Stick to making your own images from official images. It gives you more control over failures.
Always link your DNS name to an elastic IP address or load balancer if using AWS. IP addresses change if the instance goes down, and a new IP address is issued when it comes back up. This means your website is no longer connected to the IP address it was before. Yikes!
Hold on and enjoy the ride
I truly enjoy running the DevOps department for SEED and the challenges it brings each day.
If you're thinking about accepting a DevOps position and think it's something for you, I would encourage you to take the step, hold on and enjoy the ride.
Hopefully this blog has brought some insight into what you will be doing and how you can be the best at what you do.
(Main photo: Silicon Valley/HBO)
Want some help on building your startup, growing your business and creating products/services that your customers will love? ContactSEEDto make an inquiry.
Our DevOps and infrastructure focused engineer, Shawn, ensures we are continuously delivering for our app and eCommerce work, moving fast to help our clients take advantage of emerging tools like Docker and Rancher. Shawn’s a Portland native, loving husband and proud dad to three young boys.