Buttondown Lets You Build, Grow and Launch Your Email Newsletter

Copied URL with current time.
0:00 / 0:00

In this episode of Running in Production, Justin Duke goes over building an email newsletter service. It’s mostly hosted on Heroku and has has been up and running since late 2016.

Justin talks about how he handles sending out 100k+ emails, having a mix of Django templates and DRF + Vue, using rq to schedule emails, scaling with Heroku, balancing out what events to keep track of, how to figure out which features to develop and so much more.

Topics Include

  • 3:50 – It’s a weeknights / weekend project and dealing with 100k+ email spikes
  • 11:42 – Motivation for using Django, choosing “boring tech” and email validation
  • 20:08 – It’s a monolithic app in a mono repo but broken up into ~8 Django apps
  • 27:48 – It used to be mostly a DRF API back-end with Vue on the front-end
  • 30:04 – Storybook is a tool for developing UI components
  • 32:06 – Useful Python / Django libraries that were helpful for this project
  • 35:39 – Spending an innovation token on using websockets for link checking
  • 41:10 – rq is a powerhouse for scheduling and sending emails in the background
  • 47:35 – Dealing with issues and errors when sending emails out at scale
  • 50:43 – Sentry and Datadog make for a great duo of services
  • 54:19 – Using Stripe and avoiding dark patterns around subscription pausing
  • 59:35 – A few strategies to prevent bad actors from sending email spam
  • 1:03:09 – Reasons for going with Heroku to host most things (roughly 12 dynos)
  • 1:12:13 – A few Heroku add-ons and plugins that are being used
  • 1:16:37 – The deployment process from development to production
  • 1:21:26 – Dealing with database and front-end changes with zero down time deploys
  • 1:28:10 – Performing database backups and backing up other user uploads
  • 1:34:45 – Getting notified of errors if something goes wrong
  • 1:37:53 – Best tips? Framing out when and where to record things (ie. events, etc.)
  • 1:43:19 – Using Notion to track bugs, roadmaps and collect user feature requests
  • 1:47:23 – Justin has a personal site and check out Buttondown
📄 References
⚙️ Tech Stack
🛠 Libraries Used

Support the Show

This episode does not have a sponsor and this podcast is a labor of love. If you want to support the show, the best way to do it is to purchase one of my courses or suggest one to a friend.

  • Dive into Docker is a video course that takes you from not knowing what Docker is to being able to confidently use Docker and Docker Compose for your own apps. Long gone are the days of "but it works on my machine!". A bunch of follow along labs are included.
  • Build a SAAS App with Flask is a video course where we build a real world SAAS app that accepts payments, has a custom admin, includes high test coverage and goes over how to implement and apply 50+ common web app features. There's over 20+ hours of video.


  • Want to discuss this episode on Twitter? Tag @nickjanetakis or use #RunningInProduction

Feb 15, 2021

✏️ Edit on GitHub