I'm a Team Lead and Web Developer at NGP VAN, helping to build the best tools available for
progressives. I'm well-versed in full-stack development on the Microsoft platform: ASP.NET and Web
API, TypeScript, and AngularJS.
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
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.
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
In summer of 2013 I joined a primarily two-person project to create a national-level
dashboard tool. Our
application 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
Turf Cutting is the process of taking a group of people and dividing them up on a map to
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
asynchronous application, along with adding new features like an undo stack and easy editing