I’m a software architect and engineer with 20+ years of experience building web-based applications, REST APIs, and scalable, distributed back-end services. I’ve also done quite a bit of front-end, SQL, and DevOps work, though I prefer to focus on the back end.

I’ve written production systems in Go, Clojure, Rails, Django, ASP.NET and a number of other technologies. On most projects, I have been the requirements gatherer, architect, implementer, documenter, and maintainer.

I currently work for the Academic Preservation Trust at the University of Virginia, where I build digital preservation repositories, working mostly in Go.

Projects and Experience

APTrust Digital Repository

2014 - Present | University of Virginia - Charlottesville, VA

The Academic Preservation Trust (APTrust) is a distributed digital repository serving a consortium of 18 universities across the US. Depositors send high-value digital materials (audio, video, research data, photos, master scans of rare books, etc.) to APTrust, which stores them in AWS and/or Wasabi storage on the east and west coasts of the US to ensure they remain available even after regional disasters.

APTrust provides a number of services on top of AWS’s service offerings, including regular fixity checks, access control, strictly controlled deletion workflows and a searchable metadata registry. The system consists of a coordinated suite of distributed microservices written in Go, and a web application to provide web and REST access to the registry.

Technologies: Go, NSQ, Postgres, S3, Glacier, Wasabi, Docker, Fargate, Redis, Swagger/OpenAPI

Code: Preservation Services | Registry

Documentation: APTrust User Guide | Registry Member API | Preservation Services | Registry

DART: Digital Archivist’s Resource Tool

2018 - Present | University of Virginia - Charlottesville, VA

Many depositors were slow to use APTrust, DPN, and other distributed repositories, even when they had a strong need to preserve materials. One of the roadblocks was a lack of technical skill or developer time required to package materials in archival format.

DART provides a simple drag-and-drop UI, along with a suite of scriptable command-line tools to package and upload materials into remote repositories. New users were able to deposit materials into APTrust with no training. DART is built on a plugin architecture that allows developers to write modules that support new package formats, network protocols and remote repository integrations.

Technologies: Node.js, Electron, HTML5, CSS

Code: DART

Docs: User Guide | API


2014 - 2018 | University of Virginia - Charlottesville, VA

The Digital Preservation Network (DPN) was a preservation service similar to APTrust, serving a consortium of sixty or so universities. APTrust provided ingest, replication, and storage services for DPN. I designed and built the ingest and replication services using Go, and I worked with developers from Stanford, the University of Michigan, Chronopolis, and UT Austin to design and build the Rails application that served as the DPN registry.

Technologies: Go, NSQ, Ruby, Rails, Postgres, Nginx, S3, Glacier

Code: Exchange | DPN

Online Project and Resource Management

2016 - 2017 | Rivanna Software - Charlottesville, VA

Girl Friday Productions in Seattle had been using an enormous Excel spreadsheet to manage hundreds of publishing projects and dozens of employees and contractors. After working out business rules and use cases, I built a web-based application to help the company manage assignments, personnel, deadlines, billing and reporting.

Technologies: Python, Django, Apache, Postgres

HTML5 Online/Offline Interactive Catalog

2013 | WillowTree Apps - Charlottesville, VA

A supplier of building materials needed to put its entire catalog into an offline, tablet-based HTML5 application, so that builders touring large construction sites that have no WiFi can order electrical fixtures, plumbing fixtures and other items as they walk from room to room. The application would send the orders to the supplier later, when a connection was available.

The primary challenge in designing this application was to model the correct data schema. The architecture was not particularly complex, but the implementation pushed the limits HTML5’s capabilities on several fronts, notably data storage and performance. The fact that the engineers at WillowTree were able to build this app after I left is a testament to their skills and abilities.

Technologies: HTML5, JavaScript, CSS


2012 - 2013 | WillowTree Apps - Charlottesville, VA

Emergensee was a personal security app that ran on iOS and Android. It streamed audio, video, and location data to servers running on Amazon Web Services. Local police defined a geographic region they wanted to monitor through a web UI, and then were able to see all activity in the area. They could communicate with users who were live-streaming incidents through a built-in chat service.

