Honestly, I don't think it's a culture thing or a CS fundamentals thing.
I think it's the fact that software is 100x, or maybe even 1,000x, more complex that it was just 25 years ago.
Apps are built on so many libraries and frameworks and packages that an average application will have 100x the amount of code. And they're all necessary. A typical phone app is 200 MB, when Word 4.0 was less than 1 MB.
But it's not just the sheer number of lines of code that can have bugs. It's the conceptual complexity of modern software. An app has to have an interface that works with the mouse and with touch, large screens and small screens, regular resolution and retina, light mode and dark mode, it works offline and online with sync functionality, it works in 20 different languages, it works with accessibility, it works with a physical keyboard and an on-screen keyboard, over mobile data and over WiFi, it works with cloud storage and local storage, it goes on and on.
There are so many combinations of states to reason about. When I was building software for Win32 back in 1995, you worried about screen sizes and color depths. That was about it.
Software's just gotten incredibly complex and there's more to reason about and software quality is just going to suffer. Like, I love Dark Mode at night, but at the same time I can't help but wonder what bugs would have gotten fixed if engineering resources hadn't gone into, and continue to go into, Dark Mode for each app.
> And they're all necessary. A typical phone app is 200 MB, when Word 4.0 was less than 1 MB.
On native platforms, no it’s not.
I know this for a fact because I maintain moderately complex, functional phone apps that have binary sizes that sit below the 30MB mark. I use multiple desktop and mobile apps from other developers that also match this description.
The cause of the bloat there can be attributed to the following things, mostly:
- Apps including gobs of poorly optimized analytics/marketing garbage
- Third party libraries unnecessarily including their own gobs of poorly optimized analytics/marketing garbage
- Apps being wrappers of a web tech stack project built by devs who have zero dependency discipline, resulting in a spiral fractal tree of dependencies that takes up way more space than it needs to
Engineers who care about good engineering are pretty much a thing of the past. Today the game is buffing your resume with as many complex tools as possible, and jumping to the next thing before your pile of complexity crumbles under its own weight.
The reason everything is built on millions of layers is not because it is actually required, but because we have invested a whole lot of time in building frameworks so that mediocre programmers can get fast results.
I would call it a culture issue, where we are not able to seperate out places where this is fine, new interesting apps are great, I want as many as possible.
From places where it's destructive, I would be happy if none of the ways I interact with an os had changed since windows 7, but it had gotten faster, more secure, and resilient.
MacOS had more screen sizes to target in 2011 than the iPad does today; in any case, Apple has always tolerated having iPad apps that are blown-up phone apps. Mouse support for iPad apps has existed as an accessibility feature before it was deemed a core feature. Even that isn't any kind of technological leap, mouse support has been part of Android for at least 15 years now.
None of these really explain the sloppiness and unfocused nature of Apple software, which has been best-in-class until recently.
Except those iPad apps also have to have a Web app now, and if you don't have a custom MacOS app your iPad app has to look good when run in MacOS. You then have to support all iPhone models. But also maybe Windows and probably Android. 25 years ago you could slap "IBM PC Compatible" on software and basically design for like 5 color depths and maybe a few resolutions.
Update cycles were on the order of a year, not a week (which also means all new features need to be ported to all the platforms above in that timeframe). Not even mentioning the backend infrastructure and maintenance to run and sync all of these when 25 years ago everything was on your local hard drive and maybe a floppy disk or CD-R.
I lean toward "culture" as the problem. Although, allowing for your 100x or 1000x complexity, how much of that complexity is from feature pile-on?
I imagine putting AirPlay in the software stack, just as an example, caused code perturbations all over the place. Sidecar feels like another disruptive feature. Never mind Catalyst, juggling Swift and C binaries, Swift UI....
This stuff Apple brought upon themselves. I'm sure there will be plenty of opinions though as to whether some of these were worth the cost of disruption, on-going maintenance.
I agree. The frameworks and tools we use are so complicated, but we’re also so tied to the complexity that it’s pretty much an anti pattern to go outside the framework/toolkit.
I haven’t fully thought this idea out, but I’ve been feelin it recently.
I think it's the fact that software is 100x, or maybe even 1,000x, more complex that it was just 25 years ago.
Apps are built on so many libraries and frameworks and packages that an average application will have 100x the amount of code. And they're all necessary. A typical phone app is 200 MB, when Word 4.0 was less than 1 MB.
But it's not just the sheer number of lines of code that can have bugs. It's the conceptual complexity of modern software. An app has to have an interface that works with the mouse and with touch, large screens and small screens, regular resolution and retina, light mode and dark mode, it works offline and online with sync functionality, it works in 20 different languages, it works with accessibility, it works with a physical keyboard and an on-screen keyboard, over mobile data and over WiFi, it works with cloud storage and local storage, it goes on and on.
There are so many combinations of states to reason about. When I was building software for Win32 back in 1995, you worried about screen sizes and color depths. That was about it.
Software's just gotten incredibly complex and there's more to reason about and software quality is just going to suffer. Like, I love Dark Mode at night, but at the same time I can't help but wonder what bugs would have gotten fixed if engineering resources hadn't gone into, and continue to go into, Dark Mode for each app.