When I decided to undertake this project, I was heavily influenced by the Cloud Resume Challenge. As someone who is not very creative, this gave me a great starting point. Something that I wanted to conform to from the beginning were the Agile principles. I think I hit the mark pretty well so far. I am going to attempt to explain how I took an iterative approach to building out this project to deliver working software at each step of the process.
The first tenet that I set out to achieve was to get something working quickly. Admittedly, it wasn’t pretty, but the first iteration rarely is. Since I was using the Cloud Resume Challenge as a template, I ported my resume from a PDF to some basic HTML and CSS. It took longer than I am proud to admit. However, the benefit of being the customer, I was pretty delighted once I got it in a decent place. What is important here is that I started. I got my repository set up in Github, I set up my project, and started creating a roadmap. Once you are able to make that first effort to get something going, the momentum will drive you forward. That is what this simple project of creating an HTML version of my resume did for me.
Now that I had something to host, I could turn to what I really enjoy doing, setting up my cloud infrastructure. I decided to work with Terraform over CloudFormation for my Infrastructure as Code (IaC) software tool to provision and manage my AWS cloud resources. Terraform is ubiquitous throughout the industry. In my opinion, it is easier to read, and I find that testing, formatting, and building my plans with Terraform comes much more naturally than working with CloudFormation. Terraform modules are powerful and intuitive for someone used to writing object-oriented code.
Keeping in mind the Agile methodologies, I did not go out and stand up all of my resources right away. I made sure to set up only the resources I needed to get the feature delivered and tested. My first resources were around hosting as simple as possible my resume. To do this, I provisioned an S3 bucket as a website, set up a simple IAM policy and access control list. I uploaded my two static files, and BAM! I had my site open to the public. This enabled me to deliver working software quickly, identify any bugs or issues right away because I did not attempt to stand up too much at once, and I got that awesome feeling of seeing my work pay off. I tracked that work with project tickets and a pull request.
If you have ever worked on a team that managed some cloud resources without tracking their work, you know it can be mayhem. Just because we can do everything through the AWS console does not mean that we should. It makes tracking changes difficult, it silos work from other team members, there is no version control of what was done, what didn’t work, and what did. It strays away from the industry standard of maintaining operational excellence. In my opinion, it takes away from the joy of writing code and honing the craft of delivering quality software.
I’m not going to go over each and every feature that I created and delivered. If you want that sort of granularity, you can view my project and merged PRs. That’s the beauty of version control and project management! What I wanted to focus on next is the evolution the project took as I was nearing the end of the Cloud Resume roadmap. Something beautiful started to happen. I found myself creating tickets for hardening my testing posture, looking at Github actions for my CI/CD system. And what’s more, it was more than just a place to host my resume, but a full-scale cloud-native site that I can proudly call my own.
The software landscape changes frequently, but the tried and true methodologies remain unchanged. Be consistent in the delivery cadence and flexible in the requirements. As your system matures, so will your project roadmap. Through continuous delivery and improvement, you and your team will stay motivated throughout the lifetime of the project. Make sure to track your progress through projects and tickets. As an infrastructure engineer, you may not be developing API endpoints or writing feature code every day, but you still need to maintain technical excellence. Leverage tools such as Terraform and Git to track all your changes. You’ll thank me later when you’re on support rotation. Finally, enjoy the process. Learning new systems can be overwhelming, but as the Stoics like to remind us, we grow through adversity. “Just as nature takes every obstacle, every impediment, and works around it—turns it to its purposes, incorporates it into itself—so, too, a rational being can turn each setback into raw material and use it to achieve its goal."—Marcus Aurelius, Meditations.”