The DevOp

← Back to Kevin's homepagePublished: 2016 July 29

In spring 2013, a large client delayed a scheduled project kickoff, leaving me and my team at Keming Labs with some unexpected spare time.

I decided to get my proverbial computing house in order: Setup a structured backup procedure for our Gmail and Google Calendar data, optimize webservers, migrate from Github to a self-hosted git server, etc.

These are the kind of tasks that every computing professional knows they should be doing, but that are all-to-easy to put off for another day.

After actually finishing them, I decided to writeup Keming’s internal notes and research into a formal set of written guides and sell them online: The DevOp was born.

The name is a joke: it’s “DevOps for one”, since the focus is on individuals and small teams managing their own infrastructure rather than a fleet of automated cloud servers.

Over the past three years, I’ve been pleased with the success of the site. The revenue is nothing huge, but it’s more than enough to offset the marginal cost of publishing the work required by Keming’s other projects. (Not to mention the personal satisfaction of saving dozens of people from Linux config file hell.)

Infrastructure

The DevOp itself is simply a static website with the guides behind a paywall.

The static site is generated by Nanoc, since that’s what I’ve been using since 2012 and hate change.

The payments are handled by Stripe Checkout.

The dynamic aspects (handling payment, logins, and sending confirmation emails) are powered by about 150 lines of Clojure using Compojure for routing and Friend for authentication/authorization.

Originally the site used Amazon’s DynamoDB as a data store, but that turned out to be too complicated and I switched to Enduro, which simply serializes the entire database to disk as an EDN file on every change. This may become a problem when the database (which is just every customer’s email and password hash) is larger than 100 MB, but at that point the site revenue will have been enough for me to retire.