Code Review Is a Team Sport, Not a Gatekeeping Exercise

Code Review Is a Team Sport, Not a Gatekeeping Exercise

The first time I watched a senior engineer tear apart a junior’s pull request, I didn’t say anything. The feedback was technically correct. Every comment pointed to a real issue, a naming convention, an edge case, a slightly inefficient pattern. Nothing was wrong with the review itself.

Everything was wrong with how it landed.

The junior didn’t submit another PR for three days. When they did, it was half the size it should have been, over-engineered in the places where the senior had left comments and under-thought everywhere else. They’d learned a lesson, but not the one we wanted them to learn. They’d learned that code review was a test you could fail.

[Read More]

Your Senior Engineers Don't Need a Career Ladder — They Need a Reason to Stay

Your Senior Engineers Don't Need a Career Ladder — They Need a Reason to Stay

I’ve been leading engineering teams for over eleven years. In that time, I’ve never lost an engineer I didn’t want to lose.

I’m not saying that to brag. I’m saying it because it surprises people, and when they ask how, I never have a satisfying answer. There’s no framework. There’s no retention programme. There’s no career ladder with carefully defined levels and competency matrices. There’s just a way of working that, apparently, makes people want to stick around.

[Read More]

The Build vs. Buy Decision Is Never About the Tech

The Build vs. Buy Decision Is Never About the Tech

Last month I stood in front of my engineering team and told them that the cross-platform build we’d spent weeks perfecting, the one that output our Qt application for Windows, macOS Intel, macOS ARM, Linux x86-64, and Linux ARM64 from a single CI pipeline, was being reduced to Linux x86-64 only.

They looked at me like I’d lost my mind. And honestly, from a pure engineering perspective, I had. We’d done the hard work. The CI was beautiful. The whole team could demo from their own machines. Product could show it on their MacBooks. The CEO could run it on his Windows laptop. It was one of those rare engineering achievements where everything just worked.

[Read More]

Fire Your Standup

Fire Your Standup

The title is clickbait. I’ll admit that upfront. I’m not going to tell you to fire your standup. I’m going to tell you something more nuanced and therefore less shareable: your standup should change shape as your team grows up, and if it looks the same at month twelve as it did at month one, something has gone wrong.

I do daily standups with new teams. Every single day. And with my established, well-communicating teams, I’ve backed off to Tuesday and Thursday. Both of these are the right call. The trick is knowing when to shift from one to the other.

[Read More]

Technical Debt Is a Leadership Problem, Not an Engineering One

Technical Debt Is a Leadership Problem, Not an Engineering One

Every codebase has skeletons in the closet. You know exactly where they are. That module nobody wants to touch. The database migration that “worked” but left three orphaned tables. The authentication flow that was built as a temporary solution eighteen months ago and is now load-bearing infrastructure. You know where all the bodies are buried because you helped bury some of them.

The engineers know too. They bring it up in retros. They mention it in 1:1s. They write tickets that sit in the backlog with labels like “tech-debt” and “cleanup” and “please-for-the-love-of-god.” And nothing happens, because there’s always another feature, another deadline, another client request that takes priority.

[Read More]

Nobody Tells You How Lonely Remote Leadership Is

Nobody Tells You How Lonely Remote Leadership Is

My most meaningful conversation today was with a 10kg Jack Russell who has anxiety challenges. He didn’t offer much in the way of strategic feedback, but he’s an excellent listener and he never schedules a 5pm Thursday call.

The only other person I spoke to was the woman at the bakery. She asked if I wanted the usual. I said yes. That was it. That was my human interaction for the day, unless you count Slack, which I don’t, because typing into a void and waiting for a reaction emoji is not the same as talking to someone.

[Read More]

The Meeting That Should Have Been a Document (And the Document That Should Have Been a Meeting)

The Meeting That Should Have Been a Document (And the Document That Should Have Been a Meeting)

It’s 4:47pm on a Thursday. I’m halfway through a problem that’s been bugging me since Monday, and I can feel the shape of the solution forming. My brain is doing that thing where all the pieces are slowly rotating into alignment. Ten more minutes and I’ll have it.

My calendar pings. “Urgent sync — can we jump on a call in 15?”

I know what’s going to happen. We’ll spend 30 minutes talking through something that could have been a one-page document. By the time the call ends, I’ll have lost the thread of what I was working on. I’ll spend Friday morning trying to remember where I was. And nobody, including me, will remember what we actually decided on that call by Monday.

[Read More]

Stop Hiring for Culture Fit When Your Culture Is a Git Repo

Stop Hiring for Culture Fit When Your Culture Is a Git Repo

I once took a candidate to a bar in Larnaca with my CEO and our head of projects. The conversation was brilliant. Funny, warm, full of war stories from previous roles. We all genuinely liked this person. By the end of the evening I was mentally drafting the offer letter.

And then, somewhere between the second round and the bill, I realised I couldn’t picture them doing the job. Not the socialising, not the anecdotes, not the charm. The actual job. The 8am standups, the weekend deploys, the unglamorous Tuesday afternoon where nothing is on fire but everything needs pushing forward. Startup is a grind, and this person was lovely but they weren’t a grinder.

[Read More]

I'm a CTO Who Still Writes Code (And I'm Not Sorry)

I'm a CTO Who Still Writes Code (And I'm Not Sorry)

Last Tuesday I mass-deleted a hundred lines of Python that I’d spent two days writing. Not because the code was bad. It was actually pretty elegant, if I say so myself. I deleted it because I realised I’d spent two days solving a puzzle that I should have handed to my team on Monday morning.

I love solving puzzles. That’s the problem.

The early days are different

When you’re a co-founder getting an idea off a whiteboard and into a working demo, you should be writing code. You should be writing CI pipelines. You should be debugging at 11pm with a cold coffee next to your keyboard. You should be doing devops, handling support tickets, and deploying on Fridays because there’s nobody else to do it.

[Read More]

Your 'Open Door Policy' Doesn't Work in Slack

Your 'Open Door Policy' Doesn't Work in Slack

I watched a CTO tell his fully remote team that he had an “open door policy.” He said it in a Slack channel. I sat there for a moment, staring at my screen, trying to work out where the door was.

He meant well. Of course he did. He was trying to say “I’m approachable, come to me with problems.” But what he actually created was a channel where three junior developers pinged him every time they hit a snag, two senior engineers never said a word until things were properly on fire, and he spent his entire day context-switching between half-conversations that could have been, and I’m sorry but it’s true, a Google search.

[Read More]