Writing Database Migrations That Are Safe to Run on Every Deploy
Database changes run automatically with every release. Here is how we write migrations that are additive, guarded and safe for a database many custome...
How Jag Journey, LLC designs, builds, tests and ships its own software, and the principles behind each decision.
100 posts
Database changes run automatically with every release. Here is how we write migrations that are additive, guarded and safe for a database many custome...
Not every change needs the full test suite, and every change needs the safety gates. Here is how we let each push choose a fast or full pipeline witho...
Caching makes pages fast, but a shared cache can also show one customer another customer's data. Here is how we name cache keys so that can never happ...
Two-factor authentication only protects an account if every way of signing in respects it. Here is how we closed the side doors that many apps leave o...
Forms are where people sign up, pay, register and ask for help. Here is how we make them clear and usable for everyone, including people using screen...
Every function, command and component we add must be wired in and used in the same piece of work. Here is why we treat unused code as a defect, not a...
Sometimes the only way to understand a problem is to look at the live system. Here is how we inspect production safely, and why we never fix anything...
New frameworks appear every month. Here is why we build on mature, well-documented tools and spend our creativity on the problems our customers actual...
AI work can be inexpensive or surprisingly costly. Here is how we show an estimate first, ask for confirmation and record measured usage so nobody is...
Many people and AI sessions often work in the same codebase at once. Here are the habits that keep their changes from colliding or erasing each other'...
An uploaded file can carry more than a picture. Here is how we check types, enforce limits and clean risky formats before any upload can appear in fro...
Many people navigate with a keyboard instead of a mouse. Here is how we make every button, link, menu and dialog reachable, visible and usable without...