text
| 1 | # Migration review |
| 2 | |
| 3 | Answer every question before the migration is approved. "Probably fine" is not an |
| 4 | answer to any of them. |
| 5 | |
| 6 | ## Blast radius |
| 7 | |
| 8 | - [ ] How many rows does this touch? |
| 9 | - [ ] What lock does each statement take, and for how long? |
| 10 | - [ ] What happens to in-flight queries during that lock? |
| 11 | - [ ] Is the busiest table involved? At what time will this run? |
| 12 | |
| 13 | ## Compatibility |
| 14 | |
| 15 | - [ ] Does the currently deployed application version still work after this lands? |
| 16 | - [ ] Does the new version work before it lands? |
| 17 | - [ ] If the answer to either is no, this migration must be split. |
| 18 | |
| 19 | ## Reversibility |
| 20 | |
| 21 | - [ ] Is there a down migration? Has it been run against a copy? |
| 22 | - [ ] If irreversible, is that written down, and is the reason acceptable? |
| 23 | - [ ] What is the recovery path if it fails halfway? |
| 24 | |
| 25 | ## Data |
| 26 | |
| 27 | - [ ] Is any data destroyed? Is it backed up somewhere that is not this database? |
| 28 | - [ ] Is the backfill batched and resumable? |
| 29 | - [ ] What happens if the backfill is interrupted at 50%? |
| 30 | |
| 31 | ## Rehearsal |
| 32 | |
| 33 | - [ ] Has this run against a restored production-sized copy? |
| 34 | - [ ] How long did it take there? |
| 35 |