898 karma · joined April 2, 2012
My 85 year old dad has completely given up on using technology. He has always struggled with it, but at least in the Windows 95 / Windows 2000 days, things were pretty consistent: an embossed button, that looked like a physical button, was clickable. A scroll bar meant that there was more. Icons usually had significantly different colors from each other and so were easily distinguishable.
Now days, how am I to explain to him what can be clicked, and where you can drag to scroll? Every app has their own "visual design language", and all try to aim to be as flat, colorless, and minimal as possible. You have to know "secret codes" like where to swipe, to do actions. It's tough for folks who don't live and breathe software every day all day.
Some advantages off the top of my head:
- Let's say I am getting an error in production, and it was built from version X of the repo. In 3 seconds I am navigating the source tree of all of my tens of thousands of dependencies at that exact version.
- While developing, doing experiments, or reproing a bug, I can trivially make temporary changes to any dependency. It's a zero effort thing, so I often jump into any dependency without hesitating. For example for adding some extra logging.
- Step debugging into code from any library dependency is trivial.
- Making changes to a library let me use the build and test system to find if it breaks any user. Because the build and test system is completely consistent across the monorepo, I can easily dig into any user's code, fix it, and run their tests with my changed library.
The "Software Engineering At Google" book page discusses more pros and cons: https://abseil.io/resources/swe-book/html/ch16.html#version_...