Projects by Andrew
I'm a developer. I make things. Below are some of the things that I have made.
MiniVAN is a tool to canvass using a mobile phone, replacing the clipboards and reams of paper of old. This gives a massive productivity boost over traditional canvassing - instead of writing down responses and manually entering in data at the end of the day, MiniVAN syncs automatically to VAN, completely eliminating the need for manual data entry.
MiniVAN Manager is an enhancement to the traditional MiniVAN workflow. It shows all canvassers currently out canvassing for you on a map, updated in real-time as they canvass contacts. This allows campaign managers to keep track of everything that’s going on in the field as it happens.
MiniVAN manager was the first full project that I managed as a team lead at NGP VAN. Despite this, we incorporated several new processes during development:
- Iterative releases - released slices of functionality to production every sprint
- Brings SignalR, AngularJS, TypeScript, and Mapbox together in one very appealing display
- Enhanced mobile app sync process to allow rapid location updates and canvass data uploads
NGP VAN Payment Service
The NGP VAN Payment Service is a centralized payments system built using .NET, Domain Driven Design, and piles upon piles of automated tests. By building an abstraction over payment processing with as few core models as possible, it’s very easy to add new payment gateways (such as PayPal, Stripe, or Litle) without modifying logic on the consumer’s side. The Payment Processor was developed by following three core principles:
- Correctness (never falsely charge, never charge and fail to report it)
- Ease of integration (an easy to use REST API for charging, and a robust messaging system for eventing)
- Ease of extensibility (it should take minimal effort to add a new payment gateway to the system)
Interesting things learned on this project include the value of comprehensive suites of tests (integration, unit, and functional alike), how payment processing works at a fundamental level, and what it takes to be different levels of PCI compliant.
TurfCutter - Mapbox Edition
I first saw Mapbox in April 2014. One thing led to another, and I found myself having rebuilt Turf Cutter (again), this time using Mapbox as a base. It was a chance to do a major refactor of the codebase, along with converting it all to TypeScript. Since we were heading into an election cycle, I rebuilt it to have a swappable backend in case the as-yet unproven Mapbox couldn’t meet our uptime needs - Google Maps can be used simply by switching a flag on the page. It also got a press release. Neat!
In summery 2013 I joined a primarily two-person project create a national-level dashboard tool. Our applicaiton is primarily sharded along state lines - this dashboard would have to roll up the data for each state into a single database to be useful. With the initial data specifications, I used a combo of Google Charts, JQuery U.S. Map, and plain HTML tables to create various visualizations for top-level administrators.
TurfCutter - Google Maps 3
Turf Cutting is the process of taking a group of people and dividing them up on a map to allow campaign staff to efficiently canvass an area. My inaugural intern project at NGP VAN was to take the existing Turf Cutting application and completely rebuild it using the latest version of the Google Maps JS library. This involved taking it from a postback-heavy page to a fully asynchronous application, along with adding new features like an undo stack and easy editing of existing turfs.