Resume

Contact me at dave@urth.org.

The Highlights

  • Team lead and Staff/Principal Engineer with over 20 years of experience capable of providing technical leadership, shaping the development workflow, providing mentoring for other staff, hiring, and managing teams.
  • Able to gather requirements and communicate clearly about technical problems.
  • A proven track record of hiring excellent developers.
  • Prolific FOSS author of a variety of projects in Rust and Go as well as Perl’s DateTime.pm library and many other Perl libraries.
  • Creator of several handy utilities in Rust and Go.
  • Author of the Perl core documentation pages perlootut and perlobj, and author of much of the documentation for Moose, a Perl OO framework.
  • Co-author of two O’Reilly books way back when.
  • I live in Minneapolis, MN but I am only available for remote work, regardless of where offices are located. I am open to travel, but no more than three times per year.

I’ve been working as a professional software developer since 1998, starting with Perl, and more recently using mostly Go, with some JS and C in there over time. I’ve also worked with SQL, webapps, REST APIs, GraphQL, Docker, k8s, AWS, and more.

I enjoy solving problems for humans. This means more than just “making it go”, it also means really understanding the needs of your users. I also have a strong interest in data. Solid data models are the key to building powerful, flexible applications.

Over the years, I’ve created or contributed to hundreds of free software projects and libraries. I’ve also written extensive technical documentation and articles, co-written two books, and presented at many conferences, including teaching various all-day classes.

I care greatly about the development process. Clear requirements, breaking work up into small pieces, issue tracking, automated testing, CI/CD, QA, source control; all of these are crucial to building quality software. Why build something that works if it doesn’t do what your users want, or if you can’t maintain it?. Why fix a bug if you reintroduce it in the next release? Software should provide value to users and get better over time, not worse.

Experience

ActiveState Software Inc.

Team Lead, Senior Software Engineer, 2/2017 - 10/2021

When I began at ActiveState, I was the Team Lead for the Languages Team, which produced binary builds of ActivePerl, ActivePython, and ActiveTcl for our customers. Builds used a system written in Perl that built all the languages on a variety of operating systems, including Linux, Windows, macOS, and several big iron systems.

As the new Team Lead, I helped the team improve our workflow by introducing code review and an ordered backlog of work. I also worked with the rest of the company to define future work.

After we began work on the ActiveState Platform, my team developed several of the key backend services for the platform, including the REST API for our entire database of packages. This was done using Go, Swagger, Postgres, and Kafka. All of our services ran on AWS using RDS for the database and Docker containers in Kubernetes for services and jobs. We also developed the first version of the service that handled requests for builds across all operating systems.

Since our services formed the backbone of the ActiveState Platform, every other technical team in the company was a customer for our services. I worked closely with these other teams and Product Management to design our APIs, write design docs, plan changes and rollouts, and address bugs and performance issues that affect the Platform. I also led blame-free postmorterms for outages and other severe incidents as needed.

For quarterly planning, I worked closely with the CTO, Director of Engineering, and Product team. During this process we defined my team’s OKRs and KPIs, as well as determined which projects to prioritize based on customer and company needs.

In addition to my Team Lead responsibilities, I also worked extensively on our Engineering department documentation and rewrote our FOSS usage/release policy, working closely with the CTO and CEO.

I was a leader in our technical hiring, helping define our hiring process for engineers, as well as contributing to our onboarding process.

MaxMind, Inc.

Software Engineering Team Lead, 7/2011 - 1/2017

At MaxMind, I led a team developing websites and REST APIs, queue processing systems, and build tools using Modern Perl, Go, RabbitMQ, and Postgres.

As Team Lead, I provided technical leadership for the engineering team. This included defining our development workflow using agile tools, as well as our code review practices (using GitHub Enterprise Pull Requests). I also set standards for the engineering team including coding standards and testing practices.

