Experience

Software Engineer

Jane Street

I work on the International ETF desk, primarily focusing on our automated trading systems.

I've been learning a lot about how to build easily configurable and scalable systems to enable the vast amount of trading my team does all over the world. Finding the right balance between shipping fast and maintaining high quality has been a key focus for me. I've also learned a lot about specific trading strategies and how the desk operates and thinks about trading in general.

A large part of my role involves talking with traders and researchers to understand their needs and goals and then figure out how we could best leverage technology to achieve them. This back-and-forth of understanding a problem, shipping a solution, and then iterating on feedback has been a fast-paced way to get better at actually solving people's problems and ship a lot of code.

In addition to my day-to-day work, I've managed an intern (who returned full-time the following year!), conducted >50 interviews, traveled to Hong Kong to help out our team there, helped recruiting at external events, TA'd classes for interns/new grads, gave tech talks and helped run trading games for interns and students from under-represented groups in STEM.

Since August 2022

Software Engineering Intern

Jane Street

This internship was broken into two halves.

For the first half, I worked with the domestic ETFs team, improving the performance of some heavily used tools. This involved re-architecting one tool from a pull-based approach to a service which kept it's data fresh and pushed updates to clients. This approach, in combination with some caching, improved performance by over 50% for typical use cases.

During the second half, I worked on one of the systems powering options trading. My project dramtically improved the latency of specific order types by enabling us to prioritize/differentiate between them.

September - December 2021

Software Engineering Intern

Nuro

My initial project improved Nuro's machine learning pipelines by moving image building (i.e. building docker images for each stages of the pipeline, such as data cleaning or TensorRT) from dev machines onto remote workers. This project improved performance by both leveraging a shared cache for everyone's builds and distributing the work across multiple remote machines. This was built on top of Apache Airflow.

My next project involved improving the latency of one of Nuro's range-image-based models to enable them to run this model onboard the bots as part of a latecy-sensitive step. To accomplish this, I used quantization aware training, taking advantage of TF2's QAT tools. I designed and ran several experiments to select the best latency/training time/accuracy tradeoff for our use case.

January - April 2021

Software Engineering Intern

Facebook Reality Labs (AR/VR)

I primarily spent my time working on the USB stack of a new operating system. I built it's first standalone USB class driver. This required building the foundations in our xHCI driver and adding IPC APIs for the class drivers to use. My driver enabled Serial over USB, which allowed application developers to attach debuggers to their boards without taking up the physical serial port (which was required for other purposes, e.g. kernel logs and control). My driver also served as a reference for a functioning standalone USB driver, which my teammates have been using as an example to build other drivers based on.

I also took a computer vision course, where I learned about computer vision/deep learning basics and completed a couple of assignments using PyTorch.

May - August 2020

Software Engineering Intern

Google

My main project focussed on building a cache for real-time ads updates in Google Search. The first part involved building a couple of Cloud Dataflow pipelines for all the data that wasn't change-tracked (think of Cloud Dataflow as a managed, higher-level abstraction of MapReduce concepts). I improved the runtime of these pipelines by over 25% by optimizing the SQL queries (this involved matching join keys to indeces, combining queries, using native materialization into protos and a variety of other techniques). Then, I built a couple of microservices to update our cache by subscribing to change-tracked data via several Pub/Sub queues. This improved the average data freshness in our cache from over 30 minutes to under 1 second.

September - December 2019

Full Stack Developer Intern

SAP

Member of core backend team for Enterprise Commerce (SAP Commerce Cloud). Worked on API modernization and monolith decomposition. Proposed, owned, and developed a new express checkout flow reducing checkout time by 70%.

January - April 2019

Software Engineering Intern - Backend

BlackBerry Messenger

Worked on partner team building third-party integrations into the app. Developed an advertisement pushing service reaching 10 million daily users. Built an automated contest generation platform for partners. Since launch, their contests have had over 200 thousand participants.

May - August 2018

Lead Android Engineer

Tasteport

Founding member of a startup enabling small grocery businesses to take part in the digital grocery revolution. Built an Android app for customer and investor demos in 4 weeks, resulting in $30 000 of investment and 2 stores signing on. Check out our website here!

