Recently: When asking any colleague about anything they did in relation to the project we’re working on, like “How does it work?” the answer is always “I don’t know.”
I get that there’s cognitive debt. Some just seem to never even pay interest or get a basic understanding of the domain model.
My suspicion is that these people were always lazy programmers, but now they can take the laziness to a point where, after weeks of working on a project, they don’t get the basic vocabulary right.
Exactly because monorepos have least overhead when they’re small, monorepos generally win because you need to be small for a long while until you get big.
By the time you’re “at scale” (who knows), and all these monorepo at scale problems start to overwhelm, you can switch strategy, because the economy of polyrepos is so obvious by then.
So far, I’ve started a new job a handful of times by collapsing a premature polyrepo strategy: people were not experienced enough to merge two git repos without a common root.
I’ve only once went the other way, and it incurred so much overhead, it decreased developer productivity by some small but not insignificant percentage.
To be clear: I’m not a maximalist. All of my open-source work is exceedingly compartmentalised. My DNS library is separate from my external-dns webhook is separate from my fork of external-dns. They could all live in one repo. But FOSS encourages reusability, commercial software encourages clumping and vendoring.
> By the time you’re “at scale” (who knows), and all these monorepo at scale problems start to overwhelm, you can switch strategy, because the economy of polyrepos is so obvious by then.
Conversely to your experience, I have worked at a handful of places who have a monorepo that has been creaking under its own weight for years, but its structure as a monorepo now underpins the business, and so migration to a polyrepo simply never happens, and developers are now checking out a 50GB repo in its entirety periodically.
I'm on the other side of this problem, with a company that went multi repo for bad reasons (political, not technical) and I would give you serious money if you could solve my problems by just forcing me to check out 50gb every now and then...
Instead I deal with a 30+ repo clusterfuck (technically we have 60+ services, but I only have to run half...) that is held together by hopes and prayers, takes literal hours of actual effort to bring everything up to date on master, and has become a fractured hellscape where people are afraid to leave their tightly constrained silos of service combinations.
Long story short... I will take a bad monorepo over bad multirepo any day of the week.
I suspect that your hours of effort to get everything up to date would exist in a monorevel, too. It would exist in a different form, and so it would be harder to measure, but a large part of the work has to be done either way. It's just that certain parts of the work become very visible.
Maybe we just shouldn't fill out every optional text field with as much Claude nonsense as it can possibly fill in there. It really feels like they went from "Co-authored-by" propaganda to "You'll know, don't worry. Just watch these invisible watermarks!"
Here's an AI-generated pull request I made, but you wouldn't know because there's no slop:
Without having tried JJ, as a hype chaser, I can say it's both worth it and not worth it.
I run NixOS, work with Kubernetes, code Rust, use a 40% split, layered keyboard with Dvorak layout and open source firmware, kaj mi parolas Esperanton.
They're just hobbies that, once you've sunk the hours in, they're awesome.
I don't actually type faster. Or maybe I do type a little faster because it made me use all 12 fingers instead of the ad-hoc 7-finger system you taught yourself in primary school, but typing was never a bottleneck, and split keyboards actually hurt my wrists more.
Jujutsu is marginally better than git, but costs time. If you like to spend the time, it will probably make you a little better. If you care deeply about your time, and it's already being allocated for anything but arbitrary intellectual pursuit, it's not worth it. Some people grow businesses, plants, or sedentary habits.
You can undo a push, yes. It undoes the local state of the remote branches after the push operation. ie: branch@origin will point at the commit it did before the push action. It doesn't actually update the branch on the remote. That would require another push operation.
jj itself doesn't have a native ‘push’. `jj git push` and `jj piper upload`¹ operate on external systems that don't necessarily support undoing arbitrary operations. Pure speculation, but if I were ESRC I'd make my backend handle it (subject to enterprise audit policies).
You're still the product of your environment. You'd not be using words like 'uncritical', 'agentic', 'maximalist', 'cringe', 'cultivating' etc were you not.
You're just as branded as an LLM user by your admission that you read hours of its output daily as any potential use of 'load-bearing'.
'Cringe' for instance, rose to popularity once, became cringe itself, fell to obscurity, and was only relatively recently restored to frequent use. 'load-bearing', 'circle back', and 'let's be honest' were all also once heavily used in particular communities and are therefore heavily represented in any algorithm supplied with this data that is trained to sound professional and authoritative.
These words and phrases are simply suffering the same oversaturation point that all the greats (groovy, radicle, spiffy, cool) do at some point. At some point, some population that is not native to the word (say adults for 'fire' or junior devs for 'circle back') start to use them and the original culture begins to see that the term has been diluted and is therefore disfavored for some new or re-used construction.
My point is that the phenomenon of choosing ones words as a reflection of one's environment is not a new thing. It's really nothing to do with the machine generation component. As when the masses refuse eloquence as a snub against the bourgeoisie it's not really about the money itself so much as signalling a particular identity. This is just the latest hotness to signal distance from.
> Cringe' for instance, rose to popularity once, became cringe itself, fell to obscurity, and was only relatively recently restored to frequent use
When were those changes supposed to happen? Cause saying cringe was never cringy in my neck of woods. And the word was in use the whole time.
> load-bearing', 'circle back', and 'let's be honest' were all also once heavily used in particular communities and are therefore heavily represented in any algorithm supplied with this data that is trained to sound professional and authoritative.
They dont sound professional nor authoritative. And never did. Load bearing was rarely use, circle back is just empty business jargon. Lets be honest is neither professional not authoritative. Never was. That is what people say when they are about to say something negative or ironic.
> My point is that the phenomenon of choosing ones words as a reflection of one's environment is not a new thing.
And that choice oftentimes used to flag you with negative implications ... precisedly because it made it clear which circles you are in.
Mathematicians and computer scientists will also say
"for all" / "there exists" instead of "every" / "there's at least one"
"let" as an imperative for establishing facts
"fix" for choosing a value
"given" instead of "if"
"modulo" instead of "except for"
"if, and only if," when the occasion warrants it
"implies" instead of "means"
"trivial" without intending to be mean
"yes" when asked an "or" question
"transitively"
"by symmetry"
"it follows"
"canonical"
It's a lovely, concise language.
You can say a lot with few words when you have rich definitions.
I get that there’s cognitive debt. Some just seem to never even pay interest or get a basic understanding of the domain model.
My suspicion is that these people were always lazy programmers, but now they can take the laziness to a point where, after weeks of working on a project, they don’t get the basic vocabulary right.
I just want to say: #notallvibecoders
reply