1TX / Cloud Solutions Architect / Sept 2022 - Current
Working in a small startup, I was expected to be able to work in multiple different positions simultaneously. Starting as a QA automation tester, I quickly worked my way up to doing frontend and backend web development, mobile development, DevOps, and even becoming a full-on Cloud Solutions architect.
- My initial tasks primarily involved using JMeter to conduct performance testing on the backends of various web applications. The test was distributed among multiple computers running simultaneously to simulate high loads.
- Very often, we didn't have documentation on hand for the backend services so I had to record the HTTP traffic sent in and out from the browser when doing usual user actions, analyse the HTTP contents and headers, then simulate them in a JMeter script.
- The results of the performance tests were given to a Python script I wrote to generate HTML reports with the help of Jinja templates.
- My proficiency in Python led me to taking over the Flask empowered Discovery Engine, a Web application designed to use ML algorithms to search for the relevant solutions to specific problems. Using NLTK, Pandas and Scikit, I learnt how to tokenize texts, turn them into vectors, and use those vectors to find the most relevant solutions.
- As I rapidly proved my skills, I eventually was given access to the Jenkins instance where I configured CI/CD pipelines to develop, test, and deploy the web applications I worked on. These pipelines get executed automatically on a periodic basis, generating security, performance, and code quality reports that get sent to various interested parties through e-mail.
- Because of my previous experience with Mobile development and Flutter, I was also tasked with training people to develop an internal mobile application that automates certain security processes. The application also had to be designed to work on Desktop too. I taught them the basics of Dart and how to use Flutter to develop applications that could work on both Mobile and Desktop. Throughout the development, I was regularly pulled into calls to help diagnose issues with the project and suggest patterns to use.
- I became responsible for migrating the performance testing platform Quantify from EC2 to Kubernetes, redesigning its architecture entirely to reduce its operating costs.
- The Frontend of the Quantify Web application uses an outdated and unsupported React framework called Create React App. I migrated the entire project to React Router framework, making the minimum necessary changes needed to make the Web app work without changing its behaviour.
- Over time, I optimised the responsiveness of the React frontend using Functional principles React excels with, by removing unneeded state changes, making full use of React's caching mechanisms.
- On the backend side, I slowly changed the old Spring Boot code to Spring Boot WebFlux, and it proved to be an improvement to the responsiveness of the backend.
- I made each microservice stateless so multiple instances can start and stop on demand without the need to sync up state.
- I reduced the amount of locking needed when executing PostgreSQL queries in parallel, by reducing the amount of unnecessary dependencies.
- I did Ahead-Of-Time compilation using GraalVM to reduce startup times, allowing services to better respond to sudden high loads, while also reducing overall resource usage.
- I cached data transformations in-memory using Redis, reducing compute time and increasing responsiveness for recently accessed web resources whose dependent data hasn't changed since last access.
- I allowed asynchronous communication between services using RabbitMQ, allowing the services to communicate changes to their data without interrupting current processes and without having services wait for each other to respond.
- I compressed each microservice into a single, small, independent executable that the Linux kernel can run directly without any additional programs, deamons, nor libraries, reducing a lot of overhead costs.
- I used OAuth2 to create a decentralized Authentication and Authorization mechanism to help manage security where private resources are distributed across multiple microservices.
- I wrote Terraform scripts that allows anyone to deploy the Quantify application to their cloud platform in an automated way. It also deploys to different cloud services rather than being attached to a specific cloud service like AWS.