The first real customer to sign up broke a login feature that had passed every check we ran. The page told them their request had failed, and nothing was saved.

What we were replacing

We had a prototype where any password worked, and the login screen said so outright. The job was to turn that into something real: an actual password, an actual rejection of the wrong one, and requests that would be remembered instead of vanishing the moment the page refreshed.

The design was ordinary and sound. A password gets scrambled by a well-understood method before it’s ever stored, with a setting that controls how many times that scrambling repeats. More repeats means more security, at the cost of a little more time to check a password. The number we chose for that setting was 150,000, comfortably above the 100,000 figure remembered from older guidance. Nobody checked whether the platform this would run on actually allowed a number that high.

Why the checks before launch missed it

That setting only matters the moment a real account gets created on the real system. A build check does not create an account. Neither does a type check. Both ran clean, because neither one ever reaches the one line that depends on the platform’s real limit.

The first real signup did reach it, and it failed. The platform’s actual limit for that setting was 100,000, not 150,000. It did not cap the number and move on. It refused the request outright.

The fix, and the test that mattered more

The fix was a single number, 150,000 corrected down to 100,000, with a comment next to it explaining why it can’t go any higher.

Then came the part that mattered more: a full run through the real system, not a simulated one. Create a new account. Try the wrong password. Try the right one. Save a request and check that it’s still there after a reload. All four checks ran against the live thing, not a stand-in for it, and all four passed.

What we’d check next time

A platform’s limit is a fact about that platform. Checking it would have taken a minute.

A test that never reaches the step that could actually fail has proven nothing about that step, no matter how much else it proved. Build and type checks passed and told us nothing about a line they never touched.

Before a login feature goes live, find out what limit the real platform enforces on each setting and have someone confirm it. Then run at least one test end to end against the live system: create an account, try a wrong password, try the right one, and reload. The number that matters now is 100,000, and the test that matters now is the one that uses a real account, a real password and a real reload.