Start from a theme
Check, then act on stale state
Reading a status and then writing by ID is a race. Lessons and checks for putting the condition in the write, or locking the row.
Open the theme →Background jobs when something fails
Claims never released, dedup that ignores running jobs, jobs that re-queue forever. Review lessons and checks for queues and workers.
Open the theme →Code that silently does the wrong thing
Schemas that drop fields, NULLs that skip filters, loading read as not found. Lessons and checks for code that fails without an error.
Open the theme →Trust boundaries the server must hold
A disabled button is not a permission. Lessons and checks for authorization on side paths, untrusted input, and server-only fields.
Open the theme →Tests that can never fail
Negative tests with nothing to exclude, mocks with the wrong shape, assertions on status codes only. Lessons and checks for tests that prove something.
Open the theme →Writes that span systems
When one operation touches a database, object storage and a third-party API, every crash point needs a recoverable state. Lessons and checks.
Open the theme →Client state that goes stale
Late async results, debounced copies read as truth, caches that outlive the account that filled them. Lessons and checks for frontend state.
Open the theme →Accessibility and UI behaviour
Div buttons that ignore the keyboard, menus that offer actions that throw, focus that goes nowhere. Lessons and checks for a UI that keeps its promises.
Open the theme →