ABOUT
LinkedIn Headshot

I'm a 4th year Computer Engineering student at the University of Waterloo with a passion for software engineering and tutoring. I am primarily seeking new graduate opportunities for June 2023. I have skills and a passion for full-stack development, database design, application security and web development. In my personal time, you might find me cycling, playing basketball, playing tennis, watching movies or listening to hip hop music.

WORK EXPERIENCE
Software Engineer Intern
Wish
Jan 2022 - Apr 2022
company logo
I joined Wish as a software engineering intern for my 5th coop placement. I was part of an anti-fraud team responsible for building applications used to assess risk and prevent fraud. I was responsible for the backend software infrastructure of a new application including setting up OAuth2.0 authentication, session management and implementing role-based security. I also worked on refactoring some RPCs and plumbing data from several microservices and warehouses to be displayed on our dashboard.
At a high level, the service I was working on was to consolidate risk/fraud data in one dashboard for our team to assess risk in a timely fashion. I had to wire our application with our in-house authentication services and follow the OAuth2.0 and OIDC standard protocols. We also had an in-house API gateway service and session management which I integrated in our service. Our security model was role-based and I was in charge of setting up the user-role data model and management for this application.
I was also responsible for creating the GraphQL framework in our application to plumb data from several different services and databases. This involved resolving downstream dependency issues, creating and refactoring RPCs, and configuring the access rules for our service. With this work, we were able to produce an end-to-end product which gave us key risk data in one place.
Lastly, I noticed a very inefficient query coming from one of our microservices. We were performing very resource intensive aggregations on the query in one of the RPCs. I proposed a database design change where we had an aggregate data table which would be updated incrementally by our main application rather than the old design of dumping raw data into a datastore and computing these values each time. Although my internship ended before I was able to see the full impact of my change, this design laid the foundation for our data aggregator which could be applied to several other use cases in the company.
Tech Stack:
tech logotech logotech logotech logotech logotech logotech logo
Full-Stack Microsoft Developer
BDO Canada LLP
May 2020 - Aug 2020; Jan 2021 - Apr 2021
company logo
I joined BDO Canada as a Full-Stack Microsoft Developer for my 3rd and 4th Co-op placements. Both terms were remote due to COVID 19, but I got to work on several projects ranging from internal tools and client facing applications. Some highlights of my work at BDO include the database and backend design for a client facing application, creating an email invoice automation tool and implementing full-stack features for several applications.
In my first term at BDO, I worked on an internal tool used for resource management with 2 other coop students and 1 full time developer. I was responsible for application support including many bug fixes and several new features. I implemented a profitability calculator where I was responsible for creating the UI, data models and API endpoints. I also implemented an audit trail feature that tracks all actions that affect the database and I created a corresponding record-based security framework.
Towards the end of my first internship, I was asked to also build an email automation tool that employees would use to send invoices to all clients. Since we had several hundred clients, manually sending out these emails would take an entire weekend. I designed a basic UI that allows the user to select a template, verify the email list and select an email signature. Using this tool, we were able to decrease the invoice email process to under 20 minutes total.
In my second internship, I was given the opportunity to take more ownership of a project when I joined a data mining project as the primary developer. I was given the freedom to design the database schema, build the backend data models and create the API endpoints. I was also in charge of configuring multitenancy for commercial use and a role-based security framework.
Tech Stack:
tech logotech logotech logotech logotech logotech logotech logo
Software Developer
Uptake Canada
Sep 2019 - Dec 2019
company logo
I joined Uptake Canada as a software developer on the product team for my 2nd coop placement. The team was responsible for development and support for about 10 different applications used by their clients. Some highlights of my work at Uptake include fixing about 50 client-facing service tickets across these applications, developing an API microservice and restoring some legacy applications to run on their cloud-based platform.
The API microservice was built to replace a deprecated third-party service that we used to retrieve data about some of the machine models that Uptake provides services for. The new service needed to use a new third party API and transform the response data to match the old model in an efficient and reliable way. Some of the challenges included finding the appropriate mappings, handling missing data and lazy loading since the API call was very heavy and expensive.
While I was at Uptake, they had separate applications for each client, and were in the process of migrating to a shared cloud platform for easier support and development. I was in charge of restoring 2 of these applications which were written in old frameworks and configuring the CI/CD so that they could run on the cloud servers. The main challenge was sifting through legacy code which had poor documentation and trying to replicate the behaviour using a more modern stack. While it was difficult, it forced me to have a much deeper understanding of the business objectives of the product during development.
The other thing I had to do was help develop a new security framework. Since the applications needed to be used by multiple clients, we needed to support multitenancy and we created a role-based security framework which applied the appropriate access rules to the different parts of the product. I created and seeded the required tables in the database, and configured the access protocols in the frontend to hide the unauthorized features.
Tech Stack:
tech logotech logotech logotech logotech logotech logo
Associate Software Engineer
SPS Commerce
Jan 2019 - Apr 2019
company logo
I joined SPS Commerce as a software engineering intern on one of the backend teams for my first coop placement. This was my first software realted job and it taught me the basics of software engineering practices and architecture. Some highlights of my work included optimizing data validation jobs by over 50%, upgrading 3 applications from the .NET framework to .NET Core and configuring permissions and jobs to run as scheduled ECS tasks on Amazon Web Services.
One of my first tasks was to optimize the data validation jobs, since they were taking a large chunk of the weekend to run. The core issue was that we had SQL stored procedures which were running serially and not using the resources efficiently. By configuring the stored procedures to run in parallel and applying the corresponding backend changes, the runtime of the data validation jobs was decreased by over 50%.
Another task of mine was to support 3 applications through the upgrade of one of our third-party vendors. I had to rewrite a lot of functionality to work from a console application in the .NET Core framework so that it was compatible with the new changes. In the process, I was able to find some redundant parts of the workflow and proposed some changes to automate the functionality of some of our manual jobs. Part of this upgrade was configuring some jobs as scheduled ECS tasks in AWS. I had to configure the permissions using ansible files and configure the listener rules to control the traffic.
Tech Stack:
tech logotech logotech logotech logotech logotech logotech logotech logotech logo
Programming Instructor
Geek Education
Dec 2021 - June 2022
company logo
I joined Geek Education as a part-time remote programming instructor for about 6 months. In the past, I have been a tennis coach for 5 years and a private tutor for 2 years, and my love for teaching was one of the primary reasons I joined Geek Education. I tutored students (aged 9-14) privately in Python, Java and Scratch based on the curriculum provided to me.
One of the most difficult and fulfilling parts of this job is catering the lessons to the students strengths, weaknesses and programming goals. Some of my students want to learn programming for game or web development, whereas others want to learn for the purpose of pursuing STEM related fields in high school and postsecondary. Depending on their weaknesses and goals, this shapes the types of projects I choose to help them with to boost their learning and get the most out of the lessons.
Some types of projects I have helped my students with include basic games like Tic Tac Toe, Connect Four and Hangman, as well as interactive console applications such as an implementation of a bank and a grade manager for teachers. These projects help combine the core computer science fundamentals such as classes, functions, loops and basic data structures.
The last aspect of the job is trial lessons. Geek Education offers a free trial lesson for all students to decide if they want to pursue the lessons. I give a dry run of the introductory lesson and encourage the students to sign up. This is notable experience for me because I am directly involved in the business/sales aspect and it is important for me to give a lesson which is both enjoyable and an appropriate level of difficulty.
Tech Stack:
tech logotech logotech logotech logo
PROJECTS
Technical Lead
Ecofrost Heating and Cooling
Jan 2021 - May 2021
Check out thewebsite
Ecofrost Heating and Cooling Solutions is a local HVAC (heating, ventilation, air conditioning) business located in the GTA. I am in charge of all their technical needs, and I am responsible for all aspects of the technical infrastructure besides the UI design. My primary responsibilities include development, testing, deployment and search engine optimization. As they are planning on opening a physical store, I am also working on fleshing out a new site for them which includes inventory management, online checkout and parts reservation, invoicing and more.
The notable features of the website include an in-house payment solution to reduce cash payments and processing fees, a parts picker (based on customer's home specifications), integration with Google Business (for reviews, location and hours), and a contact form with reCAPTCHA verification. Currently, I am working on releasing Quickbooks integration to production so that live inventory can be accurate on the website without any manual intervention.
Finding a secure host to serve both the frontend and backend was difficult. Keeping cost in mind, I decided to host the frontend in Netlify and the backend using a Docker container hosted in a load-balanced AWS Elastic Beanstalk instance. The backend uses ACM for certificate management, API Gateway for rate limiting and Supabase for the primary relational database.
The last aspect of the development process was search engine optimization (SEO). Since Ecofrost is a small business, it is important that they gain exposure through Google search results. One of the largest issues with React is that it renders on the client side, and thus appears to be an empty site for web crawlers. To improve SEO, I migrated the application to Next.js so that the website renders server side. There were many other optimizations such as integration with Google Business, mobile-responsiveness, keywords and performance tuning which help the business get more clicks.
Tech Stack:
tech logotech logotech logotech logotech logotech logotech logotech logotech logo
Healix
DeltaHacks VI
Jan 2020
Check out theGitHubor Devpost
Healix is a product I made with two other peers at DeltaHacks 2020. It is a digital therapy solution that allows users to take therapy sessions from the comfort of their home. Since there is stigma around mental health and also an emphasis on online resources due to the pandemic, it would be useful to allow people to take AI powered therapy sessions at their own comfort. At a high level, the application allows people to record videos answering prompts about their mental health, analyze their emotions and deliver some principal data that could be useful for therapists to improve their sessions.
For this project, I was primarily responsible for handling the data. This includes querying to get all the data for sessions, questions and recording responses. The other form of data was capturing live video footage of the end user when they answer prompts, encoding it and sending it to our backend AI endpoint. The AI returned a response object which gave us insights on the emotions that the person had based on their facial expressions in the video.
Specifically, we used React for the web application and Chart.js for the visualization of the data. Once the video footage was analyzed, we parsed the response object and displayed some metrics on the dashboard that can be viewed by both the therapist and patient. For example, we created a pie chart which breaks down the different emotions that were analyzed from the video footage.
Tech Stack:
tech logotech logotech logotech logotech logotech logo
HomeWatch
Hack The North 2019
Sep 2019
Check out theGitHubor Devpost
HomeWatch is a product I made with three other peers at Hack the North 2019. It is an AI powered home security system that performs facial and license plate recognition to provide more insights than a traditional system. It monitors the door and driveway and performs facial recognition on anyone approaching and parses the license plate of any vehicles that enter the driveway. With this functionality in conjunction with the web and mobile applications we created, homeowners can have full transparency about who is approaching their home.
I was in charge of designing and developing the mobile application for the product. The mobile app is meant to allow users to log in and see a live history of all people and cars that have recently entered the driveway. I designed and created the login and registration screens and used Firebase Authentication to allow users to log in and sign up for the service.
Once the user is logged in, they need to see live data from our Cloud Firestore database. I was in charge of managing the response objects from our Tesseract/OpenCV endpoints and storing them in our database. Then, using Firebase’s Real-Time Database, we were able to consume live updates without refreshing the page.
Tech Stack:
tech logotech logotech logotech logotech logotech logo
BiLLy
RUHacks 2019
May 2019
Check out theGitHub
BiLLy is a product I made with three other peers at RUHacks 2019. It is a bill and receipt management web application which helps the end user manage their expenses. This application allows users to scan their receipts and upload them to the dashboard. Using the Google Vision OCR Engine, we are able to read the receipts from the picture and automate the data entry process.
One of my main responsibilities was to parse the response object from the Google Vision OCR endpoint. We needed to filter out fields from the raw data which was very tricky since every bill and receipt is formatted differently and images might be slanted or misoriented. Using regular expressions, we were able to correctly extract the necessary information for a small sample set of receipts.
I also had to design and create the user interface for the home screen. I created the tables and data models in order to display data about all the receipts that have been logged. Once we received the raw data from the Google Vision OCR endpoint and parsed it, we needed to log important data and contextual information to the MongoDB database and also display it on the web application.
Tech Stack:
tech logotech logotech logotech logotech logo
COURSE WORK
ECE457A: Cooperative and Adaptive Algorithms
University of Waterloo
Final Grade: 88
May 2022 - Aug 2022
The course centered around meta-heuristic search algorithms such as simulated annealing, evolutionary algorithms, swarm-based and particle algorithms. The labs focused on simulating these algorithms and adaptively tuning their hyperparameters to optimize the overall search performance.
Tech Stack:
tech logotech logo
ECE454: Distributed Computing
University of Waterloo
Final Grade: 78
May 2022 - Aug 2022
The course covered the core concepts of distributed systems including software architectures, big data processing, graph processing, consensus and consistency and replication. The labs focused on building different components of a distibuted system including bidirectional communication, a load balancer, MapReduce, data replication and a message queue.
Tech Stack:
tech logotech logotech logotech logotech logotech logotech logo
ECE358: Computer Networks
University of Waterloo
Final Grade: 85
Sep 2021 - Dec 2021
The course covered the history, protocols and design principles of each layer of the Internet (Link, Network, Transport). The Labs were centered around simulating and comparing the performance of different network configurations, collision detection/avoidance mechanisms and scheduling algorithms.
Tech Stack:
tech logo
ECE356: Database Systems
University of Waterloo
Final Grade: 70
Sep 2021 - Dec 2021
The course covered relational algebra, the entity relationship model, database normalization and optimization with indexing and functional dependency management. The final project involved taking a large dataset seed and creating a user interface that could process and query this data in a useful way.
Tech Stack:
tech logotech logo
ECE350: Real-Time Operating Systems
University of Waterloo
Final Grade: 88
May 2021 - Aug 2021
The course focused in depth on memory management, the kernel, process scheduling and virtual memory. The labs were cumulative and built a basic operating system with modules for memory allocation and deallocation, a real-time scheduler, message passing and keystroke processing.
Tech Stack:
tech logotech logo
ECE252: Systems Programming and Concurrency
University of Waterloo
Final Grade: 88
Sep 2020 - Dec 2020
The major topics in this course were process and thread management, system calls, concurrency (mutexes, semaphores, monitors and barrier synchronization) and user-level memory management. The labs used web crawling and image processing as busy work to focus on concurrency and performance optimization using inter-process communication, non-blocking I/O and the producer/consumer model.
Tech Stack:
tech logotech logo
ECE250: Data Structures and Algorithms
University of Waterloo
Final Grade: 88
Jan 2020 - Apr 2020
The main data structures covered in this course were linked lists, hash tables, trees (AVL Trees, Binary Search Trees, B-Trees), graphs and heaps. Some of the main algorithmic topics covered were searching and sorting, dynamic programming, MST and SSSP algorithms.
Tech Stack:
tech logotech logo
ECE150: Fundamentals of Programming
University of Waterloo
Final Grade: 93
Sep 2018 - Dec 2018
Covered fundamentals of computer science and object oriented programming. The labs focused on performance and correctness of output of basic programs including sufficient handling of errors, corner cases and business logic.
Tech Stack:
tech logo