Unlike a rusting highway bridge, digital infrastructure does not betray the effects of age. And, unlike roads and bridges, large portions of the software infrastructure of the Internet are built and maintained by volunteers, who get little reward when their code works well but are blamed, and sometimes savagely derided, when it fails.


It’s easy to take open-source software for granted, and to forget that the Internet we use every day depends in part on the freely donated work of thousands of programmers.

The Internet’s Telltale HeartbleedThe New Yorker


What I’ve learned so far about consulting work:

  • Harvest feeds the OCD time tracker inside of me.
  • Creating proposals is a huge time suck.
  • There’s so much room for automating all of this.

Introducing Hand Built

Over the last several years, I’ve built many great experiences with WordPress. Today I’d like to introduce Hand Built, my new development and consulting firm. If you need expertise with bespoke WordPress solutions, code review, development leadership, data migrations, automation or scaling, shoot me a note at daniel@handbuilt.co

Beginning with CoPress, I got the taste of running a WordPress-only hosting company. Watching clients email Microsoft Word documents back and forth became the genesis of Edit Flow, which is now used by some of the largest news organizations in the world.

Moving on to the CUNY Graduate School of Journalism, I grew to realize the impact usable software can have on education, and was a valued voice for innovation within the institution.

At Automattic, I spent two years on the WordPress.com VIP team reviewing code, fixing nasty bugs, and training developers. I’ve had the honor to speak at many WordCamps, including WordCamp San Francisco. And, along the way, I made significant contributions to Co-Authors Plus and other plugins, and fell in love with WP-CLI.

With Human Made, I split my time between client services and product. I supported a half-dozen clients, most notably Vocativ, CFO.com, and News Corp, with backend and frontend development, leadership, and project management for their launches. I also led WP Remote, a JS application built on a WordPress-powered API, through two substantial feature releases.

Now, through Hand Built, I’m ready to help you solve your business problems. Let it be creating a custom workflow experience for your content team, reviewing an existing codebase for security and performance, or migrating years of archives into WordPress, I have expertise you can depend on.

I look forward to hearing from you.

Introducing Dictator

Dictator comparison mechanism

Dictator controls the State of WordPress, and is now available for you to use.

Strongly influenced by Salt provisioning and installable as a WP-CLI package, Dictator now allows you to:

  • Export WordPress’ configuration to a human-readable YAML state file.
  • Commit the state file to version control to share between environments, or with another developer.
  • Compare the state of WordPress to the declared state file, with a colorized diff.
  • Impose a state file onto WordPress.

Dictator understands WordPress in terms of states. States are collections of regions. Each state file has the state declaration along with tracked configuration details for each region. Regions have a defined schema which produces the translation between the human-readable YAML file and how WordPress stores state in the database.

One key idea Dictator adopted from provisioning systems: environments are ephemeral. WordPress no longer doing what you want it to? You should be able to destroy it and provision a brand new version.

For 0.1, Dictator packages two states: network and site. The network state comprises regions for network settings, users, and sites. The site state comprises regions for site settings, users, and terms. Management of widgets, roles, and more is just waiting for a pull request.

2014-03-31 at 8.15 PM

Think downloading the entirety of a production database is a messy way to get just a few configuration details? Me too — and with Dictator I can provision full WordPress environments without the bad assumptions that come with using production data.

Ever had a site launch that required a frantic amount of widget configuration right after changing DNS? More than I can remember — and I’m automating myself out of the problem.

Think non-posts data portability would be neat? So do I — and I built a tool for it that I’m very excited to share with you: Dictator. Try it out with wp dictator export site site-state.yml