My daughter frequently gets herself into trouble for doing things in excess. I try to tell her that everything has a limit. Whether it brushing your teeth, eating your favorite candy, reading your school books, or playing video games, there’s always a limit. “What happens when we go over these limits?”, I frequently ask her. We cause problems for people. Problems for ourselves, our friends, and people we don’t even know. What’s up, my name’s Cliff. you’re here because you mis-typed “cokeforfun” in your web browser. While I have your attention let me entertain you with some nonsense.
What does my discussions with my ten year old have to do with the pain of software development in the industry? Limits, and the result of exceeding them cause pain. A while back somebody had a great idea about keeping software released into the wild up to date. Have the software phone home and ask for the most recent version number. It would phone home, not in the E.T. “ouch…” sense, but make an actual network connection to a sever on scheduled intervals and/or on each launch and look for an update. The idea was perfect! John Blazed and all, it took off and was reimplemented in various packages. Some people got the idea all screwed up. Restraints and controls were put into place so as to not annoy the end user. It still wasn’t perfect but improved. Others still got the restraints idea wrong (you just gotta love the MS update balloons). For a short time it seemed like auto update management had either calmed down or had finally worked it’s own kinks out. People were able to be productive with software.
Still the idea grew. Flash forward to today. Now is it me, or does practically every application I launch want to upgrade it self on the second use? How many times has either Firefox or one of its twenty installed plugins find a new version? On the Mac I have remote desktop (JollyFast VNC), iTerm, Acrobat, and Adium updates constantly begging for my attention. I refuse one or twelve updates and the floodgates are now open. there are times I just need to launch a product, get some work done, and kill it within the frame of twenty seconds. I can’t be bothered with the negotiation of a network connection, the agreement to the new TOS all because some engineer forgot to de-ref a dangling pointer leading to a security risk and the introduction to a new framework and some other hoobly-hook that I really don’t care about.
Imagine, if you will, that you’re a fire fighter rushing to put out the flames in some exploded building, save a life or three along the way, and at each traffic light instead of traffic clearing your truck’s engine grinds to a halt while a message flashes on your dash. “Please upgrade your steering column prior to making the next right turn…” begins the first message. “Goodyear has released version 5.3 of the tire-wall, you must change all tires before continuing”, says the next. “CamBuddy has a camshaft upgrade that will bring you to the burning building in 4.5 seconds reduced time”, goes the tenth message. By this time you’ve of course lost the lives of 7 of the victims but the messages keep coming. The steering column upgrade keeps thunking you because you thought you could put it off for now but you underestimated the sheer volume of right hand turns you were going to make. you finally give in at the last turn before arriving at the site and watch disparately people burning in front of you as the progress bar incrementally fills on your steering column upgrade.
Terrible analogy but the problem is clear. What we need is a better way to manage software upgrades. We need a button or checkbox that says, “Yes update but wait until machine is idle”. Or something, “upgrade silently after I close the program.” This should work differently than most apps that upgrade on the subsequent launch. The problem with either of these options (exit time and launch time upgrades) is that you still get a hit. If you really need to bring up an app quickly and be productive you get a hit on launching upgrades. (I hate when Firefox does this.) If you need to quickly shutdown/reboot you can get a hit with exit time upgrades. Possibly the best model would be an app that could perform complete upgrades after the program has exited but only while the machine is idle. You could complement that with a checkbox that says “keep me quietly up to date” so the user would be presently surprised with new functionality on subsequent launches.