When my software starts, it auto-updates itself if necessary (takes only a few seconds.) My software also checks for updates every half an hour. If there's an update, it puts a notification into the status bar (of the program, not taskbar). It checks to see if the software is idle. If it is, it saves everything, shuts down, downloads and installs the update, and runs again. It takes one click to go back to where the user was when they come back from being idle.
A user is also able to select "don't install updates automatically" in which case they will still be notified in the status bar and when the program first starts that they have an old version. By clicking one button, the new version is downloaded and the program is restarted. So, the user is aware they need an update.
Finally, the updates themselves add new features and don't introduce bugs.
This works better than iTunes (where you have to redownload the entire program), the anti-virus definition updaters (that popup a progressbar over your screen or fill up your system tray), and the Adobe Acrobat Reader downloader (a crazy screen that tells me to update a program I don't even use very often.)
The news page that shows when you start the program tells you any news, so the users are still aware that new features are being added, even though the process was seamless.
I forgot to mention that the big use for "don't install updates automatically" is if a user has one of those firewall applications that likes to ask for permission all over again whenever a program has been updated. Also, it means those who use Windows in a priviledged environment will be on the computer (not idle) to confirm Windows request for elevated rights.
Thanks! Yes, that's more of the mental state I put myself in. :) But I have to say that I have developed a pretty good feel about when something is ready for release.
My program has to run all day. As soon as I release an update, I have to quickly run the old, installed version of my software to get the current update. Then, I make sure it actually starts. Let's say I add something that works great during testing, but crashes with a file access error on startup. That means the user will come back to the computer and see an error. At least if I introduce a bug that doesn't keep the program from loading, it means that I can then release another update later on which the update I just released will catch. That's what I meant. As long as the update doesn't make the program crash when it starts, the program will find any future updates to fix any bug I introduced, seamlessly.
Personally, I categorize every application that updates itself as spyware. At the very least, the vendor of the software gets to monitor my habits of using my computer. Also I think this will become hell eventually when all the zillions of applications installed on a typical system try to update themselves after their own fancy.
It works so much better in debian/ubuntu, where most update requests go to a central repository.
Perhaps it would make sense to at least have one common "updater" component that all applications could use, similar to the way they now all use MS Installer (OK, sorry, I am still stuck with Windows, against my will). That updater component could be configured once, instead of having to configure each application individually. There is also the additional concern of letting applications communicate through a firewall - if I unblock them so they can get their bloody updates, who knows what else they will transmit?
He's complaining about PCs, but I've noticed similar issues with Mac apps. They don't have a system tray to go nuts in, but half of the mac apps I run check for updates at launch and bug me right when I'm trying to opens something. Some are smart enough to go ahead and do the update and tell me afterward, but they're in the minority.
This feels to me somewhat like the Vista shutdown menu. The programmers writing the individual apps aren't asking themselves "what if there were six apps like ours all asking to update constantly?" Come to think of it, this tends to be a pretty major theme in software development: ignoring user experience when other people's code is involved. Opportunity for improvement!
A user is also able to select "don't install updates automatically" in which case they will still be notified in the status bar and when the program first starts that they have an old version. By clicking one button, the new version is downloaded and the program is restarted. So, the user is aware they need an update.
Finally, the updates themselves add new features and don't introduce bugs.
This works better than iTunes (where you have to redownload the entire program), the anti-virus definition updaters (that popup a progressbar over your screen or fill up your system tray), and the Adobe Acrobat Reader downloader (a crazy screen that tells me to update a program I don't even use very often.)
The news page that shows when you start the program tells you any news, so the users are still aware that new features are being added, even though the process was seamless.