Most of the customers for the app were universities that wanted an easy, reliable way to discover and respond to campus incidents. The university licensed the monitoring station and the students got the app for free. The app was commonly used by people who found themselves in vulnerable situations, such as women walking alone late at night, who wanted to alert campus police to their location, and let police see and hear what was going on around them.

Technologies: Python, Django, Postgres, AWS Elastic Beanstalk, S3

LendStreet Experian Integration

2012 | - Oakland, CA

LendStreet helps people get loans and consolidate debt. When the company was first starting in Charlottesville, I wrote the Experian integration that enabled the company to run credit checks.

Technologies: Ruby, Rails, XML

Data Warehouse and Reporting Application

2012 | Seven Simple Machines - Seattle, WA

A non-profit organization in New York City wanted to analyze years of data about its teachers and programs, and the tens of thousands of students it had served. I built an online application to warehouse data in a format that allowed for flexible querying and reporting. The system pulled in current live data on request, and included a point-and-click query builder, saved reports, and a number of other features.

Technologies: ASP.NET MVC, C#, SQL Server

2011 - 2012 | Hotelicopter/ - Charlottesville, VA

I built Roomkey’s initial rates and availability engine, which communicated with the back-end system of major hotel chains to find available hotel rooms based on location, date, price range, and other criteria. The system was highly scalable, often handling millions of transactions per day. Getting the system to scale required a lot of JVM profiling and some tuning.

I also wrote systems for importing data from partners and auditing the integrity of Solr and SQL databases and helped define triggers for load balancing.

Technologies: Clojure, Solr, MySQL, AWS Elastic Beanstalk

2010 - 2011 | Hotelicopter/ - Charlottesville, VA was originally, which ran on Rails instead of the more scalable Clojure. At Hotelicopter, I designed and wrote code to extract, load, and transform large datasets from a number of hotel chains and online travel services (Expedia, Orbitz, Priceline, etc). I also wrote and maintained code that ran on AWS’s Elastic MapReduce to transform millions of images.

Technologies: Ruby, Rails, C, Solr, MySQL, AWS Elastic MapReduce

DatStat Discovery

2009 - 2010 | DatStat, Inc. - Seattle, WA

DatStat Discovery was a web-based product for researchers to design and run clinical trials of human subjects. It enabled users to design protocols for multi-arm longitudinal studies, to randomize and enroll subjects, to manage their participation, schedule appointments and assessments, and collect and analyze data. I designed and built this system after observing common patterns in a number of custom study-management systems I had written in prior years.

Technologies: C#, ASP.NET, SQL Server, HTML, JavaScript, CSS

DatStat Illume

2003 - 2010 | DatStat, Inc. - Seattle, WA

Illume allowed medical professionals and clinical researchers to build sophisticated surveys and data collection tools with complex logic and guaranteed data integrity across multiple versions and revisions. It also provided sophisticated querying and analysis capabilities for analyzing individual, cohort, and longitudinal data sets. Clients were mostly hospitals, universities, and other institutions focused on medical and psychological research.

Technologies: C#, ASP.NET, SQL Server, HTML, JavaScript, CSS

State of Illinois Child and Adolescent Mental Health

2008 - 2010 | DatStat, Inc. - Seattle, WA

I built a custom system to help social workers in the state of Illinois manage caseloads. The system kept track of clients, appointments, and information reported by both clients and social workers.

Technologies: C#, ASP.NET, SQL Server, HTML, JavaScript, CSS

eHarmony Study of Love and Marriage

2007 - 2010 | DatStat, Inc. - Seattle, WA

I built system for eHarmony to collect data in a multi-year longitudinal study of love and marriage seeking to define what makes relationships succeed or fail over time. The New Yorker published an article about the study in its July 4, 2011 issue.

Technologies: C#, ASP.NET, SQL Server, HTML, JavaScript, CSS

Children’s Health After Injury

