I can not understate how much I agree with parent comment.
The opposite of move fast, build a shitty prototype and iterate is a deliberate problem solving approach undertaken by the highest caliber of engineers. The actual challenges to be addressed are effectively addressed right at the design stage.
The result is a thing of immense beauty and elegance.
I will forever be grateful for the opportunity I had to see this magnificent piece of engineering in action.
Old me would have said it’s used wrongly, but this happens all the time with language. Especially things being used in the opposite of their original sense, e.g. inflammable for flammable.
Edit: reminds me of an ancient SNL skit with Ed Asner in which he's a retiring nuclear engineer and as he heads out the door he says to his incompetent co-workers "Just remember, you can't put too much water in a nuclear reactor".
Inflammable was never the opposite of flammable. Those word have always been synonyms. The opposite was always non-flammable.
So many have their code split between a two dozen clouds, BA tools (… does Google put that in the monorepo too? Or is that, which is a lot of the code at most businesses, not “really” code at Google?), vendor platforms, low-code tools you all hate and are trying to deprecate but god damned if you aren’t still spending dev hours on new features in it, et c…
I bet achieving anywhere near the full benefits would first require retooling one’s entire business, including processes, and bringing a whole shitload of farmed-out SaaS stuff in-house at enormous expense, most places.
I wrote a bit about this here: https://blog.williammanley.net/2020/05/25/unlock-software-fr...
I understand that nix have made some progress in this direction, but I don’t know any more than that.
To quote broccoli man, "i've forgotten how to count that low" [1].
This:
> It's not held to THAT high a standard. We absolutely commit janky MVPs and iterate.
seems to very directly address this:
> The opposite of move fast, build a shitty prototype and iterate is a deliberate problem solving approach undertaken by the highest caliber of engineers. The actual challenges to be addressed are effectively addressed right at the design stage.
If your claim is that "Well, if you look at the codebase AS A WHOLE, there's absolutely no iteration and shitty prototypes, it's all designed right from the start."... well, I can't see any way that codebase came into existence without being built up by individual projects and changesets.
So, yanno, when folks on the ground report that individual projects and changesets/PRs/whatever ARE using the "Commit something barely serviceable, test it out, and iterate." process, statements like "We always get the design right before we write even a single line of code!" definitely come off as a circlejerk.
Google's a very large software house, it has a very exclusive hiring process, and it (reportedly) has internal tooling that's very well-adapted for the problems a company of its size faces. But Google is still hiring from the same pool of programmers as everyone else, and the odds that zero of those that it hires will work best with the "Get something out there to field-test, and use the test results to make it more suited for field use." method of development are absolutely zero. Given Google's size, the odds that zero of those will never be able to negotiate to work in the way they work best are ALSO zero.
(And -frankly- I expect that this method of development gets used a lot in the company. You can burn an assload of time on simulators (and what is the "What if?" game, but a in-brain simulator?), but in the realm of software, it's not-infrequently the case that the simulator with the best ROI is real-world deployment.)
People don't yolo submit CLs to core library components for example.
OTOH submitting somewhat hacky code to a new project while you iterate on it doesn't harm the rest of the code base that much since very little will depend on it.
How does this comment address any parts of my statement?
I'll even quote what might be the most important part for you:
> If your claim is that "Well, if you look at the codebase AS A WHOLE, there's absolutely no iteration and shitty prototypes, it's all designed right from the start."... well, I can't see any way that codebase came into existence without being built up by individual projects and changesets.
What does that mean?
The wider implication of this was that the number of tickets we got dropped dramatically, because users knew they'd never be resolved anyway.
Balance is key.
Some is great, some not so much.
Some of Verizon's code was much more elegant (though much smaller scope) from an API perspective, and really leaned into advanced type systems in a way Google has not.
The linked pdf has lots of details.
You could spend all day finding fun code to read.
I always like the main signal (eg sigsev) handler.
google3 is a quagmire and it's getting worse by the day
It is part of our human condition to long for hard lines and clear concepts. When we have them we have to either face the fact that some realities elude them, or else bind ourselves to the inadequacy of the concepts.
https://fs.blog/impressions-are-schematically-determined / https://archive.is/F8uPEEdit: I guess it also depends at what level of abstraction you work. High: can be easy breezy. Low: oh boy.