2018 was a year of learning for me. It felt like every week I was learning something new and I could not have been happier about that.
I'm fairly well empowered in my job. I'm rarely told to do something a particular way just for the sake of it. I'm given a problem to solve and the freedom to pick the tools and frameworks to solve them.
This post is going to list a few of the new things I've learnt and the things I've achieved in 2018 at the end of my 7th year as a professional software engineer.
Less frontend, more backend
I'm not really a visual guy. I struggle with having a vision of how something should look and then translating that in to a tangible "thing". While I can appreciate a beautiful user interface, I just lack the ability to produce one myself. Frankly, I've stopped trying.
Professionally, this translates to "I suck at CSS". It just doesn't interest me and I'm not very good at it. Understanding this has been a step forward though. I can leave it to the experts and focus on what I'm good at rather than apologising for being crap at something.
What I have truly enjoyed, though, is working with truly talented UI/UX analysts.
I've moved, quicker than I realised, in to a more "DevOps-y" role. That is to say, 50% of my time is spent writing application code and the rest is spent working on cloud infrastructure and writing tooling to maintain it and attempting to empower other developers to perform ops tasks with tools.
I studied for and became AWS DevOps certified. While the certification itself is fairly pointless, learning what I needed to learn in order to achieve it has made my job so much easier.
We've settled on AWS as our primary cloud provider and having a firm grasp of how all of the pieces fit together opens up so many interesting avenues for innovation. Which leads me on to...
We settled on containers to run our workloads because they're brilliant and let us scale fast. Running containers in production though, that's hard and really there still aren't a huge number of choices out there. When evaluating large-scale container deployment tools we really only had a few choices at the time:
- Docker Swarm
- AWS ECS (EKS and Fargate didn't exist at the time)
I had been warned off ECS by several people, and I found it confusing. Kubernetes really seemed to be picking up traction and fulfilled all of our criteria. A year on from that decision, I'm so glad we made it.
Kubernetes has been a revelation for me. The declarative nature of being able to say to a cluster of machines:
"Here, take this container image. Run it 5 times on different machines across several zones."
...and just have it work. Every time. It's proven over and over again to be, frankly, bullet-proof.
While the initial setup costs of a good, high-availability Kubernetes cluster is not cheap, it pays for itself in lowered maintenance costs and relatively cheap scaling.
Working in the NHS, especially with computer systems, makes working with Windows machines (much to my disappointment) inevitable. Having been a Windows user until the age of 16, I hoped it would feel more like coming home and less like repeatedly stubbing my toe.
Because of my experience with automation tools such as Chef, Ansible, etc. I immediately attempted to find tools in this world to automate everything on our fleet of Windows machines. It took a while, but a combination of Ansible, Packer and UiPath (as discussed later) make interacting with Windows machines almost as painless and automatic as interacting with Linux machines.
I have learnt lots of new concepts that exist only in Windows such as domains, directories and some networking quirks that still baffle me. My relationship with Windows is likely to grow over the coming years, so I've decided to stop whining about it and learn to love it.
You can pry my MacBook Pro from my cold, dead hands for a development machine though.
Robotic Process Automation
This is a totally new concept to me. It's a whole world of enterprise software designed to lower costs for large organisations that hire rooms of people to do repetitive tasks by making robots do them instead.
My only real exposure to this world in the past has been nice open source tools like Selenium, but this is a different world and much more skewed towards Windows usage. Although the package is prettier and more expensive, it's essentially the same: UI Automation.
When you're dealing with software written over 15 years ago that you can be certain has no form of external API, but needs to be used in a reproducible and automatic manner, these appear to be the tools to use. We're using UiPath, which despite making me learn Visual Basic to use it to its full extent (I shit you not) has been a fantastic tool and adds a layer of modernity to otherwise old and crumbling software from the 1990s.
Bonus: Got a dog
I learnt non-tech things too. I have a life, honest.
Me and my wife adopted Winston the Labrador after he was withdrawn from guide dog training for "lacking motivation". He's replaced my rubber duck on my desk as my coding rubber duck.
His specialities are barking at nothing, belly rubs and singing when I play the piano.
He is literally the best damn thing in the universe and I love his stupid face.