Episode 16

The Code Review That Isn't a Review

"Approval without understanding is just ceremony"
18 min read
Week of May 18 - 22, 2026

Stefan opens three weeks of pull request history and finds approvals that arrived faster than anyone could have read the code. Daniel defends his review process. Mariana shows the emoji reactions that pass for feedback. Hassan pulls up the deploy failures that followed rubber-stamped merges. Stefan picks a recent PR and sits the team down to read it together. What they discover in Tomasz's last major contribution is knowledge nobody captured and questions nobody asked. On his final day, Tomasz walks out in the same gray hoodie he walked in with. The code review that wasn't a review becomes the reason they might survive without him.

Previously: "The First Pairing Session" — Stefan introduced pairing and mob programming. The team expected chaos. Instead, they caught two bugs before they ever reached production. Daniel discovered his approval process had waved through the very change that would have defaulted a deploy to production. Nobody celebrated. They stared at the diff and realized how much they'd been paying for solitude.

Monday, 09:14 — The 👍 Assembly Line

Stefan at his desk in morning light, laptop showing GitHub pull request history
"Review process exists. Reviews don't."

Stefan had been at his desk for forty minutes before anyone else sat down.

The coffee was cold. He hadn’t noticed.

He was scrolling through three weeks of pull request history on GitHub, and the pattern was so clean it looked intentional.

Forty-seven pull requests merged in twenty-one days.

Average time from open to approved: six minutes.

The fastest: ninety-three seconds. A two-hundred-line diff. Approved before the kettle boiled.

Stefan clicked through them one by one. His notebook filled with numbers, not opinions. He wasn’t building a case. He was documenting a habit.

The comment threads read like group chat. 👍. “LGTM.” “Looks good 👀.” One said “nice” with no additional context. Another had a fire emoji and nothing else. Three had exactly the same comment pasted by the same person: “No issues found.”

He found four PRs with zero comments. Opened, approved, merged. Three clicks. No questions. No conversation. No evidence that a human had read a single line.

He found one with a comment from Mariana: twelve lines explaining why the encoding approach would break on Turkish locale characters. The reply from the PR author was “fixed,” with no diff showing what changed. The PR was merged seventeen minutes later. The Turkish locale bug shipped to production the following Thursday.

Stefan’s stomach tightened. Not from the bug. From the twelve lines Mariana had written that nobody read. Someone on this team had seen the problem. Had typed out the warning in precise, careful prose. And the process had swallowed it without blinking.

Stefan closed the laptop lid.

He opened his notebook and wrote one sentence. Underlined it.

Review process exists. Reviews don’t.

He waited.

Daniel arrived at 09:38. The Moleskine placed at the precise angle it lived at every morning. Coffee positioned to the right. Pen uncapped.

Stefan let him settle.

“How many pull requests did you approve last week?” Stefan asked.

Daniel’s coffee cup paused halfway to his mouth.

“We have a thorough review process,” he said.

“That’s not what I asked.”

Daniel set the cup down. The wire-frame glasses caught the light.

“Twelve,” he said. “Maybe fourteen.”

“In how many hours?”

The silence stretched.

“I review efficiently,” Daniel said.

His pulse picked up. He could feel the conversation narrowing, each question closing another exit. The back of his neck was warm.

Stefan turned his laptop around.

“This one is two hundred and thirty-seven lines of infrastructure config,” he said. “You approved it in four minutes.”

Daniel stared at the screen.

“The description was clear,” he said.

“Did you read the diff?”

Daniel’s mouth opened. Closed. Opened again.

“I read the relevant sections,” he said.

“In four minutes.”

Daniel’s jawline tightened. The notebook on his desk suddenly looked like a prop.

He knew. Somewhere beneath the defensible language and the efficient process, he knew. Four minutes wasn’t a review. Four minutes was a signature on a form nobody reads. His throat felt tight.

Mariana appeared at the glass wall. Converge tank top, cut-offs fraying at the hem, barefoot on the office carpet despite the morning still being cool. She’d heard everything. She wasn’t hiding it.

“He approved mine in ninety-three seconds last Tuesday,” she said. “I timed it.”

Daniel’s face went pink.

“It was a small change,” he said.

“It was two hundred lines,” Mariana said.

“Small in scope,” Daniel corrected.

“Sure.” Mariana leaned against the frame. “And the Turkish locale bug that shipped the same week was also small in scope. Until it hit four thousand players in Istanbul.”

