I’m Nick, a software developer based out of San Diego. In 2014, I wrote my first line of Rails, and I’ve been hooked on convention over configuration and optimizing for programmer happiness ever since.

Today, I’m an engineer at Campsite. I previously built software at GitHub, Stripe, and Tuple.


Helps groups on the move choose a next spot
TypeScriptMochaWeb Components
A custom element that shows text as if it were being typed
Analyzes Strava data to help athletes celebrate Monday finishes
Did the activity in your Garmin FIT file have a negative split?

Blog posts

Stop paying the code-review productivity tax

Open PRs for tiny vertical slices. Let’s say you’re adding “widgets” to your application. A PR that’s all of the backend controller actions needed to support all CRUD operations on widgets is hard to review. Instead, start with a PR that introduces a blank page and a new URL behind a feature flag. Later, open another PR that displays some widgets on that page.

How I replaced a Rails app with a few dozen lines of Ruby

Even with all the magic that Rails provides, most apps need a whole bunch of things — like authentication, UI, background jobs, email sending, deployment — that aren’t unique to my idea. Next time I have an idea, I’ll look for ways to write less code and maintain less infrastructure, at least to get started.

Resist the ‘quick fix’

To-dos move the context of a problem about out of my brain and into a centralized place where others can consider it for their own work. A thoughtful explanation of a problem in prose is more discoverable than a commit message, a comment, or “self-documenting” code. It can also bring more perspectives into the conversation by making the problem accessible to those who otherwise wouldn’t be reviewing a code solution.

Continuously deploy custom Heroku error and maintenance pages from your app’s repository

Heroku recommends hosting custom error and maintenance pages on Amazon S3, but it can be easy to upload pages there, forget about them, and have them fall out of sync with the rest of your application. One solution is to have them continuously deployed from your application’s repository.

Try ending today with a failing test for a great start tomorrow

Starting with a failing test means I know exactly what to work on: making it pass. Compared to an item on a to-do list, a failing test is better at returning my mind to the state it was in when I was focused deeply on the task.

Open source contributions