Day twenty-one, and the east wall of the lab has run out of room.
I've covered it from shoulder height down to the baseboard — all fifty-three printouts mounted now, sorted in three columns by commit date rather than callback layer. The chronological sort was Ray's suggestion on Monday, which surprised me because Ray usually reserves his methodological input for moments when he thinks I'm about to disappear into a technical spiral I can't come back from. He handed me the coffee he'd brought from the good place down the block, said you're reading the architecture when you should be reading the timeline, and then went back to his desk and let me work.
The three columns make a shape I've been staring at since I finished mounting the last printout an hour ago. Left column: the first six months of Marcus's work on the codebase. Middle column: months seven through thirteen. Right column: months fourteen through eighteen, where the tone shifts into something I've been calling, in my investigation notes, the third register. That label does the minimum amount of work I need it to do, which is how I know the label is wrong.
I stand back. The way you stand back from a blood spatter map when you've been too close for too long — not at the individual marks but at what the marks make together. What the density tells you about momentum. What the gaps tell you about where the attention went.
The left column is thin. Professional. A developer flagging assumptions, building his picture of an inherited codebase with the measured patience of someone who thinks long-term. The middle column is denser, the register still technical but cracking — personal things showing up inside professional framing, half-hidden, deniable. I've read both columns before, in pieces, out of order. Reading them now as a continuous sequence, what I notice is the gradient. The personal material doesn't arrive suddenly. It seeps in. A naming choice that uses a word I said often enough that he'd have known I'd recognize it. A parenthetical about error handling that borrows my logic without attribution. He absorbed what I said and carried it through months of code, and I'm still finding where he put it.
By month fourteen, the technical framing drops. The right column comments are what they are. Reading them in order reveals something the fragments didn't: the acceleration. In the middle column, he might go three weeks between personal intrusions. In the right column, they come every few days.
He used my initial in the comment trail. "N." — twice in hybrid blocks where it could almost be read as a variable annotation if you weren't looking for it. Once in the middle column, which I initially logged as a notation and then understood, slowly, over three days, was not. And then this block, from month sixteen, which leads with the initial and doesn't pretend:
// N. // I've been writing code the way you investigate -- not toward correctness // but toward the thing that can't be improved. // You called the gap between correct and right "the part nobody pays for." // I've been in that gap for most of this project. // I think I'm out.
I stand at the right column for a while with to you specifically and everything that follows. The server rack hums behind the glass. My coffee has gone cold at some point I didn't register. He was writing to me for months in a codebase he knew would be forensically examined if anything went wrong, and going wrong was the plan, and I'm still parsing what that means — that the letters were genuine AND that he wrote them knowing they'd eventually be read as evidence. I have not found a way to make those two things not both be true. What I can do is keep reading.
I've read the kill mechanism section four times this week — the conditional check, the comparison logic, the seven letters hardcoded into a production medication system — but not, until now, what's adjacent to it. When I reached this section in the static analysis, I was protecting something by moving through fast, and I knew that then, and I'm done with that particular form of protection. Above the comparison block, Marcus left two comment blocks. The first is formatted as a continuation of the preceding documentation comment — same indentation, same syntax, the kind of thing that reads as technical appendix until you look at the content. I missed it in the first pass. I'm reading it now.
// 2022.10.31 — Function complete. See layer-12-technical.md for implementation rationale. // // N. -- You asked me once how you know when you're finished. // I said: when you can't find anything left to cut. // You said that sounded like giving up dressed as discipline. // Twelve layers. Nothing left. I don't think this is giving up. // I hope you find this.
The function completion note was written October 31st of the development year. The mechanism was complete. He sat at his desk — or wherever he was working that night — and documented that the function was complete, and then wrote five lines to me inside the documentation comment, and the last line is four words that I have to stop moving to hold: I hope you find this.
He was hoping. Not planning, not engineering — hoping. There's a specific quality to hope: it acknowledges that the outcome isn't certain, that someone else's path and judgment will determine whether the message arrives. He built the mechanism and then wrote a message inside it addressed to me, and whether or not I would investigate depended on factors outside his control. He built it hoping. Three days ago I found the second comment block, filed it as a timestamp marker, and have been carrying it since.
// 2023.08.14 02:34 // I'm sorry.
Two documents in the same location. October to August: ten months between writing the love letter and committing the kill code. He built the mechanism and lived with it for ten months before he deployed it. The love letter is from the building. The apology is from the doing.
I leave the red pen capped. My handwriting belongs on every other printout on this wall — circled callbacks, annotated functions, margin notes in three colors that mark my path through his architecture. This printout I leave clean. I can read it as evidence without marking it. What I'd write in the margin isn't forensic notation and doesn't belong in a case file.
Ray's text came in at 7:14 AM: the apartment all-clear. He'd handled the entry team while I was at the wall because he understood, without me explaining it, that the entry team was his task. I arrive at two in the afternoon with my evidence camera and my notebook and the awareness that I'm walking into the space Marcus lived in for two years after I stopped having anything to do with him. The building is mid-range and quiet; the elevator opens onto a carpeted hallway, the post-search stillness of a unit that's been gone through without being disturbed.
The kitchen is the first thing I look at. The cupboards have coffee, sealed dry goods, canned vegetables — nothing that would have expired. The refrigerator has been emptied. He cleared the perishables before he left. He planned the departure the way he planned the codebase: nothing unresolved, nothing to decay in his absence.
The desk takes up most of the west wall. Dual monitors, dark. A mechanical keyboard with keys worn smooth from years of specific use — the left-side spacebar caught by a left thumb, the navigation cluster worn in the pattern of someone who moves through code rather than documents. His hands were always moving; I used to read that as enthusiasm. Looking at the wear marks on the keyboard, I'm reading it differently: this is what ten thousand hours of a particular kind of attention looks like when it leaves evidence.
The bookshelves run the east wall. Technical references in the volumes I'd expect — I recognize some of the spines, books he recommended to me that I eventually bought. But among them, no apparent system, are poetry collections. Merwin. C.K. Williams. Louise Glück. Seven of them, paperback, with creased spines from reading rather than display.
I didn't know he read poetry. Two and a half years. I didn't know this about him, and I can't tell whether that's a failure of my attention or a wall he maintained with care, and I'm becoming increasingly unable to locate the border between those two things.
The bedroom is stripped down to function — bed, dresser, a nightstand with a lamp. On the nightstand, a photograph in a frame. It's me. Candid — someone caught me mid-laugh at a restaurant I almost recognize, wine glasses on the table behind me, early in whatever we were to each other. I look around thirty-five, which puts it in the first year. I'm not looking at the camera. I don't remember the dinner.
I stand in the bedroom doorway and look at this for a long moment. He lived here for two years after the end of us. He came home to this apartment every night during the months he was building the mechanism, during the ten months between building it and deploying it, during the months after. He put his glasses on the nightstand next to a photograph of me laughing at something, not looking at the camera, not knowing I was being kept. The mechanism and the photograph — the same life. The same hands, the same twelve-layers-nothing-left architecture of attention.
I glove up. I photograph the nightstand from the doorway. I bag the photograph and label it with the case number, the date, the time. Chain of custody maintained. The photograph is evidence because everything Marcus left is evidence; he knew this when he left it.
In the doorway on the way out, at three-forty in the afternoon, I do the thing I always do before closing a scene. The evidence bag in my hand. The empty refrigerator. The poetry I didn't know about. The keyboard worn to the shape of his specific attention. The photograph of me laughing at a dinner I can't place.
On the wall in the lab: fifty-three comment blocks. The early phase documenting a developer who flagged every assumption in writing. The middle phase tracking the moment personal things started showing up in technical language. The right column, where the technical language stopped pretending. The layer 12 printout I left without margin notes: Twelve layers. Nothing left. I hope you find this.
The same person built all of it. That's the part I keep arriving at from every direction. Not two versions of Marcus — the brilliant developer and the killer, the man who wrote love letters into murder code and the man who kept my photograph. The same person. The love in the code comments is real the way the kill mechanism is real: constructed with the same care, refined with the same patience, built toward the same audience of one. He was hoping I'd investigate. He was hoping I'd find the letters.
I taught him to reduce a problem to its smallest form. He reduced it. I taught him to build toward an answer rather than state it. He built toward it for eighteen months, and the answer is twelve layers down, in the most elegant section of a terrible codebase, next to two comment blocks I will carry into court and carry home from court and carry for whatever comes after.
I close the door.
The drive back to the lab takes twelve minutes. The city is running at its regular pace around me, not yet aware of the weather it's living in. The evidence bag sits on the passenger seat, the photograph inside it, my own face not yet knowing what it was going to mean to be kept. The code still says what it says. The comments still say what they say.
Ray will be back from his meeting with Reyes by the time I arrive. We need to work through the full exhibit documentation — the comment trail as a sequential timeline, the two-register reading that a jury will need to follow, the evidentiary question of what I hope you find this does to the picture of intent. What comes next is what comes next.
I turn onto the precinct road.