Daniel stared at his Moleskine. The number sat in his chest. Four thousand players. He’d clicked approve, gone back to his architecture diagram, and four thousand people got broken software because he’d trusted a description instead of reading the code.

Hassan materialized behind Mariana. Headphones around his neck. Dark circles. The thin frame of a man running on döner and four hours of sleep. He didn’t say anything for a moment.

Hassan’s hands were steady. They always were. Even at 23:40 on a Friday, alone in the office, rolling back someone else’s mistake, his hands didn’t shake. The rest of him was falling apart, but his hands stayed steady. He’d stopped being angry about it two incidents ago. Now he just kept receipts.

“I can show you something,” he said.

Nobody asked what.

He sat down and opened his laptop. Three production incidents from the past two weeks. He placed them next to the corresponding pull requests, side by side on the screen.

PR #1843: Approved in six minutes. Zero comments. Broke the reward notification pipeline Friday night. Hassan fixed it alone at 23:40.

PR #1851: Approved in four minutes. One 👍 emoji from Daniel. Introduced a memory leak in the player session handler. Took three days to diagnose.

PR #1867: Approved in eleven minutes. Two “LGTM” comments. Changed a caching strategy that tripled database costs over the weekend.

Hassan didn’t editorialize. He just showed the receipts.

Daniel’s eyes moved between the incidents and the approvals like a man trying to find a connection he could deny.

“Those are separate issues,” he said.

“From the same process,” Stefan said.

Daniel’s hand moved toward his Moleskine. The reflex of a man who writes things down when he doesn’t know what to say.

Something behind his ribs shifted. Not visibly. Just the quiet fracture of a man watching the evidence dismantle a system he’d been proud of. He’d mentioned his review process in his last performance review. Thorough. Consistent. Documented. The words tasted different now.

“The reviews happened,” Daniel said.

Stefan’s voice stayed level.

“The approvals happened,” he said. “The reviews didn’t.”

The morning light shifted. Someone in the open-plan area laughed at something on their phone. The AC hummed to life for the first time all spring.

Daniel sat very still.

“What do you want me to do?” he asked.

Stefan closed his notebook.

“I want you to read someone’s code,” he said. “With them. Out loud. Wednesday afternoon. No laptop, no Moleskine, no approval button. Just the diff and whoever wrote it.”

Daniel’s face did something complicated.

“That’s pairing,” he said. “We did that last week.”

“Last week we wrote code together,” Stefan said. “This week we read it together. Different muscle.”

Mariana pushed off the doorframe.

“I’ll pick the PR,” she said.

Daniel opened his mouth to object.

Mariana was already gone. Bare feet. Silent on the carpet.

Wednesday, 14:08 — Reading Someone’s Code

Glass meeting room with Mariana, Daniel, Hassan, and Stefan reviewing Tomasz's pull request on a shared monitor
"Approved in eight minutes. Understood in ninety."

Mariana picked PR #1839.

Not because it was broken.

Because it was important.

Tomasz had submitted it three weeks ago. A refactor of the deployment failover logic. The part of the system that decides what happens when a deploy goes sideways at 02:00 and nobody’s answering Slack.

One hundred and sixty-two lines changed. Seven files touched. Approved in eight minutes by Daniel and Anton.

“Tell me what this does,” Stefan said to the room.

Nobody spoke.

Mariana scrolled through the diff. Her eyes moved fast. Her brow furrowed.

“It changed the retry logic,” she offered.

“How?”

She scrolled further. The frown deepened.

“I’m not sure,” she said.

Daniel looked at his Moleskine as if the answer might be hiding between last week’s notes.

“The description says ‘refactor failover sequence,’” he read.

“I can read the description,” Stefan said. “I want to know what the code does.”

Hassan leaned across the table and pulled the diff onto his screen. His fingers moved through the files with the precise speed of someone who lives in infrastructure. His eyes locked onto something the others had scrolled past.

“He added a circuit breaker,” Hassan said. Quiet. Precise.

Mariana’s head turned.

“Where?”

Hassan pointed.

Three lines buried inside a retry loop. A counter that tracked consecutive failures. If the count hit five, the deploy would abort and roll back instead of continuing to hammer a broken endpoint.

“That’s not in the description,” Mariana said.

“No,” Hassan said.

Stefan didn’t smile.

“Does anyone know why it’s set to five?” he asked.

Nobody answered.

