Why I went back to the keyboard
I left a CTO chair to be in the code again, at exactly the moment the industry decided code was the part that no longer needed a person.
5 min read
I was a CTO in 2023. I want to be in the code.
That is the whole motive. I will not dress it up. Producing code got cheap while evaluating it did not. I spent most of my career as the person who could still write the thing, and for most of those years I was slightly embarrassed by that. Player-coach is the polite name for it. The less polite name is that I never fully left the keyboard, even when the title said I should have.
I started writing PHP in 1999, on version 4. I have been on Laravel since the v4 beta. I write PHP 8.4, hands-on on Laravel 12, and 13 is current. Those are not credentials I am collecting. They are the stack I still sit in.
The path to the chair is long and not mysterious, and I have written about most of it separately. Seven years at UPS, shipping district software into hundreds of locations that did not care about elegance. Sole corporate PHP developer at Fidelity National Financial, where I learned what sole actually means. Client APIs at Electric Sheep for companies that already had names. A content year at Seesmic. Three national campaigns, where the deadline was a statute. Three years leading an offshore team in Pune. Then Life Happens, February 2018 to December 2023: individual contributor to CTO in under six years, dual hats across engineering and customer success, an event-sourced rewrite covered by construction for SEC and FINRA, a team spread across three continents. A consulting practice ran under all of it, Vaught Consulting and then Agency Intentional, which is a rebrand, not a new person.
I never fully stopped writing code through any of that. The industry had a story about what a senior person does, and sitting in a file was not the story. The story was meetings, vendors, the org chart, the board packet. I did those things. I also kept a local environment, reviewed the PR by reading the diff instead of the summary, and wrote the awkward part myself when the team was blocked. I treated that as a private habit. I should have treated it as the job.
The embarrassment is the player-coach topic, and I have not resolved it. I still think a leader who can do the work is more useful than one who has forgotten how. I also know that doing the work can become a way to avoid the part of the job that only exists if you stay out of the file. I have been on both sides of that line, and I am not going to invent a scene where I chose one. What is true is the sentence I started with: I was a CTO in 2023, and I want to be in the code.
The timing is inconvenient. I went back toward the keyboard at the moment the industry decided code was the part that no longer needed a person. Agents write the function. Models propose the patch. Scheduled tasks run overnight. If producing code is cheap, why would anyone go back to producing it?
Because evaluating it did not get cheap.
I run agents, MCP, scheduled tasks. An August audit counted two dozen scheduled jobs firing about 41 times a day. That is not a flex. That is an estate I could not enumerate from memory, and I have been the one building it. The cheap part is the generation. The expensive part is knowing whether the generation is true, whether the monitor is actually monitoring, whether a wrapper that was supposed to stay thin grew a policy. I have written about that estate separately. What belongs here is why I am in it at all.
I am in it because I still have to read the output. Someone has to say what done looks like before the run starts. Someone has to treat a misunderstanding as their defect, not the model's. Someone has to make the one-round-trip request, the kind you write when the other side of the line is eight hours away and you will not get a clarifying question before they start. I learned those habits leading engineers I could not interrupt. I thought they were leadership habits. I was half right. They are also the only habits that transfer when the other side of the line is not a person.
That is what I got wrong about the CTO years. I thought the transferable thing would be taste, or architecture, or the ability to hire. Those still matter, and they are not what I use every day. What I use every day is: one round trip. Define done. A misunderstanding is your defect. Those three survive the move from a team in Pune and a support desk in the Philippines to a scheduled task that will run at 3:30 whether I am awake or not.
I can write PHP, and I can also sit in an agent transcript and see that the task did not do what the description said. Those are the same job if you squint, and they are not the same job if you are honest. The first one produces. The second one decides whether the production is allowed to stand. I left a chair that was mostly the second job performed through people. I am doing it again, performed through tools, and I am doing the first job too, because I never actually stopped.
There is no leave-the-chair scene to write. There is a year, 2023, and a title, CTO, and a sentence I have already used twice. The industry changed around that sentence while I was still saying it. Code got cheap. Evaluation did not.
I am slightly less embarrassed now about still writing code. Not because the industry came around, but because it made generation abundant and left judgment scarce, and I already knew how to be the person who writes the spec before the day starts. The chair was never the point. The point was being close enough to the work to say whether it was done.
I went back to the keyboard. I had not really left.
Related: Player-coach, Verification, Many hats