The Archaeology of Failure: Why QA Migrations Die in the Spreadsheet

Engineering Culture & QA

The Archaeology of Failure

Why QA migrations don’t die in the code-they die in the spreadsheet.

We are staring at row 4626 of a spreadsheet titled “Final_Migration_V3_CLEANED_DO_NOT_EDIT.” The “cleaned” part is a lie, a polite fiction we’ve all agreed to maintain so we can get through the Tuesday afternoon sync without anyone crying.

The cursor is blinking in a cell that contains a test case description for a login flow that was deprecated in . Around the table-or rather, across the grid of a Zoom call that has been running for -the silence is thick enough to choke on.

“The lie is ‘Every test case in this legacy tool is a valuable asset that must be preserved.'”

My mouth feels dry, the same way it did yesterday when I was trapped in the dentist’s chair, trying to explain my flossing habits while a high-speed drill hovered over my molars. There is a specific kind of vulnerability in being caught in a lie you’ve been telling yourself.

In the dentist’s office, the lie is “I floss every night.” In the migration project, the lie is “Every test case in this legacy tool is a valuable asset that must be preserved.”

The Paralysis of 12,006 Cases

We are currently at of what was supposed to be a “lift and shift.” We have the new tool. We have the API keys. We even have the budget approval for the next three years. But we are stuck.

12,006

Legacy Test Cases

The collective anxiety of a decade’s worth of engineering turnover, preserved in a digital amber.

We are paralyzed by 12,006 test cases that represent the collective anxiety of a decade’s worth of engineering turnover. Nobody wants to be the one to press delete. Nobody wants to admit that 46 percent of our testing suite is actually just a historical record of bugs that were fixed during the Obama administration.

Iris B.-L., a cruise ship meteorologist I met during a particularly rough crossing of the Tasman Sea, once told me that the most dangerous thing on a ship isn’t the storm you see on the radar. It’s the “shifting cargo.”

If you haven’t secured what’s in the hold, the moment the ship tilts, the weight moves. Once the weight moves, the physics of the vessel change, and suddenly you’re capsizing in a sea that isn’t even that angry.

The moment you decide to move from one test management platform to another, you are tilting the ship. All those test cases you haven’t looked at in years-the ones with titles like “CHECK_THIS_LATER” or “Feature X – Copy (2)”-they start to slide.

They pile up against the hull of the new project, and suddenly the migration isn’t a technical task anymore. It’s an archaeological dig. And the archaeologists are exhausted, underpaid, and being asked to justify why they’re digging up trash.

The Ergonomic Chair Problem

The stall always happens at the same exact step: the Audit. It’s the moment when the team realizes that the “technical migration” is actually a “cultural reckoning.”

You can’t just pipe 12,006 rows of garbage into a modern, streamlined interface and expect the interface to fix the garbage. It’s like buying a $676 ergonomic chair to fix a back problem caused by sitting like a salted pretzel for twenty years. The chair is nice, but you’re still a pretzel.

The Mass Import

A spectacular delusion. Pushing the problem into a “shiny wrapped” UI doesn’t fix the lack of stomach for deletion. It just makes failure more expensive to view.

The Selective Audit

A painful, cultural reckoning. It requires admitting that “parity” is the enemy of progress and rebuilding the system for what works today.

Most teams try to bypass the reckoning by opting for the “Mass Import.” They tell themselves they’ll clean it up once they’re “in the new system.” This is a spectacular delusion.

If you didn’t have the stomach to delete a test for a dead feature when it was in the old, clunky tool, you certainly won’t do it when it’s been shiny-wrapped in a new UI. You’ll just have a faster, more expensive way to look at your own failures.

I’ve seen this play out in 46 different ways across 16 different companies. The Engineering Manager wants “parity.” The QA Lead wants “coverage.” The Product Owner wants “to not break things.” These goals sound aligned, but they are actually at war.

If you insist on parity with a broken legacy system, you are simply rebuilding your own prison in a different zip code.

“They were so worried about the ‘loss of inventory’ that they almost lost the engines.”

– Iris B.-L., Cruise Ship Meteorologist

Iris B.-L. would say we’re ignoring the barometer. She spent her days watching atmospheric pressure drops, but her real skill was convincing captains to throw things overboard before the waves got too high.

She told me once that she’d seen a ship’s crew get into a heated argument about whether to jettison a literal ton of spoiled pineapples. They were so worried about the “loss of inventory” that they almost lost the engines.

We are currently arguing about the spoiled pineapples of .

Grocery Lists for Ghosts

The resistance to deleting test cases is rooted in a fundamental misunderstanding of what a test case is. We treat them like intellectual property. We treat them like code.

But a test case is more like a grocery list. Once you’ve bought the milk and the eggs, the list has zero value. If you keep every grocery list you’ve ever written for , you aren’t an archivist; you’re a hoarder.

Which question are you asking?

“Does the 2FA work on the staging environment?” (Relevant)

“Did the 2017 flash-based uploader work on Internet Explorer 8?” (Ghost)

