HN user

jmduke

19,865 karma

I run Buttondown (https://buttondown.com).

ex-Stripe, ex-Amazon.

---

https://twitter.com/jmduke https://jmduke.com justin@buttondown.email

Posts492
Comments1,301
View on HN
handbook.directory 1y ago

Show HN: A list of all 'public' company handbooks

jmduke
1pts1
openctx.org 2y ago

OpenCTX, a spec for embedding context in various devtools

jmduke
3pts0
sniperl.ink 2y ago

Show HN: Free tool for improving email confirmation rate

jmduke
1pts0
buttondown.email 3y ago

Every single paid service my SaaS uses

jmduke
2pts2
buttondown.email 3y ago

Pricing Page Driven Development

jmduke
1pts0
blog.jim-nielsen.com 3y ago

The Validity of Custom Element Tag Names

jmduke
2pts0
github.com 3y ago

Hypermodern Python

jmduke
3pts0
lethain.com 3y ago

Setting Engineering Org Values

jmduke
1pts0
www.chronophoto.app 3y ago

Chronophoto

jmduke
1107pts153
en.wikipedia.org 3y ago

Arcosanti

jmduke
2pts0
buttondown.email 3y ago

Just use a monorepo

jmduke
263pts277
www.theringer.com 8y ago

The Curious Case of Bryan Colangelo and the Secret Twitter Account

jmduke
5pts2
blogs.windows.com 8y ago

Microsoft Surface Hub 2

jmduke
7pts0
seeker.company 8y ago

Seeker – The easiest way to host your own job board

jmduke
1pts0
jmduke.com 8y ago

App sizes are under control, they just aren't under scrutiny

jmduke
2pts0
jmduke.com 9y ago

A list of valid and invalid email addresses

jmduke
3pts0
jmduke.com 9y ago

What Vue needs next

jmduke
1pts0
idlewords.com 9y ago

Social Media Needs a Travel Mode

jmduke
280pts220
365shapesof.blue 9y ago

365 Shapes of Blue

jmduke
2pts0
www.snackdata.com 9y ago

Snack Data

jmduke
1pts0
artsy.github.io 9y ago

Front-end JavaScript at Artsy in 2017

jmduke
2pts0
app.box.com 9y ago

Friend-of-the-court brief opposing the travel ban signed by 97 tech companies

jmduke
5pts0
thefounder.biz 9y ago

The Founder: A Dystopian Business Simulator

jmduke
503pts89
bitsplitting.org 9y ago

Progressive Disclosure in Swift

jmduke
1pts0
github.com 9y ago

Public APIs

jmduke
2pts0
www.nytimes.com 9y ago

Silicon Valley Takes a Right Turn

jmduke
1pts0
jmduke.com 9y ago

Use a surfboard

jmduke
1pts0
www.windowsofnewyork.com 9y ago

Windows of New York

jmduke
1pts0
www.atlasobscura.com 9y ago

The Merry Cemetery

jmduke
1pts0
jmduke.com 9y ago

How I stay productive

jmduke
2pts0

With all due respect to Kevin Kelly (who has lived a life worthy of the aphorisms he writes!), I prefer the guidance of George Saunders (via Lincoln in the Bardo):

Please do not misunderstand. We had been mothers, fathers. Had been husbands of many years, men of import, who had come here, that first day, accompanied by crowds so vast and sorrowful that, surging forward to hear the oration, they had damaged fences beyond repair. Had been young wives, diverted here during childbirth, our gentle qualities stripped from us by the naked pain of that circumstance, who left behind husbands so enamored of us, so tormented by the horror of those last moments (the notion that we had gone down that awful black hole pain-sundered from ourselves) that they had never loved again. Had been bulky men, quietly content, who, in our first youth, had come to grasp our own unremarkableness and had, cheerfully (as if bemusedly accepting a heavy burden), shifted our life’s focus; if we would not be great, we would be useful; would be rich, and kind, and thereby able to effect good: smiling, hands in pockets, watching the world we had subtly improved walking past (this empty dowry filled; that education secretly funded). Had been affable, joking servants, of whom our masters had grown fond for the cheering words we managed as they launched forth on days full of import. Had been grandmothers, tolerant and frank, recipients of certain dark secrets,who, by the quality of their unjudging listening, granted tacit forgiveness, and thus let in the sun. What I mean to say is, we had been considerable. Had been loved. Not lonely, not lost, not freakish, but wise, each in his or her own way. Our departures caused pain. Those who had loved us sat upon their beds, heads in hand; lowered their faces to tabletops, making animal noises. We had been loved, I say, and remembering us, even many years later, people would smile, briefly gladdened at the memory.

It's an interesting question! To me, an (or perhaps _the_) obvious threshold is once the emails become automated.

I think the definition of spam necessitates some level of bulk sending, and I struggle to consider ~fifty emails over the course of two or three years "bulk".

The vast majority of commenters are being negative about this essay, and I agree with the negativity, because _automated cold emails_ are awful. (As are sequences, and mail merges.)

However!

_Bespoke cold emails_ are I think, a dying/lost art. I want to give an example of two cold emails that I (manually!) send a few times a month. (I run Buttondown, which is an email SaaS — think similar to Mailchimp, ConvertKit, etc.)

---

The first is to folks who have the following criteria:

1. they hit the front page of HN

2. they have a personal blog that isn't tied to a platform (e.g. they're using jekyll or something similar)

