Bloatware and the 80/20 Myth (2001)
joelonsoftware.com
joelonsoftware.com
Two contrasting examples spring to mind:
- Outlook 2010 in Exchange mode usually occupies about 50MB of memory, at least for me. Think of all the functionality Outlook 2010 has in those 50MB.
- An old notebook I used a few years ago had a disk-parking feature, in case of drops. The service application that parks the disk (if my memory serves) would occupy about 200MB of memory. Think of all the functionality this program had. It could stop the disk. It could start it. Fantastic.
That's bloatware. Especially as I had 2GB of RAM at the time.
P.S. Yes, many over-large programs can get swapped. No, swap is not a magic solution, and happily tanks performance.
In summary, I do agree with many of the points Joel makes, but I always hope that programmers at least think about memory implications, if only for a little bit. Some co-workers and I were discussing a small utility we were developing. A very simple, fast structure was suggested. We then took a moment to consider memory, and realized in our expected worst-case workload, the process would require upwards of 64GB of RAM. This is why you need to spend at least a moment thinking about memory! It is cheap, but not infinite, and oh-so-easy to chew through gobs.
'pretty fine' is always going to be a subjective thing.
He tries to justify hisbloatware work from the past, and only uses false arguments, like dismissing linus argument about having to load a huge program not being an issue, when excel and outlook are still the only applications i use with a damn loading screen... His article uses space and provide no honest statement, hence bloatware.
Ohh I wish my beloved thunderbird only took that much memory. I remember it occupied somewhere between 150-250MB on my netbook. It was impossible to keep it running in the background, especially when you only have 1GB of total RAM. My routine was to open, check for mail, close it.. rinse repeat.
I don't really know, but all the software for that notebook was impressively bad. The ones the user would interact with were literally the slowest programs I've ever used, and we're just talking about opening menus or clicking buttons under idle load. I still haven't figured out how opening a menu on a 2008 laptop can require 5-10 seconds of compute.
So I would conclude, "most likely a complete and utter disregard for limited resources". Which is why I am repelled by memory is practically free, don't even think about it arguments. To my figuring, give it a little attention. Not gobs, but don't pretend memory is a solved problem.
For example:
In fact, there are lots of great reasons for bloatware: For one, if programmers don't have to worry about how large their code is, they can ship it sooner. And that means you get more features, and features make your life better (when you use them) and don't usually hurt (when you don't).
Every single part of that statement is false. Your programmers should be worrying about how large their code is. If they're not, and your competitors are, then your competition will release a program that does everything your program does, but better and faster. So what if they're a couple months (or even a few years) behind? First mover advantage is relatively short-lived, anyway. Microsoft Word wasn't the first word processor and Microsoft Excel wasn't the first spreadsheet. Google wasn't the first search engine. Facebook wasn't the first social network.
As far as more features being helpful when you use them and harmless when you don't, well, that's inaccurate too. I find it very ironic that he uses Excel as his poster child for this, since the addition of features has absolutely hurt Excel's usability. These days, Excel is a tool that's comparable to vim or emacs. It's very powerful, but it has a ferocious learning curve to match. Moreover, he overlooks the fact that more features mean more bugs. I think the success of various web-based, minimalist tools has shown that users are quite willing to accept fewer features, if the features that are present work flawlessly.
And even the points that were true as of publication (e.g. ever shrinking prices for CPU cycles and RAM) are no longer true today. If you're writing code today, CPU cycles are definitely not free. You get roughly 4 billion cycles per core per second on a desktop, and somewhere between 1 and 2 billion if you're on a mobile device. Memory is slightly less constrained, but it's rare for desktops to ship with more than 8 GB of RAM, and it's unheard for mobile devices to have more than 1 or 2.
So no, I don't think bloatware is a "mental health problem". I think it's a real issue, and one that's only going to get worse as we run into the limits of Moore's Law.
You're equating code size with code quality, which in my opinion is an unqualified assumption. I'd further argue that its not as if programming hours exist in a vacuum, and its not as if one makes a binary choice whether or not to spend time reducing code size; development time is a precious, precious thing. When given the choice between:
- reducing the size of Microsoft Excel from 15mb to 14mb -- and thus increasing sales by X, where X is the number of people who had hard disk space for 14mb but not 15mb
- and implementing some sort of stretch goal feature (let's call it PowerPivot v0.0.1), and thus increasing sales by Y, where Y is the number of people who make their spreadsheet software purchase decision based on the presence of that feature
I'm fairly confident X < Y.
Unfortunately, most of the software engineering literature disagrees. We know few things in software engineering. One of them is more code == more bugs.
Your comment about X > Y is true, but you're replacing one false binary choice with another. Again, as Apple has demonstrated over and over again with every single one of their products, fewer features, implemented well will outearn products that have more features implemented poorly.
So, I'd argue that the choice isn't between reducing the size of Microsoft Excel from 15MB to 14MB and adding a stretch goal feature. It's between keeping Excel at 14MB (or whatever its old size was), fixing bugs and polishing the hell out of it or growing Excel to 15MB and adding some more buggy half-assed features to fill out the checklist on the back of the box.
Quite so. I wish there were more research into the consequences of this. And more teaching of it too, for that matter. It ought to be a much bigger deal than it is.
You're lucky you've just read him. I've used his software. In fact, I've written software to integrate one of the most popular revision control systems with his software - I think Fog Creek may be pretending git does not exist.
How did this integration work? Same as all the others, update of data via GET request, tut tut :)
> Every single part of that statement is false. Your programmers should be
Uhh...you're saying they "should be worrying" and he's saying they don't have to be. Those are not mutually exclusive positions.
> As far as more features being helpful when you use them and harmless when you don't, well, that's inaccurate too
Second time you made a statement after this fashion--I see the pattern. Your position is that Spolsky is not allowed to write about things that other people do that are wrong.
> So no, I don't think bloatware is a "mental health problem". I think it's a real issue
Pretty sure Spolsky feels that way too! What an argument.
"There are trivial truths and the great truths. The opposite of a trivial truth is plainly false. The opposite of a great truth is also true." -Niels Bohr
This is such a bullshitty argument. The chance that the pages that you need to load to accomplish a simple task (say, adding up 20 numbers) with a program capable of doing many many things (say, excel) will be comparable to the number of pages that you need to load to perform the task in a far more limited program (say, `dc`) is infinitesimal. In practice, it just isn't going to happen.
Using small programs to accomplish small tasks is what Linus Åkerlund was arguing in that post (https://web.archive.org/web/20000305231633/http://user.tnine...). Now, there are very obvious reasons why "the UNIX way" is not for everybody, and why monolithic featureful programs have their place, but Joel is delusional if he thinks that Linus is incorrect in practice on the memory usage point.
I bet I can start and close 'dc' several thousand times in the time it takes Excel to start once. Not a fair comparison by any measure, but nevertheless one that Joel invites by attacking Linus' article.
I'm not saying you should axe features to make the app smaller. But please, if you distribute software, spend a few hours and try to make the download size as small as possible.
Not for the sort of people that he is arguing against in this post, such as Linus Åkerlund who is arguing for using computers "the UNIX way" with GNU/Linux. Downloading your distro from the internet was very old-hat by 2001.
2001 - 1993 == 8
2013 - 2001 == 12
That is, some features (eg, italics) are used more than others (eg, macros). Such an ordering can be used to established, with considerable confidence, the "20% that 80% of customers use".
Which is how we got the Ribbon. It was intended to place the most commonly used features front and centre.
I refuse to believe that much design work went into that infernal thing. I am sure somebody billed a lot of design time for it, but were they actually putting thought into it? I doubt it.
So how come we ended up with something that placed all the features front and centre?
Organization of the ribbon is important, though, and it may take some time to learn where stuff is, or how it's organized. The first time I used it with Excel, I couldn't find the Pivot Table button. I thought it might be under [Data], but you're [Insert]ing a pivot table instead.
I was using Excel on the Macintosh for laboratory analysis as early as 1987. It could run on two 800K floppies. So, 1.6 mb. It had 80% of the functionality I ever used Excel for.
There is a comment about Django: yes, bloated and managed, because it is based on python, which is the same, a minimal and solid set of orthogonal concepts upon which bloat is easily managed.
I think this extends to anything that calls itself a microframework -- being small isn't a meaningful feature unless it actually impacts your app.
Commercial programs are mostly not bloated and don't scatter around the whole system.
My case is extremely non-typical, but my current primary computer has 30 GB of storage, which coincidentally is what my primary computer had about one decade ago (of course this is much faster, in a laptop, and I have I have a very large amount networked storage available to me...)
The solution is not to ship a half-baked "word count" feature by default, that some journalists will like and others won't, but to make sure that the application is thoroughly pluggable.
From there, people can set up entire plugin repositories in which journalists can find dozens of plugins that all specifically apply to journalist situations.
Why not have our cake and eat it too? We'll have a very small core application, while everybody can click and install whatever extensions that apply to their specific situation.
Furthermore, why would non-journalist users have to deal with journalist-specific plugins installed by default? It would just confuse the 80%.
Bloatware is NOT the solution to the "80/20" problem. This is and example of the real solution:
That's an operating system.