I think it's less about "break it down" and more about "let's communicate at the same altitude."
I wrote a (bait-titled) post about it: https://tern.sh/blog/stop-reading-prs/
305 files +15075 −13110
153 files +21934 −8698
125 files +28120 −2398
43 files +11188 −63
118 files +21564 −647
These are the largest (6 of 35) in the past 30 days. added: 190079 removed: 39696 in the last 6 months
from one person.
Because if all your SWEs produce 5x more code, it also means they have to review 5x more code. But LLMs don't really help with code reviews. Then it becomes a Metcalfian paradox unless you just rubberstamp PRs, which is what is expected of you.
if youre being asked to rubberstamp prs thats a management skill issue
But it's also the exact sort of thing that LLMs are literally perfect for in my experience so there's really no excuse anymore. I've never seen Claude fail to turn a 5k PR into a well-decomposed Graphite stack.
I would, and all my training at Google told me to do that. But what I found after I left that comfortable box was that somehow this kind of practice is acceptable in the industry at large and you're expected to just Deal With It(tm). 5k lines isn't even high by what I've seen.
Worse the "code review" tools that people have access to in GitHub make this absolutely and totally unworkable to incrementally improve review. Messy merge commits full of "responding to code review" comments. Threads impossible to follow. Just bad tooling.
So a lot of shops, from what I've seen, are just yeeting it with very shallow reviews.
This is my observation pre agentic AI. LLMs just threw kerosene on that dumpster fire.
However, LLM outputs change with slight re-wording of prompts and with each new model release. I could hand write a test that says if x > 1 make sure y happens, but then what productivity was gained?
If your program is truly nothing more than that "if" statement then there is unlikely to be any productivity gain, just as there is no real productivity gain using a programming language over flipping toggle switches for something so simple. Programming languages would have never been invented if that bit of logic summed up the entirety of computer science. In the real world, the calculus starts to change when you are trying to solve bigger problems. A lot of solutions require way more code to implement than to describe the necessary properties of. That is where you can gain some huge productivity gains by being able to focus on declaring the properties over having to define the full implementation.
But, again, it is not a panacea. No such thing exists. Every abstraction brings its own set of tradeoffs. Your job is to find the tradeoffs you can accept for your unique circumstances. What others are doing is irrelevant to your situation, but it remains that others are doing things and it can be fun to learn about it.
> A lot of solutions require way more code to implement than to describe the necessary properties of.
That's true to an extent, the additional code often define the emergent and undiscovered properties of a system.
That's the cost of abstraction. Everything has tradeoffs.
I don’t think this is possible in practice without leaning on the stability of the code base.