“Does anyone know what happens if someone changes it to three? Or ten? Or removes it entirely?”

Silence. The AC pushed cold air through the glass box.

“This is a circuit breaker that protects your production environment from cascading failures during deployment,” Stefan said. “It exists because Tomasz wrote it. The number five exists because Tomasz chose it. And nobody in this room can tell me why.”

Daniel’s pen had stopped moving.

“We could ask him,” he said.

Stefan nodded once.

“For two more days.”

The weight of Friday landed on the table like a stone dropped from height.

Tomasz was leaving Friday. Two days. After that, the man who wrote the circuit breaker that kept production alive would be writing code at a fifteen-person studio for thirty percent less pay, and the knowledge of why five and not four would walk out the door with him in a gray hoodie and the same New Balance 574s he’d worn on his first day.

Reader's note: What just happened is common enough to have a name: rubber-stamp reviews. Pull requests exist to create a moment of shared understanding before code enters a system. In practice, that moment gets compressed by deadlines, fatigue, and the false comfort of assuming someone else will catch the problem.

The circuit breaker Tomasz built is the kind of quiet, critical safeguard that exists because one person had a bad night and decided nobody else should suffer the same one. But because it was approved without being read, nobody learned from it. Nobody understood it. Nobody could maintain it. When Tomasz leaves, the code stays. The reasoning doesn't. The story of why five and not four. The memory of the cascade that inspired it. The judgment that shaped the threshold. That's what code review is supposed to transfer: not approval, but understanding.

Tomasz appeared in the doorway.

He’d heard his name. Or felt the weight of it through the glass.

Gray hoodie, sleeves pushed up. Wedding ring catching fluorescent light. The stubble that had thickened over the past week into something that wasn’t quite a beard but wasn’t quite resignation either.

“You’re reading my failover PR,” he said. Not a question.

“We’re trying to understand it,” Mariana said.

Tomasz leaned against the doorframe. His eyes moved to the screen. His body didn’t enter the room.

“October 2024,” he said. “Saturday night. We launched the Halloween event. Deploy went sideways. The server kept retrying against a dead endpoint. Each retry spawned two more requests. Exponential. The whole thing collapsed in eleven minutes.”

He paused.

“I was at home. Agnieszka had dressed the kids as Minecraft characters.” His voice went flat. Not emotional. Just empty. “She put them to bed alone because I spent four hours on my laptop in the dark trying to stop the cascade.”

Nobody moved.

“Five retries is the limit because that’s what the monitoring showed before the avalanche started. Four was too sensitive. Normal latency spikes triggered it. Six was too late. By six, the request queue was already growing exponentially and the circuit breaker couldn’t stop what was already in flight.”

He looked at Daniel.

“You left a thumbs-up,” he said.

Daniel’s face went white. The color drained slowly, like water through fabric.

“I didn’t know what it was,” Daniel said. His voice cracked on the last word.

“I know,” Tomasz said.

There was no anger in it. Just exhaustion so deep it had calcified into something resembling peace. The anger had burned through months ago. What was left was the clean, clear resignation of a man who’d stopped expecting to be heard.

Mariana’s hand hovered over the keyboard.

“Walk us through it,” she said.

Not a question either. A request. The kind that acknowledges the person being asked has something worth hearing.

Tomasz hesitated. Then he stepped into the room.

He pulled up a chair. It scraped against the floor. He sat down and pointed at the first line.

“This initializes the failure counter at zero,” he said. “Every successful health check resets it. Every failed check increments it. The threshold is five because five is the point where recovery is still possible. After five, you’re not retrying. You’re compounding.”

Daniel wrote furiously. His pen had woken up.

Mariana typed comments into the code. Inline annotations. The kind that should have existed three weeks ago.

Hassan pulled up the deploy monitoring dashboard and cross-referenced the timestamps with the circuit breaker’s trigger log. The breaker had fired fourteen times since October. Fourteen production deploys that would have cascaded without it. Nobody had known.

“Fourteen,” Hassan said.

Tomasz shrugged.

“It works,” he said. “That’s the problem. Nobody notices the fires that don’t start.”

Stefan wrote in his notebook:

The code that protects you is invisible until it’s gone.

They spent ninety minutes on one hundred and sixty-two lines.

When they finished, four people understood the failover logic. Four people could modify it without accidentally killing production. Four people knew why the threshold was five.

Three weeks ago, that number was one.

In two days, it would have been zero.

Tomasz stood up.

