The internal review of a bulk-edit feature came back clean on the questions it asked. Nothing was injectable, every write was scoped to the right account, and the one flagged risk (a set of database writes running as several separate calls instead of one transaction) was rated correctly and had a fix already proposed. I read it, agreed with all of it, and sent the same feature to a second, independent reviewer anyway, mostly out of habit.
The second review confirmed everything the first one found. Then it kept going, because “does the code do what the internal review checked for” and “does the code do what a user with a mouse can make it do” are different questions, and the first review had only asked the first one.
The transaction problem the internal review flagged was about moving a row between two tables: delete from one, insert into the other, no wrapping transaction, so a failure partway through could leave the data half-moved. Correct, and rated high severity, with a fix already proposed. What the internal review didn’t ask was where else that same move already happens. A single-row edit path elsewhere in the same feature carried a code comment saying the field in question was “just a relabel,” implying the record stays in its current table. It doesn’t. The backend routes that field through the identical two-table move the internal review had just flagged as unsafe in the bulk path. The comment describing the behavior was wrong, and more importantly, the fix proposed for the bulk case never touched this second call site, because nobody had gone looking for a second call site.
The one that worried me more doesn’t fail loudly at all. One of the bulk operations shifts a date field by moving it relative to its current value; math on the existing date and a target date. If the existing date on a given row happens to be empty, that kind of date arithmetic in SQL Server doesn’t error. It silently resolves to nothing, and the update sets the field to nothing. No error page, no rejected write. A real value gets quietly replaced with an empty one on whichever rows happened to have no date already. The internal review’s checklist covered the loud failures: things that would blow up in an admin’s face. Nothing on it was built to notice a write that succeeds and is simply wrong.
A related one was almost funny. When you tell the tool to update the field only on rows matching some value you searched for, then leave that search field blank meaning “match everything,” the backend reads the blank as the number zero and filters for rows whose value literally equals zero. Leave the search box empty expecting “apply to everything I selected” and you instead apply the change only to the small subset that happens to already have a zero in that field. Everyone else in your selection is silently skipped. The success message still says how many rows you touched, except that count was taken before the filter ran, so it reports the full number regardless of how many rows the update actually reached.
None of these six findings needed exotic tooling. They needed someone reading the same code with a different question in mind: not “is this reviewed,” but “what happens on every input a real user, with no malicious intent, could plausibly produce.” The internal review wasn’t wrong about anything it checked. It just checked one shape of failure (loud, structural, the kind that throws an error) and the code’s actual weak points were the quiet shape: a write that succeeds, reports success, and is wrong.
I don’t run every feature through two independent reviewers as a permanent policy; that doesn’t scale and most changes don’t need it. What changed is the trigger for the second pass. It used to be “does this touch security.” Now it’s “does this write to the database on behalf of a selection the user built by hand,” because that’s exactly the shape of input a checklist built from known failure modes won’t anticipate.