I wrote the first unit tests at the company and later worked on integration tests as well our production simulation tools. I also introduced continuous integration, initially with Jenkins and later with TeamCity. As our test suite grew I also worked on benchmarking and optimizing the test suite itself, bringing the run time form nearly an hour to about 15 minutes.

One of the most interesting tools I created at MaxMind is a Perl library to implement a parallelizable build system called Stepford. It is similar to make, but with Perl classes as the main unit of work instead of processes. This system was then used to implement the entire build process for our line of GeoIP2 databases.

I helped define and document the MaxMind DB file format, including writing a comprehensive spec for it, as well as participating in the development of client libraries in Perl (XS), Python, Java, C#, PHP, and JavaScript. I also created the C API for this format, libmaxminddb, as well as the Perl library to write the format, MaxMind::DB::Writer, which is mostly written in C and XS.

To help improve developer productivity, I developed and extended tools for our development environment, including Git hooks, Perl::Critic policies, and Code::TidyAll, a multi-language linting and tidying tool.

As Team Lead, I led all hiring for technical staff, growing the engineering team from three to fifteen, including front-end and back-end developers, a sysadmin, and QA engineers. I also developed the resume screening and interview process used for all of these hires.

Thomson Reuters

Consulting Software Engineer, 11/2007 - 4/2011

LiveText, Inc.

Senior Developer, 3/2007 - 11/2007

Socialtext, Inc.

Senior Developer - Database Lead, 9/2004 - 3/2007

House Absolute Consulting

Sole Proprietor, 2/2002 - 9/2004

Various

Too Old to List, 1995 - 2002

Do you really want to read about my TA position in Music Theory or my first programming jobs?

Publications

Articles

Perl Core Documentation

I wrote perlootut from scratch and revised perlobj from the ground up for the Perl 5.16.0 release in 2012. I also made major edits to several other documents in the Perl core, including perlhack, perlhacktut, perlhacktips, and perlsource.

Moose documentation

In 2009 I received a grant from The Perl Foundation to work on the documentation for Moose, an OO system for Perl. I revised all of the existing API docs, wrote new cookbook recipes, and wrote the Moose::Manual documentation from scratch.

RT Essentials

I contributed two chapters to this book. For more details see the O’Reilly page for the book.

Embedding Perl in HTML with Mason

This book, which I co-authored with Ken Williams, is available from O’Reilly and Associates, and was published in October of 2002. It is also freely available in an online version.

Presentations

I have presented at many conferences around the world. These presentations have ranged from 5 minute lightning talks to all day intensive classes featuring extensive coding exercises as part of the class.

See my list of slides and class descriptions for more details.

FOSS Software

Besides contributing patches to hundreds of projects and libraries, I have created and/or maintained a number of FOSS projects. Here are a few highlights:

  • detest is a test assertion library for Go.
  • omegasort is a CLI tool for sorting text files written in Go.
  • precious is a meta-linting code quality tool (a tool to run many linters and prettifiers) in Rust.
  • ubi is a tool to install single file binaries from GitHub releases, in Rust.
  • I kicked off the Perl DateTime Project in the early 2000s, which developed a comprehensive suite of inter-operating Perl libraries for dealing with dates and times. Distributions in the DateTime suite are under the DateTime namespace on CPAN

See my houseabsolute GitHub organization for the vast majority of my projects.

Other Skills

It’s hard to jam everything I’ve ever done into a list of jobs and projects. Here’s a list of other things I’d be happy to talk about in interviews:

  • CI systems, including GitHub Actions, CircleCI, Azure Pipelines, and others.
  • Rust, it’s super fun but I’ve yet to use it for paid work.
  • SQL, PL/pgSQL, and Postgres extensions.
  • Date and time standards.
  • Database schema design.
  • HTML, CSS (including Less & Sass), Bootstrap, JavaScript, and React.
  • I18N and L10N.
  • Email parsing and generation.

Education

Wow, you read this far? Amazing!

University of Minnesota, School of Music

1995-1997

Master of Arts in Music Composition

Bard College

1991-1995

Bachelor of Arts in Music