Work Experience


Software Engineering Intern

January 2019 to April 2019
New York, NY
Thumb datadog

Datadog

As a software engineering intern on Datadog's Metrics Query team, I helped maintain and develop Datadog's time series database query system, written in Golang and Python. During my time at Datadog, I worked on several bug fixes, feature tickets, and performance improvements, cumulating with rewriting part of the query process, leading to a 6x decrease in memory allocated per query and reducing throtted/aborted queries by 10x.

Datadog’s metric query system, as the name suggests, is responsible for returning the timeseries metrics data that users send and that they query for. Within Datadog’s system, metrics (e.g. “cpu.usage”) can be tagged with key value pairs (e.g. “environment:production”, “environment:staging”, “service:load_balancer”, “service:backend”, “service:database”), which can then be used to filter or aggregate data using a variety of aggregators (e.g. sum, average, maximum, minimum). Data can also be time-aggregated and combined with other metrics via arithmetic.

For example, a query such as “max:cpu.usage{environment:production}.rollup(avg, 60)” would translate to “give me the maximum 60 second average CPU usage from all of our servers in production”. If my 30 second explanation made no sense, Datadog has fantastic in-depth docs on the system: https://docs.datadoghq.com/graphing/metrics/introduction/.

During my time at Datadog, one of the features I implemented was a system to preserve and track units throughout arithmetic. If a user queried for, for example, memory usage divided by cpu usage, where memory usage was measured in MB, and cpu usage in cores, whereas the final units (MB/core) would’ve previously been dropped, under my system, these units would be preserved, and carried through to further operations.

In another project, I implemented a fast path for certain query behaviors that allowed our servers to save on memory, cutting memory usage by half for 80% of all queries. Normally, queries over large time frames need to stitch together data from several files, which involves decompressing, interpolating, and aggregating timeseries, before being recompressed. However, for queries where there is only one file, this decompressing/recompressing is unnecessary, an inefficiency which had previously not been spotted by the team. 

One of my major contributions was rewriting part of the space aggregation process to stream in new contexts (a specific combination of tags – e.g. “environment:production + service:backend”) ”to aggregate, instead of loading in all contexts into memory before space aggregating. This improvement lead to a 6x decrease in memory allocations per query, and reduced throttled/aborted queries by 10x, leading to a more efficient query system that could handle higher loads and larger queries.


Links:

Website: https://www.datadoghq.com/


Undergraduate Research Assistant

May 2018 to August 2018
Waterloo, ON
Thumb medium university of waterloo

University of Waterloo

I did a second undergraduate research assistantship during my 3B term under Prof. Mei Nagappan, doing work on defect prediction and analysis in software codebases. Under Prof. Nagappan's tutelage, I explored using Bayesian networks (BNs) to analyze and predict where bugs are likely to appear in a codebase based on various other metrics collected on the codebase (e.g. code churn, lines of code, number of changes made, number of people involved with a specific file or class).

Working with the Eclipse IDE codebase changelog dataset, I used Python, pandas, Graphviz, and GOBNILP (Globally Optimal Bayesian Network learning using Integer Linear Programming), to transform and format the dataset to fit my needs, run experiments and generate candidate BNs, aggregate the results, visualize, and analyze them.

I used pandas to first modify the dataset to be compatible with GOBNILP - aggregating multiple files into a single dataset based on certain metrics, removing any unneeded columns, and discretizing columns into buckets based on how they were distributed in the dataset.

I then used GOBNILP "learn" and generate the optimal BNs based on these datasets, running various experiments based on how the data was aggregated. Then, using Python and Graphviz, I aggregated these results, visualized them, and compared the results between experiments and with results from other studies with Prof. Nagappan to draw conclusions.


Links:

Github: https://github.com/Broshen/defect_prediction_analysis


Web Developer Intern

January 2018 to April 2018
Boston, MA
Thumb formlabs logo 2017 blue 1

Formlabs

As a web developer intern, I worked with the web team on Formlabs' portfolio of online offerings - from their printer dashboard web app to their storefront and other online tools - to improve the online experience of current printer owners, potential customers, and other teams in the company. I also created several process improvement tools for the web team to assist with deployments and testing, as well as worked on exploratory projects assigned to me by my team lead. 

