-
New CJ Video: AI, Vibe Coding, and the Erosion of Software Engineering
-
The abstraction fallacy and the problem of carbon chauvinism
-
Refactor in phases, not rewrites
-
Use TypeScript to rule out bad states
-
Module boundaries should follow change
-
Keep the domain away from infrastructure
-
State should explain what changed
-
Async code should be structured so it cannot race
-
Temporal coupling is a design bug
-
The "and" test for functions
-
Put logic in the right layer
-
Don't Fool Yourself: On Knowing When
-
The lesser evil