Hi There!

Jadon Fan selfie

My name is Jadon Fan. I graduated with a BASc in Computer Engineering at the University of Waterloo in June 2022. I was part of the University's co-op program, which meant that I alternated between study terms and work terms every 4 months. I hope you enjoy exploring my website, which I am using to gain further experience in web development.

I would describe myself as a determined person who loves to employ his problem solving skills. When I face a problem, I will put in as much effort as I can (eating and sleeping are still important!), and use whatever relevant tools I have at my disposal, to find a solution to that problem. That said, my mantra is thatwhile it is important to work hard, working smart is more efficient and effective. Meanwhile, my friends would probably describe me as a helpful person whenever it is help with academic work or just life in general. Helping people not only enables me to put my knowledge and skills to good use, but also provides a great learning opportunity for myself. For example, if I make a mistake when I help others, I become aware that I might make that same mistake in the future and will try to find why I made that mistake and how I can potentially avoid it.

Quick Facts

I used to play chess semi-competitively in high school. However, I stopped playing for a while once I got to university, but I now play it again but this time only casually against bots and in puzzles on chess.com. I don't really have a favorite opening but I usually play the Ruy Lopez or Scotch opening, some variation of the four knights opening (classic beginner's opening) or if I'm playing black, the sicilian defense. I would count myself as a pretty aggressive player albeit a slow one.

Skills

In order to navigate through the bubble layout panel, click on it to focus and then either scroll through the panel or press the arrow ( ) keys.

JavaScript

TypeScript

React

Redux

RTK Query

Axios

Apollo

Jest

React Testing Library

Work Experience

Software Engineer Intern
Wish
Implemented various Android (Kotlin) and server-side (Python) features for the Wish Clips MVP, and worked with PMs and data scientists to collect user metrics and iterate on the features following the launch of the MVP
Utilized Apache Airflow and Apache Hive to automate the compilation of daily user reports into HTML emails for the content moderation team
Wrote and reviewed design documents for migration of legacy code to an MVI architecture with Jetpack components
Kotlin
Java
Android
Python
Tornado
MongoDB
Software Engineer Intern
Wish
Implemented various features — such as checkout offer extensions for eligible users, VAT information, and product bundles — on the Wish app that would convince users to complete their purchases quicker with more items in their cart
Monitored the impact of my features through A/B tests and through impression/click logging in Treasure Data
Worked with Kotlin and Java on the front-end, and Python and MongoDB on the back-end
Contributed on my own initiative to the success of other people on the team through extensive code reviews, knowledge transfer sessions with a new hire, numerous contributions to the engineering wiki, and improvements to our custom Android linter
Kotlin
Java
Android
Python
Tornado
MongoDB
Software Engineer Intern
FundThrough
Utilized React and Redux to enhance an online invoice funding platform so that it is more personalized for each user based on their needs and financial history
Implemented the corresponding Jest/Enzyme tests on the front end
Implemented various APIs and Rake tasks in Ruby on Rails along with the corresponding RSpec tests
Launched a new funding flow along with the relevant logging events to make the funding process more smooth between clients and the customer success team
Created custom search filters from scratch on the admin panel so that the CS team can find past invoices quickly and conveniently
Created OpenAPI definitions for the REST APIs, and uploaded and tested them on Amazon API Gateway
React
Redux
Ruby on Rails
Rake
PostgreSQL
AWS
Software Engineer Intern
YuJa
Implemented features – including a media file downloader for offline playback, background playback service, various media settings, and video and audio recording capabilities – for an Android (Java) app in a MVVM pattern
Utilized various Material Design components to standardize the user interface across the app
Implemented RPCs for the app using Java Servlets, JDBC and Amazon S3
Increased app rating by 0.7 stars, decreased average render time by 6% and decreased crash frequency by 4% based on metrics from the Firebase console
Migrated many of the old or deprecated libraries to newer libraries such as from SQLite to Room
Java
Android
Software Developer in Test Intern
TELUS Health
Wrote automated RMI and REST API tests in Java for a medical software
Configured tests in JMeter and Jenkins with test data in PostgreSQL
Increased test coverage by 40% and identified 35 performance issues
Refactored major parts of the codebase in order to maintain structural consistency
Worked with the engineering team to determine the source of some identified issues
Java
PostgreSQL
JMeter
Jenkins

Projects

Prephouse
Automated Interview Feedback System
React
Redux
RTK Query
Python
Flask
gRPC
OpenCV
PostgreSQL
Factibly
Crowd-Sourced Fact Checker
We used TypeScript and React on the front-end and Django on the back-end, with Apollo as the client for our custom GraphQL queries and mutations. We also explored other various aspects of web development, such as internationalization, accessibility (WCAG 2.1) and search engine optimizations (SEO).
React
Redux
Apollo
Python
Django
Graphene
PostgreSQL
Budgetter
Android Budget Tracker
I developed a Material-themed Android app with modern Jetpack libraries, dependency injection and Airbnb's Mavericks framework. With the app, you can keep track of your individual transactions either by manually filling out the details of each transaction or by using the custom barcode scanner. Then, at the end of every week, you can obtain a summary of how much you've spent relative to your budget for that week.
Kotlin
Android
Mavericks
BestBooks
NYTimes Bestsellers Aggregator
For all of you bookworms out there, this website gives you a neat feed with the details of the latest NYTimes bestsellers in each category. This simple yet useful website was my first and rather successful attempt at utilizing the Ruby on Rails framework on the back-end.
React
Redux
Ruby
Ruby on Rails
PlanIt
Student Life Planner
This desktop Java app is designed by students, for students, to plan your university life, such as your courses for the next academic term and your daily schedule. Your university life may get busy but it shouldn't need to be difficult to manage.
JavaFX
JDBC
MySQL
AWS
Casual Games
Family-Friendly Casual Mobile Games
This Android app may seem basic, but it helped me a lot with getting started in Android development.
Java
Android

