I Spent Two Weeks Convinced I’d Broken Something. The Real Bug Was a Manager’s Screen Left Open.

I spent two weeks convinced I’d broken something. Turned out the actual problem was managers, more than one, leaving employees’ performance reviews open on their screens, unattended, for hours.

The report nobody could reproduce

Users were reporting lost appraisal data. Someone would fill out a review, hit save, and come back later to find their work gone. I couldn’t reproduce it in dev. I couldn’t reproduce it in staging. It only happened in production, and only sometimes, with no pattern I could find no matter how I tried to trigger it myself.

For two weeks, I was convinced this was a client-side timing problem. Some stray click, some odd sequence of typing and navigation, a race condition between the browser and the save handler. I tried every autosave trigger I could think of: onChange, onBlur, wiring saves to button clicks directly instead of trusting a single save action at the end. None of it caught the actual failure, because none of it was actually the problem. Every theory produced something reasonable-sounding and none of it held up under real scrutiny.

Two weeks of that, humbled the whole way through, before I finally did the thing that’s supposed to be normal and asked for help.

What was actually happening

Sessions were quietly timing out after long stretches of inactivity, on a production server supporting over 2,000 employees and hosting multiple applications, noisy enough that the pattern never showed up cleanly anywhere else. When a session died and someone eventually clicked “save and continue,” the request went nowhere. No error. No warning. Just silence, and a review that looked saved and wasn’t.

Here’s the part that actually explains why it kept happening: performance reviews were sitting open in browser tabs for hours at a time. Not minutes. Hours. A manager would open an employee’s appraisal, get pulled into something else, a meeting, a phone call, the rest of their actual job, and leave the tab sitting there, session quietly expiring in the background, review contents visible on an unattended screen the entire time.

This wasn’t one careless person having a bad day. It happened more than once, with more than one manager. That’s not user error you can train away with a memo. That’s an organization that never once asked whether employee review data, some of the most sensitive information an employee has about their own standing, needed real protection against sitting open and unattended on somebody’s monitor for hours at a stretch.

The fix, and the actual question underneath it

The technical fix was small once the real cause was understood: an auto-logout after 15 minutes of inactivity, paired with a clear warning before it kicked in, so people had a real chance to save their work first instead of losing it silently. Reauthentication required afterward, so a session that had gone stale couldn’t quietly keep accepting saves that were never actually going anywhere.

But the fix that mattered more wasn’t code. It was the question changing. The question going in was “why is the save failing.” The real question, once the actual cause surfaced, was “why was a confidential review allowed to sit open on an unattended screen for hours in the first place.” Those are very different problems, and only one of them had anything to do with my code.

What actually stuck with me

I spent two weeks doubting myself, chasing wrong theories, before asking for help on something that turned out to have nothing to do with anything I’d written. The failure I’d been hunting for wasn’t mine to find, because it was never in the code to begin with. It was sitting in plain sight, on more than one screen, the whole time.