Now let’s consider software where the average user says "all I want to do is…" enter my data, run my report, check my email, look at pictures, run my business… Users say "all I want to do is ‘foo’ " but they continually (and rightfully so) demand different ways to, uh, foo. They don’t like character interfaces, they want it be pretty like the games they play. So Apple Mac and Windows were created. They liked viewing home pages on the internet so they wanted to do their buying and selling there. They were buying and selling so they wanted full data entry there. Now they have so much on the internet that they want all of their devices connected. Every step is perfectly reasonable and seemingly a simple evolution from where we are to where we want to go, but each step requires (missing those adjectives again) some exponential increase in complexity in order to provide that simple next step for the user.
From the developer view, often intertwining with the user/consumer, we have incompatible operating systems, all with their own turmoil of change, stability, cost, and ease of use. There are incompatible means of communication, often requiring third-party add-ons (for which I’ve found painfully that users don’t want to pay).
There are layers of old protocols, stretched to their limits and breaking at every failure point, but new applications are piling new applications on these protocols and continuing to abuse them. Consider as a small example: SMTP, POP3, HTTP, FTP, and Telnet. These protocols were never intended to support the volume or types of applications that we run over them today. We have spam and viruses costing us multiple billions of dollars worldwide and yet we choose to add more software to try to fix the problems rather than shifting to newer protocols that don’t permit the protocols to exist. This is all in the name of "all I want to do is.." and sending email, exchanging pictures, and texting to our buddies.
We have different standards of user interface design – different between Apple and Windows (now for Windows Vista), thick and thin client. There are no solid standards for the Linux desktop. FLOSS developers eschew anything from Microsoft where standards have been well defined for lack of standards elsewhere, but this leads to every piece of Linux desktop software looking different – and people wonder why the Linux desktop hasn’t taken off. I won’t berate OSS developers alone, anyone can slap together a new GUI and not follow any standards – and that leads to a plethora of books on effective software user interface design. Part of the problem with the "Linux desktop" is that technically there is no such thing – there are many desktop managers for Linux including KDE and Gnome. Each has some form of standards in development and practice, but these environments can be as incompatible as Apple and Windows.
For purposes here, each desktop manager for Linux could be considered just another developer choice, another field of expertise, another place for "all I want is" to break down because some applications are available in one desktop or OS and not available elsewhere. And the issue is similar for browsers where there is room for interpretation of standards, and of course every browser developer interprets them differently, leading to cross-browser development issues and yet another field of specialty and complexity for developers to absorb.
Quality of software is at an all-time low, and this is simply because complexity has increased so dramatically without developers being able to keep up with it all – and this is the point of all of this blather. There are so many options from which to choose in terms of OS, language, protocol, standards, and tools. Every choice leads to others and every decision is a compromise of price, quality, and time. No one person knows everything about all components and no solution is going to be perfect, because every solution requires so many different components and therefore the participation from a number of component experts.
(This line of thought spun off another article, All-time lows of software quality (coming soon). I’ll focus on the concept of simplicity here but that leads more into what happens when we attempt to provide simplicity and fail.)