Academics

3.93
Cumulative GPA
6
Internships
3
Honours
4B
At the finish line

TODO

ECE457B Fundamentals of Computational Intelligence

ECE495 Autonomous Vehicles

4A
The finale is near

TODO

ECE454 Distributed Computing

ECE458 Computer Security

ECE493 Reinforcement Learning and Probabilistic Reasoning

3B
Me and My Gang Going Full Virtual

TODO

ECE350 Real-time Operating Systems

This course covered the fundamentals of operating systems, particularly real-time as you can guess from the course title. There was a lot of content to take in, such as memory allocation and management, multi-threading and multi-processing, caching and I/O, but no memorization was required as the assessments were open-book. Each lab involved the creation of a particular aspect of an operating system written in the C language that would run on the ARM-based Keil MCB1700 microprocessor.

ECE356 Database Systems

This course covered the fundamentals of databases including ER modelling, SQL queries, relational algebra, transactions, basic data warehousing and mining, concurrency and recovery. There were four labs done in MySQL, with the first one completed individually and the other three completed in groups of three. The final lab combined our knowledge of MySQL as well as some basic SciKit-learn APIs to predict whether a particular baseball player would be in the MLB Baseball Hall-of-Fame given their play stats. Overall, the breadth of knowledge covered was great, but the depth was lacking.

ECE358 Computer Networks

This course covered the fundamentals of computer networks, particularly of each layer in the OSI model other than the application and physical layers. For the longest time, I have been working as a software developer writing APIs on the back-end and calling them on the front-end but I didn't have a complete grasp of how these APIs were sent over computer networks. This course gave me that valuable knowledge, and I would be lying if I said that I didn't enjoy the content!

3A
Crossing Into Uncharted Territories

TODO

ECE306 Probability Theory and Statistics

ECE327 Digital Systems Engineering

ECE351 Compilers

This course covered the fundamentals of compiler design and implementation. It started off with a recap of finite automata and grammar from ECE208 (discrete mathematics and logic). Then, we learnt how to apply those abstract knowledge to create and optimize various aspects of a compiler, including recursive descent parsing, compile-time optimizations, register allocation and garbage collection. Through the labs, I slowly but gradually applied my newfound knowledge of compilers to build a simple yet capable compiler in Java to convert Java code to a subset of the VHDL language to, finally, Assembly. Oh, and I was one (1!) percentage point away from achieving a perfect grade.

ECE380 Analog Control Systems

2B
To 2B or Not 2B

Time flies by quickly. After the next co-op term, I'll be half way through the ECE program. I still have no regret about choosing ECE as both my hardware and software courses so far have been exciting and interesting. With most of the foundational courses cleared up, I do expect that the courses from here on out will be more practical, so I will be able to better see how what I have learnt so far can be applied to real-life situations. As for the 2B term itself, the content was not particularly difficult. The labs were time-consuming, so the lab rooms in the Engineering buildings felt like a second home to me, especially on weekend afternoons!

ECE208 Discrete Mathematics and Logic 2

ECE224 Embedded Microprocessor Systems

ECE252 Systems Programming and Concurrency

2A
Hunger Games: UWaterloo Edition

It appears that I survived the infamous 2A ECE term. With 6 courses, I essentially spent half of my day every weekday of the week on campus in a lecture, tutorial or lab... and that's on top of completing assignments, working on side projects, and preparing for co-op interviews. All in all, relaxation was mostly a weekend thing. Unfortunately, I only realized the great extent of my procrastination after midterm week, which saw my marks dip significantly from first year. Thankfully, I eventually caught up with the content after the midterm after promising myself to not leave the problem sets until final exam period. As a result, the final exams were able to save my grades.

ECE205 Advanced Calculus I

ECE222 Digital Computers

ECE250 Algorithms and Data Structures

1B
Do You Even ECE?

The previous study term was more of a general engineering term. On the other hand, with mathematics (both discrete and continuous), circuits, digital logic and E&M courses all bundled into 1B, this term has clearly established itself as a more ECE-specific foundational term. I have so many opinions regarding each course, but I doubt anyone would want to hear my rants, so I'm going to summarize my opinions. I put in the most effort into circuits and felt it was easy after doing so many problem sets. This effort paid off as I scored 100% in that course. Meanwhile, digital logic was difficult even after completing the problem sets since it required covered tons of content so quickly and a lot more memorization and out-of-the-box critical thinking. However, the course made me approach problems with a more "hardware" mindset; for example, breaking down problems into state machines, with the consideration of transitions and assignments across various clock cycles. The difficulty of all of the other courses would somewhere between the two aforementioned courses, but they were about equally as useful to me.

1A
The Beginning of a New Age

TODO