Issue #415 · March 24, 2025

IO devices and latency

“A year spent in artificial intelligence is enough to make one believe in God.“”

Hello, This week’s edition is a true full-stack buffet: we’ve got IO performance deep-dives, JavaScript/SQL puzzles to sharpen your skills, a spicy critique of Go’s return (T, error) pattern, and even a dead-simple GitHub Actions workflow for deploying static sites. Whether you’re debugging a legacy monolith or tinkering with greenfield code, there’s something here to fuel your next “aha!” moment.

PS: I’ll be at AWS Community Day Italy in Milan on April 2nd! If you’re there, come say Ciao, I’d love to connect!

Stay curious & keep learning ✌️

— Your editor, Luciano

IO devices and latency

IO devices and latency

Damn! I love those articles with tons of interactive widgets that allow you to play around with the concepts that are being presented to you. This is one of those and it's an excellent one to understand different types of IO devices and their tradeoffs truly.  OK, this is maybe not out usual bread and butter as full-stack web devs, but I'd argue that understanding how storage works will make us more well-rounded software engineers, so I'd recommend having a peek at this one!

Articles

Design by Decision Fatigue

Last week, I bumped into this article and really enjoyed it! The author unpacks how early technical choices (frameworks, code structure, etc.) in greenfield projects seed future tech debt. They share battle-tested strategies (prototyping, documenting decisions, leveraging opinionated tools, etc.) to combat decision fatigue. Full-stack devs juggle layered decisions daily; this is a playbook that can help you balance speed of delivery and long-term maintainability.

Rsdoctor hits v1.0

Last week, the team behind Rsdoctor announce the release of their first stable version. If you never heard of Rsdoctor, it is a build analyzer for the Rspack/webpack ecosystems, that offers visualized build insights, bottleneck detection, and custom optimization rules to understand what happens behind the scenes of complex builds. You can think of it like a "CT scan" for your build process. It pinpoints slow plugins, debug Rspack’s built-in loaders, and auto-scan for warnings. As a bonus, being written in Rust (in case you didn't guess that from the name!), it's supposedly super fast!

A Perplexing Javascript Parsing Puzzle

OK, I admit that even with more than 15 years of JavaScript experience I failed at this one... So, are you ready for a little intriguing challenge? You'll need to look at some seemingly simple piece of JavaScript code and guess what is the value that the script is going to be evaluated to...  I'll give you just one spoiler: you'll be learning something new and unexpected about some legacy characteristics of the language. Also, I have a strong recommendation: please don't use this challenge in a technical interview!

Building and deploying a custom site using GitHub Actions and GitHub Pages

GitHub actions and GitHub pages are my favourite way to deploy static websites (and I have loads of them!) so I couldn't pass on this article :). This article showcases a minimal pattern for building a completely custom website using GitHub Actions and deploying the result to GitHub Pages. If you use something not custom (e.g. Next.js, VuePress, Docusaurus, or Astro) you can easily swap that echo '<h1>Hello, world!</h1>' > _site/index.html with your framework specific build step and off you go!

SQL Squid Game

Here we go with another challenge. This is actually more than a single challenge. It's an entire game where you can test and improve your SQL skills while competing for rounds of Squid game (Yeah the same one of the TV Show). So, is your SQL good enough for you to survive through these challenges? A funny little way to get better a SQL. Check it out! Play the game

Were multiple return values Go's biggest mistake?

Whenever I use JavaScript, Python, C#, Java, or other exception-based languages I always find myself trying to avoid exceptions. There are many reasons for that and I should eventually write a blog post about it, but in short, it comes down to the "action at distance" problem. Your catch blocks often end up very far away from the exceptions you are handling, which is something that makes the code hard to read and maintain in the long term. That's why I have always appreciated different approaches based on plain value types like the ones adopted by Go and Rust. This article is actually a bit critical on some details of the Go implementation, but if you are a languages nerd like me, I am sure you'll enjoy this perspective.

Book of the week

Architecture Patterns with Python: Enabling Test-Driven Development, Domain-Driven Design, and Event-Driven Microservices

Architecture Patterns with Python: Enabling Test-Driven Development, Domain-Driven Design, and Event-Driven Microservices

by Harry Percival, and Bob Gregory

As Python continues to grow in popularity, projects are becoming larger and more complex. Many Python developers are taking an interest in high-level software design patterns such as hexagonal/clean architecture, event-driven architecture, and the strategic patterns prescribed by domain-driven design (DDD). But translating those patterns into Python isn't always straightforward. With this hands-on guide, Harry Percival and Bob Gregory from MADE.com introduce proven architectural design patterns to help Python developers manage application complexity―and get the most value out of their test suites. Each pattern is illustrated with concrete examples in beautiful, idiomatic Python, avoiding some of the verbosity of Java and C# syntax

Additional Links