惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
LangChain Blog
量子位
GbyAI
GbyAI
B
Blog RSS Feed
月光博客
月光博客
人人都是产品经理
人人都是产品经理
腾讯CDC
Recent Announcements
Recent Announcements
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
The Cloudflare Blog
D
Docker
Cyberwarzone
Cyberwarzone
U
Unit 42
NISL@THU
NISL@THU
C
Check Point Blog
B
Blog
大猫的无限游戏
大猫的无限游戏
Cisco Talos Blog
Cisco Talos Blog
Recorded Future
Recorded Future
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
G
GRAHAM CLULEY
Engineering at Meta
Engineering at Meta
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
P
Proofpoint News Feed
F
Fortinet All Blogs
V
V2EX
T
Threat Research - Cisco Blogs
T
Threatpost
S
SegmentFault 最新的问题
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园 - 司徒正美
P
Privacy & Cybersecurity Law Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
TaoSecurity Blog
TaoSecurity Blog
Latest news
Latest news
Apple Machine Learning Research
Apple Machine Learning Research
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Y
Y Combinator Blog
P
Privacy International News Feed
L
Lohrmann on Cybersecurity
AWS News Blog
AWS News Blog
G
Google Developers Blog
美团技术团队

Buttondown's blog

Email could have been X.400 times better The physicists who convinced Fermilab to send Brazil's emails Better in-app previews Analytics 3.0 Subscriber ID variables Comments! Send latest premium action Automation filtering Free API subscribers Surveys in automations Reply to replies Labels for RSS feeds How Jeremy Singer-Vine curates curious datasets for readers 2023 (and what's next) Email vs web content Sort by engagement Better gift subscriptions How Andy Dehnart built a career reviewing television New email template Email-based automations Opt-in reply tracking Automatic alt text More social network integrations Sort by metadata Overlarge image warnings Automation tag actions Pause emails mid-flight Search tags and automations Gift via automations Subscriber-driving emails Programmatic webhooks Email page views Tag statistics Discord webhook formatting Automatic subscriber cleanup RSS subscriber count Weekly subscriber reports More list columns Customizable list views How Max Voltar turned a side gig into a trusted keyboard resource How Nick Disabato runs two newsletters from one design consultancy Made-for-you share images Automation improvements End-of-email surveys Filter by date Survey-triggered automations More automation functionality New webhooks How France Insider built a news service with paid subscribers Email as primary key How John Willshire unites two businesses in one newsletter Confirmation reminders Email churned subscribers Email-to-draft Subscriber metadata columns ChatGPT integration Faster web archives Referral program Better search results TikTok embeds Subscriber timeline Spotify embeds Improved RSS-to-email Subscribe page OG image New analytics page Google Tag Manager Even more subscriber types Integrating Duda with Buttondown Linktree integration guide Advanced and enterprise plans Framer integration guide API requests page Team collaboration In-email surveys Better CSS settings Better RSS automation fetching! Editor toolbar improvements Smart filters Faster emails page RSS automations Faster email analytics Zapier error codes Image accessibility checks Tags vs newsletters OG image picker Image editor improvements API bulk actions Improved OpenAPI spec Mastodon support Better subscriber filtering Better subscriber validation Hotkey support! Programmatic access to analytics Stronger bulk actions Faster archive page Custom canonical URLs Email slug and metadata Improved writing interface Generating a Typescript router in Django Filter emails by source
Start with a changelog
Justin Duke · 2024-08-16 · via Buttondown's blog

Remember opening the App Store regularly to install updates? Quaint today, but for the first five years of the App Store—from 2008’s iOS 2 until iOS 7’s launch in 2013—you had to manually install new versions of apps.

That pushed release notes into the mainstream. Suddenly everyone noticed the best changes while waiting on apps to install.

Plenty of apps took the easy way out, listing just “Enhancements and bug fixes.” Others grabbed the opportunity to have fun.

“Oh happy day: A tricksy bug was finally squished,” wrote the Slack team in an early release. They’ve kept it up, over the years. “The app is objectively better today than it was yesterday. This is a scientifically verifiable fact that cannot be challenged or undermined,” read a July 2024 update.

Just enough fun copy to get you to take notice and read what’s changed.

Automatic updates simplified everything at the cost of programmer humor. “Release notes on apps feel like a relic from 2008-2015 when most apps did maybe 2-3 updates per year at most,” as Gergely Orosz tweeted.

Yet I’d argue you should still have release notes. Changelogs. Patch notes, if you’ve built a game. Product updates, or just plain updates, or a Notion-style What’s New. Whatever you call them, they’re a way to share what’s new or changed, and why you built it, and have a bit of fun as you do so.

Your product needs a changelog. And an email list might be the best way to build it.

Email as a changelog

Odds are your product has a blog and an email newsletter. Perfect for sharing your largest releases and their headline-grabbing features. Not so much for the minutiae of new minor features, bug fixes, and breaking changes like an updated API call or modified keyboard shortcuts.

The common strategy is to build multiple blogs. Have your core blog for marketing updates, stuff everyone will read. Then a developer blog that lists API and SDK changes. And, for the most dedicated, yet another changelog blog with release notes from every new version.

Or not. Your changelog blog could simply be an email newsletter.

Folks aren’t reading your changelogs on the App Store. It’d take a special level of dedication to open your changelog blog regularly just to see what’s new. Push the updates to their inbox, though, and your most engaged users will know what’s new with your app without any extra effort–almost as good as App Store’s early years.

“Having a good changelog means having a consistently updated changelog,” advises Olivier Lacan’s Keep a Changelog site. Anything you can do to make writing and publishing changes easy makes it more likely you’ll actually do it. Emails are easy to write and send; there’s less to futz with than a blog post.

So start a new newsletter. Write an email message every time your team ships something new and substantial, detailing the changes. Make it as formulaic or human as you want—it’s your changelog. Then hit send.

Best of all, your newsletter’s archive is a bonus changelog blog for your product, for zero extra effort, with your email newsletter’s archive. Nothing else to maintain, just an easy way to write updates, push them out to everyone, and save them for posterity. There’s even the tiny bonus that it’s hosted separately from your app, so just like an uptime site it won’t go down if you accidentally push a breaking change to main and customers are looking for answers to what happened. Win/win.

What should go in a changelog?

Changelogs and release notes have been with us for as long as we’ve been coding (or, at least, since 1971, say Oxford’s etymologists). They’re a record of truth that lists what’s old, what’s new, and how we got here.

And for just as long, they’ve merged in humor and humanity. “Are you finding it frustrating when everything works on minix?,” wrote Linus Torvalds, tongue-in-cheek, in the second Linux changelog from October 5, 1991.

It’s right there in the name: A changelog should list changes. “Focus on what was changed — who, how and when are usually less important,” recommends Debian’s dev docs. GNU coding standards call for detail: Change logs (two words, to GNU) exist “so that people investigating bugs in the future will know about the changes that might have introduced the bug,” they say.

Yet that detail should be moderated for the sake of brevity. A self-depreciating story of why it took you so long to ship a bug fix might get read. A changelog detailing every push in excruciating detail won’t.

“Changelogs are for humans, not machines,” reminds Oliver Lacan. Which is why Debian moderates GNU’s strictures, advising to use common English, to not “elaborate the trivial and obvious changes,” and to “be polite, don’t swear” (which is good advice—though, I wouldn’t begrudge you an occasional, well-earned swear for especially pesky bugs).

Especially when sending changelogs via email. Have a bit of fun, be human, all in service of writing something people will want to read. “Spending a modest amount of time on writing a changelog saves every reader twice as much time,” says Common Changelog, as good a rubric as any.

With that in mind, work in the actual details. Generally, you’ll want to ship one changelog for every meaningful version. No need to push a changelog update for a tiny fix that no one would otherwise notice; too many of those, and readers will tune you out or unsubscribe. It’s not the App Store where you have to write release notes with every push. Instead, write up the bigger, headline features, and roll up smaller updates into single, larger posts, something I try to do with Buttondown’s changelog. Don’t just ship your GitHub log; use that as a baseline, and edit it into something more human-friendly.

Then think about the release note’s title. Make updates sound interesting, but also make it easy to find a specific version. List the actual version number, if you use semantic versioning. Include the release date in ISO standard, year-month-date. Buttondown tags your email archives with an ISO date by default—that might cover it, too. Your changelog should also always show the current, most up-to-date version first—exactly the way most blogs and Buttondown’s email archive works, with the most recent post first.

And, as GNU and others recommend, write in Markdown. Good practice for writing portable text, great for turning your writing into email-ready HTML especially with Markdown-powered tools (like Buttondown, ahem).

Building an email-powered changelog in Buttondown

The broad idea of using email newsletters to publish your changelog could work in any email service that includes archives. Buttondown, though, has some dev-friendly features that make it an even better fit for changelogs.

Start with the email itself. You can write updates in Markdown (complete with code samples, if you’re writing about API and SDK changes), paste them into the Buttondown editor, and send. You could POST your updates to Buttondown’s API, to schedule your changelog update directly from your dev environment. Or, you could also write your changelog in Gmail or your favorite email app, send it to newsletters@mg.buttondown.email, and Buttondown will send it on to your subscribers and add it to your archives.

Your archives will be your long-term changelog record. You could stick with Buttondown’s defaults, or customize the CSS to match your company’s branding. You could also add a custom domain, to keep your archives at changelog.yourcompany.com if you want. Personalize it with your rel=me tag. Set it to automatically cross-post updates to LinkedIn (with Facebook and Twitter/X coming soon, something you could automate in the meantime with Zapier). Share updates with your team, too, and have Buttondown post new updates to your Slack or Discord.

You could publish the exact same content in your email and your web archive. Or, if you want to include some email-specific copy, perhaps opening with a “Hi”, wrap that in the following tags, replacing “Hi everyone!” with your copy reserved for emails:

{% if medium == "email" %}
Hi everyone!
{% endif %}