My Career Journey

LetsStopAIDS

Developer

Toronto, Ontario (on-site)

May 2023 - present

HTML5

CSS3

JavaScript

TypeScript

GSAP

Framer Motion

TailwindCSS

Azure

Cypress

Astro.js

Next.js

React.js

GraphQL

Apollo Client

HyGraph CMS

Cloudinary CDN

Redux

Kairat on Toronto FC game

I am currently employed at LetsStopAIDS as a Full-Stack Developer, with a strong focus on front-end development.

This job requires me to be on-site, but the office is conveniently located just a short two-minute walk from my home. This marks my first experience with on-site work, and, contrary to the stereotype that developers and traditional offices don't mix, I find myself rather enjoying it.

What's the secret to my newfound appreciation, you ask? It's the wonderful colleagues I collaborate with and the office environment itself, which is nothing short of exceptional.

In the realm of daily technological sorcery, my toolkit consists of TypeScript, Next.js, Astro.js, TailwindCSS, and GraphQL (courtesy of Apollo Client). Most of the web applications I build for the company, bring informative value, and thus all of them can be static, and for this task, I've embraced the wonderful Astro.js library, which is perfect for such projects.

As content for these applications still needs to be customizable by non-dev people, it all comes from the CMS.

In our company, we use HyGraph CMS which exposes high-performant GraphQL API which I consume on the front end using Apollo Client. As these applications are static, when the content on the CMS changes, we need to rebuild the app again using the latest data from the CMS.

Thus, I set up Continuous Deployment (CD) pipelines using HyGraph WebHooks, Azure Functions as a middleman and GitHub Actions workflows that go through all the tests, rebuild the app and deploy it to the hosting platform.

For more complex web apps, I use Next.js 13 and a state management tool called Redux.

All the applications I build for LetsStopAIDS, have a certain amount of animations of different complexity - some of them are super basic and some are very tricky to implement. When it comes to adding those animations to our projects, I rely on two main libraries: GSAP and Framer Motion.

Recently, I had the chance to hire a couple of high school students for cooperative work at our company. After interviewing about 10 candidates, I chose two students. Now, my role has transformed into that of a mentor. It's not always easy, but teaching others means I have to dive even deeper into the subjects I already know, and it's a very valuable experience.
ā 

Trade X

Data Engineer

Mississauga, Ontario (remote)

June 2022 - February 2023

Python

Docker

Kubernetes

Fast API

AWS ECS

AWS ElasticSearch

AWS EKS

AWS RDS

AWS EC2

AWS S3

GraphQL

Scrapy

PlayWright

Apify

Kairat on Toronto FC game

My first full-time job in the world of software development! Well, technically, it was a data engineering position. I was navigating the job market in April 2022, a challenging time for fresh graduates. When I received the offer from Trade X, I decided to dive right in, despite it being an entirely new field for me, with no prior experience in data engineering.

To my surprise and delight, my seven months at Trade X turned out to be an incredible learning experience. I had the privilege of working alongside an amazing team of developers. Some were relatively new to the field but immensely talented, while others brought more than 15 years of experience to the table. This diverse environment provided me with a fantastic opportunity to learn from a wide range of professionals.

Each day at Trade X was a new adventure, as the world of data engineering was completely foreign to me. I was part of the Brain team, a group of around 12-15 individuals that included a PM, Scrum Master, ML and data engineers. Our main mission was to build a Data Mesh.

Initially, my responsibilities included implementing REST and GraphQL APIs for internal company use using FastAPI and PostGraphile, and I also provided support to other developers working on data connectors and synchronizers.

A few months into my time at the company, I received a fascinating assignment: managing web scraping. While this was also uncharted territory for me, I quickly picked up the necessary skills and soon became the go-to person for web scraping for the remainder of my time at Trade X.

We relied on a platform called Apify, which streamlined and accelerated the web scraping process and offered a range of useful features, such as storage and proxies. I primarily used Playwright and Scrapy to write scraping scripts, though, on occasion, Selenium in combination with Beautiful Soup came into play.

The company was scraping data from over 140 car listing websites worldwide, and I was tasked with maintaining all of them. I collaborated with other team members to ensure data quality and standardization.

During my work on this project, I uncovered a critical bug in the system that was causing excessive costs and data duplication. The issue was that some scraping jobs took only an hour to complete, while others took 3-4 hours or even days, particularly when dealing with websites containing an extensive number of listings.

For jobs that were completed in less than 6-7 hours, everything worked fine. However, for longer jobs, the process restarted from the beginning after a certain period (which wasn't specified in Apify's documentation, but based on my observation, it seemed to be around 6-7 hours). This meant that the same data was scraped again, leading to data duplication.

As a result, some jobs took weeks to finish, and in rare cases, even months, resulting in unnecessary expenditures. Upon reporting this bug to my manager, I took on the task of finding a solution. My approach involved saving the IDs of listings that had already been scraped into Apify's Internal Storage, which was not erased after container termination.

This approach allowed me to check whether a listing needed to be scraped and helped us avoid duplicates, improving efficiency and reducing costs.

Another challenging task for me was working with AWS OpenSearch (ElasticSearch). My manager wanted me to transfer all the data we had (which was about 80 million+ entry points) to ElasticSearch and use Kibana to build a dashboard that was presented to the CEO of the company on a weekly basis.

In order to achieve this goal, I worked extensively with these 3 AWS Services: AWS RDS (Postgres) which we used as our primary database, AWS ElasticSearch, and AWS DMS (Database Migration Service) which allowed me to seamlessly migrate data from RDS to ElasticSearch.

It was an amazing seven months filled with challenging but very interesting work, and I am truly grateful that I took this opportunity.

KellyKinetix

Front End Developer (internship)

Toronto, Ontario (remote)

October 2021 - March 2022

React.js

styled-copmonents

Paypal SDK

HTML5

CSS3

JavaScript

AWS Lambda

Netlify (CMS & Functions)

In my final year of school, I was eager to apply the knowledge I had gained and gain practical experience. I embarked on a search for volunteer or part-time developer opportunities, hoping to put my skills to the test. It didn't take long before I received a response from Kelly, the owner of KellyKinetix. Kelly offered me a volunteer position that required me to commit around 10 to 15 hours per week. The role was centered on front-end development and demanded expertise in React, Tailwind CSS, styled-components, and JavaScript ā€“ a perfect match for me, especially since I was just beginning to explore React at that time.

I enthusiastically accepted the position and dedicated approximately six months of my time to KellyKinetix. Given that it was a volunteer role and I was juggling a heavy coursework load, my commitment sometimes varied, but more often than not, I found myself investing more than the stipulated 15 hours per week.

My journey at KellyKinetix significantly sharpened my React skills. I delved into the intricacies of React Hooks, became proficient in using React Router, and explored the art of optimizing React applications for peak performance. Furthermore, I enhanced my proficiency in CSS, with a particular emphasis on styled-components for this project.

One of the most challenging tasks I took on during my tenure was the creation of an e-commerce page. It marked my introduction to Redux, the state management library I employed to handle all state manipulations within the application. I also invested time in acquainting myself with the PayPal SDK, which we leveraged for payment processing.

To seamlessly integrate this functionality into the React application, I harnessed the power of Netlify Functions, which under the hood are simply AWS Lambda Functions. In just one month, I successfully built and rigorously tested the e-commerce page using PayPal's sandbox environment, making it ready for user access.

It was the first time, when something that I built brought value to the company because, in the first month after launching the e-commerce page, KellyKinetix increased their revenue by 19% from merchandise sales.

And last, but not least, why my experience at this small organization was so valuable to me is the fact that it was the first time for me when I was sort of leading and managing a small team of developers. Three months after I joined KellyKinetix, two other developers joined the team, and as someone who worked a little longer at this place as well as someone who had more experience with React and web development in general, I took the role of a lead developer and was managing our small group of three developers.

My experience at KellyKinetix was truly invaluable, as it not only enhanced my skills but also broadened my horizons.

Advanced Printing

Full Stack Developer (co-op)

Richmond Hill, Ontario (remote)

December 2020 - April 2021

React.js

Node.js

Express.js

MongoDB

JavaScript

React Context API

CSS3

HTML5

Square SDK

JWT

My very first real job experience happened after my second year at college. I was on the lookout for a co-op placement and landed a gig at a small web agency called Advanced Printing.

This was a remote job, but I did visit their office in Richmond Hill, ON a few times. The tricky part was I was the only developer in Canada, while the rest of the team worked from Central Asia. It made communication a bit of a puzzle.

My main task was to build an e-commerce website for one of their clients who was selling hydroponics equipment. It was solo project and mainly during my coop, I was working on this project. I used the MERN stack (MongoDB, Express.js, React, and Node.js), which I had just learned in school. Back then, I didn't know about Redux, so I used the React Context API for state management. To keep things secure, I used JWT and a library called bcrypt for user authentication.

I was mostly on my own during this job, which forced me to learn how to solve problems and teach myself new things. There were other developers on the team, but they were in a different time zone, so getting help from them meant waiting for a long time.

Looking back, even though it wasn't the perfect job, I learned a lot. It taught me how to be self-reliant and handle challenges.

Kairat Orozobekov

Software Developer / Data Engineer