👋 Hi, I'm Dave!

I spend my free time trying to be a decent parent, cultivating mindfulness, reading, watching weird and/or terrible streaming, learning Spanish on Duolingo, playing RPG games, and listening to a wide variety of music.

I work in web technology with a passion for learning and adapting. I’ve been building web applications for decades. Now I focus on cloud infrastructure and reliability engineering.

I’m generally more interested in the “why” of things before I start thinking about the “how”.

Would you hire ChatGPT?

I’ve heard that ChatGPT is capable of generating complex coding projects. I’ve been curious to give it a try for myself. So I decided to use one of the most reliable measurements of technical skills known to software hiring managers the world over: a take-home coding project. But instead of giving ChatGPT a one pager describing what I was looking for and hearing back with a git repo link in a few days, it took the infamous large language model quite a bit of hand holding to get the job done....

May 26, 2023 · 5 min

Encrypted Amazon EC2 boot volumes with Packer and Ansible

At the end of 2015 Amazon added support for encrypted EBS boot volumes. EBS storage volumes had offered optional encryption for some time before that. Now it’s possible to encrypt an AMI and bring up EC2 instances with fully encrypted starting volumes. I set out recently to use encrypted EBS boot volumes for a HIPAA compliant project at ReactiveOps. It’s very easy to convert an existing AMI with an unencrypted boot volume to use encryption....

March 18, 2016 · 4 min

Forgot about Amazon API Gateway models

In my post on building a serverless URL shortener I neglected to mention API Gateway models at all. A model defines a JSON schema for data passed in or out of API methods. Models are assigned to method requests/responses. They play a role in data transformations that happen within mapping templates. Models are not used for validating input data. That seems like a logical use for them so perhaps they will serve this role in the future....

March 4, 2016 · 2 min

Using custom domains with Amazon's API Gateway

In my last post Build a serverless URL shortener with AWS Lambda and API Gateway services I walked through creating a URL shortener service using Amazon’s API Gateway and Lambda services. One of my goals for that project was to use a custom domain instead of the randomized URL provided by API Gateway. This turned out to be trickier than I expected. API Gateway supports custom domains but it requires an SSL certificate....

February 26, 2016 · 3 min

Build a serverless URL shortener with AWS Lambda and API Gateway services

I’ve had my eye on Amazon’s Lambda and API Gateway services for a few months. Running a web application without the costs or headaches of maintaining servers is attractive. Of course, no platform is without tradeoffs. So to get myself familiar with the finer points of serverless apps I decided to launch a simple project: a URL shortener service. With a few hours of work and a few dollars per month in cost I got a decent prototype working capable of handling millions of requests per month....

February 24, 2016 · 9 min

On-call rotations are a team sport

No one ever says: “I want to ack PagerDuty alerts when I grow up”. Lost sleep. Diverted focus. Scrambling under pressure. There’s no shortage of downsides to being on the frontline for a business’s technology. Still, a well run on-call rotation is key to the proper care and feeding of any company’s technology stack. A healthy on-call rotation shines a bright light on weaknesses and implements improvements with urgency. It requires a team with sharpened communication practices to do it well....

June 8, 2015 · 4 min

The secret to organizing a tech meetup

A little over three years ago Hector Castro brought up an idea he had for starting a DevOps meetup in Philadelphia. We both agreed that existing user groups weren’t covering many topics bridging the gap between developing and operating software. So we organized the first Philly DevOps meetup in July of 2012 and we’ve hosted regular monthly meetups since then. Every so often somebody asks: I want to start a meetup....

June 5, 2015 · 4 min

Going remote, even when you're on-site

Over the past few years I’ve worked on opposite extremes of the remote/on-site workplace spectrum. My current employer maintains top notch office facilities complete with chef prepared lunches, bio-walls, lego murals, and slides. Previously, I worked with a fully distributed company of 75+ people that had a strong culture and no physical office space at all. There are definite trade-off’s to both types of working environments. Whether your team is on-site or on-the-beach, I’ve learned that teams can find serious benefits in adopting remote-first communication patterns....

June 1, 2015 · 3 min

Repeatable, randomly ordered RSpec test runs on TeamCity

Running a suite of tests in the same order always can mask unintentional dependencies between tests. You can end up with a test that succeeds in a full run of the suite but fails by itself. One way to shake out these dependencies is to run tests in a random order. RSpec has an –order option that you can use to randomize test order for each run. rspec --order rand...

March 22, 2013 · 2 min

RSpec run fails, returns exit code 0

My team recently setup CI for a few Rails projects using TeamCity at work. When new commits hit a project’s repo if an RSpec test run passes the CI setup deploys the code to a Heroku site used by our QA team. One way or another some specs started failing on a project but the code still deployed to Heroku. That’s not how it’s supposed to work. TeamCity looks at each command’s exit code to determine if a CI step fails or succeeds....

March 9, 2013 · 2 min