58 comments

[ 99.8 ms ] story [ 1722 ms ] thread
Joel writes this like bloat doesn't exist, and discusses how programs are large because of all the features they have.

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.

How could that app possibly use 200MB of memory? Was that resident memory or simply mapped memory?
How could that app possibly use 200MB of memory?

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.

Some sort of disk buffer, maybe?
The Bluetooth driver for quite a few Lenovo Thinkpads is a 210 MiB download. It includes btrez.dll (two seemingly near identical copies for x64 and one for x86, each about 25 MB) and all of the .NET 4.0 runtime, among other things.
I'd give Lenovo a little slack, because they're (or were a few years ago) probably the only brand to provide an automated driver update program that works pretty fine. It's not light nor fast but still. And since they have to support a ton of different environments I could accept static inclusion of dlls. That said I often avoided installing the bluetooth software stack (almost never used bt) because it was so fat. :)
You mean the same driver update that broke my VPN with no fix no matter how long I looked without a reinstall?

'pretty fine' is always going to be a subjective thing.

My wife's HP laptop had some software that monitored the "audio mute" key so it could turn the associated LED on and off. That herculean task required a constant 50% of the CPU.
To make matters more amusing, this laptop was in all probability dual core, which means the software was pegging one of the cores.
A whole CPU just for a single GPIO task? Now that's bloat.
Yeah but just think about how quickly they were able to release the software, by using 50% of the CPU. Isn't that what really matters? :)
His article is bloatware.

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.

>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.

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.

It's really a great example of how well they are actually doing with Office, IMO. I was absolutely floored when I saw how little it uses!
Especially funny when the page with the logic to decide whether or not to park your drive head is in swap.... on that hard drive.
15 mb?

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.

The version of Excel mentioned in the article was Excel 5.0 for Windows, that came out in 1993. No one is denying that previous versions were been smaller.
The old submission title seemed to indicate that Excel came out in 1993 and was 15 mb. Someone has since corrected the title.
The 20% thing is interesting, but Microsoft themselves later empirically established through application usage metrics that there is an ordering of features.

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.

> Which is how we got the Ribbon. It was intended to place the most commonly used features front and centre.

So how come we ended up with something that placed all the features front and centre?

I'm not sure I follow you.
rcgs is referring to the way that Microsoft has, over time, added more and more buttons into the ribbon, so that at present most Microsoft applications have almost all their functionality accessible through the ribbon. rcgs would argue that this defeats the point of the ribbon in the first place (I'm inclined to agree).
The ribbon is not designed to be an edited toolbar with a single row of just 10-20 functions. It's a wholesale replacement for application menus. Every new function and feature should have a placement on the ribbon, or else how would you otherwise activate it?

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 love the Ribbon. It's fantastic for grouping like functionality together and, most importantly for me, it provided just about every single function with a sequence of keyboard shortcuts. Pilot enough spreadsheets or produce enough decks, and they become muscle memory. I'm sorely disappointed that Microsoft still hasn't brought it to the Mac. The design choice to make the Office for Mac apps look more Mac-like has been a bad one.
I remember I once spent a good 10 minutes trying to find "print" in microsoft word, with it's ribbon. I knew I could just hit ctrl-p of course, but I kept at it because I was baffled at how hidden it was. IIRC, I eventually found it in a menu, not in the ribbon, that appeared if you clicked some button on the top left.

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.

Office 2010 finally restored the file menu.
I strongly disagree with Joel here. It's true that storage is much cheaper today, but every piece of software I use is downloaded from the internet. Not everyone has 10MBit connections. If you make software, and especially updates, unnecessarily large, you will cut off a percentage of your users.

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.

Note that this was written in 2001 when the statement "every piece of software I use is downloaded from the internet" would have been ridiculous at the time. Not saying your point isn't valid, but just pointing out that its not something that should have been addressed by the article.
> 2001 when the statement "every piece of software I use is downloaded from the internet" would have been ridiculous at the time.

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.

It was written in 2001... Software was mostly delivered by CD.
Joel is probably my favourite tech blogger. That said, some perspective on how old this post is:

2001 - 1993 == 8

2013 - 2001 == 12

Also note, this article was published in 2001. If disk storage was cheap then, it's an order of magnitude (or more) cheaper now.
It is cheaper, but probably not by as much as you might think since many people are transitioning to SSDs which set us back several years in terms of price and capacity.

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...)

This really nicely sums up why I use Django for every Python web project I do instead of something like Flask. Django's size doesn't negatively impact me in any way and the fact that it has so many features and a huge number of libraries and docs means I'm less likely to need to do a lot of building when requirements change.

I think this extends to anything that calls itself a microframework -- being small isn't a meaningful feature unless it actually impacts your app.

The more I read Joel Spolsky, the more I realize how wrong he is. He's like the Thomas Friedman of software. He writes lots of things that sound good, but aren't actually true.

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.

more processors are running on batteries too now and the improvements on those aren't keeping up at Moore's law pace.
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.

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.

You're equating code size with code quality, which in my opinion is an unqualified assumption.

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.

Unfortunately, most of the software engineering literature disagrees. We know few things in software engineering. One of them is more code == more bugs.

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.

>> if programmers don't

> 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.

"The more I read Joel Spolsky, the more I realize how wrong he is." -parent

"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

"The more I read Joel Spolsky, the more I realize how wrong he 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 :)

When I was using Word on the Mac in 1992 (version 5? 6?), it even had it's own built in screen saver... I guess in case you didn't want to look at flying toasters or whatever.
Ah, Word 5.1 for Mac.
Word processors should load instantaneously. Photoshop should load instantaneously. Windows should load. Instantaneously.
Before you comment please note that this article was written in 2001 almost 12 years back.
"Ohhh. It eats up all your memory. I see. Actually, well, no, it doesn't. Ever since Windows 1.0, in 1987, the operating system only loads pages as they are used. If you have a 15MB executable and you only use code that spans 2MB worth of pages, you will only ever load 2MB from disk to RAM."

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.

Yeah, storage is cheap, let's go wild and add some features that might be useful for a handful of people. Reminds of time when excel had simple flight simulator in it...
I think both the article and the comments miss the point. If you take a Linux distro, it is actually bloated, in the sense that it has a lot of useless stuff that take space. However, it's built on a solid, stable architecture which allow bloat management. Same with vim: I have seen vim setups that are complete bloat, with hundreds of plugins, and even plugins managing plugins. But this is managed, manageable, because based on a well defined base.

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.

...and then the journalist tries to find the "word count" feature which they need because most journalists have precise word count requirements, and it's not there, because it's in the "80% that nobody uses...

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:

http://plugins.jquery.com

> 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.

That's an operating system.

The only real bloat I know are vendor specific programs that come for free with certain hardware. I don't know who writes such shit sotware. From the HP Windows driver suite (not the driver itself but all those useless programs which come along with it; funny enough hplip is the best thing on linux), horrible tools which come with motherboards ("omg make the ui look like it is a spaceship cockpit"), shitty tools from laptop manufacturers for wlan, bluetooth and so on. who the heck writes these!?

Commercial programs are mostly not bloated and don't scatter around the whole system.

So it's like excel is getting smaller? Come in please. Sounds like some of that "new math" to me....