Case studies·Tools

Buttondown

Newsletters on Django, Heroku, and one Stripe engineer’s nights

Justin Duke built Buttondown while working at Stripe — a minimalist newsletter tool on Django and Postgres, hosted mostly on Heroku with Redis/RQ for email scheduling. ~45k lines of Django later, still one monolith, deliberately boring.

2016–2018

Side-project Django, marketing in the same repo

Side project · commits dating to 2016 (2022 blog)

Duke wanted a newsletter tool that did not feel like a growth-hacked social network. Buttondown shipped as plain Django with marketing pages in the same codebase — a decision he later mildly regretted but never rewrote into microservices.

On the Running in Production podcast he described choosing boring tech so he could iterate after hours without learning a new framework per quarter.

Lesson

Monoliths are a feature when you are one person with a day job. Context switches kill more startups than Heroku dynos.

2018–2021

100k+ emails, RQ crons, ~12 dynos

100k+ emails sent (podcast) · ~45k lines Django (2022 blog)

Growth meant scheduling and deliverability, not re-architecture. Duke built django-rq-cron after Heroku’s scheduler missed windows — sensitive crons now run inside the same RQ workers that send mail.

He split logic into ~8 Django apps (`emails` sun, `api`, `monetization`, etc.) but kept one deployable unit on Heroku with roughly a dozen dynos — enough headroom without hiring a platform team.

Lesson

Fix scheduling with code you control before you fix it with another SaaS bill.

2022–today

Still Django-shaped, stack page honesty

Solo-founded product · Stripe day job → full-time tool (public interviews)

Duke’s 2022 “how I organize Django apps” post is the receipts: 45k lines, checker framework for invariants, Stripe Connect mirrored in Postgres for speed — still not Kubernetes.

Buttondown’s public /stack page lists every dependency and what they removed (Heroku Redis → other providers → Postgres-backed caching experiments). That transparency is the anti-over-engineering flex.

Lesson

Document your stack like you document your API. Future-you is also a maintainer.

Sources

Facts drawn from public engineering posts and interviews. Numbers are approximate where sources disagree — we're stack advisors, not historians.

Get the right stack for YOUR scale — not theirs

Buttondown's stack made sense for Buttondown. Yours won't — and copying theirs is how you end up with a $4k/month bill and three unused Kubernetes clusters.

Plan my stack — free