Authentication Basics You Should Not Invent
Every few years a team invents a new way to store sessions in localStorage, roll their own JWT crypto, or hash passwords with SHA-256 because “we don’t need bcrypt for…
Every few years a team invents a new way to store sessions in localStorage, roll their own JWT crypto, or hash passwords with SHA-256 because “we don’t need bcrypt for…
TypeScript is not a personality and it is not a substitute for tests. It is a way to make illegal states harder to represent and to make refactors cheaper. Teams…
At 2 a.m. you do not want a novel. You want to know which request failed, which user, which action, and whether it is the database, the payment provider, or…
It happens on one customer’s account, or only after 11 p.m., or only on iOS Safari, or only when the cart has a coupon from 2019. You cannot reproduce it…
You cloned the repo. The README says docker compose up. You have never liked Docker. Postgres fails because the port is taken. The API cannot see the database because you…
The button spins. Then it stops. Nothing happens. The user clicks again. Now they have two orders, or none, and a support ticket that says “your site is broken.” The…
The page is slow. Someone says “add an index.” You add an index on users.email because that column is in the query. The page is still slow. The query was…
Frontend developers do not hate REST. They hate guessing. They hate a list endpoint that returns a different shape than the detail endpoint. They hate 201 with an empty body…
useEffect is the hook people reach for when they do not know where the code belongs. Data fetch, syncing to a document title, resetting state when a prop changes, subscribing…
A pull request sits for two days. Then someone leaves “nits” on naming and disappears. Or they approve without reading because the diff is 1,800 lines and standup is in…