My Self‑Driven Upskilling Project
It’s been a little while since I was made redundant during a big wave at Envato. While I have been applying for some interesting jobs here and there I thought I would also do a bit of exploration on the side.I’ve been working remotely for four and a half years which has been great, but I thought it might be nice if possible to try co-locating with other humans again. A little wrinkle in that idea though is that I’ve been full-stack predominantly on web applications with Ruby on Rails backends and that isn’t as popular in the Adelaide job market as it used to be. No worries, I can pick up other languages and tools however selling myself as a C#, Java, Python, or Go dev isn’t going to be easy when I’m in a competitive job market, I need to do something to stand out.
In the software industry it has always been a game of “what have you built” as far as I can tell, so what better way to show my adaptability than picking up a new language and publishing something with it? I decided on Java since there were a couple of jobs that caught my eye asking for it at the time, I also liked writing it during my studies. It made sense to pick the most popular framework so I set about learning Spring Boot. For the frontend, I’ve always liked React so I stuck with that but went down the React Router path.
It wasn’t long before I had a few endpoints going and a rudimentary UI, the perfect time to get it hosted I reckon. While I could take the easy path and chuck it up on AWS, I was curious about self hosting, wanted the excuse to learn something new, and keen to keep the costs low. I upgraded my old gaming PC with a used 12 core Xeon a little while ago so it made the perfect test bed. I have previous experience running apps on Kubernetes and love the portability, scalability and declarative nature so that was the path I wanted to go. I’d like to run a cluster though, not just one machine so I decided to run it in VMs.
The server was running Truenas but Proxmox seemed like a better choice for VM management. I moved the services running on it to my smaller server temporarily and got Proxmox up and going. I started out by learning to use Packer to build a base VM image for the Kube nodes and then deployed them using Terraform and my cluster was open for business.
The next step was to decide on CI. Github actions are great, but I used to love the flexibility of running builds on Jenkins too. Jenkins can be a bit heavy though so I looked into it and came across Woodpecker CI, it was perfect. I stood up a VM to run it in with Terraform and installed Woodpecker with Ansible. Since I wanted to build containers in CI running Woodpecker as a container and passing in the Docker socket worked nicely to isolate the build agents from the host but still avoid nested containers.
CD was my next problem to solve and Argo CD seemed like the best choice for me. I love IaC but I also love being able to look at a dashboard to see how things are going. I have always previously worked with CI+CD (traditional CD) systems and this was my first experience with the Gitops and I’m really loving it. It feels like the missing piece that makes the code fully represent the current state.
I’ve also set up a Postgres, and a VersityGW (s3 replacement) on my smaller server, an Nginx Proxy Manager VM on proxmox, and for now hooked up AWS SES for sending mail.
Anyway, the app is now approaching MVP and I just wanted to reflect on what I’ve learnt from this process.
- Re-learnt some Java
- Spring boot incl Spring Security
- Basics of Packer
- From scratch terraform repo setup (previously working with existing setups)
- Re-leant some Ansible
- Terraform config for
- Proxmox
- Nginx Proxy Manager
- Woodpecker CI
- Gitops pattern and Argo CD
- React Router
Considering that one of my favorite things about Software development is learning I can safely say that I feel like my time was well spent. If the app ends up being useful to people other than me, or if the things I learn help me find my next role that will be a bonus.
It’s not that fun being between jobs, looking for jobs, selling myself, doing interviews and code challenges, these things aren’t why I became a developer. It’s like I’ve temporarily changed careers from developer to something else entirely, so it feels great to keep developing on the side and maintain that section of who I am.