Writing Code Was Never The Bottleneck
Posted by thewritingwallah@reddit | programming | View on Reddit | 96 comments
The actual bottlenecks were, and still are, code reviews, knowledge transfer through mentoring and pairing, testing, debugging, and the human overhead of coordination and communication. All of this wrapped inside the labyrinth of tickets, planning meetings, and agile rituals.
cheezballs@reddit
Am I having a stroke? Isn't this exact thing posted here frequently?
ChrisRR@reddit
This sub is just a circlejerk about repeating the same things. AI Bad, Agile Bad, tech debt bad. GOTO 10
grauenwolf@reddit
It needs to keep getting posted until the idiots in management get the hint.
zedd31416@reddit
¿Porque no los dos?
ScottContini@reddit
link to post 2 months ago
kevin7254@reddit
Thank you. Thought I was going insane. Think I’ve seen this at least 5 times in different subreddits the last couple of months…
andrybak@reddit
If you're look at old reddit, you'll see the tab "other discussions" at the top: https://old.reddit.com/r/programming/duplicates/1n7ggac/writing_code_was_never_the_bottleneck/
Ythio@reddit
Old reddit was so much better
andrybak@reddit
It still is. Install RES (r/Enhancement), uninstall phone apps, and use reddit only on desktop. That's the way for the class reddit browsing experience.
Full-Spectral@reddit
There are a group of people who mainly just post and repost articles here.
dethnight@reddit
Posting to Reddit was never the bottleneck. The actual bottleneck is checking to see if it's a repost.
knightress_oxhide@reddit
Am I having a stroke? Isn't this exact thing posted here frequently?
lithiumdeuteride@reddit
The actual bottleneck is in the blood supply to the brain.
wd40bomber7@reddit
Ah so... we are having a stroke. RIP
made-of-questions@reddit
Every junior goes through this "oh, shit!" lightbulb moment.
AlSweigart@reddit
Yeah, link was purple to me.
stmfunk@reddit
I think AI can do a pretty good job replacing that other stuff too. AI code reviews speed up code reviews hugely both by reducing the volume of change and easing understanding. Coordination and communication is made easier by having an AI managed ticketing, having AI explain how code works and what was done in the latest commits, interpreting requirements documentation, AI monitors multiple peoples workflows and can inform you in real time if you are going to clash with someones code or you are repeating changes. Imagine ai version control system that recognizes that you are both doing the same thing and pulls their code straight in for you. Knowledge transfer and pair programming, it's essentially already what copilot is! Imagine them hooking it up to the personal repos of your team, the company wide codebase and peoples personal knowledge bases and comments as well as the coding practices and industry standards. You could basically have another programmer who knows everything about the entire company telling you how to keep in line with best practices. AI can communicate with the manager cutting down on questions to be asked of developers in meetings and help them plan efficient meetings. Basically imagine putting an AI interface in between every aspect of your workflow and think about that. I mean obviously lots of that is way down the line, and theres probably a bunch of problems in between but you get the picture
Street-Remote-1004@reddit
Truee, AI reviews help a lot. I used to use CodeRabbi now switched to LiveReview. Saves plenty of time, although manual review is needed, but with fewer efforts. Iterating is also not a problem when you have plenty of catches. Iterating > Prod outage
matthieum@reddit
Please specify the publication date (June 2025) when posting an old article.
The article was of course already posted 2 months ago -- when published -- see: https://www.reddit.com/r/programming/comments/1lomhlq/writing_code_was_never_the_bottleneck/
Plank_With_A_Nail_In@reddit
Why does it matter if its a repost?
matthieum@reddit
It's confusing for those of us who saw it the first time, and are now wondering if we hallucinated (that deja-vu moment), if it's the same title but a different author/article, if it's a parody, if...
As such, it's courteous when posting an older article, to announce the fact it's older front-and-center, so those who caught it the first time can skip the moment of confusion.
campy_203@reddit
Yeah, it’s my first time seeing it so it’s news to me! If it’s good, deserves a repost snyways
Doctuh@reddit
OP: 1975 - The Mythical Man-Month
drislands@reddit
I was going to say. Thought I was losing my mind, because I remembered upvoting this when it was first posted.
atilaneves@reddit
Err... "testing" is writing code, and in my experience, harder to do than production code.
rag1987@reddit
Code review has become the new bottleneck, since it’s the layer that prevents sloppy ai generated code from entering the codebase. One thing I do that helps clean things up before I send a PR is writing a summary.
You might consider encouraging your peers to do the same.
What Changed?
Functional Changes:
It also makes the reviewer’s life easier, because even before they look at the code, they already know what to expect.
and I tried CodeRabbit https://www.coderabbit.ai/ recently and it’s actually not bad. It drops comments/summary like a real reviewer/author, kinda blends into PRs nicely. it may sometimes nitpicks or miss context, but for catching small bugs or style stuff it’s solid. Way better than just relying on ChatGPT in a vacuum.
lovelettersforher@reddit
This gets posted here every now & then.
ErGo404@reddit
Writing code was never the only bottleneck, but it definitely was one of them.
gluedtothefloor@reddit
Maybe for you at your job. The coding part is almost never the hardest or most time consuming part of the job for me. Testing, validating, and requirement gathering was always the most difficult for my job, which is something that AI isnt very good at yet.
okawei@reddit
Deploying apps was never the most time consuming part of building software. But we have a shit ton of automation around it now. Just cause it's not the #1 bottleneck doesn't mean we shouldn't try to make the process better
grauenwolf@reddit
Have we? Looking around, it seems like people spend far more time fighting with containers than we ever did 20 years ago when deployment was x-copy and pray.
gluedtothefloor@reddit
Yeah, but like, would you think it would be a good idea to pour several trillion dollars into an unproven process that makes that small portion of your job slightly more efficient?
KevinCarbonara@reddit
So, coding.
gluedtothefloor@reddit
That's not coding?
KevinCarbonara@reddit
It is everywhere I've worked.
kappapolls@reddit
if you can gather requirements by writing code, please tell me your secrets
thewritingwallah@reddit (OP)
Well, writing code was not always the easiest part of the job (sure, it has its hard moments where you have to solve complex problems, but that's the fun part).
but the hardest parts for me have always, always been:
All in all, the human aspect was always the hardest part, and as this article clearly states, is now even harder. You can't replace decades of crisis situation that might not have been documented, late nights spinning prod back up or using our human friendships to get devops guys to help us out with admin tasks! (Costs a few beers, instead of millions of tokens!)
Warm_Cabinet@reddit
Can you elaborate some on your experience with “rockstar” developers that only want to work on greenfield? I’ve seen the pattern of guys that are able to code a bit better than the norm politicking their way into a greenfield thing and largely leaving the actually difficult legacy work to others. I’m curious if that’s what you’re referring to.
flukus@reddit
Locust developers, they fly from green field to green field and never see the devastation they leave behind. A lot of "best practices" out there seem fine in green field projects become hell when doing maintenance.
They also often forget or badly do things like logging and auditing. Performance can be fine at first on small datasets and completely fail after years or with more clients.
Never trust any developer that only does green field projects.
Warm_Cabinet@reddit
“Locusts Developers” is a great term for that. Thanks, I’ll remember that one.
LegitBullfrog@reddit
Honestly dealing with legacy code is really the only area I've had great success with ai. It does a pretty good job of untwisting and explaining logic. It also hallucinates a lot less (but not none) when analyzing existing code vs writing it.
ZirePhiinix@reddit
The advantage legacy code is that it actually works, so you literally have a working version to compare with.
jl2352@reddit
Oh sweet summer child. If only that were true. Legacy systems in active use, that don’t entirely work, are fucking horrifying.
Plank_With_A_Nail_In@reddit
If the system is in active use its not really legacy its just old.
ZirePhiinix@reddit
Eh, this isn't said out of naivete. I've been doing this for many years, and using LLM to do things for a legacy system is actually way more reliable than new stuff.
If a new feature showed up in a Python version, I honestly will not trust LLMs to use it properly.
Putrid_Giggles@reddit
It works on some level, which is why its still in use. And if it were trivial to duplicate, that would have been done already. But its very much true that many legacy systems work horribly and are in bad need of replacement. And its also true that when the replacement finally arrives, it often more closely resembles the legacy system than people were hoping for.
loup-vaillant@reddit
Sometimes it doesn’t. Right now I’m rewriting broken legacy code. It’s bloated, impossible to follow, and too buggy to be useable. It had been useful as a form of crappy documentation though.
BetafromZeta@reddit
Also your prompt is going to be very good, because you're talking about legacy code which is finished and functional and you're likely only changing small parts of it at one time. That, and you're probably quite familiar with it as well and know when the LLM is making a big mistake.
Whereas the open-ended "make me X" prompts are objectively much more ambiguous and will lead to differing levels of satisfaction.
ZirePhiinix@reddit
The fact that you have working code is the context that the LLM works with, so it makes a really big difference instead of "an idea".
I've actually tried doing things with an LLM that was literally impossible or the tech stack simply didn't even have those functions made (proposal API only, nothing actually made). It hallucinated the hell out of those projects, and I had to dig around to find out that the hallucinated code came from an RFC proposal.
Putrid_Giggles@reddit
In general, LLMs do far better at consuming than at generating. Generative AI is still very much in beta. But machine learning has been going strong for quite some time now.
uCodeSherpa@reddit
I mean. Look.
I am not sure about smaller orgs, but I guarantee that in Microsoft, writing code is barely approaching 10% of their project cost.
For the orgs actively looking to purge employees for AI, code was never a bottleneck or a contextually high part of the cost.
KevinCarbonara@reddit
Any larger org is going to be spending far more than 10% on writing code. Microsoft in particular does not release their payroll stats, and they play accounting games with how developer salaries are credited. Some are listed under standard payroll. Some are listed under R&D. Others are listed under product releases.
It's going to be hard for someone like you to tease out those details. Even accountants can't do it without having access to internal numbers. Making assumptions about cost is just going to backfire.
uCodeSherpa@reddit
It is 100% not higher than 10%.
I’ve worked at a few shops that actively track down to the hour exactly where project time is going and like 11% is for “coding, debugging and programmer testing of their code”. This is just time, not an actual reflection of cost. Cost for programming worked out to more like 8%.
Probably startups where coding is their primary shit, it’s different. In the bureaucratic life of Microsoft and similar things, coding is not a major part of their costs.
KevinCarbonara@reddit
Again, it's very clear you don't have what it takes to have this discussion.
uCodeSherpa@reddit
It’s definitely clear that one of us has no idea what they’re talking about.
KevinCarbonara@reddit
I'm going to go with the guy who unironically writes like this.
tmetler@reddit
Isn't the term bottleneck supposed to refer to the most limiting factor? I know the article points out multiple bottlenecks too, but I think the point is to identify that there are multiple candidates of greater bottlenecks than writing code.
mich160@reddit
And still LLMs didn’t really solve it
MiniGiantSpaceHams@reddit
Yeah for real. Either everyone here is a senior who's job is in part to deal with all the non-coding stuff regularly, or they all have terrible jobs. For a regular junior-to-mid dev, if coding doesn't even register as a bottleneck for you, then I would argue you're probably being pushed into PMing or something and not a dev job.
I as a senior deal with all that non-coding stuff regularly, but in the time I do get to code AI let's me push out far more. It's not solving the bottleneck, because there isn't just one such bottleneck, but it lets me be more productive with the time I have to spend on the things it is useful for.
InterestRelative@reddit
Comparing greenfield vs brownfield projects can give us some intuition about how easy and fun it actually is to write the code.
And if you write without maintenance cost concern (e.g. prototyping) it could be x5 easier that greenfield project.
Sweaty-Link-1863@reddit
Code writes fast, meetings still take forever through
rustytoerail@reddit
i mean... isn't the bottleneck analyzing the problem, coming up with a solution (in the abstract), and the coding is just... implementing it? kind of like... with a natural language instead of a programming one? thinking about something in detail and then argumenting it?
atomic1fire@reddit
I feel like it's never one thing, it's like three problems stacked in a trenchcoat, and those three problems are usually quality, cost and time.
The bottleneck is probably figuring out which two of those things apply at that moment. For instance spaghetti code being cost and time at the loss of quality.
Humprdink@reddit
The true bottleneck is the mental energy you have spend trying to cope with the fact that no matter where you go, you'll be stuck in an endless, soul-crushing Scrum factory until you have nothing left for them to squeeze out of you.
Plank_With_A_Nail_In@reddit
Reddit: If LMM's were as good as the companies selling them tell us then they would have kept them a secret and used them to make better versions of existing products....but they haven't.
thbb@reddit
I strongly believe that programming languages were invented to express our thoughts unambiguously. I need to reason in terms of data structures, functions/methods, links and processes just to figure what is it I really want to do.
Sure, for autocompletion or to write some trivial pieces of code, LLMs are fine. But to produce an original and sound design, I'm going to write and iterate in programming language syntax, down to the precise naming of the classes, methods and variables I need.
Plank_With_A_Nail_In@reddit
Programming languages were invented by humans very recently, the reasoning behind them is fully documented you don't need to guess why they were created go look it up on Wikipedia.
Being invented by humans means they are by default not perfect.
loup-vaillant@reddit
Sounds like a whole bunch of wasted effort. I’m not even kidding, I’ve seen the effects over the years, and in my experience much of it is just avoidable overhead.
The solution, I believe, is to follow Eskil Steenberg’s advice, and write independent modules small enough to be written and finished (finished, not merely maintained) by one person. Sure it requires a good deal of planning up front. But once you’ve agreed on the APIs between programmers, the need for coordination and communication mostly vanishes.
We could replace code reviews, tickets, planning meetings and agile rituals with estimates, deadlines (not the same thing), and individual accountability: you promised to implement some API or functionality, you better follow those specs to the letter, with no user visible bugs and acceptable performance.
And don’t tell me that is impossible. I don’t want to hear your excuses about software rot, or the inevitability of bugs. Writing software that works is our fucking job.
Glugstar@reddit
So, you need to do all the coordination and communication up front, perfectly, so that you don't need to do coordination and communication later on? So what do you gain by this, you're just moving all the work to the start of the project, and you remove any margin of error. Ok, so what if the people were wrong at the start? Like mistakes will happen. Can't the team change in size during development, it's stuck in stone for years? What if requirements change? Can't people leave? Don't new employees need to do all that communicating when they replace the old ones?
I'm not sure if you are writing a comedy bit. Is this a troll post? Ok, but what if an employee doesn't? Sure, you can punish them by firing them. But then what? How will the plan self correct for this? Also, you're asking the impossible. A developer working in a team, based on a design that they didn't approve of, but that they were ordered to perform, can't guarantee perfect code. For one, you can't guarantee perfect performance from any employee of any industry. They may think they are able to deliver on time with no bugs, but shit happens.
Sure, in an ideal world, all of this is doable, if you hire like literally the best 100 programmers in the world, and pay them 1 million a year to motivate them. Otherwise, this all sounds like the fever dream of a psychotic megalomaniacal boss who expects perfection from underpaid and overworked employees.
loup-vaillant@reddit
Long answer here (again from Eskil Steenberg). Short answer… yes, there’s gonna be planning up front. We’re gonna need to solve the most important problem in software engineering ever, namely program decomposition (Ousterhout). We need to gather requirements, and think in advance about what is not yet known, what is likely to change, what requires prior investigation…
Note that many software components are fairly generic, and quite resistant to change. The more foundational you get, the more static and predictable things are. You can start working on those parts first, while you’re still designing the rest of the system. This is not Big Design Up Front. But let’s stop kidding ourselves, we do need some design up front. Or investigation up front: a prototype, mock, proof of concept… whatever you need to answer your important questions.
If each component can be written by a single person, changing the size of the team is easy. And sure, if someone leaves you may have to rewrite their latest finished work entirely. Thankfully that’s not that much work to begin with, since they did it alone.
Don’t let them. Not always possible, but I see two main reasons for changes in requirements, both avoidable:
I’m dead serious.
Unfortunately I see no way around having competent people on top. Then juniors will need some guidance, we’ll need to check on the progress, maybe ask the less trusted members to lay out a plan and demonstrate short term progress (in the order of days or weeks)… You still need to give everyone as much autonomy as you can though.
The start of the project could be fairly naturally self correcting, simply by having several people discuss the architecture. Then when everyone works on their own little module, they can ask for help or even just advice. Seniors can review junior code, you could have people write test suites for the modules of their peers instead of just their own…
That’s your problem right there. With what I’m advocating there would be very little design beyond the interface boundaries. Which, if they are any good, would be much smaller than the module implementing them.
Even if the API is stupid, if you give me carte blanche about how to implement it I can generally do a very good job. I only collapse when you give me an existing program, and I need to fix horrible bugs while minimising my changes. (But boy do I collapse, I’m terrible at working with other people’s code.)
Estimations are hard. I still suck at that. Still, you can minimise the amount of shit by sitting on a solid foundation, dependencies that work, are properly documented, and don’t change every month… But yeah, shit happens. Planning needs to account for that obviously. And as a dev, I’ve learned not to treat estimation as a promise to deliver. Now I often go like "should take 3 days, 2 if everything goes well, 6 if all goes to shit — I’m especially afraid of this and that part, you’ll have a more accurate estimate after one day of work."
To be honest, I have a feeling that our median output is unacceptably low quality. Management is often to blame, but more and more I question our own competence. I have a sense that better, much better, is possible, but that would require a serious rethink of our methods. We should set a minimum bar for ourselves. (Note that I don’t pretend to meet that particular minimum bar myself, but I don’t see why I shouldn’t either.)
Then comes the really hard part: education.
Top-Faithlessness758@reddit
The only world where a piece of software can be refered to as finished is a static world.
loup-vaillant@reddit
A widespread belief, I know. But one we need to grow out of. To give but one example: finished games are a thing. They even used to be the norm.
You’d tell me this is because the consoles were frozen back then. Fair enough. But may I submit that the currently ever changing environment is a problem? And a largely avoidable one at that. We don’t have to use the latest and shiniest, we can stick to boring dependencies that preserve backward compatibility for decades. Like the Linux kernel. Or the C standard.
The world doesn’t need to be static. We just need solid foundations.
hachface@reddit
yeah that's the bottleneck!
falconfetus8@reddit
My turn to repost this tomorrow
WTFwhatthehell@reddit
Last night I wanted to try throwing a stupid little project together.
Me and some friends play a ttrpg with a lot of books. A common annoyance is when important rules are found in odd places.
So, I thought, I wonder if I could somehow simplify this.
So I throw together some code to chunk the rules books, put them in a DB, make it easy to search it fast with keywords and make a pipeline to pass through identified chunks through an API for an LLM which first extracts exact quotes (and of course checking they are in fact exact quotes.) into json along with book and page number then finally lines up all the extracts and compiles them into a mini guide book with every sentence pointing back to the relevant source.
With the help of a chatbot it took all of about 2 hours to get working.
That would not be something I could have put together in 2 hours normally.
It's not a high-reliability high-stakes corporate service. It's a project I would have previously discarded because I didn't have the time. It's purely for fun.
But now I can casually throw things together. For fun.
mxsifr@reddit
That's a really cool idea for a project. Any source or docs/blog posts publicly available?
HuisHoudBeurs1@reddit
In that use case AI generated code can work very well. It's however not the situation described in the article. So the point you're making is not necessarily wrong, but simply not that relevant. I 'm happy for your working db though! I only know the DnD books and they are very weirdly organised. Other ttrpgs might be very alike and very annoying.
throwaway490215@reddit
This is such a blind take.
I'm currently writing specs for a rather gnarly and tricky piece of distributed software. I had an LLM just write the python implementation, and I could test drive it, and screen it, and get a bunch of other 'aha' moments I'd otherwise have to simulate in my head - (or decide if its worth coding over days or weeks in my 'spare' time).
The time-to-functionally-enough code, to experimenting with a solution, is going to fundamentally rewrite the book on software development management.
None of the individual parts of all the things that "are the bottleneck" will be unaffected, and nobody knows what the sum of those changes looks like.
We're very much still in the pissing-in-the-wind phase of finding out how the currents are going to flow.
If you're already barring LLMs from some part of the process: skill issue & you're doing it wrong.
Which is 100% expected behavior whenever a way of work gets thrown on its head. IT has been the cause of multiple case studies & books on how industry-wide reshaping is received by average workers. It's always the same spiel. The amount of purposefully blind coping (which I'm not saying OP is doing) about some artistic quality of the art best protected from the scary machine's input, without that bit of self reflection, is deeply ironic.
wfiveash@reddit
To the list of big bottlenecks mentioned, I'd add the task of properly testing new code and creating thorough regression tests that are updated as code changes is definitely non-trivial.
wineblood@reddit
I don't think it's a bottleneck compared to everything else.
stronghup@reddit
Writing code is not the bottleneck. The bottleneck is to know what code to write, for what purpose.
Writing anything is not the bottleneck. The bottleneck is to know what text is worth writing.
sssanguine@reddit
I don’t buy this. ~Half of the bottlenecks listed here are just symptoms of writing bad code. Code reviews drag because the code quality sucks, same for testing, deployment, tickets, etc..
In other words if all of those bottlenecks are downstream issues of writing bad code, the real bottleneck is writing bad code
aviboy2006@reddit
I believe no one intentionally wanted to write bad code not even AI.
billie_parker@reddit
Yeah so if you're a bad coder then maybe the bottlenecks are code reviews, etc.
But if you are good, then code actually is the bottleneck
zombiecalypse@reddit
In my experience, in 80% of cases, bad code just means code you didn't write yourself yesterday. Even good code needs time to get into your head and in that moment you will think that the code sucks
stmfunk@reddit
In other news: water still wet
KevinCarbonara@reddit
Colloquially known as "writing code"
retroroar86@reddit
I work in a large codebase that is 10+ years old. Code reviews, transfer of knowledge, testing, debugging etc. is all wrapped up in a inefficiently structured codebase.
FYI: this is a whitelabel app, making some examples very specific to that
Example 1: Not using global configs (xcconfig) in a workspace, making bumping versions take longer than necessary.
Example 2: Subclass hell with navigation due to using frameworks in a weird way, making everything convoluted and we can’t easily know what instance is doing what.
Developing new features and complexity is a nightmare. Doable, but takes 10x more because of that alone.
Example 3: Creating setups that require adding things 5-10 places instead of just one by using protocols.
Coding itself isn’t the problem, but knowing how to do it without shooting yourself in the face along the way is.
People without certain knowledge won’t be able to make good choices with AI in the long run, but good coding ability along with design patterns cannot be underestimated.
Sdmf195@reddit
Good luck. Sounds like a bi*tch to navigate through
Admirable_Belt_6684@reddit
right now, my productivity is largely capped by my ability to review code.
AI code review tool coderabbit is a real gem for tech teams and solo developers.
As an open source dev, I've been using it on my open-source projects for several months, and it's significantly reduced the time I spend reviewing community pull requests.
captain_obvious_here@reddit
~~You~~ The person who wrote what you copy-pasted here, makes it sound like writing code is easy. But be aware that not every programming project is simple website stuff.
Writing code can be hard, and a severe bottleneck. The first example that comes to mind is code that HAS to maintain people alive and uninjured. Friend of mine works in a company that builds eye surgery machines. How hard can that be, right?
TheoreticalDumbass@reddit
Depends on your approach, if you want to implement multiple designs to see which performs best or is smoothest to use or whatever, it can become
jitmylife@reddit
Prototyping which is usually limited to one developer is now far easier.
larsga@reddit
Very often the biggest bottleneck is figuring out what it is the code is supposed to be doing. If you know what the code should do typing up the actual code is rarely that hard.
The problem can be on several levels. Can the customer/user explain exactly what they want? Usually not. If I write code for myself I can usually bang it out pretty quickly, provided I've actually thought about it enough that I know what I want the code to do.
syklemil@reddit
Link to proggit discussion when this was posted 2 months ago
aviboy2006@reddit
The article was both interesting and insightful! In the age of AI or coding assistants, where we need to change developer focus, is what is mentioned in this article. I love it.