During my time at Formlabs, I was assigned several projects. Under the Django CMS main site, I created a CMS app for the PR team to create, edit, and publish press releases freely, which previously had to be done manually by the web team, and migrated existing press releases over to the new app, improving productivity and workflow for both teams. I also worked on our web storefront redesign, written in Django CMS, React, and Redux, and added additional data validation between the storefront and the actual php/magento web store.

I also worked on several UI tweaks, improvements, and bug fixes, in React, Redux, d3, and Django, for our online printer dashboard, which connected to a user's Form 2 Printers, allowing them to organize and track their prints. I also helped with feature requests & tweaks for the Form Cell dashboard, which at the time as being prepared for launch. 

I was responsible for a complete rehaul of Formlabs' ROI calculator - a tool to help calculate potential time and money savings by switching to 3D printing. I completely redesigned the workflow, calculations, and UI, using React, Redux, and d3, as well as added new functionality to capture user emails and generate PDF reports using Python/Django. The tool is now being used by the marketing and sales teams to help assist with sales and lead capture.

I was also assigned several exploratory projects. I investigated a potential site migration from Django CMS to wagtailCMS, in which I set up a demo wagtailCMS site in Docker/Kubernetes, and presenting the differences, advantages, and disadvantages between the two systems, and what a proposed migration would entail, to my team lead.

I also worked on prototyping a Kafka data pipeline in Docker/Kubernetes to stream events from connected printers to the dashboard database, and wrote producer/consumer clients in Golang. This pipeline was expected to greatly reduce costs, and was in the process of being prepped to replace the current pipeline for the 10,000+ existing printers as I was nearing the end of my internship.

Finally, I developed several process improvement tools for the web team to use, in hopes of improving workflow and increasing productivity. I refactored our deployment process in Jenkins, Docker, and Kubernetes to be blue-green, reducing downtime and risks during code updates to the Formlabs site. I also scheduled regular site media backups to s3, using Jenkins. I created configuration scripts and a Jenkins job to quickly spin up dev VMs in Kubernetes, based on github branches, to allow the team to easily test new features/bug fixes, and set up an e2e testing framework in Kubernetes for the team to use.


Links:

Website: https://formlabs.com/
Press Releases: https://formlabs.com/company/press/
ROI Calculator: https://formlabs.com/roi/
Dashboard: https://formlabs.com/dashboard/


Undergraduate Research Assistant

September 2017 to December 2017
Waterloo, ON
Thumb university of waterloo

University of Waterloo

As an undergraduate research assistant (URA), I worked with Dr. Xiaofei Zhang, under Prof. Tamer Ozsu, to improve the runtime of various graph analysis and profiling algorithms by using parallelization and multithreading techniques. I also designed and implemented a web app  interface for the C++ program, which had previously only been accessible via command line, written in Django. 

Dr. Xiaofei Zhang's project focused on analyzing the accuracy of various graph reduction algorithms (taking a large, complex graph, and creating a smaller, simpler graph by removing some edges & vertices, while still accurately reflecting the original graph), by comparing the values of various metrics (e.g graph diameter, distance between vertices, clustering) and their approximations between the reduced graph and the original. The previous URA had initially wrote a C++ program that implemented these reduction and profiling algorithms, however it tended to run too slowly to use on larger, denser graphs. Using Intel TBB, a C++ parallel programming library, I refactored the code to fully utilize a computer's cores, improving runtime on large graphs by 20x on a machine with 4 cores.

Under Dr. Xiaofei's suggestion, I also developed a web app to interface with the C++ program, to make it easier to setup, use, and run experiments. Using Django as a web framework, and Celery as a task runner, I created a web app in which users could upload graphs (in the form of adjacency lists), create "jobs" and select which algorithms/metrics they want to run, and run or rerun experiments on graphs. This proved to be significantly easier to use than the previous command line interface, increasing productivity, and decreasing the runtime per experiment.


Links:

Github: 
https://github.com/zxf-work/GraphProfile
https://github.com/Broshen/GraphSite


Part Time Software Developer

