Andrew Dillon
Software Engineer

About Me

Hello! My name is Andrew. I'm a passionate software engineer, an open source maintainer, a writer, and a leader. I enjoy solving hard problems, designing robust systems, and building high quality products that people love to use. I'm a cheerful team player and strive to bring out the best in others.

Personal and professional growth is very important to me. I am a curious person and love to learn new things. Each day I devote 2 hours to reading books and over the past few months I've started learning to ballroom dance, play piano, and swim!


I first learned how to write software in high school. One year, my parents gifted me a Lego Robot. At the time, I didn't know the first thing about programming. So I decided to learn! I discovered the leJOS project and started learning Java in order to program my robot.

I lived in a small, rural town. My school didn't offer any computer science classes so I had to learn everything on my own from the internet and books. Eventually I mastered the basics, wrote a simple program, uploaded it to my little robotic rover, and watched excitedly as it roved around the room. I'd found a new passion and have been pursuing it ever since!

(Here's a couple links to some old leJOS code I wrote and a video of my rover).

My Career

After graduating high school I tested software at Tapestry Solutions for 7 months. In 2016 I started my first semester of college at the University of Missouri - Saint Louis. Later that year I participated in GlobalHack VI where I met a team of software engineers from Maryville Technologies. A couple of months later I joined their team as a software engineering intern and began my career as a professional software engineer!

For the next few months I worked with a team of interns creating back office software for the company. We also created an educational tool for LaunchCode that allowed instructors to create annotated code snippets and share them with students.

In April of 2016 I left the intern team to join a group of engineers consulting at UniGroup, the parent company of Mayflower and United Van Lines. I spent the next several months designing and building software with an awesome UniGroup product development team. Together we delivered an iOS and Android app that allowed over 2,500 van operators to track and service loads across the continental U.S., forming a key piece of infrastructure for over $100,000,000 of business.

I was very pleased with my professional growth and the impact I had been able to make. So in March of 2018 I left Maryville Technologies and joined UniGroup as a software engineer. The next project I worked on was an iOS and Android app that increased the speed and efficiency of over 1,000 of our packers. It allowed them to perform inventories in low-connectivity areas and freed up $750,000 that was previously spent on an error-prone third party application.

I then joined a crack team that built a web app and backend system to pilot a new customer experience and pricing model. We shipped this project in a mere 8 weeks. Several features of this pilot program were made permanent and increased our customer conversion rate. These improvements resulted in over $500,000 of additional revenue.

We then designed and built a system for our agents to configure geographic service areas. Part of this project involved creating a subsystem for lead distribution. Our work improved the CX for thousands of customers and eliminated over $2,000,000 in annual expenses by increasing the efficiency and effectiveness of our transportation network.

In December of 2019, after 4 years of working and going to school full-time, I graduated from college with my Master's in Computer Science. Shortly thereafter, in March of 2020, I was promoted to a tech lead position at UniGroup. I led a development team tasked with creating a system to automate and streamline the scheduling of events with customers by connecting to our agent's calendars. Our work was able to increase revenue by reducing the wait time from 2+ days to less than 12 hours for over 100,000 customers annually.

UniGroup's team of UX designers created a custom UI design system during the previous few months and had begun to use it in their product designs. Our development teams were struggling to implement the system, resulting in inefficiencies and frustration. To solve this problem, I formed and managed a cross-team group of frontend engineers and UI designers. We built a library of reusable React components that improved the stability of our applications and increased the velocity of our development teams by reducing waste and allowing code reuse.

In January of 2021 I led a team that developed a new billing system for our van line's leads. We also updated and modernized the distribution algorithm responsible for assigning leads to UniGroup's agents. This work increased business for over 500 agents in our network and increased revenue by over $3,000,000.

Projects

I enjoy tinkering and writing code in my free time. Open source is important to me, so I share my projects on GitHub and make it a point to publish them so others can benefit from and build on my work. A few projects of which I am particularly proud are:

  • pdf-lib is a widely used library for manipulating PDF documents in any JavaScript environment. It is the crown jewel of my portfolio and is without question my most successful and impactful project. pdf-lib currently sits at 2,500 stars on GitHub and is downloaded from NPM 100,000 times per week.

    I created pdf-lib about 3 years ago. At that time I was working on a React Native app at UniGroup and needed to modify a PDF client-side. But there were no pure-JS libraries available capable of doing this, so we resorted to a less than ideal server-side workaround. That experience motivated me to create a library to fill this gap.

    Writing and maintaining pdf-lib has been a very rewarding process. I've learned a lot about open source, library design, JavaScript, TypeScript, ISO standards, document formats, and much more.

  • jsv9000.app (JavaScript Visualizer 9000) is an interactive web app that visualizes and explains JavaScript's event loop. It is used by programming instructors and coding schools to help developers learn how async JavaScript works. I created jsv9000 as a companion app for a series of articles I wrote about how JavaScript's event loop works.

  • chip is a CLI tool that streamlines web development by simplifying management of microservices and infrastructure on local machines. I created chip to rectify a pattern of inefficient development habits I noticed on several dev teams. These habits wasted time and made it challenging for new devs to get up to speed and contribute quickly. Chip made a big impact on day-to-day developer productivity for teams that adopted it and knocked days off the time required to onboard new developers.

Some older projects from that I created several years ago are also on GitHub:

Writing

I take pleasure in writing clean, simple, and elegant code. Similarly, I derive satisfaction from producing clear, informative writing. It has been said that one cannot truly understand something until one teaches it to others. Writing articles is a great way to enhance my own understanding while helping others along the way!

The following is a compilation of articles I've written over the past few years:

  • How to Create and Modify PDF Files in Deno With pdf-lib - An explanation of Deno, why most JavaScript PDF libraries are incompatible with it, and examples of using pdf-lib in Deno scripts.

  • The JavaScript Execution Model Part 1 and Part 2 - A careful, in depth explanation of JavaScript's event loop execution model and its implications for developers.

  • Offline App Architectures - An exploration of different ways to build mobile applications that work reliably in low connectivity environments.

  • The SDR Classifier - A detailed explanation of NuPIC's SDR Classifier and the Softmax activation function.

Contact

Please feel free to reach out via email or connect with me on LinkedIn! I'm always happy to talk, answer questions, or discuss new opportunities.