3. they have RSS enabled

4. they do _not_ collect email addresses

The thrust of the email is this:

``` Hi! I'm the founder of Buttondown, a newsletter tool for technical blogs. I'm reaching out because:

1. You just hit HN front page! (Congrats and/or my condolences.) 2. You've got an RSS feed but are not capturing emails.

My proposal: I set you up with a free (for life!) Buttondown account seeded with your blog's RSS feed. All you do is drop in a form tag or an iFrame in your blog and folks can sign up with their email address and get an email whenever you publish something new. I can handle the setup and then hand it off to you for perpetuity.

If this is something you're at all interested in, please let me know! (There's no catch, and this isn't an automated email, so please — I'd love to hear why not, even if the answer is simply "shove off, I don't care about collecting an audience, Twitter and Mastodon are sufficient"). ```

(I tweak the language based on their own voice, mention what in particular I like about their blog, etc.)

---

The second is to folks who fit the following criteria:

1. they're a technical newsletter publishing programming-related content

2. they're using a platform that I know to be particularly expensive relative to me (Mailchimp, ActiveCampaign are the two big culprits here)

``` hi there! I run Buttondown — you may have heard of us, we're used by RELEVANT_CUSTOMER_1 and RELEVANT_CUSTOMER_2. I see you're using OTHER_PLATFORM; is there anything I could do to get you to switch to [us](https://buttondown.com/pricing?count=7500)

(btw, this is a real email, not a marketing campaign. it's still early days for us, so tbh you telling me why you're _not_ interested is just as valuable as getting to call you a customer :) ```

Small sample size for both genres — I've probably sent them a total of ~fifty times — but the response rate is around 80% and conversion rate (though granted for the first genre "conversion" is more of a second-order effect, since I'm offering them a free account!) is ~25%.

I say all of this because, as someone who a priori _hated_ outbound and "sales stuff", I learned that at least for me and my business both the most palatable _and_ most effective method was just being earnest and helpful. It has been the single most useful non-technical skill I've gained over the past few years.

This dovetails with my own experience more or less exactly: when I launched my company, it was easy to throw everything on Heroku, and to their credit and detriment it was also fairly easy to move pretty much everything _off_ of Heroku (RDS for a database, RedisLabs for, well, Redis, and so on.)

