Justin Duke

Customer Support for Side Projects

I have been running a bunch of reasonably successful 1 side projects for a couple years now. Here is a (unfortunately, very much truncated) list of support emails I have received:

I used to be very bad at providing any level of support, for a number of reasons:

  • I got anxious receiving email.
  • I got anxious sending email.
  • I got anxious at the thought of writing something that might upset someone.
  • I got anxious at the thought of doing work that wasn’t exciting or germaine to what I was currently focused on.

But I’m much better at it now! In fact, with my largest product, Buttondown, I am so good at support that a non-trivial number of people have been upsold purely on my response time.

It’s not just a good way to aid in the growth of your side project, it’s a very transferable skill — it improves your ability to communicate effectively, react quickly, and empathize with customers. All of these are great things!

Read more →

Generators are dope

(This is also readable as a gist, if you prefer.)

I love generators. They’re one of my favorite features in Python, and criminally underrated. (Or underused? Either way.)

Read more →


Here’s a sentiment with which I strongly agree: I say this occasionally to normalize it: I’ve never put code on GitHub I’ve never done coding in my spare time for fun, side project, or portfolio I’ve had a successful career as a developer If you have done those things— great! Maybe I will too one day. But it isn’t necessary. — Stephanie Hurlburt 🔜 GDC (@sehurlburt) March 3, 2018

Read more →

Migrating from moment to date-fns

I got a lot of positive feedback from my recent article on how I cut my webpack bundle size in half, and a common refrain was how folks found themselves in the same position as I did in terms of deciding to migrate off of moment.js.

A handful of folks suggested date-fns as an alternative. date-fns has a relatively clumsy name but offered excatly what I was looking for:

  • Modularity and tree-shaking compatability.
  • Use of native dates
  • TypeScript support

So I decided to take the plunge and try migrating: the surface area of my use of moment wasn’t that large, so I hoped it would be relatively painless.

(Spoiler alert: it was.)

Read more →

A month with the AirPods

I bought them, you see, despite my better instincts.

I already had BlueTooth earphones that worked (albeit not well).

I already had a pair of Bose over-the-ears that are perfect for day-to-day work and for noisy situations, like planes and crowded coffeeshops.

And my army of EarPods (or, perhaps, EarPods knockoffs — I purchased five of them for like $50, with the understanding that I’d lose or break a pair every month or so) was still fine, though its ranks were slowly dwindling.

But I’d been seeing more and more AirPods in the wild, and decided to get a pair.

Read more →

How I cut my Webpack bundle size in half

In the fall, a young man’s fancy lightly turns to thoughts of front-end performance.

When I initially built out Buttondown, I was focused on two aspects above all else:

  1. It being built quickly.
  2. It working reasonably well.

Notably excluded from that list is performance. Buttondown isn’t a slow app, but it is a heavy one: the bundle size while developing is measured in megabytes, and there’s a non-trivial loading time for first-time users.

Now that the core feature base has stabilized and nothing is particularly in an “on fire” state, I wanted to turn my eye towards maintenance work, and a big piece of that was seeing what I could do to shrink that bundle.

Read more →

Not The Keynote You're Looking For

I hate to be in the position of defending Apple evangelists, but there have been a lot of weird takes about the Apple leaks the past few days. Here’s one:

I think the comparison between Star Wars and Apple products is particularly apt because, well, Star Wars isn’t “commercial art”: it’s a meticulously managed piece of intellectual property. It isn’t a singular artistic vision: its the culmination of hundreds of stakeholders, producers, focus testers, and marketers. So much so that the director of a Star Wars movie just got replaced, like a poorly-performing engineering manager:

Read more →

Turning 25

This week, I turned 25.

I spent my birthday doing the thing I want to spend every birthday doing: I reverse seared a filet, bought a nice scotch, and watched an old movie with Molly.

We were going to watch Bridge on the River Kwoi but didn’t want to start a three-hour movie at eight pm, so we watched The African Queen.

We have become so old. It is fantastic.

Read more →

Creating a password validator component in Vue

Sometimes you procrastinate one feature by writing another. Even if that other feature is pretty small and inconsequential. 1

For me, that other feature — if you can even call it a feature — was password strength testing for Buttondown.

This is one of those things that I always liked on other sites, but didn’t really know how to implement myself!

Read more →