Hacker News new | past | comments | ask | show | jobs | submit | jmduke's comments login

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.


I love when a marketing campaign email template contains something like "btw, this is a real email, not a marketing campaign"


Much like when a chatbot says, Real person here!


Can confirm. Received the first email here from Justin and it worked on me.


See I like this, but because it’s personalized. A human did this intentionally, in a way that does not scale.

The author is advocating for nearly the opposite.


How do you respond to those who call this spam?


Oh, it’s absolutely spam, by definition. That said, that’s a wide spectrum. I don’t generally like TV ads, but the State Farm ones with Patrick Maholmes and Andy Reid are funny and I don’t mind them. Kind of the same here: it’s spam, but if there was ever one that’d get a response from me, that would be it.


> Oh, it’s absolutely spam, by definition.

By whose definition? Source?


Here’s the FTC’s definition in a presentation to the House (https://www.ftc.gov/sites/default/files/documents/public_sta...):

> Unsolicited commercial email -- "UCE," or "spam," in the online vernacular -- is any commercial electronic mail message sent, often in bulk, to a consumer without the consumer's prior request or consent.

It’s often in bulk, but needn’t be to meet the definition of Unsolicited Commercial Email, aka spam.


>sent, often in bulk, to a consumer

That's the key. The FTC defines spam as something sent to a consumer; in this case, the receiver is not a consumer but a business.


I’ll lay it on the line. In the many years I ran mailservers for a living and for a hobby, I was elbows deep in fighting spam. One of the consistent patterns over the years was that spammers would go to elaborate lengths to explain why their spam wasn’t spam. If it’s unsolicited commercial email, it’s spam.

Again, there’s a wide spectrum from v14gr4 p1ll5 to a legitimate vendor in my job space reaching out to me. They’re not all alike. But if it’s commercial, and unsolicited… it’s still spam.


I agree with you -- I don't like receiving cold emails on my work email address, and I treat such emails as spam. But I don't think it can be configured as spam from a law standpoint; but this is just my opinion, IANAL.


Here’s a 2024 link from the FTC: https://www.ftc.gov/business-guidance/resources/can-spam-act...

> Despite its name, the CAN-SPAM Act doesn’t apply just to bulk email. It covers all commercial messages, which the law defines as “any electronic mail message the primary purpose of which is the commercial advertisement or promotion of a commercial product or service,” including email that promotes content on commercial websites. The law makes no exception for business-to-business email. That means all email – for example, a message to former customers announcing a new product line – must comply with the law.

That doesn’t specifically mention spam, but it does indicate how strictly regulators define what they consider to be commercial email. And if it’s unsolicited commercial email, i.e. UCE… it’s spam.


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".


I'm quite sure you can do all sorts of mental gymnastics to avoid thinking of yourself as a spammer.

Here's my basic criteria for spam:

1. It's unsolicited.

2. It's trying to sell something / exploit people.

In my grading scale I classify you as a spammer. A "bespoke" spammer perhaps, but I still do not want to waste time reading anything you send me, or waste time even clicking "mark as spam", unless I ask for it. You would be stealing my mental CPU cycles (which are few and precious).


> 2. It's trying to sell something / exploit people.

Are these synonymous?


No. I'm drawing a distinction between “I want to sell you something” and “click this link to a website that strongly resembles, but is not, YourBank to transfer all your money to us.”


I think / is usually reserved for synonyms. Should just use the word "or" if it's this or that.


Yes / No


I remember an old boss launching a product this way - he read the spam law and while I don't remember the specifics, sending an unsolicited email to people whose emails you obtained legitimately was okay if you weren't explicitly selling something (which I think is very open to interpretation).


> was okay if you weren't explicitly selling something.

The CAN-SPAM Act does not forbid explicitly selling something. Rather it requires an opt-out mechanism and identifiers for who the sender is.


Yeah okay - obviously varies by country although I think the opt-out mechanism is pretty universal.


So if the same qualitative factors were kept for your outreach, just an increase in the quantitative equation means it's spam? One discrete instance is not spam but the combination of all of them makes the whole spam, when certain thresholds are reached? If so, how do we define those thresholds?


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


Why does that factor make it spam?


Great, you are spamming HN telling a story about how you spam HN


This is pretty clearly an LLM-generated article. Kind of funny to see the commit that appears to have added a whole slew of them:

https://github.com/ronynn/ronynn.github.io/commit/f1bc45de82...


The whole blog exudes a strong odor of AI slop, so that's not surprising.


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.


Pyright was itself a big improvement over Mypy. Just look at this for starters: https://htmlpreview.github.io/?https://github.com/python/typ...

If Astral can leapfrog Pyright too, great. But I think it will be significantly harder than leapfrogging Flake8 and Black was.


What benefits does uv have over poetry?


In addition to what everybody else has mentioned, uv plays nice with other people's build tools. I use scikit-build-core for building most of my python packages and making scikit-build-core play nicely with poetry was somewhere between very hard and impossible. UV trivially lets me combine the two so I can let uv do what it does best (manage and install python versions and dependencies) and then have it get out of the way and let scikit-build-core take over and do what it does best.


uv also manages the Python version as well, and it doesn't require jumping through hoops and hacking to get it to play nicely with Docker. uv is much more of a production-ready setup than pip or poetry from my experience moving to uv over the last few weeks


I really haven't been able to understand why "managing the Python version" is such a big value add for so many people. I just have each version built from source and make venvs from them as needed.


Because most people don't build their toolchain from source anymore. When I am trying to help a junior programmer get up and going, it's a lot easier to say "OK, just do `brew install uv` then `uv sync` in the project folder and you are all set" than to try to walk them through building from source.

Not to mention being able to have reproducible builds for deployments, CI/CD, etc. The fact that the Python version is picked up from the project's package configuration is nice because then you don't have to remember to update the source build to match when you update pyproject.toml for a new Python release.


I happen to have built the interpreters (not an entire toolchain) from source. But I could equally well have obtained them from a PPA or whatever else. On Windows I could have used the official installers. The point is that once I have base environments, creating venvs is trivial.

(And really, the experience of building Python from source on Mint was about as smooth as I could have ever hoped for.)

>when you update pyproject.toml for a new Python release.

? I don't upper-cap the Python version (or anything else without a well-defined reason - https://iscinumpy.dev/post/bound-version-constraints/ ) so I wouldn't be updating anyway. If I want to test under a new Python version then I need to write that out explicitly somewhere regardless; might as well do it on the command line.


Speed, compatibility, ergonomics, standards compliance.


also a whole bunch of new features (--script mode), speed of development, a stacked team.


Works with pytorch.


Pylance is nicer than pyright, but unfortunately I don't think you can use it outside of vs code


pylance is pyright under the hood, isn't it? it's the main reason I use pyright over mypy: I work in VSCode and I want compatible type checking


It's not clear to me that they are building an alternate type checker per se

Seems like `ruff server` is an LSP?


Yes but only for linting (the flake8 rules etc). The end goal is to have proper type checking and, I think, proper LSP refactoring capabilities.


they are working on it! the internal name is currently red-knot (you can see it in their GH History and in the discord). First thing is a type checker, I think, then the renaming capabilities and such.


True, what I would really need is a uv based pyinstaller alternative


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"!)


I agree with you, and the author is being a little lazy by referencing the NYT article. At the same time, if they didn’t use a clickbait headline, they’d force their critics to make slightly better arguments, so it’s the NYT’s fault too.


Honestly, as long as you don't call it "Buttdown"... (this happens more than you'd think.)


I would recommend setting up a 301 redirect for www (also recommend having this support both http and https)


That’s actually not too bad of a name for the service — like “sit your butt down and read this email”


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.


Makes sense, that's kind of what I figured, but it's nice to get a confirmation. Good luck!


I think some of that pricing is off. Sendmatic at least seems to suffer from some decimal placing.

Very cool page and very cool of you to do. Good luck with the biz.


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)


Why was getting the expensive buttondown.com necessary and important? I might have missed that in the post.


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!)


Could you have structured the deal in a more cash favorable way seeing as you are paying for it from cash flow? That way it would have been less of an immediate impact on finances. For purchases like this, a revolving line of credit is helpful, even tho there's cost to that, because it lessens the impact on cash flow.


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.


Thanks for sharing your insights and experiences! I am a fan of bootstrapped SaaS, just keep it going as much as you can and avoid the temptation to sell early, although I am sure that opportunity will present itself.


Maybe a bit of a stupid question, but wouldn't it have been enough to just buy the domain and then configure a redirect to the old domain?


Not if you want to build SEO authority on the new domain


How did you handle that users with saved credentials on password managers for.email now didn't get the autofill feature when redirected to .com?


Just FYI, you’re still using buttondown.email in your HN profile.


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.)


FYI the “customer support” link in the footer on the homepage also links to support@buttondown.email.


The linked article mentioned that they hadn't moved email over.


Congrats! Huge get :)


(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.


Shameless plug for folks looking for something similar, but on the web: I was fed up with Google's slow/janky dig webface, so built my own. (Still very WIP, but already works better as a daily driver than Google's!)

https://www.shovel.report/ycombinator.com


Did you use DNS over HTTPS (DoH)? I love how easy it is to perform DNS lookups in web apps too through this.

  curl -H "accept: application/dns-json" "https://cloudflare-dns.com/dns-query?name=ycombinator.com&type=A"


This is pretty cool! But what does it mean when something is listed under "Services"? For example, one of my "services" is "52.45.50.190/32", an AWS IP. What does that actually mean? How did that IP get there?


Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: