> Personally, I'm trying to code like a surgeon.
> A surgeon isn't a manager, they do the actual work! But their skills and time are highly leveraged with a support team that handles prep, secondary tasks, admin. The surgeon focuses on the important stuff they are uniquely good at.
It's also a neat callback to the Mythical Man Month, the most influential early textbook on large scale software engineering.
Consider that this "surgeon" analogy has always been applicable when docs or books are better written and full of useful examples. Also consider that a lot of the annoying "plumbing code" you probably want AI for is fairly closed-ended as there are only so many combinations of API use possible.
I'm really not understanding the continued hype in 2025.
I've written a bunch about those recently: https://simonwillison.net/tags/coding-agents/ - including a couple of video demos https://www.youtube.com/watch?v=VC6dmPcin2E and https://www.youtube.com/watch?v=GQvMLLrFPVI
And OK, I get that my persistence in trying to help people understand this stuff can be annoying to people who have already decided that there's nothing here.
But in this case we have someone who looks like they are still operating on a 2024 model of how this stuff can be useful.
The "coding agents" category really does change things in very material ways. It only kicked off in February this year (when Claude Code released) and if you haven't yet had the "aha" moment it's easy to miss why it makes such a difference.
I'm not going to apologize for trying to help people understand why this matters. Give how much of a boost I'm getting from this stuff in my own work I honestly think it would be unethical for me not to share what I'm learning.
I gave a talk about this earlier this week, slides and notes here: https://simonwillison.net/2025/Oct/22/living-dangerously-wit... - also discussed on HN here: https://news.ycombinator.com/item?id=45668118
I spent a month trying to get it to build ImGui apps in C++ and Python. I did ImGui because I wanted to try something that’s not totally mainstream. I cancelled before the second month.
It would essentially get stuck over and over and could never get itself out of the mud. In every case I had to either figure out what was wrong and explain it, or fix the code myself, which was mentally taxing after it makes a batch of changes and, because I don’t trust it, I have to sort of re-validate-from-scratch every time I need to dig it out of the mud.
In the end it wasn’t faster, and definitely wasn’t producing better quality. And I’m not particularly fast.
The best analogy I can come up with is it’s like the difference between building a SpaceX rocket, and making a cake that looks like a rocket. You probably think that’s absurd, no one would try to use a cake that looks like a rocket. But it’s a really good cake. It blows smoke and has a system of hydraulics and catapults that make it look like it’s taking off. And the current situation is, people look at the cake rocket and think, “it’s not perfect but it’s basically 70% there and we will figure out the rest before long”. Except you won’t. It’s a cake.
And then we point to the documentation, and tests it built as evidence it’s not cake. But those are cake too.
So then the question is, if you live in a simulation made of cake but it’s indistinguishable from reality, does it matter?
I tend to use it for Python, JavaScript and Go which are extremely well represented in its training data. I don't know enough C++ myself to have tried anything with that language yet! Sounds like I'd be dissapointed.
Can you imagine a surgeon using Claude Scalpel as an agent to just go ahead and fix that one artery?
But this time with agents.
Fred Brooks has never been more relevant.
Now we have human like automation, everything needs revisiting.
Honestly, at every job I spend an unreasonable amount of time getting up to speed on things that are only tangentially related to my job (No, here we need you to check all the boxes in the Jira ticket, ensure it's linked to a zephyr ticket, and ensure it's linked to a git PR - we don't care about you adding attachments or comments!)
The key quote was something like "You want your software to be like surgery - as little of it as possible to fix your problem".
Anyway, it doesn't seem like this blog post is following that vibe.
Unfortunately, my predecessor at work followed a different principle - "copy paste a whole file if it saves you 5 minutes today".
Well, I am still a surgeon, I just do a lot of amputations.
XD yes sure. I'd most definitely put those on the same level. Maybe even favor an UI prototyper if it comes down to the real deal. Who needs an open heart surgery when you can have a magnificent css-hover animation that really seals the deal on some 90%-AI-generated slob that only caters to delusional top-management completely out-of-touch with reality.
Irony off: Let's try it with a bit of humbleness next time, ey?
The last ~25 years or so have seen a drastic shift in how we build software, best trivialized by the shift from waterfall to agile.
With LLM-aided dev (Codex and Claude Code), I find myself going back to patterns that are closer to how we built software in the 70s/80s, than anything in my professional career (last ~15 years).
Some people are calling it “spec-driven development” but I find that title misleading.
Thinking about it as surgery is also misleading, though Fred Brooks’ analogy is still good.
For me, it feels like I’m finally able to spend time architecting the bridge/skyscraper/cathedral, without getting bogged down in terms of what bolts we’re using, where the steel come from, or which door hinges to use.
Those details matter, yes, but they’re the type of detail that I can delegate now; something that was far too expensive (and/or brittle) before.
> Those details matter, yes, but they’re the type of detail that I can delegate now
No...
If you're building a skyscraper, there's no world where you can delegate where the steel or bolts come from. Or you'll at least need to care about what properties that exact steel has and guarantee every bit used on your project matches these constraints.
If you don't want to care about those, build residential houses with 1000x less constraints and can be rebuilt on a dime comparatively.
You might be thinking about interior decoration or floor arrangement ? Those were always a different matter left to the building owner to deal with.
Look at my cathedral of tailwind ui
I’m sure they put locks on the doors
ah yes, I'm sure the CEO of Walsh (https://www.walshgroup.com/ourexperience/building/highrisere...) picks each bolt themselves directly without delegation
Depending on what you’re building, you might start with an architect who brings on a preferred engineering firm, or a GC that brings on an architect, etc.
You’re right to question my bridge/bolt combo, as the bolts on a suspension bridge are certainly a key detail!
However, as a programmer, it feels like I used to spend way too much time doing the work of a subcontractor (electrical, plumbing, hvac, cement, etc.), unless I get lucky with a library that handles it for me (and that I trust).
Software creation, thus always felt like building a new cathedral, where I was both the architect and the stone mason, and everything in-between.
Now I can focus on the high-level, and contract out the minutia like a pre-fab bridge, quality American steel, and decorative hinges from Restoration Hardware, as long as they fit the requirements of the project.
Meanwhile with agile, its always felt like a race to me. If you didn't complete your part then spend a whole week focusing on it while the others carry on with anticipation that the sprint will result in completion of the part required. Enabling for the next part they've built to be integrated.
Vibe coding offers this "make a text box write to a file" code generation and it does. However without any blueprints the code starts to crumble when you proceed to introduce middleware such as authentication.
It was never discussed on how authentication should authenticate because someone is already that far ahead in their work so you end up mashing more code together until it does work. It does and your product holds premise.
The we'll improve, document and fix later never comes because of the influx of feature requests leading it to bloat. Now bogged down in tech debt you then spend resources in wrangling the mess with senior engineers.
The senior engineers are now fixing the mess resulting in their experienced code not integrating with that of the juniors. The seniors now having to tidy that code leave behind the real code they were originally tasked in improving turning the whole codebase in to something that's a diabolical mess, but hey, it works.
Hardware is cheaper than refactoring so instead you then "scale" by throwing more hardware at it until it handles the pressure.
Someone then leaves and knowledge share is lost. Some exec promotes someone from the team who was crazy-sane enough to keep all in check to the senior role while skimping them on pay and are now handling the lost work, theirs and keeping the team in check.
The product starts to fail and new junior engineers are bought in with new naive wisdom, jumping up and down with the newest fancy library tech finally making the process complete causing it to repeat itself indefinitely.
The thing is, you couldn't start dev until you had those blueprints. So that's a lot of time at the start of the project where development had to sit idle even if you had a good idea of what the architecture would at least be.
> If someone lagged behind then the project halted until but the end result was solidity and a completed application. At least during that time other programmers could improve their work and document.
No, you didn't get this. Apps that completed had bugs then too, whether in design, specification or implementation. It's why the waterfall paper basically said you'd have to built it twice either way, so you should try to accelerate building it the first time so you'd know what you messed up when you built it the second time.
Or as Mel Brooks, who wrote the Mythical Man-Month would say, "Build one to throw away; you will, anyhow."
Nor could programmers productively spend downtime simply document things, the documentation was supposed to have already been written by the time they were writing out punch cards. The "programming" had already been done, in principle, what remained was transcribing the processes and algorithms into COBOL or FORTRAN.
Startups are perfectly free to adopt the methods of the 70s if they wish, but they will be outcompeted and ground into dust in the process. Likewise, there is more to agile than Scrum (which is what you're describing with sprints), and it seems weird to describe the dread you'd get of blocking your team if it takes a week to do your part but act is if a week slip on the critical path in a waterfall effort is no big deal.
I mean, you're actually right that many (not all) waterfall-based teams treat it like it's no big deal, but that's the reason that waterfall projects were often disastrously over-time and over-budget. "We've already slipped 3 weeks to the right, what's another day?". Well, those add up... at least with agile you can more easily change the scope to fit the calendar, or adapt to changing market pressures, or more rapidly integrate learnings from user research.
this struck me as weird. both in terms of “tinkering” being the most important thing to be doing, and then also describing “working like a surgeon” to be tinkering.
It can be summarized as "adding more workers to a project does not speed things up, that's a myth".
It's in the title of the book. It's a good book.
The entire IT field is about to test that idea in a massive scale. Can lots of new automated workers speed things up? We'll see.
If your development team consists of autistic junior programmers with eidetic memory, then you damn well better make sure that your documentation is exceedingly thorough, absolutely unambiguous, and as restrictive as you can make it.
If you want another one, think of painting. An "Old Master" painter like Rembrandt or Rubens or Botticelli would have had a large workshop with a team of assistants, who would not only do a lot of the work like stretching canvases or mixing the paints, but would also - under the master's direction - actually do a lot of the painting too. You might have the master sketch out the composition, and then paint the key faces (and, most of all, the eyes) and then the assistants would fill in areas like drapery, landscape, etc.
This changed in the Romantic period towards the end of the 1700s, with the idea of the individual artist, working alone in a moment of creative inspiration and producing a single work of genius from start to finish. Caspar David Friedrich or JMW Turner come to mind here.
Some programmers want to be Turner and control the whole work and feel their creativity is threatened if a machine can now do parts of it as well as they could. I'd rather be Rembrandt and sketch out the outline, paint the eyes, and leave the rest to junior engineers... or an AI Agent. It's a matter of preference.
Like a surgeon
Coding for the very first time
Like a suuuuurgeon
Let your script run
Close to mine“Surgically” is how one enters a foreign codebase, especially legacy ones.
Code surgeons, where are they now on the evolution path? Barbers? Butchers?
I doubt it, quite dangerous.
Spent most of my time in thinking and asking Claude the right questions at the right moment instead of typing code. Review the code agent generated, let it run tests, deploy to PR branch for live debugging. Review console log and network traffic, paste the information to Cursor and ask Claude for the root cause, code paths and data flow. Solve issues one at a time.
It does feel like a surgeon working with a team of assistants. A lot of information, a lot of decisions, a lot of patience and focus.
When we first implemented real-time code analysis during interviews, we struggled with the "do no harm" principle - how to provide feedback without disrupting the candidate's flow. Our initial approach of running full AST analysis on every keystroke caused noticeable UI lag (150-200ms). We solved this by moving to a chunked analysis pattern with a 500ms debounce and incremental parsing. This reduced CPU usage by 70% while keeping perceived latency under 50ms.
The trickiest part was handling partial/invalid syntax states without crashing the analyzer. We ended up implementing a recovery mechanism similar to how modern IDEs handle incomplete code - maintaining a stack of valid states and rolling back on error rather than failing completely. Curious if others have found better approaches to real-time code analysis with incomplete input?
I'd like to officially coin the term "Trad Engineering" and/or "Trad Coding".
I also still need to monitor what Claude do in changes, not completely delegates all code.
A surgeon isn’t a manager, they do the actual work! But
their skills and time are highly leveraged with a support
team that handles prep, secondary tasks, admin. The surgeon
focuses on the important stuff they are uniquely good at.
First, the literal.Surgeons are managers of the operations they perform and heavily rely on the surgical team with which they work. If the author had any clue about surgeries, they would understand that the most important person in a major surgery is the anaesthesiologist, not the surgeon(s).
Second, the metaphorical.
The author goes to great lengths to identify "grunt work" as being "not the most intellectually fulfilling or creative part of the work." What they do not do is understand that there is no such thing as "grunt work" if, for any definition of work, it is valued without judgement.
But if a person identifies with being "the surgeon", with everyone else being "a support team that handles prep, secondary tasks, admin", then the post makes sense from an egocentric perspective.
_wire_•12h ago
Code like a programmer.
This article further emphasizes the obvious point that as programmers are well on the way to destroying their own profession and their work is poised to wreck the entire world, that it's time raise awareness that programmers work with much less discipline and responsibility than other professional, accredited, licensed trades, like say... doctors.
But for now, sure, why not just compare yourself to surgeons, as you already anoint yourselves as "engineers".
GMoromisato•6h ago
90% of engineers are not inventing new things--they are merely applying codified knowledge (which they didn't create) to a new location or instantiation. In contrast, every new program is unique in the world (if it were not then it wouldn't need to be written--you'd just copy/fork/download the program).
And don't get me started on doctors. More than 40,000 Americans die each year from medical errors[1]. You really think the casualty rate from programmers--with all our mistakes--can beat that? I don't think so.
So, yeah, maybe surgeons are not the right model. Maybe surgeons could learn a thing or two from programmers.
-------------
[1] https://journalofethics.ama-assn.org/article/medical-errors/...
macintux•5h ago
I think that if my infrastructure + code had any direct connection to patient outcome, there would be a lot of harm done. Not that I'm particular bad at either, but I know the effective cost of errors is minimal, and certainly does not have a direct impact on people's health. If I had the same responsibilities as a surgeon, I'd have a much slower rate of change in my systems.
I do not in any way believe that the fact that we in IT kill fewer people than surgeons has any meaning for whether we're more skilled than doctors.
GMoromisato•5h ago
My comment is really an emotional reaction to the (very common) denigration of software engineers, so don't take it too seriously.
But I also think that good software engineers can scale the reliability of their software to fit the purpose. There is a ton of software in medical devices, and despite the well-publicized fatal bugs, 99.9% of medical software works without error.
In fact, the automation of things like drug dispensing at pharmacies has decreased mistakes. I think if you deleted all the medical software in the world, deaths would increase.
throwaway101157•5h ago
That raises the question of just how much of a difference you need for something to be an invention. Merely copying another program is not invention, while coming up with and implementing TCP definitely is. But is implementing another instance of a CRUD app invention? Is configuring a server invention? What about if the configuration is written by a script? The dividing line seems harder to pin down than one might at first think.
GMoromisato•5h ago
I agree that there are degrees of invention in both, but my argument (which is, admittedly, emotional in nature) is that there are more unique decisions in software, mostly because if you don't need to decide--if there is already an algorithm for it--then you can just plug in an existing library/app.
You only need a programmer when you can't just run an existing app. Therefore, all programmers create things that don't already exist. That's the definition of invention.
I know I'm exaggerating here, but it's less of an exaggeration than saying that programmers are "poised to wreck the entire world".
yapyap•5h ago
GMoromisato•5h ago
hatthew•5h ago
People dying directly due to software bugs (e.g. Therac-25) is pretty rare, but what about an inefficient network that caused congestion and made a heimlich maneuver youtube video load slightly too slowly to save someone from choking to death? I don't think there's any way to measure it, and it's almost certainly important to train surgeons more than software engineers, but I still do wonder.
GMoromisato•4h ago
I also suspect these indirect causes are not easy to fix. It's not like 1 or 2 bugs cause 10,000 indirect deaths. It's more like 10,000 different bugs/design flaws cause 1 or 2 indirect deaths each.
halfcat•3h ago
Consider how well cars would work if they had to traverse arbitrary terrain. Instead, we have paved the earth to make their usage somewhat consistent.
Construction projects repeat the same tasks over and over for decades. Surgeons perform the same surgeries for decades. But in software if something is repeatable and useful, it becomes an app or a library or a framework.
Some things in software have been heavily constrained to make the terrain navigable. Cloud computing in containers is one example. But in general, there’s a much higher degree of navigating uncharted territory in software than these other fields. Even building a CRUD app is often wildly complex, not the CRUD part, but the mapping of a specific business’s processes to that CRUD app, and getting those specific employees who currently work there to use it, is itself quite a novel undertaking.
jibal•6h ago