2007 - 2010 | DatStat, Inc. - Seattle, WA

This custom system enabled doctors at a number of hospitals throughout the US to track and analyze the progress of children recovering from traumatic brain injuries.

Technologies: C#, ASP.NET, SQL Server, HTML, JavaScript, CSS

UW Parent-Child Assistant Program

2007 - 2010 | DatStat, Inc. - Seattle, WA

Similar to system for Illinois above, this custom web-based application helped social workers at the University of Washington’s PCAP program manage their case loads.

Technologies: C#, ASP.NET, SQL Server, HTML, JavaScript, CSS

Alcohol Intervention Management Software

2003 - 2010 | DatStat, Inc. - Seattle, WA

I built a number of custom systems to collect and analyze data, and to manage participants in alcohol-intervention programs at a number of universities. These were grant-funded programs aimed in part at helping students manage their alcohol consumption, and in part at collecting data correlating the use of alcohol with risky behaviors.

I wrote custom systems for:

  • Columbia University
  • University of Massachusetts at Amherst
  • University of Missouri-Columbia
  • University of Texas at Houston
  • University of Texas at Austin
  • Yale University

Technologies: C#, ASP.NET, SQL Server, HTML, JavaScript, CSS, Perl, CGI, MySQL

CPT III Research Management Software

2003 - 2010 | DatStat, Inc. - Seattle, WA

CPT III was the third round of the Cognitive Pharmaco-Therapy study run by Vanderbilt University, the University of Pennsylvania, and Rush Medical Center. The study followed a number of patients for several years to trace the effectiveness of certain medicines in treating depression.

The custom CPT III system recorded patient-reported data, provider notes, prescriptions and other information. It also scheduled patient appointments and surveys, and alerted providers to impending relapse, recovery, and remission events.

Technologies: Perl, CGI, MySQL

Puget Sound Hospital Capacity

2002 | Volt Services/University of Washington - Seattle, WA

This project came into being after a bus plunged off the Aurora Bridge in Seattle and landed on the roof of an apartment building. The accident occurred not far from the University of Washington Hospital, so the ambulances took most of the injured there.

Unfortunately, UW Hospital was not prepared for the influx. To deal with such mass-injury events in the future, regional hospitals decided to build a private website showing up to the minute information about who was on staff and how many beds were available in each department.

911 dispatchers used the website to route ambulances to the hospitals that were best able to serve patient needs. For example, in cases of brain or spinal injury, they might route an ambulance to the second-nearest hospital, because the website showed that the neurosurgeon there was available.

Technologies: ASP, Visual Basic, SQL Server, Microsoft IIS

Providence Retirement Website

2000 - 2002 | FCG Doghouse - Seattle, WA

Providence Health & Services ran (and still runs, in a new version) a website for its thousands of current and former employees to manage their retirement plans.

Technologies: ASP, Visual Basic, SQL Server, Microsoft IIS

Blue Cross/Blue Shield Claims Auditing

2000 - 2002 | FCG Doghouse - Seattle, WA

I helped design and build a system for Blue Cross/Blue Shield to audit the work of its claims adjusters throughout the US. All regional plans regularly uploaded sample batches of claims to the central office in Chicago for review. We loaded these into a SQL database and built a web UI for auditors to review the claims and comment on problems or issues with the way claims were processed.

Technologies: Java, SQL Server, Microsoft IIS

Various HTML and CGI Websites

1999 - 2000 | Independent Contractor - Seattle, WA

I built a number of static HTML websites, and some dynamic data-driven sites using Perl and MySql. These included OsteoEd, a project of the University of Washington to help patients understand osteoporosis; BellaLuz, which sold artisan lighting projects; and the initial version of, which would later connect insurance companies to providers such as auto body repair shops.

Miscellaneous Software Projects

Early 2000s

  • Directory of Third Party Administrators - A project using Perl and XSL-FO to generate a printable directory from a large SQL database.
  • CRISP - An automated Perl program that searched new federal research grants to identify potential new customers for DatStat’s research management software.