“I’ll record a walkthrough of the rest of the pipeline tomorrow,” he said. “Deployment, rollback, monitoring alerts, the failover chain.”

He looked around the room.

“Should have done this a year ago,” he said.

Nobody argued. Nobody comforted him.

He was right. And being right about the timing didn’t change the fact that the timing was now.

Friday, 17:22 — The Gray Hoodie Walks Out

Rooftop farewell in Kreuzberg as Tomasz stands apart in his gray hoodie at golden hour
"The code stayed. The judgment walked out in a gray hoodie."

The roof terrace smelled like sunscreen and warm Augustiner.

Someone had dragged the folding tables up three flights of stairs. Someone else had bought beer and a bag of pretzels and called it a farewell party. Pixel Spree didn’t do formal. Even goodbye was improvised.

Tomasz stood near the railing. Gray hoodie on despite twenty-two degrees. Hood down. That was his version of relaxed.

Katja found him there.

She was holding two beers. Opeth t-shirt, the “Ghost Reveries” one with the paint splatters. Rolled jeans. White Chucks so scuffed the rubber was gray. Reading glasses pushed up on her forehead where they’d stay all evening.

“I wrote you a speech,” she said.

“Please don’t,” Tomasz said.

“I threw it away. It was terrible.” She held out the beer. “Sounded like a LinkedIn post.”

He took it.

They stood there looking out over Kreuzberg rooftops. The Fernsehturm caught the last of the evening light. A U-Bahn rattled past below. Somewhere a record store was playing jazz through open doors.

“I’m sorry,” Katja said.

Tomasz shook his head.

“Don’t be.”

“I should have seen it earlier.”

“Navigator saw it.” He took a sip. “By then I was already gone inside. You can’t save someone who’s already made the decision. You can just make sure it’s not a surprise.”

Katja’s throat moved.

“Will you be okay?” she asked.

Tomasz looked at her. The green eyes were tired but clear. Clearer than she’d seen them in months. The bags were still there but the thing behind them had shifted. Something had lifted the moment he’d submitted his resignation. Not happiness. Relief.

“I’ll be writing code,” he said. “Actual code. Not slide decks about code. Not meetings about meetings about code. Not performance reviews for people who write code. Just code.”

Katja nodded slowly.

“That’s not an answer,” she said.

“It is,” Tomasz said. “You just don’t recognize it because you forgot what it sounds like.”

The sentence landed in Katja’s chest and stayed there.

Thursday’s recording session had taken three hours. Tomasz narrated the deployment pipeline, the rollback procedures, the monitoring alerts, the failover chain, the three undocumented scripts that ran on a cronjob nobody had logged into the scheduler. He spoke in the flat, precise tone of someone describing a house they’d built by hand and were now watching someone else move into.

At one point he’d paused, pointing at a config block on screen.

“This part,” he said. “This will break first after I leave. Not because it’s bad code. Because it requires context. And the context is…” He tapped his temple. “Here.”

Stefan had kept the camera running.

“That’s why we’re recording it,” Stefan said.

“A video isn’t context,” Tomasz said. “Context is sitting next to someone at 02:00 while the build is on fire and hearing them say ‘don’t touch that line, it’s there for a reason you’ll never find in a search.’ You can’t record intuition.”

Stefan hadn’t argued.

Tomasz was right. Videos capture knowledge. Pairing transfers understanding. The code review session on Wednesday had transferred more understanding in ninety minutes than three weeks of approved pull requests. But it still wasn’t enough. It was never going to be enough. What they had was better than silence, and silence was what they’d been paying for.

Lukas arrived ten minutes late. White button-down, sleeves rolled, Apple Watch reflecting the sunset. He crossed the terrace with the stride of a man who’d rehearsed a casual entrance.

He shook Tomasz’s hand. Held it a beat too long.

“We’re losing a good one,” Lukas said.

“You lost him six months ago,” Mariana said from behind her beer. She was leaning on the railing with both elbows, cut-offs and Docs, the Tupi-Guarani tattoo dark against brown skin in the fading light.

Lukas had the grace not to argue.

Stefan sat in a plastic chair, canvas jacket over the back. He wasn’t drinking. He watched Tomasz accept handshakes and back-pats from developers who’d barely talked to him outside standup for the past year. They liked him. They’d always liked him. They just hadn’t understood what he carried until Navigator showed them.

Hassan stood close enough to be present, far enough to be safe. Plain dark tee. Bare arms. Only the second time this spring anyone had seen him without the hoodie. He’d brought a bag of börek from the Turkish place on Oranienstraße. Nobody commented on it. Everyone ate it.

Sofia came up the stairs, crop top and high-waisted jeans, and handed Tomasz a card the junior developers had signed. His name was misspelled. He didn’t correct it. He read every signature and nodded once at each name like he was counting.

Mariana clinked her beer against his.

“You’re going to be bored in a week,” she said.

“God, I hope so,” Tomasz replied.

She laughed. Head back. Throat exposed. The laugh of someone releasing a thing they’d been holding without knowing it.

Anton raised his beer from across the terrace. Said something in Russian that made Sergei snort. Then, louder, in English: “Tomasz. You were the only manager who never bullshitted us. That’s worth more than a speech.”

Tomasz’s mouth did something that wasn’t quite a smile.

At 18:15, he finished his beer and set it on the railing.

He didn’t make a speech.

Katja cleared her throat. She looked at the team. Twenty people on a roof in the late Berlin sun. Band tees and cut-offs and bare arms and tired eyes and the specific silence of a group that knows it’s about to get smaller.

“Thank you, Tomasz,” she said. “Truly.”

Four words.

The team clapped. Not loud. The sound of palms that meant it.

Tomasz took the elevator down alone.

Gray hoodie. Dark jeans. New Balance 574s in gray. Same clothes he’d worn his first day. Same walk. Same quiet. Nothing had changed because he’d never been performing. He dressed for function, not identity. The consistency was the point.

The elevator doors closed.

Hassan watched them shut.

“Kurwa,” he said quietly. Perfect Polish.

Mariana looked at him.

“Where did you learn that?” she asked.

“From him,” Hassan said. “Every Friday deployment for two years.”

Mariana’s eyes went bright.

She didn’t wipe them.

Stefan sat in his plastic chair and watched the sky go orange over Kreuzberg and thought about a man who built a circuit breaker at 02:00 on a Saturday night while his children slept in Minecraft costumes. A circuit breaker that fired fourteen times and saved fourteen nights and was approved in eight minutes by someone who left a thumbs-up.

He thought about his own departures. Mexico City. Bogotá. Every engagement ends with someone walking away. Usually him. This time he was the one staying.

It didn’t feel better from this side.

He opened his notebook and wrote:

The code stays. The judgment doesn’t. The PR history is a record of what we approved, not what we understood.

Then he closed it. Put it in his bag. Picked up his jacket.

Left at 18:30. On time. Like always.

Navigator — Katja Müller — 23 May 2026, 22:47

Tomasz left today.

18:15. Same hoodie. Same shoes. Same quiet. Didn’t slam any doors. Didn’t send a bitter all-company email. Finished his beer, nodded once at everyone, took the elevator.

I keep thinking about Wednesday. Stefan opened a pull request Tomasz submitted three weeks ago. We’d all approved it. I signed off on it. And when Stefan asked us what the code did, nobody in the room could answer.

Tomasz heard us struggling and came in. He told us about a Halloween night in 2024 when production cascaded while his kids were trick-or-treating. He built a circuit breaker at 02:00. Chose the retry threshold based on monitoring data. Submitted it Monday. Approved in eight minutes. Nobody asked a single question.

That circuit breaker has been protecting us for eighteen months. It fired fourteen times. We didn’t know it existed.

We had a review process. We had approvals. We had green checkmarks and 👍 emojis and “LGTM” comments. What we didn’t have was understanding.

Stefan wrote something in his notebook on Monday that I haven’t been able to get out of my head: “Review process exists. Reviews don’t.”

He’s right. And it took Tomasz leaving for me to understand what that actually costs.

The recording sessions help. The code review on Wednesday helped more. But Tomasz said something I can’t shake: “A video isn’t context. Context is sitting next to someone at 02:00 while the build is on fire.”

We can’t record what Tomasz knew. We can only make sure we never approve another PR without reading it.

Retention isn’t about salary. It’s about whether anyone reads what you build.

Next Episode: "The Trunk-Based Experiment" Stefan draws a line on the whiteboard and writes one word: main. No feature branches. No three-day merge conflicts. No approval gates between a developer's keyboard and production. Daniel calls it reckless. Mariana calls it the first honest proposal anyone's made in six months. Hassan just wants to stop spending Friday nights untangling merge conflicts created by people who left at five.
×
×