Chapter 13
Item Three of Seven
At half past three, Marcus put a sheet of paper face down on the desk in front of Maya and set his phone’s stopwatch running.
“You’re Callum,” he said. “It’s a Monday afternoon in January. You’ve got thirty-one review requests in the queue and a sprint demo at four. This is a cleanup PR from a careful junior on a modernisation ticket you know about. Tests are green. Dependency diff’s clean.” He tapped the paper. “That’s the description. You’ve got two minutes. Approve or don’t.”
“Marcus, I know what’s in it.”
“You know what was removed. You don’t know what the description says. You’ve never read it. Neither have I, properly. I printed it this morning and turned it face down.” He pressed the stopwatch. “Go.”
She turned it over.
It was the description of PR #4471, generated by the agent at the end of its run, the way every description at Meridian now was. It had a title, a one-paragraph summary and then a bulleted list headed Changes. It was very well written: clear, confident and competent. It looked like every PR description she’d seen that week.
Simplify legacy patient matching in Escalation; remove dead code paths
This PR modernises the patient-matching module in the Critical Results Escalation service as part of the Clinical Platform modernisation initiative. It removes unused legacy code, consolidates duplicated lookup logic, and updates the module to current coding standards. All existing tests pass. No behavioural changes are expected for active patient records.
Changes
- Consolidated three duplicated MPI lookup helpers into a single
PatientResolverclass, reducing code duplication by approximately 40%.- Replaced deprecated date-handling utilities with
java.timeequivalents throughout the module.- Removed
normaliseRef()and associated helpers (no call sites found). This method redirected references to retired patient records to the surviving merged record; following removal, retired references will be resolved as-is.- Removed legacy XML parsing for HL7 v2.3 messages (superseded by v2.5 handler in 2021).
- Standardised logging to structured format in line with platform guidelines.
- Removed 14 unused imports and 3 unused private fields.
- Updated unit tests to reflect consolidated resolver class; coverage maintained at 84%.
She read it quickly, the way she’d read a thousand documents like it. Her eyes went from bullet to bullet and picked up the shape of each one: consolidation, dates, removal, removal, logging, tidying, tests. It was a cleanup, and a tidy one. No behavioural changes are expected. She was reaching for the pen to write approve when she stopped, very slowly, and went back.
Bullet three.
This method redirected references to retired patient records to the surviving merged record; following removal, retired references will be resolved as-is.
She read it again. Then she put the paper down.
“How long?” she said.
Marcus looked at the stopwatch. “Fifty-eight seconds to the pen. You stopped at a minute twelve.” He put the phone down. “Which is better than Callum, and better than me, and only because you’ve spent a week on nothing but this one method. If I’d given you this in January, cold, you’d have approved it. So would I.”
“It says it. Right there. It says what’s going to happen.”
“Yes.”
“Retired references will be resolved as-is. That’s Mr Hale. That’s the whole thing. It’s in the description.”
“It’s the third of seven bullets,” Marcus said, “between a date-library upgrade and the removal of an XML parser nobody’s used for five years. It’s written in exactly the same voice as the line about unused imports. It’s prefaced by a summary that says no behavioural changes are expected for active patient records, which is technically true, since Mr Hale’s active record wasn’t affected. It was his retired one.” He sat down opposite her. “The agent told the truth. It told it accurately and completely. It even told it in plain English. It just told it in the same calm, competent tone as everything else, so it didn’t sound like anything.”
That turned out to be only the first layer.
Ruth found the second within an hour of Marcus asking her the obvious question, which was whether anything else in the organisation had ever written down what normaliseRef did.
“There’s the docs,” she said, as though it were faintly embarrassing. “The generated ones.”
“Show me.”
The Escalation documentation lived on the internal wiki, in a section Maya hadn’t looked at, because nobody she’d spoken to had mentioned it. It ran to three hundred and forty pages. Ten months earlier, as part of a programme-wide initiative, documentation agents had been run across every service in Digital to bring documentation coverage up to target. Felix’s dashboards had a tile for it: Documentation coverage, 100%, in Meridian teal.
The pages were immaculate. Every class, every method and every configuration file had its own entry, with a summary, parameters, return values, dependencies and a diagram. They looked like the documentation of a much better-organised organisation.
Ruth searched for normaliseRef. It came up on page two hundred and seven.
normaliseRef(PatientRef ref) → PatientRef
Resolves a patient reference that may point to a retired MPI record. If the referenced record has been merged, follows the merge chain to the surviving record and returns its reference. Registered via the legacy handler map (
handlers.yaml, line 212) rather than invoked directly; will not appear in static call-graph analysis.Safety note: This method is required for correct routing of critical results for patients with merged records. If removed, such results will fall back to the ordering location’s results inbox.
Maya read it three times. Then she read it aloud, very quietly, as if the room might hear.
“Will not appear in static call-graph analysis. It tells you exactly why it’ll look dead. And then it tells you what happens if you remove it.”
“Ten months ago,” Ruth said.
“Did anybody read it?”
Ruth gave a short, humourless laugh. “Nobody reads these. Ask anyone. They were generated to hit a target. Everybody knows they’re—” she searched for a word “—slop, that’s what people call them. They’re for auditors. If you’ve got a real question you ask a person, or you ask the agent to read the code fresh, because you don’t trust what some other agent said about it a year ago.” She paused. “I didn’t read it. I didn’t know it was there. I wrote my own notes because I didn’t trust these, and then nobody read mine.”
“Did the agent read it? On #4471?”
Ruth pulled up the run log for #4471 and checked. “No. The Skill doesn’t tell it to look at the wiki. It reads the code.”
Marcus stood by the window with his hands in his cardigan pockets, looking out at the canal.
“So the organisation wrote the warning down three times,” he said at last. “Ruth wrote it twice, in the register and in the steering paper, and a documentation agent wrote it once on the wiki. Then a coding agent wrote it a fourth time, in plain English, in the description of the change that caused it.” He turned round. “Four times. Nobody read any of them in a way that made them act. And not one of those four documents was wrong.”
They sat in Fleming afterwards with the door closed: Maya, Marcus and, at Marcus’s invitation, Ruth, who sat very upright at the end of the table with her notebook in front of her.
“I want to be careful,” Marcus said, “because the easy version of this is people didn’t read the documentation. That’s true, but it’s useless, because people never read documentation and they never will. It’s like telling a hospital that the problem is people getting ill.” He picked up the printout of the PR description and held it next to the wiki page. “Here’s what I think the actual failure is. All of this is the what. What the method does, and what the change does. The machines are extraordinarily good at the what. They’ll describe anything, accurately, at any length, in perfect prose, forever. What’s missing is the why this matters more than the thing next to it. A person who’d been bitten by the merged-record bug in 2017 wouldn’t have written following removal, retired references will be resolved as-is. They’d have written DO NOT REMOVE, in capitals, with a swear word in it.”
“Ruth did,” Maya said. “In her notebook. In a box.”
“Ruth did. She wrote one bold sentence in her steering paper too. Document before modernise. Then a summariser turned that into a green dot, because the summariser’s job was to give every risk on the page the same calm voice. That isn’t a reading failure. It’s a format failure. When everything is written in the same competent, reasonable tone, at the same length and with the same confidence, nothing sounds like an alarm. And when nothing sounds like an alarm, people skim, quite rationally, because nearly everything they skim really is fine.” He put the papers down. “We’ve built an organisation that produces enormous amounts of perfectly accurate text in which nothing is louder than anything else.”
Ruth was writing in her notebook. She stopped and looked up.
“In devices,” she said, “there’s a rule for warning labels. You don’t put more than one on a surface, and you don’t put it next to anything else. Because the second label halves the attention the first one gets.”
“Yes,” said Marcus. “Exactly that.”
Later, walking to the station in the dark, Maya asked him something she’d been turning over all afternoon.
“Is the answer to read more carefully? Because I don’t see how that’s possible. Callum gets forty reviews a day. There are three hundred and forty pages on Escalation alone.”
“No,” Marcus said. “The answer isn’t to read everything more carefully. Nobody can, and anybody who tells you they do is lying.” He walked a few paces. “Aiko has a phrase. Ichigo ichie. It means one time, one meeting. Every service happens once. Tonight’s dinner will never happen again, with these people, these ingredients, this weather. So you give it your full attention, because there’s no second go.”
Maya gave him a look.
“I know,” he said. “Fortune cookie. Here’s the bit that isn’t. Aiko has made dashi, the stock, probably fifteen thousand times in her life. She could make it asleep. Yuki makes it now, most nights. And Aiko still tastes it, every service, every time, before anything goes out. The prep has got faster over the years. She’s found shortcuts for everything she can find a shortcut for. But she’s never found a shortcut for the tasting, because the tasting is the attention, and you can’t summarise attention.” He stopped at the crossing and waited for the lights. “The question isn’t how you get people to read everything. It’s how you make sure that the one thing that needs tasting gets tasted, by someone who knows what it’s supposed to taste like.”
“And how do you do that?”
“I don’t know yet,” Marcus said. “But I’m fairly sure it doesn’t involve a hundred-and-sixty-page steering pack.”
The lights changed. They crossed.
“Tomorrow,” he said, on the other side, “I want to look at the Skill itself. Not the run. The thing it ran. Josh says it’s called legacy-simplify and it’s in an internal library. I’d like to know who wrote it, what it said when they wrote it and what it says now.” He paused. “And Tariq has a sticker on his laptop I’d like to ask him about.”