Series · 13 parts
Effect fixes your TypeScript
A series on the bugs you already ship in plain TypeScript, and how Effect makes them impossible to write. Functions that hide how they fail, try/catch that swallows every error’s name, retry loops with three bugs, Promise.all that floods your own API, timeouts that cancel nothing, leaked database connections, unchecked casts, and environment variables that turn into NaN.
Each part is one bug and one fix, side by side, in about a minute. It starts from async/await, so you need no Effect background, and it ends with the honest part: when you should not use Effect at all.
IntroAn Effect is not a Promise. It's a blueprint.
Part 1Your TypeScript functions are lying to you
Part 2try/catch is a goto in disguise
Part 3If you can write async/await, you can write Effect
Part 4Your retry loop has 3 bugs
Part 5Promise.all just DDoSed your own API
Part 6Your timeout doesn't cancel anything
Part 7You don't need a DI framework
Part 8You're leaking database connections
Part 9"as User" is not validation
Part 10process.env.PORT is string | undefined
Part 11Free tracing, no glue code
Part 12When you should NOT use Effect