Body
I had a lot of company this weekend it was really our first time entertaining in the new house (other than an occasional friend dropping by). I like to think that my friends are a fairly intelligent group. Birds of a feather and all. My friends often come to me for help with their computer "issues", despite the fact that I haven't run Windows as my OS of choice since 1996. One of the many reasons that I don't discourage them is that, if you have ears to hear, you can learn a lot from users. Oh and I want to keep my friends.
One such friend visiting me this weekend was lamenting about trying to send a fax from Windows. She is a real estate agent (and an honest one, too). She often has a need to "fax to this number", not knowing who the number belongs to or ever having the need to send anything to them again. A "one-off", if you will. She tells me that her software requires her to put numbers in her address book *before* she can fax to them. The software doesn't allow one-offs.
This reminded me of my most frequent objection to what I will call the "Complete Solution" syndrome. This malicious malady strikes developers who are driven by marketing people and by listening to the surface objections of end users. Complete Syndrome is the disease which causes most of the code bloat and useless work that developers have to do. It is the antithesis of good engineering and good UI design.
Complete Solution can be defined as making a one size fits all application that has to do everything possible for a particular operation or data type. A good example of this is WinZip. I like Winzip because it does everything that one could ever want to do with a zip file. If you look at it, though, you will notice that it has an "Explorer like interface". Well, honestly, if I want to use Explorer, why don't I just do so? WinZip adds contextual menu items for "Add to archive" and so on. WinZip's interface gets in the way more often than it really helps me. Most of the time I either want to add files to a zip file or take them out. That is all. Small and simple.
The core problem with Complete Solution is hubris. The application developer has to think of every single thing that an end user could ever want to do within this application, and implement it. Microsoft continued this trend, back in the day, when they introduced the "Windows 95 Compliance Program" one of the keys to comply was that an applciation had to allow the "document" being worked on to be emailed from the file menu. To this end, they created an API (MAPI) to allow developers to add this "feature" fairly easily. The problem is that the problem is not complete. Maybe I want to FTP this file instead. Often that is the case with web pages, so web page development application implemented FTP and put it in the File menu. But what if I want to FTP a Word document to a website? Or maybe I want to zip my document? Shouldn't I be able to do that from within the application?
Complete Solution isn't and never can be, despite its name. The problem is that as the number of operations grows, the number of combinations of them grows exponentially. Like menu choices in Word. Maybe I want to encrypt, zip then email my document. Maybe I want to convert it to XML, run it through an XML quality validator, then FTP it to my web site. If email is a valid choice for the File menu, why are any of these less valid? Truth is, they are not.
When code gets really hairy, conventional wisdom says to refactor it. Too many cooks have spoiled the soup and it is time to rework the kitchen to divide the labor more sensibly. We have been having a wonderful conversation on Glass Elevator about how to do this. That maybe applications as monolithic entities are a dying breed. That instead of a "tractor app", we should have "tractor applets".
One of the neat demos that I remember from back in the Be days was a paint program, where the demo giver would select a piece of a picture and drag it onto the desktop. The selection would be saved as its own bitmap. Can you imagine working on a picture without loading an application? Right click on a file and get a list of actions that you can perform on it. Maybe lasso-select, in the bitmap's case. A viewer window pops up, allowing you to lasso the piece of the picture that you want to select. That selection is saved on the desktop, a folder, or wherever you drag it. You right click on the selection file and choose blur. A little window pops up containing a slider (amount to blur) and a direction chooser; a preview button defaults to unchecked. The newly blurred image can be dragged on top of the old one, or a new file made. But we decide, instead, to drag that blurred piece onto the original. The blurred image is put back where the original was cut from and voila - a work of (avant garde) art, without ever opening a "real" application.
So take this concept back to my friend, the real estate agent. She could right click on her document and click "Fax". A small window pops up, asking for a number or to choose from the address book. She types in the number and clicks send. Done. It just works.