Back in 2021 (https://news.ycombinator.com/item?id=29648325, https://news.ycombinator.com/item?id=30177907) and 2022 (https://news.ycombinator.com/item?id=32608734) Heroku went from "well this is costing enough that it probably makes sense to divest at some point and save the $X00/mo" to "Heroku is now the biggest systemic risk to uptime that I have", and it felt _very_ high-priority to get off of them and onto someone else.

Two years later, though... the inclination has ebbed. Heroku hasn't shipped anything meaningful for my use case in the past 24 months, but also they have been fairly stable. I'm sure I will migrate off of them onto something else in the fullness of time, but it would take a pretty severe precipitating event.

I have no relation with the Astral team but have been an early and aggressive adopter of everything they've released and it's all been easy, fast, and ergonomic. Over the past eighteen months I've:

1. Replaced `flake8` with `ruff`;

2. Replaced `black` with `ruff`;

3. Replaced `pip` with `uv`;

4. Replaced `poetry` with `uv`.

Their next project appears to be exactly what I _wish_ their next project to be — a replacement for pyright et al (https://github.com/astral-sh/ruff/discussions/10581). Type checking is my least favorite part of my Python toolchain at the moment; I can't wait to take it for a spin.

The only through-line for the author's definition of "bogus" (AI generated content; identity performance; rejection of canon) appears to me "cannot be situated in the culture of a few decades ago."

To pick on one example: he writes of the linked NYT essay:

Is greatness overrated? What’s next—Is disease the new health? Is losing the new winning? Is stupid the new smart?

At risk of sounding uncharitable, this is the kind of reaction one might have to the essay if they read the title and skipped the content. The author is specfically talking about the idea of the Nobel canon and its orthogonality to other reasons you might want to read an author. (I don't think it's a particularly good essay, but it's certainly not saying "bad stuff is good, actually"!)

Yup, absolutely — you see a lot of the larger brokers do some genre of lease-to-own program (pay us the purchase price plus a near-usurious APY over 24mos and at the end, you can keep the domain.)

My margins are solid and there aren't a lot of competing opportunities to deploy capital besides pulling forward cloud costs or hiring folks (which is a very different value prop altogether), so reasoning about the lump sum was pretty easy, but you're definitely right in that objectively speaking I should have just gotten a line of credit and amortized it that way.

And my old blog domain to boot! Exactly what I meant by "The hardest part of the process was the stuff you can't grep for..."

(T/Y — fixed.)

Definitely not _necessary_ — I was more or less resigned to not having the domain, since the sticker price was $170K and my mental "is this _really_ worth it?" number was high five figures.

As for why important: a melange of reasons. I had heard a _lot_ from customers and prospects that they couldn't find the site because they searched for/navigated to buttondown.com; I was faintly worried about SEO/brand impact from using a vanity TLD like `.email`; I was faintly worried about a more well-financed competitor buying it and redirecting to their own property; there are a very real number of legacy pieces of software that do not _accept_ `buttondown.email` as a valid domain, which is important when you're dealing with UGC.

(When I was debating what a reasonable purchase price might be, the framing that helped me make a decision was: "if this helps my overall conversion funnel grow by 2% in perpetuity, is it worth it?", and that answer was yes. Time will tell, of course, to see where that number actually lands!)

Nah, if you don't need list management you're definitely better off going with something a little bit closer to the metal. We actually keep a price guide for comparing MTAs here (https://buttondown.com/comparison-guides/esps). I do happily recommend Postmark; they're a little bit more expensive than their peers but are worth it, IMHO.

Author here! Happy to answer any questions folks have.

(I would also be remiss if I didn't say that I am grateful to HN for introducing me to what was called microISVs a decade ago, "indie hacking" five years ago, and now I suppose is mostly called "building in public" / "lifestyle businesses". I was inspired to start Buttondown in no small part due to reading about Candy Japan, Appointment Reminder, et al, and learning that there was a different yet equally valid path for growing a SaaS)

(Disclaimer: I run Buttondown, which is an email-inflected product. I also have a comparison guide of various MTAs here — https://buttondown.email/comparison-guides/esps — and will add Plunk!)

Nuances of self-hosting aside, I'd recommend caution looking at that pricing pane.

The disclaimer is:

Calculated based on the plan that best matches the features of Plunk at 2500 emails per month.

And the author then cites prices of $0.001/email for Plunk and $0.013/email for Sendgrid.

I am neither a user or fan of Sendgrid but that feels like disingenuous anchoring. Sendgrid's free plan is 100/day; if you want to eliminate the free plan entirely and just focus on their cheapest paid option, it's $19.95 for 50K emails — or $0.000399/email, cheaper than Plunk's sticker price.

It's not entirely obvious to me how that $0.013 was even calculated ($0.013 * 2500 = $32.50). Either way, be sure to spot-check against live sticker rates before making a decision there.

1. I quite like Evidence, and recommend folks check it out if they haven't already. My general sense is that there are 900 different "BI tooling" startups around right now and it strikes a really good balance between ergonomics (it's basically just Markdown, SQL, and some react components) and ROI (you don't need to do a lot of complicated ingestion, it's just hitting a database directly.)

2. Maybe it's me being a little tin-foil-hatty, but parts of this feel aggressively LLM-written (a suspicion enhanced by looking at some of the other essays on the site.) OP, if you're the author — I strongly advise just getting rid of fluff like "By leveraging Evidence.dev, we've created a comprehensive and visually appealing dashboard that provides valuable insights into FC24 player statistics. This dashboard includes high-level metrics, top player highlights, and detailed analyses of countries and clubs. Whether you're a data analyst or a football enthusiast, this dashboard offers a powerful tool for exploring and understanding FC24 data.". It helps no-one, I promise!

Pydantic Logfire 2 years ago

Responding to my own post: this comment (https://news.ycombinator.com/item?id=40214695) I think is a very compelling answer. I love the design language of the splash page, but I think the copy could be improved by a little less "here is why performance insights are useful" (which I think most people are kind of already on board with) and more "here is why our performance insights are _particularly_ more useful than the competition".

Pydantic Logfire 2 years ago

OP: as someone who runs a Python business and is a happy user of Pydantic (via Django-ninja) — something I would want this splash page to convey, at least implicitly, is “why use this over Sentry?” As far as I can tell, the answer is: an OpenAI binding and stronger Otel support.

(That being said, I am a sucker for all new tooling in this genre and am excited to play around with it!)

I think it's a good platonic ideal to have CI that _can_ be run on devboxes, but in my opinion most of the value in having runners like GitHub Actions is in _asynchronicity_, not in _performance_. Having to pull in changes and run the suite manually and locally to deal with merges, for instance, seems like a chore.

To be clear, I reviewed applications _on behalf of Stripe Atlas customers applying to YC_, not on behalf of YC. (I have never chatted with anyone in YC, besides presumably on Hacker News.)

I'm talking about practical limitations, not academic ones. You're not incorrect (and libraries like FastAPI and Pydantic make me confident that the benefits of type-safety will grow throughout the ecosystem) but I am talking about from the perspective of someone considering whether or not to adopt typing within their Python project today.

Having migrated my application's Python and JS codebases to their typed siblings respectively last year, my 2c is that Python typing feels good and worthwhile when you're in the standard lib, but _awful_ (and net-negative) once you leave "normal Python" for the shores of third-party packages, particularly ones that lean heavily on duck typing (Django and BeautifulSoup both come to mind.)

This is where some of the stuff in the TypeScript ecosystem really shines, IMHO — being able to have a completely typesafe ORM such as Drizzle (https://orm.drizzle.team/) feels like a Rubicon moment, and touching anything else feels like a significant step backwards.

Maybe Functions 2 years ago

You're right, of course — there are parts of my codebase that flagrantly disregard these rules, and did so for good reasons that I don't regret.

But I've found that while "everything is relative and should be situated in the context of the problem you're trying to solve" is a useful truism, it makes for poor praxis. It's hard to improve existing code or develop newer engineers without _some_ set of compasses and heuristics for what "good code" is, and once you develop that set the patterns and strategies for implementing "good code" naturally follows.

Maybe Functions 2 years ago

Agreed with this essay, and I think it rhymes with two others that I've found pretty influential over the past five years:

1. Parse, don't validate (https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-va...)

2. Pipeline-oriented programming (https://fsharpforfunandprofit.com/pipeline/)

In my experience, the "best" code (defining "best" as some abstract melange of "easy to reason about", "easy to modify", "easy to compose", and "easy to test") ends up following the characteristics outlined by the sum of these three essays — strictly and rigorously elevating exceptions/failures/nulls to first-class types and then pushing them as high in the stack as possible so callers _must_ deal with them.

Self-employed, running https://buttondown.email as a solo founder. (My day generally looks like — 30% engineering, 40% onboarding + support, 10% marketing, 20% operations.) It was a profitable nights-and-weekends project from 2017—2022; took it full-time in 2022.

I think the thing that I would say about self-employment is that people understate the day-to-day flexibility and overstate the month-to-month flexibility. It is _addicting_ to be able to structure a given day exactly how you want it, and to take days off without having to worry about PTO; conversely, I've done a hither-to poor job of increasing my bus factor and it's tough to e.g. plan entire week-long vacations without knowing I'll need to carve out extra time afterwards to catch up on inbound issues.

Being self-employed is hard work for sure. I also _totally_ understand the cliche of "becoming a founder makes you un-hireable"; it's really hard to imagine going back to a traditional job after this, and I find it more fulfilling than anything else I've done in my career.

No offense taken, but that's odd to hear! There's nothing really fancy happening on the marketing pages: it's built in Next, but like you said it's all pretty much just divs with no scroll-jacking. Mind emailing me (justin@buttondown.email) details so I can try and repro?

I did this. I grew my project, Buttondown [https://buttondown.email] from high three figures to low five figures while doing it as a nights-and-weekends thing at Stripe and then quit to work on it full time. It was a great decision and I'm happy I did it! (I also did it, frankly, with significant runway in the bank if I needed it, and no dependents besides my wife so the tail risk of "this goes to zero and/or I hate it" was not particularly painful.)

My advice would be: it reads like you're commingling two questions that really should be separate, which are:

1. Do you want to start a business and pursue independent employment?

2. What are the quantitative parameters and conditions under which such an enterprise is sustainable?

If the answer for 1. is yes (and interrogate yourself a bit! how many of the things that you are imagining are less "working on your side project full-time" and more "not working on the day job that you hate?"), get as concrete as possible with 2. What burn rate _is_ acceptable to you? How much savings are you willing to use during build-out, if you were to start now? What growth do you need to hit to feel like you're financially on the right track?

There are lots of funding tools (using the term 'tool' loosely) available to you — SBA, subsidy via full-time job, subsidy via contracting, lifestyle-friendly firms like Tinyseed. But you need to start with the numbers.

(Also always happy to chat more: I'm at justin@buttondown.email.)

Last year my goal was "I can take off for a week or two and the technical infrastructure is fine"; this year it's "I can take off for a week or two and the business infrastructure is fine" (meaning, there aren't enterprise prospects who are completely blocked by my absence, nor is the content/blog/changelog pipeline always waiting on me). Largely, this means finding someone who can handle some of the higher-touch parts of sales & onboarding and be a little more proactive in terms of writing.