Technical Tutorials
-
Metrics tell you a service is slow. Traces tell you which requests are slow. Profiling tells you which function is slow — the actual line of code that's consum
-
The first time I worked at a company that deployed continuously, I noticed something odd: code went to production multiple times a day, but users saw changes ma
-
The first rate limiter I wrote was a counter in Redis with a TTL. It worked, sort of, but it had a problem I didn't notice until someone pointed it out: a clien
-
I built a two-person video call feature last year. The expectation, from a product perspective, was "like Zoom but embedded in our app." The reality of WebRTC i
-
My first data pipeline was a directory of SQL files run by a cron job. daily_revenue.sql, user_cohorts.sql, and a shell script that ran them in order and droppe
-
I avoided WebAssembly for years because the examples always involved rendering 3D graphics or running Photoshop in a browser, which aren't problems I have.
-
I added a service worker to a small web app last month, mostly to see if the "install to home screen" prompt would show up. It did, and the app now opens in its
-
I built my first FastAPI service after five years of Flask, expecting it to be a similar experience with slightly nicer type hints. It's not. FastAPI changes wh
-
I once spent a day optimizing a Python data pipeline, cutting its runtime from 40 minutes to 35 by rewriting loops as comprehensions and caching function result
-
A user clicks "Pay now." The request reaches your server, charges the card, and then the connection drops before the response gets back. The user clicks again.
-
I avoided end-to-end tests for years because every setup I tried was fragile. Selenium needed a driver per browser. Cypress was pleasant until I needed multiple
-
I once wrote a Node script that read a 4GB log file into memory, filtered it, and wrote the result back out. On my laptop it worked. On the production box with
-
React Server Components have been the most confusing part of React's evolution, partly because the explanations keep mixing them up with Server-Side Rendering,
-
I put off adding type hints to my Python projects for years because the examples in the docs always looked like they were solving problems I didn't have. Th
-
Media queries have always had a fundamental problem: they tell you the size of the viewport, but components don't live in the viewport — they live in a contain
-
Go's concurrency is sold as simple, and it is, once you stop trying to map it onto threads. The confusion usually comes from treating goroutines like threads an
-
I've seen SQLite dismissed in architecture discussions so many times that I stopped bringing it up. Then I built two projects on it that handled more traffic th
-
Vite is known as a dev server for apps, but it's also a solid build tool for npm packages. The library mode is less documented than the app workflow, and the de
-
I built a small internal tool last month and started reaching for React out of habit. Then I looked at what the tool actually did: display a list, let users edi
-
I put off learning Rust for two years because every introduction led with "Rust has no garbage collector and enforces memory safety at compile time" and then do
-
Most developers learn Promises by copying patterns. .then().catch(), Promise.all, and if they're lucky, they never think about it again. That works until it doe
-
Everyone learns with open(...) as f on day one and then stops thinking about it. The with statement is a general mechanism for "do setup, do work, do teardown,
-
Time zone bugs are unusually nasty because they pass every test you write and fail twice a year in production, usually at 2am local time on a Sunday. Python's s
-
Node processes that grow steadily until the container gets OOM-killed are a specific kind of frustrating, because the service looks healthy right up until it do
-
Go's encoding/json package is one of those things that feels clunky for about a week and then feels obvious. The friction comes from the same place Go's frictio