August 2017 - April 2018

Software Developer Co-op - Frontend

The Regional Municipality of York

Worked on the team developing the york.ca website. Created an employee forum using WebSphere APIs for authentication and data storage. Built several web widgets using third-party APIs for a portal used by over 2000 employees.

September 2015 - January 2016

Education

University of Waterloo

Bachelor of Software Engineering

Relevant courses:

  • Programming Principles - CS 137
  • Introduction to Data Abstraction and Implementation - CS 138
  • Logic and Computation - SE 212
  • Digital Computers - ECE 222
  • Foundations of Sequential Programs (a.k.a mini-compilers) - CS 241E
  • Data Structures and Data Management - CS 240E
  • Software Engineering Principles - CS 247
  • Algorithms - CS 341
  • Operating Systems - SE 350
  • Applied Probability - STAT 330
  • Software Design - SE 464
  • Feedback Control - SE 380
  • Databases - CS 348
  • Concurrency - CS 343
  • Artificial Intelligence - CS 486
  • Computer Security and Privacy - CS 458
  • Computer Networks - ECE 358
  • Distributed Computing - ECE 454
  • Quantum Information Processing - CS 467
  • Machine Learning - CS 480
September 2017 - April 2022

  • Idea Stack

    A Google Assistant Action that saves your thoughts/conversation topics in a stack so you could remember them for later!

    javascript google-assistant cloud-functions
  • GitHub
    Assistant Action Store
    Idea Stack - A stack for your ideas! | Product Hunt
  • gRPC vs. REST

    An article comparing gRPC to REST, Protocol Buffers to JSON, and HTTP/2 to HTTP/1.1. Contains benchmarks created using Go channels to compare HTTP/2 request multiplexing to HTTP/1.1 pipelining. Used a Job/Worker pattern with a controlled thread pool size to find the optimal amount of concurrent requests.

    grpc rest networking concurrency go
  • GitHub
    Medium Article (1K+ claps!)
  • USDA Food Nutrition Visualizer

    Built prior to the USDA having their own searchable database, this Java API parses through the 100 000+ foods and associated nutrient information available in their database data dumps. Uses a purpose-built balanced binary tree and weighted searching algorithm to return the most relevant results super fast. Fun fact: everything used here was built from scratch (searching, balanced binary trees, priority queues, linked lists)!

    java custom-datastructures search
  • GitHub
  • Flow

    Collabaorative IDE for developers (similar idea to Google Docs, but it's an IDE). Supports compiling, syntax highlighting, debugging, file history, and more! Text modification inspired by Operational Transformation.

    java sqlite tcp/ip operational-transformation
  • GitHub
    Documentation
  • Dance Dance Revolution

    Combines a DDR board built using conductive plates, pull-up resistors and an Arduino with a DDR-inspired game built using Unity. Linked up the arduino and game using a serial port.

    c# c++ unity arduino
  • GitHub
  • Blackjack Server

    Contains both the dealer and server for hosting hundreds of concurrent Blackjack games. Defines a TCP/IP API for communication with clients.

    java tcp/ip concurrency
  • GitHub
    API Documentation

Interests

Aside from being a developer, I spend most of my time outside. During the warmer months, I enjoy mountain biking, camping, canoeing, playing soccer and just appreciating the outdoors. When it gets colder, I love to go snowboarding, hiking, and enjoy the snow in all ways possible. I also really love driving (especially on (very) long road trips) and I'm always looking for new friends to go on adventures with!

I spend a significant amount of time thinking about my career and the impact I want to have on the world. Some topics of interest to me are AR/VR and education. I believe AR glasses (or some form of a semi-permanent display in our vision) are the future of consumer technology and plan to be a part of that revolution at some point. I also believe that a good education (e.g. passionate teachers, access to extra curricular activities) is (one of) the most important things in life. I'm forever grateful for the wonderful education I recieved growing up (thanks parents (and Canada)). I hope to make this experience more accesible for everyone in the future.

I also spend many of my nights reading about whatever seems interesting. Some particular topics that I've read a lot about are karting, investing, productivity, and software development. I (occasionally) maintain a list of books I've read on goodreads.