I'm a Software Architect at NGP VAN, helping to build the best tools available for
progressives. I'm well-versed in React and full-stack development on the Microsoft platform: ASP.NET and Web
API, TypeScript, and MSSQL
Feel free to contact me - I can be found by wandering the mean streets of Somerville, by
sending a certified carrier pigeon, or by emailing me at [email protected]
Contact Me
EveryAction Reporting
EveryAction/VoteBuilder/SmartVAN etc. is our primary CRM. It is built to gather a wealth of data points for campaigns and non-profits, including donations, online form submissions, email campaigns, mobile app, or good ol' fashioned data-entry. Until recently, however, there were few ways to report on performance: view high-level demographics, view a canvassing summary, or export the data out of our system and into an analytics database - or Excel.
Reporting was the largest and most complex project I lead. From the start, we knew it had to be fast, flexible, and accommodating of our vast data structure and complex access hierarchy. We evaluated multiple ready-built products (Telerik, DevExpress), but all came up lacking in terms of user experience or ability to adapt to our schemas. In development we applied strict timeouts to ensure that every query was fast and that the user was not kept waiting.
Reports can be built and fully explored in-app, allowing you to filter on a wealth of data points, as well as hierarchical grouping, drilling down to records in a group, multiple layers of sorting, and more. Once done you can save your customized report so you can run it again later. You can also set up a scheduled report - this will run your report on the frequency you request and email you a link to the results.
Overall this system was my favorite to design and work on, with a heavily interactive component that necessitated high performance and attention to detail. Nobody wants to run a report and have the numbers add not up.
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
release. Neat!
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
visualizations for
top-level administrators.
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.