← Back home
One of the senior devs on a former team had a habit of letting his iOS email app grow to
9,999 unread emails on his work account. He liked that red iOS bubble flex. He’d then open Gmail, delete all emails, and let the cycle start again.
“If it’s important enough they’ll Slack me”, he’d say, “most of it is just newsletters, marketing, spam, and Renovate updates anyways”.
I didn’t think much of it until recently, when I was catching up with someone in another dev tooling company in charge of CRM and Email Marketing, and found out that they were struggling with atrocious email stats. On average they’d get 7-9% open rates, and even though the total subscriber base was under 10,000, a good 80-90 would unsubscribe every month, with several others marking the emails as spam.
This turned into quite the discussion on our Developer Marketing Slack, where everyone shared their best practices for emails to developer audiences, and I shared a summary of what worked and didn’t work when I faced the same issues back at Hygraph.
New user onboarding
One of the most critical user journeys we had was for new signups who were getting a hang of GraphCMS.
We originally tried a vast range of designs, witty copywriting, and templates inspired by ReallyGoodEmails.
While RGE has incredible resources, we found that none of these “styles” really resonated much with devs. Open rates were low, many marked us as spam, account activation links were lost in graphics, and click-through rates were basically non-existent.
Our devrel team and sales team were always challenging one another on what those emails should contain:
“Add the [enterprise] case study!”
“No that’s silly they just signed up, send them to the docs.”
“But then they’ll get lost we need to guide them and show them cool features.”
… and on and on
So we tried all of those --- case studies, video embeds, free demos, features, 30-day drips, 5-day drips, docs, free watermelon popsicles, everything --- and the results barely changed.
Finally, on a completely unrelated task, when I was looking to implement Segment in our staging web app with a colleague to experiment with a few other things, and I was blown away by the welcome flow.
I don’t have access to that email anymore, but the welcome email from Kevin (then the Head of Growth at Segment) was something so ridiculously simple that it was something along the lines of:
Hi Ronak, Welcome to Segment. Check out our docs and if you need any help getting started just let us know. Best, Kevin
For a second I actually thought it was manually sent --- so I replied. Said thanks. Felt like an idiot for replying to a bot. But then actually got a reply back asking if I needed to speak to someone in Sales. That gave us the 💡 to completely revamp the onboardings and go with an ultra-casual approach.
We scrapped all the HTML templates and fancy styling and started experimenting with a cadence that worked extremely well for us (80%+ open rates on day 1 dropping to 50%~ on day 10, and more surprisingly, 30% REPLY RATES --- something we used to get conversations started in Intercom).
Day 1 - Welcome message from the CEO
The message was super short and straight to the point. The only CTA(s) were purely dev centric to get a DIY experience of the product - by watching a video or by going to the docs.
We added a
PS at the end for any feedback and noticed that the simple nature of the product led to almost 30% of the new users writing back with comments, questions, and feedback --- something that our team used Intercom for to make sure we got back to them and had a conversation going.
Day 3 - Casual Check-in
If that user was still active on Day 3 (i.e. no Day 0 churn) they’d get a check-in from me to make sure there weren’t many issues getting started. The link went straight to my Calendly (shared with DevRel) to have conversations with free users to unblock their onboarding. While many did book calls, most devs were keen to get back on building themselves and used the links and/or joined Slack to get the conversation started there. The most clicked links were consistently the docs and the repo of OSS examples our devrel team had put together.
Day 7 - First-week recap
At the end of their first week, they’d get another casual check-in to start a conversation if they wanted to discuss their projects. We started to tease the prospect of some public support via the G2 CTA, but tried to keep the overall messaging casual. The goal was always to initiate a conversation rather than push an upsell.
Day 30+ - Product Feedback
Lastly, if we had new power users (active for 15+ days in the first 30 days) they’d get a nudge for a review and/or feedback from me. The G2 link didn’t perform as well (eventually killed this in the flow and reduced our onboarding to just 7 days and 3 emails) since devs are less likely to take that route compared to business users, but it still did result in great insights for us via replies.
Everything after this was taken off emails. We never continued cadences leading to pages about features, pricing, case studies, or other commercial pages. If users were still engaged we’d reach out to them on Slack and encourage them to speak with us or with each other.
Newsletters and Updates
One of the first email campaigns I ran at Hygraph was a Halloween campaign (ironically the same time of the year as this post 😅). It had worked great for me in the past (my previous company was B2C) so to try and get the pipeline rolling we thought it would be a great test to go with. We whipped together an email drip campaign targeting all our free users, and again, used the same generic discount mentality to give it another spin --- “No tricks, only treats this Halloween. Get 31% off all plans”.
We pushed it live. A campaign targeting all ~30,000 (back then) free users with really cringe messaging. After the weekend, I excitedly checked on the stats.
The tracking wasn’t broken. There were no attribution issues. The coupon hadn’t been claimed even once. That was it --- 0 conversions. Nobody gave a fuck about getting 31% off. On the contrary, about 2-2.5% of the audience just flat-out unsubscribed.
This experience was my first, and hopefully biggest, mistake in email marketing to developers --- treating them like any other user.
After this, every “campaign” was treated very differently. Discounts never came back, and we rarely tried to send anything “promotional” or “seasonal” to the user base regardless of what that month’s growth was looking like. After some more trial and error with emails and newsletters that combined product details, features, case studies, community updates, content updates, and internal news, we thought we had a pretty good idea of what to go with --- we’d figured out what consistently gave us 40%+ Open Rates and 15%+ Click Rates, something we were comfortable with given our steadily increasing user base over 3 years.
We started sending a “Monthly Product Update” to everyone without any marketing fluff, and always signed off as the actual sender (in several instances that was me, or a colleague from Marketing) with a very simple way to respond with any 1on1 feedback. Eventually, we followed a few standardized components for each email to maximize value and reduce the expectation of spam. Each release contained:
- A human sender and receiver (no group emails, no no-replies),
- A clear TLDR on what the email contained in the subject itself,
- A very simple template that was easy to skim,
- A clear CTA to read the full release or view the online version,
- Relevant “larger” product updates with quick CTAs that don’t lead to gated content or sales conversations, but to the relevant demos and repos,
- Followed by updates from the community,
- A clear path to get in touch (LinkedIn, email, Twitter, Slack) for any feedback or discussions, and
- No case studies, no sales CTAs, no upsells, no discounts, no fluff.
To see what a “standard” monthly release looked like, check out the online version of the April 2021 update (for as long as it stays online) --- GraphCMS Update April 2021.
Shoutout to our Head of Design, Darshan, here for introducing me to this template direction based on Notion’s releases.
Leadgen and “Sales”
No learnings here --- never even bothered sending forced upsell emails to developers that were free users 😁
If anyone downloaded gated resources, they got a simple confirmation with a link to their assets. No drips. No cadences. No SDR giving them missed calls on their personal phones.
5 Takeaways to wrap it up
Keep it short. Don’t add too many links and CTAs to 50 shades of content. Treat marketing emails to developers as “transactional” where you get to the point and address one very specific point.
Experiment with plain text. We tried a wide range of HTML And MJML templates with all sorts of designs, animations, and visuals. In the end, the winner was a simple one-liner written as a human.
Keep it human. We ended up getting great actual replies back when we combined simple text with a human face. Emails were sent as
[name]@ rather than
no-reply@. Signatures had an avatar, as well as links to personal social profiles.
reply-to was set as a human email rather than
Skip the sales. We love ending all emails with “BTW if you’re looking to do X then get a demo of our product” as a generic footer. Skip it. It’s not relevant to 99% of the messages in emails, and devs seem to have collectively formed an allergy to commercial CTAs from most software.
Use it sparingly. Not everything deserves to be an email, and devs are more likely to hit that spam button than you’d like to admit. A new bugfix or changelog entry isn’t an email, a new blog post isn’t an email.