May 2017 to December 2017
Toronto, ON (remote)
Thumb polar logo blue

Polar Inc.

As a part time software developer for Polar, I continued to work on UI improvement and backlog feature tickets for our client facing web app, written in Django and React, remotely, while continuing to attend university. I also worked on exploratory projects that the Product team assigned to me, as well as continued to assist with projects I had worked on during my internship. 


Links:

Website: http://polar.me/
Design Portfolio: https://broshen.github.io/polarWork/


Front End Software Developer

January 2017 to April 2017
Toronto, ON
Thumb polar logo blue

Polar Inc.

As a front end software developer at Polar, I worked closely with the Technical Solutions, Product, and Engineering teams to deliver branded content solutions to our partners, using Django, React, native HTML/CSS/JS, and our Polar API. I also went above and beyond my original duties, and managed communications with three major partners after a full time member left. I received an Outstanding grade on my co-op evaluation, and was rehired as a part time Software Developer on the Engineering team.

During my time at Polar, I built responsive native ads for publishers such as Huffington Post, The Daily Telegraph, and The Independent, using JavaScript, HTML, CSS, and Polar’s internal API, driving over 1.8 billion impressions and 3.5 million views per month.

I also worked on UI improvement and backlog feature tickets for our client facing web app, written in Django and React. Most notably, I implemented a new feature that showed the code diff between versions of ad serving scripts, so that users could review their changes before updating their scripts.

I prototyped and implemented several new mobile ad formats, such as the Scroll to Interstitial, Scroll to Parallax, and Embed Video units, using JavaScript, HTML, CSS, and Polar’s API. The units were sold to two major publishers to use in their ad campaigns.

I also took over the Technical Account Manager role for three major partners after a full time member left. I managed all communication with these partners, handled implementation and maintenance requests, and drove weekly check in meetings with their Ad Ops teams.

I spearheaded our Partner Demo Sites project - custom sites to help publishers keep track of their placements, and preview and showcase their campaigns to clients. I built sites for two of our publisher partners, using HTML, CSS, and JavaScript. Thanks to my efforts, the project is now being adopted for 4 more clients.

I also worked on integrating Polar with the Apple iAds system. As part of this project, I integrated Polar’s image serving endpoint with Imgix, an image processing API, to create a smart cropping API to auto crop thumbnails to focus on faces.


Links:

Website: http://polar.me/
Design Portfolio: https://broshen.github.io/polarWork/


Support and Marketing Analyst Co-op

April 2016 to August 2016
Toronto, ON
Thumb qts

QuickTapSurvey

As the support and marketing analyst intern, I had a broad spectrum of responsibilities - troubleshooting customer issues, finding and logging bugs, creating and updating content for various teams, and providing insight on marketing strategies.

I answered customer support tickets via Freshdesk. I had a 6 minute average response time, nearly 3 times faster than the expected 15 minutes. During my time there, I answered over 1400 tickets, receiving only one “Not Good” rating. I was also responsible for managing the helpdesk article content. I proofread and edited articles based on customer feedback, as well as updated articles between product releases.

I also researched our competitive landscape to present to the co-CEOs. I found, analyzed, and presented the strengths, weaknesses of our main competitors, as well as potential areas of opportunity for the company to expand on.

I designed graphics such as custom survey backgrounds, blog post, help center, eBook, and email newsletter visuals using Adobe Photoshop, InDesign, and Illustrator. I also created content such as demo surveys and templates for use within our app, as well as monthly demo videos and help center videos in Adobe Premiere for our Youtube channel. In addition, I updated our marketing website using HTML, CSS, PHP, and git.

I also helped the QA team with regression testing between releases, and documented bugs in production in Axosoft. I created a new system to document crash reports sent in by customers, analyze them and create visuals based off them so that the dev team can pinpoint and fix flaws in the product.

At my time at QuickTapSurvey, I also created a translation web app for our support and sales team to use. Using Google’s translate API, I created a web app that streamlined the process of translating and responding to emails from non-English customers. My app ended up cutting down the response times by approximately half, and was adopted for use by the entire team.


Links:

Website: http://www.quicktapsurvey.com/
Youtube: https://www.youtube.com/user/QuickTapSurvey


Web Developer

August 2013 to May 2015
Toronto, ON
Thumb thereckonerthumb

The Reckoner of Marc Garneau

I was part of the web development team for our high school newspaper, The Reckoner. As a web developer I was responsible for managing the website files, content, and user accounts within WordPress. I optimized our website by resizing existing images, improving our loading time. I also helped redesign the website layout using CSS, and assisted with the subsequent relaunch.


Links:

Website: http://thereckoner.ca/



Projects


Thumb spotifried 1

Spotifried

Spotifried was a project that I had in mind for a long time, that blends together data visualization, analysis, and music. As a music lover and data-centric person, I was always curious about my listening habits from an objective, statistical point of view. Who were my favorite artists, what were my favorite songs and genres? How similar are my music tastes to those of my friends? How many songs do we both know? What songs from each other’s libraries would we perhaps enjoy?
Thumb webgl1

WebGL Games

During February 2017, I recreated two classic arcade games, Pac-Man and Snake in a 3D, first person style to be played in a browser using Javascript, Three.js, and WebGL. At the time, I was curious about a variety of related topics - game design, logic, and implementation, and 3D graphics and rendering. I came across WebGL, a Javascript based in-browser graphics rendering library and Three.js, a Javascript 3D library based on WebGL. I decided to recreate these games on a whim, to learn more about these topics and libraries.

Thumb freshestprints

Fresh Prints Design Challenge

The Fresh Prints Design Challenge was a coding challenge to create a t-shirt design editor using MySQL, Express.js, Angular.js, Node.js, and fabric.js. 

The design specifications required the app to allow users to upload, rotate, and scale images and text within the editor, designs to be saved and reopened, and edits to be undone and redone through an edit history. Participants were given 8 days to write the app, and I managed to finish in 5.
Thumb anomia

Anomia

Anomia is an app made for the Amazon Echo that can find and play back a song just by hearing the lyrics from it. It was made at MHacks 8, where it placed in the top 10 finalists out of 220 hacks, and won the Best Voice User Experience Using Amazon Alexa prize. 
Thumb knowyourselfthumb

KnowYourself

Know Yourself is a project created a Hack the 6ix Summer 2016. Upon connecting your Facebook account to the web app, it uses indico.io’s text and image API, as well as Clairifai’s image API to analyze your posts, photos, and likes. It then produces a detailed report about your history on Facebook, including your top friends, interests, popularity over time, positivity, emotions, and keywords.
Thumb quicklinker thumb2

QuickLinker

QuickLink is a chrome extension that lets the QuickTapSurvey support team quickly link help center articles from within freshdesk, saving time and promoting efficiency. It was made at the QuickTapSurvey summer hackathon, where it won the “Most Useful Hack” prize. 
Thumb personalwebsite

Personal Website

This website is the result of me diving into the Ruby on Rails framework, and learning as much as I can hands on. Using the Ruby on Rails framework, I created my personal website so that the content can be completely editable, similar to a blog site.
Thumb supporttranslate

BackAndForth

BackAndForth is a web app that helps support teams communicate with international clients by making the back-and-forth translation process easier. It allows teams to translate inquiries and responses back and forth on the same page and take care of all the formatting, resulting in dramatic improvements in response times for international tickets. It ended up being adopted by the QuickTapSurvey support team to use – even after I left the company.
Thumb socialself3

SocialSelf

SocialSelf is an android app that allows users to add each other on all of their social media via scanning a QR code. 
Thumb lobsterlog3

LobsterLog

LobsterLog is an Android and web app built for Fishackathon Toronto 2016. I was responsible for building the Android app, as well as the backend in PHP/MySQL. The app came in 2nd place out of 8 teams at Fishackathon Toronto, but we ultimately did not win to proceed to the global competition.

Skills

Software

Docker/Kubernetes
Git
Jenkins
Kafka

Frameworks

d3
Django
Node.js
React
Redux
Ruby on Rails

Languages

Bash
C++
CSS
golang
HTML
Java
Javascript
PHP
Python
Racket
SQL


Contact


Email me at boshen.cui@gmail.com or use the following form: