A simple measure of software dependency freshness, the sound of software, handy tools for devs, programming mantras are proverbs & more

Changelog News

Developer news worth your attention

Hello again! đź‘‹

Over the weekend, OpenAI teased a big announcement for today, which made many people guess they’d launch a search engine. Turns out no, it was a desktop app, a slightly better GPT-4 model & other goodies, but this wave of rumors begged the ol’ Netflix/HBO question:

Can OpenAI become Google faster than Google can become OpenAI?

My money is on: neither! Open source FTW, obvi… Ok, let’s get into the news.


🎧 Simply the best pods for devs

🎙️ Paul Orlando, author of “Why Now?” changelog.fm/590
đź’š Annie Sexton is motivated by play changelog.com/friends/42
👂🗣️ “Really appreciated Annie’s honesty and vulnerability in this one”
🚀 Rich Burroughs on running WebMD in the year 2000 shipit.show/103
🪩 Cory LaViska on Shoelace and Web Awesome jsparty.fm/322
🤖 Daniel & Chris talk autonomous fighter jets practicalai.fm/268
⏰ Spicy! What if Google lays off the Go team? gotime.fm/315
👂🗣️ “I loved this episode and the format! Keep them coming!”

đźš« Avoiding the soft delete anti-pattern

I’ve hard deleted. I’ve soft deleted. I’ve never found a pattern that I like. In this post, Tim Fisken explains the problem with soft deletion and lays out “a number of better ways of ensuring access to old data.” The problem:

The main problem with soft deletion is that you’re systematically misleading the database. This is most obvious in the case of foreign key constraints.

Fact check: true. But what can we do instead? Tim’s four alternatives are:

  1. YOLO (just hard delete)
  2. Lifecycle (archived state)
  3. Temporal tables (lots of timestamps)
  4. Data warehouse (not my problem)

I think each of these can make sense in different situations, but I tend to think YOLO + appropriately granular backups are the general strategy most people should start with.

đź“Ź A simple measure of software dependency freshness

A “libyear” is a newly proposed single number telling you how up-to-date your dependencies are. For example, Rails 5.0.0 (released in June 2016) is 1 libyear behind 5.1.2 (released June 2017). Why “libyear”?

There are more nuanced ways to calculate dependency freshness. This approach is simple. You can explain this calculation in 30s.

I do appreciate the simplicity of this measure. To determine the overall freshness of your system, add up the libyears and see what you see:

If your system has a one year old dependency and a three year old dependency, then your whole system is four libyears old.

In addition to explaining this simple proposal, the linked website also provides libyear calculation tools for many common languages/ecosystems.

🔊 The Sound of Software

This is the last in an excellent four-part series on the role sound plays in software design. (I previously covered Part III: The World’s Most Satisfying Checkbox)

Sound is an outcast in Software Design. We may embrace the aesthetics of animation and visuals, but sound is different. It’s intrusive. Unlike visuals on a screen, you can’t look away or ignore it. It’s enough to make you rip the batteries out of a toy or frisbee an iPad across the room (speaking from experience).

And yet, play a video game without sound and its powerful punch lands with no force. Without music, once moving moments in a film become dull, even comical. Sound holds an immense power to elevate any experience—including the most boring of software.

This is a must-read for anyone who designs software and hasn’t thought seriously about the sound design. They cover when to use sound, what makes good sound design, implementation details & how to get started. Good stuff!

🔬 Find slow queries and errors in your database

Thanks to Sentry for sponsoring Changelog News đź’°

Supabase & Sentry are teaming up to put on a workshop on May 16th that you might want to check out:

In this workshop, the Supabase developer relations team will demo connecting a Next.js project to Supabase, and integrating Sentry. Learn how Supabase can improve the performance and scale of your PostgreSQL database, and how Sentry can notify you about issues in real-time and surface the context you need to fix them.

Here’s what you can expect:

  • Overview of Supabase and how Sentry helps
  • Connecting a Next.js project to Supabase
  • How to integrate Supabase with Sentry
  • Code-level context and metrics available in Sentry

This event is completely FREE. Sign up today to reserve your spot!

🧰 Handy tools for developers

This web app hosts 80+ little tools you might need as you go about your daily development work. It has generators (UUIDs, pass phrases, QR codes), it has converters (JSON to CSV, YAML to TOML, TOML to JSON), it has web tools (URL parser, slugify string, emoji picker), it has… you get the point.

And since each tool is implemented as an open source Vue component, it’s easy to poke under the covers and copy how they work into your own code.

🙇 Programming mantras are proverbs

A good reminder from Luke Plant that it’s easy for us to take programming mantras (DRY, YAGNI, WET, etc.) too much like laws and not enough like proverbs. Why proverbs?

Proverbs encapsulate a small bit of wisdom in a pithy phrase, but you still need to learn to apply that wisdom correctly.

Good proverbs are also supposed to make you think. They slow you down before you leap into something that is likely to be bad, or they help you reflect on what did go wrong.

He goes on to illustrate this using Proverbs 26:4-5 (a favorite of mine) which says:

Do not answer a fool according to his folly, or you yourself will be just like him.

Answer a fool according to his folly, or he will be wise in his own eyes.

Luke’s overarching point is that we need to slow down and think through our decisions vs blindly following a rule or a mantra. It depends! This is why I’ve long had a mantra of my own: Slow down to go faster


🎞️ Clip of the week: Cameron Seay

Cameron responds to listener feedback on his COBOL shortage claims from his first time on the pod

Cameron Seay clip thumbnail

🦺 The search for easier safe systems programming

Sophia June Turner:

I’ve been involved in the Rust project in some form or another since 2016, and it’s a language I’m very comfortable using. Many Rust programmers could say the same. But, if we take a step back and are honest with ourselves, we’d admit that the road to getting to that level of comfort was difficult…

For the last year and a half, I and my recently-added collaborator Jane Losare-Lusby have been working in secret on a safe systems language that could be learned about as quickly as one can learn Go. I think we might have something worth exploring.

Enter June, a “gradual, safe systems language” that Sophia explains in great detail in the linked post.

🫡 Software consultants your team actually wants to work with

Thanks to Test Double for sponsoring Changelog News đź’°

Test Double helps solve tough problems at weekly rates with open contracts and no management required — and they’re not jerks about it. How’s that for refreshing!?

Find out more about the human software consulting approach from these software investment problem solvers. If you can’t tell from their co-founder Justin Searls’ six appearances on our pods, I’ll just say it: we’re big fans of Test Double!

đź’° How Ahrefs gets a billion dollar-worth infrao with a 90% discount

Choosing colocation for the infrastructure was the right decision for Ahrefs. Reflecting on the past six years, the data centers with our own servers and network cost us $122 million, a figure that would have ballooned to an astronomical $1.1 billion if we had opted for the cheapest AWS cloud offering.

Old-school infra is so hot right now. Maybe it’s time to ask The Question™️ we’ve been asking a lot recently: Was AWS & the cloud’s rise merely a ZIRP phenomenon?

🗑️ Slop is the new name for unwanted AI-generated content

“slop” is becoming the new “spam”. Simon Willison:

I’m a big proponent of LLMs as tools for personal productivity, and as software platforms for building interesting applications that can interact with human language.

But I’m increasingly of the opinion that sharing unreviewed content that has been artificially generated with other people is rude.

Slop is the ideal name for this anti-pattern.

I’ll use it.

Simon also proposes “slom” as a term for spam that is generated by AI tools. I think he misses the mark here. A much better choice would be “slurm”…

🤩 Pretty fancy / modern terminal file manager

TUIs are so hot right now. Superfile is no exception:

Superfile screenshot


đź”— Quick hits before I call it quits

Cap: Effortless, instant screen sharing. Open source and cross-platform.

Bryan Lunduke: The Internet Archive’s last-ditch effort to save itself

IEEE Spectrum: AI Copilots Are Changing How Coding Is Taught

James Shore: A Useful Productivity Measure?

Robert Haas: Hacking on PostgreSQL is Really Hard

Lix: a modern, delicious implementation of the Nix package manager

Cyperful: Interactive system testing UI for capybara

Grumpy Old Dev: The One Where I Lie To The CTO

Tegon: An open source, AI-first alternative to Jira, Linear

Chromakode: Development notes from xkcd’s “Machine”

Ali Rayl & Johnny Rodgers: Building Slack


That’s the news for now, but we have some great episodes coming up this week: Birk from Polar (Wednesday) & Alex Kretzschmar from Tailscale (Friday).

Have a great week, forward this to a friend who might dig it & I’ll talk to you again real soon. 💚

–Jerod