spaghetti-code-killer

Debug

Chapter 14 of 14

The lab is quieter than it was. Two weeks of quiet, accumulating. The server racks hum behind the glass wall, and the coffee machine is on, and the fluorescent overhead carries its barely-audible buzz that I stopped hearing in my second month at the DFU. I only notice it now because the room is otherwise still.

The east wall has fifty-three printouts. Same count as when I left for Briar Lake, same count when I came back. I've taken down the working maps and hypothesis trackers, the sticky notes in yellow and blue that marked functions of interest at layers three through nine, the chain-of-responsibility diagram I redrew twice in the final week. I left the comment trail. Layers eight through twelve: Marcus's voice in the margins, my red pen over his words.

For four weeks, this lab was its own kind of emergency — printouts going up faster than I could finish reading them, the corkboard at capacity, the whiteboard rewritten three times as the chain of custody solidified. Now the whiteboard is erased. The emergency has become a procedure. What remains is evidence, properly indexed, waiting on a court date.

The case is filed. Marcus Chen is in pre-trial custody, transferred from Briar Lake after the first hearing and now in county holding, meeting twice a week with a public defender who has requested a ninety-day delay to review the materials. Seven civil suits against MediCore are active in probate court, each with a firm that handles exactly this kind of grief. Victor Russo's negligence runs to thirty-two documented instances in Section 8 of my report, but negligence isn't a crime, and his lawyers had the weekend to respond. Derek Huang cooperated under formal agreement. He is still at MediCore because everyone's counsel agreed that firing him looks like witness interference.

Two weeks of depositions and evidentiary hearings and emails from Torres's office requesting clarification on specific findings. Two weeks of the case becoming other people's work — the lawyers, the expert witnesses, the judge who'll decide what the jury sees. My part of it is finished. The forty-seven pages are filed. The forensic images are indexed. The chain of attribution is documented, and now it belongs to people who argue for a living. The coffee cups that used to mark the late nights are gone. Ray cleared them at some point — while I was in Briar Lake, probably, or while I was finishing the final sections. I didn't notice until the surface was clean. The bottom drawer has what it has. The printouts are still there.

I take the layer 12 page off the wall. The corners are soft from four weeks of handling, the upper edge warped from pressing flat. My first red circle, week two, is around the list literal: `['A','B','C','D','E','F','G']`. A smaller circle from week three is around cleanly in the comment block three lines above.

// I built this function the way you taught me to think -- // break the problem into the smallest possible pieces // and solve each one like it's the only thing that matters. // The problem I gave myself doesn't decompose cleanly. // I've been trying for two years.

Below the comment: twelve lines. The conditional check. The name comparison against the list, the cancellation of the dosage ceiling that was supposed to keep everyone safe. His cleanest code in the entire codebase by a distance that isn't close. I've run the execution path so many times it's automatic now — the logic stepping through and arriving at the same result for each of seven names, each result identical, each one the system doing exactly what it was told to do.

He told me. Right there, three lines above the kill mechanism. The problem I gave myself doesn't decompose cleanly. Two years of trying. I've spent four weeks with this page and I still can't tell you with certainty whether that's confession or documentation or the kind of thing you type at three in the morning when the code is open and there's no one to say anything to. Torres would tell me the distinction has no evidentiary weight. She'd be right. It doesn't stop being a distinction.

The code comments I've read more than I've read anything in recent years tell me I was known. That someone understood exactly how I think and either loved me for it or used that understanding, or both. The problem is that knowing you were known isn't the same as knowing what was done with the knowing. I've been doing this work for twenty years. I've never had a case where those two things couldn't be separated.

Two doors down the corridor, in a sealed evidence box, is the laptop from Briar Lake. In the forensic image on the department server, Exhibit F-3 is indexed and accessible. I have a printed copy in the bottom drawer, folded twice. I haven't opened the drawer since I put it there.

I set the layer 12 page face-down on my desk. My palm flat on the paper, one moment. Then I turn it over and stand it against the corkboard frame at the edge of the desk. It's still evidence. It goes back where the evidence goes.

