1. Tech is easy, people are challenging
(stolen from @jeremysrgt)
People over processes over tools. Unless you can get buy-in from the people you are trying to help, what's the point? One of the main goals of DevOps is to improve the quality of life for their organisation's developers and the organisation as a whole, developing core platforms and tooling that secure, improve and speed up their day-to-day. Whether that's via implementing new CI/CD tooling, automation, or architecture platforms, as long as you have a “people first” approach in your mind, you will always make a positive impact.
2. GitOps is the way
If you aren’t building your infrastructure with some form of IAC — don’t bother, because you will be in for a world of hurt. Having said that, even if you are building your infra with IAC, if many engineers have access to make changes to the infrastructure manually, over time you will also be in for a world of hurt!IAC is the best first step, but deploying a GitOps tool (eg argocd, or Crossplane has similar functionality built-in) is an amazing next step. a GitOps tool ensures that the IAC that is deployed to your cloud environment is what is actually running. These tools continuously check the live environment and compare it against the IAC and if it notices a change (ie someone making a change manually in the AWS console) it will change it back to what is the IAC. This ensures that every change is managed through your IAC. Granted this makes 3 am incident responses a bit more challenging… but aren’t they always.
3. Yaml is cool and all but Learn to code
As DevOps engineers, you are probably going to be dealing with lots and lots (and I truly mean a lot!) of YAML/JSON code and you will be dealing with quite a few “code-less” solutions. Still, learn to code…. Knowing the fundamentals of a few different programming languages is such an enormous asset for a DevOps engineer! It's absolutely priceless! Being able to help the Development team debug application issues during incidents, understand how your company’s apps work, build your own bespoke solutions to any number of problems your organisation has internally, building platform-level tools and even contributing to the “code-less” open source tools you consume. Knowing the basics of the languages used at your company is essential. Advancing your understanding in at least one is even better…
4. The 12 Factor App
Stateful apps in the cloud will be the bane of your existence. Push for the 12-factor app framework if you truly want any application in your organisation to be ready for the cloud. If it doesn’t, then let’s work on that first. Whenever I’ve had new Junior-Mid engineers join my teams, I found that one of the first principles I’d always end up showing them was the 12-factor app. Whenever they were working with a team and their application, or making developing their own internal tool for the platform/organisation I’d ensure that the 12-factor app was at the forefront of their mind during development. If you can get into this mindset, you will make meaningful impacts on the organisation.
5. Don’t Stop learning!
As we all know, technology is an ever-changing landscape but for some reason, the cloud and infrastructure tooling space seems to change a bit faster than others! Maybe because of its vastness, but there is always something new to learn, understand and potentially deploy for your organisation/platform. New infrastructure resources are always being pushed by cloud providers then new tooling to manage those resources are constantly being developed by the open-source community! There's a reason AWS certificates are only valid for 3 years, the landscape changes so rapidly and if you don’t stay on top of learning what is offered to us in the space, you will fall behind. Sign up for a newsletter, watch YouTube tutorials, browse medium, just stay passionate and you’ll do fine.
What are some of your gems from your time in DevOps??