• dave@urth.org
  • Minneapolis, MN (no to relocation, yes to some travel)

The Highlights

  • Creator of DateTime.pm and many other Perl modules.
  • Core dev for Moose, a postmodern object system for Perl 5.
  • Author of Perl core documentation perlootut and perlobj, and author of all of the Moose documentation.
  • Co-author of two O’Reilly books.
  • Years of experience talking to non-technical co-workers for requirements gathering and communicating about technical problems.
  • Years of experience providing technical leadership for a team, setting technical standards, shaping the development workflow, and providing mentoring for other staff.

I’ve been working as a professional software developer since 1998, mostly using Perl, and more recently Go and C. There’s also been a lot of SQL and a fair bit of web along the way.

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 great interest in data. Solid data representation and handling is 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, articles, co-written a few books, and taught some all-day conference classes.

I care greatly about the development process. Getting clear requirements, breaking up work into small pieces, automated testing, good deployment tools, QA, bug tracking, source control; all of these are crucial to building quality software. It’s not enough to build something that works if it doesn’t do what your users want or if you can’t maintain it over time. It’s not enough to 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

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 module 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 this format, 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 module 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.

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 developed the resume screening and interview process used for all of these hires.

Thomson Reuters

Consulting Software Engineer, 11/2007 – 4/2011

At Thomson Reuters, I worked on integrating new data feeds with an existing database of corporate information, some of which included complex internationalization requirements. I also worked on infrastructure projects to make it possible to support per-project Perl module installations.

LiveText, Inc.

Senior Developer, 3/2007 – 11/2007

At LiveText, I worked on a variety of projects including implementing an autosave system for a web-based editor. I also helped improve development practices by introducing automated testing and continuous integration.

Socialtext, Inc.

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

I worked on many projects at Socialtext, including automating deployment, on-site field engineering, and moving data from ad-hoc filesystem storage to Postgres.

House Absolute Consulting

Sole Proprietor, 2/2002 – 9/2004

DoTheGood

Lead Developer, 4/15/2001 – 1/22/2002

Various

Too Old to List, 1995 – 2001

Do you really want to read about my TA position 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. 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 Moose documentation. 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 numerous conferences, including the O’Reilly Open Source Convention (OSCON), Yet Another Perl Conference (YAPC) North America, Europe, and Japan, and ApacheCon. 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. I’m a very prolific CPAN module author. A couple highlights:

Moose

I have been part of the Moose core development team since early 2008, and have contributed a lot of code to the core. I have also written a number of Moose extensions.

The Perl DateTime Project

This is a project I began, and still lead, which has developed a comprehensive suite of inter-operating Perl modules for dealing with dates and times. Modules in the DateTime suite are under the DateTime namespace on CPAN.

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:

  • Perl web frameworks such as Catalyst and Mojolicious.
  • SQL, PL/pgSQL, and Postgres extensions
  • HTML, CSS (including Less & Sass), Bootstrap, and JavaScript.
  • Server daemons including Apache, nginx, Postfix, etc. I’m not much of a sysadmin, but I’ve set many of these things up on my personal servers and development machines.
  • Date and time standards
  • OO design
  • Database design
  • 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