A test case is only as valuable as its ability to provide a “yes” or “no” answer to a relevant question about the current state of the software. “Does the 2FA work on the staging environment?” is a relevant question. “Did the 2017 flash-based uploader work on Internet Explorer 8?” is a question for a ghost.

And yet, here we are, paying a consultant $676 an hour to help us map the “Flash_Uploader_IE8” fields to the new schema.

The irony is that the legacy tools themselves are often blamed for the mess. We say the tool is “slow,” or “hard to use,” or “not collaborative.”

And while that might be true, it’s often the tool’s very limitations that allowed the hoard to grow. When a tool is a black box, it’s easy to hide things in it.

Modern platforms like

qtrl.ai

are designed with the assumption that you actually want to see what you’re doing. They bring the junk into the light, and the light is what’s causing the panic.

I remember trying to make small talk with the dentist while he had a suction tube in my cheek. I asked him if he could tell who was lying about flossing. He laughed-a wet, muffled sound-and said, “Everyone lies about flossing, but the gums never lie.”

Your test suites are the gums of your engineering organization. You can tell the board that you have 100 percent coverage and a robust migration plan, but the moment you try to move that data, the bleeding starts.

The “stall” is just the team collectively holding their breath, hoping the bleeding stops if they just stop moving. You have to accept that the 12,006 test cases aren’t a gold mine; they’re a landfill.

The most successful migrations I’ve ever witnessed started not with an import script, but with a bonfire.

The Shipping Test

“If we had to ship this product tomorrow, and we could only have 46 tests to verify it, which ones would they be?”

You start there. You build the core. You prove the value. And then you look at the remaining 11,960 cases and you realize that if the world didn’t end while you were ignoring them, it probably won’t end if you delete them.

But humans aren’t built for that kind of ruthless pragmatism. We are built for nostalgia and the fear of “what if.” What if we need that test case for the legacy API next year? What if the auditor asks for it? What if, what if, what if.

Nostalgia vs. Reality

Iris B.-L. told me that on the ship, the “what ifs” are what keep you awake at night, but the “what is” is what keeps you alive.

“What is” is the fact that the ship is currently leaning 6 degrees to the port side because the cargo shifted. “What is” is the fact that your migration is costing $126 a minute in lost productivity and soul-crushing meetings.

The price is the price, but the cost is who you have to become to pay it.

We’ve been in this meeting for now. The Engineering Manager is currently explaining why we need to keep a suite of tests for a mobile app that was pulled from the App Store in . He’s using words like “institutional knowledge” and “traceability.”

I want to tell him about the spoiled pineapples. I want to tell him that the dentist knows he hasn’t been flossing. I want to tell him that we are currently sinking because we are afraid to admit we’ve been hauling trash for .

Instead, I just look at the spreadsheet. There is a moment in every migration where the technology becomes irrelevant. It doesn’t matter if the new tool has AI-powered test generation or a dark mode that looks like a sci-fi stickpit.

If you are trying to automate a lie, you are just making the lie happen faster.

The migration stalls because it’s the first time in a decade that anyone has been forced to look at the work. Not the “output,” but the work. The actual, messy, contradictory, redundant, and often useless artifacts of a thousand different sprints.

It’s a mirror. And we, as a species, are notoriously bad at looking in mirrors when we’re feeling bloated.

If you’re stuck in a migration right now, stop looking at the tool. Stop looking at the mapping documents. Stop looking at the Jira integration. Look at the tests.

Pick one. Row 4626. Ask yourself: “Does this test make the software better today?” If the answer isn’t a resounding yes, then the test is a weight.

Iris B.-L. eventually left the cruise industry. She said she got tired of predicting storms for people who were too busy at the buffet to care that the horizon was turning purple. She now works in land-based agriculture, where the things you grow actually have to be alive to be worth something.

Maybe that’s the lesson. We’ve been trying to “migrate” a graveyard, wondering why nothing is growing in the new soil.

The stall is a gift, if you let it be. It’s a pause. It’s a moment of silence in the middle of a loud, expensive project where you can finally say, “This is garbage, and we are not taking it with us.”

Row 4626

It’s the hardest thing you’ll do all year. It’s harder than learning a new syntax or configuring a CI/CD pipeline. It’s the act of being honest about what you’ve built versus what you wish you’d built.

The meeting finally ends at . No decisions were made. We’ve scheduled a follow-up for Thursday at 6:00 PM. I close the spreadsheet, but the blinking cursor stays in my vision, like a spot after looking at the sun.

I think about calling the dentist to confess. I think about calling Iris B.-L. to ask if she misses the sea. But mostly, I just think about row 4626, and how much lighter we’d all be if we just had the courage to let it go.

The ship is tilting. The barometer is dropping. The cargo is shifting. And we’re still arguing about the pineapples.

The truth is, 12,006 test cases are just 12,006 ways of saying “I’m afraid.”

If you want to move, you have to be willing to arrive with less than you started with. That isn’t a failure of the migration. It’s the whole point of it.

But first, you have to open the hold and look at what you’re actually carrying. And once you realize that, the “Select All -> Delete” button doesn’t look like a mistake anymore. It looks like an exit.