Ray comes in at nine-fifteen while I'm on my second mug. He sets a fresh one next to my elbow on his way to his desk — still in his coat, bag over one shoulder — and looks at the east wall with the expression he uses when he's decided not to ask about something.

"Torres called this morning," he says. He pulls the chair out, drops the bag. "Carnegie Mellon expert comes in next week. She says the attribution chain is clean."

"It was always clean."

"She knows." He's looking at something in the bag. "Marcus's lawyer is going to argue the love letters back at the evidentiary record. That your personal connection taints the analysis."

"My reading is documented against a methodology applied in seven cases before this one. The love letters are classified as a secondary personal document, Exhibit F-3. They're not the prosecution's case."

Ray nods. He doesn't push it. He pulls out a manila folder and walks it over, sets it beside the new mug. "Dumont sent this down. Investment platform, financial fraud. Three victims with a strong document trail — they kept records in real time. Spreadsheets, email chains. The case turns on matching what the platform reported to what it actually executed."

I look at the folder. Then at the east wall. The layer 12 page is back between the pages from layers 11 and 13, Marcus's voice running through all three in the same comment syntax. Three victims. A different kind of victim, a different kind of code. No callbacks seventeen layers deep, no comments written in the margins for someone who used to sleep in the next room. Just numbers that should match and don't. I pick up the new folder.

I've known the word "debug" the way I know "callback" or "deprecated" — the name of a process, not the process itself. You debug code by tracing execution paths until you find where the logic breaks down. You log values at each step. You isolate which assumption was wrong and at what point it became load-bearing. Patient work, not dramatic while you're doing it. The drama comes after, in retrospect, when you understand what you were looking at.

Fourteen years in homicide, six years in digital forensics. Same word, same operation: find the flaw, trace it to its source, document what you found so someone with a different job can act on it. That's still true. I debugged the Farber case in eleven days. The Stanton obfuscation took three weeks, and the word meant the same thing at the end that it meant at the beginning. Clean process. The logic was broken, and I found the break, and that was all the word needed to hold.

The other thread is also that operation, running on different material. Going back through what I thought I knew about a person and tracing where my reading broke down. Working layer by layer from the result — seven deaths, two years of comments, a conditional check written with more care than anything else in the codebase — back toward the source, trying to identify whether the gap in my understanding was a failure in my analysis or a gap built specifically to be missed by someone who knew exactly how I read. That's the version that doesn't resolve. The evidence supports two readings and doesn't choose between them, and the case is closed, and the question outlives the case.

I've made peace with questions that can't be answered by evidence. Homicide teaches you that. Some gaps don't close. The word carries both operations now — the technical and the other one — and won't put either down.

Did he love her. The comments say something. The Briar Lake file says something. Both predate the warrant, which means they weren't written for a jury. But predate only means what it means on a commit timestamp, not on the honesty of the person who typed it.

Who would H have been. The list stops at G. I've asked the question enough times that it doesn't need an answer anymore. It just needs to be asked.

The code still exists. Forensic images indexed across the evidence servers. The comment trail at layers eight through twelve is preserved exactly as it was written. The case is filed. The words are archived.

I open the Dumont folder. An investment platform. The discrepancy between reported returns and actual returns across fourteen months, three victims who documented every transaction in real time. The kind of case where what you're looking for is a log entry that claims one thing while the underlying execution does another. Different architecture entirely. The logic will be wrong because someone wanted money, and the trail they left will be ordinary — no syntax choices that double as private speech, no comments addressed to a reader who was never supposed to find them.

The red pen uncaps. The first page of the Dumont report is clean — no marks, no circles, no red pen history. The first notation I make is a question in the margin of the executive summary: whether the discrepancy predates the algorithm update or follows it. Small circle around the date range. A question mark. The first question asked of a new codebase.

Behind me, fifty-three printouts on the east wall. One of them has cleanly in a small red circle, three lines above a conditional check I can run from memory.

The pen moves to the second line, and I begin.

← PreviousContents