It took iPhoneOS err… iOS quite a while to get multitasking. Every geek who’s had a Windows Mobile device before (guilty right here) has thought “What can be so hard about including multitasking?” And we were right… technically speaking, adding multitasking isn’t difficult, iOS supported it from the get-go for a few apps. But Apple wanted a BETTER multitasking system. Partially for technical reasons, since iOS doesn’t support swapping memory (or at least hasn’t done so yet), they can only run so many programs at once without running out of precious RAM. And partially, and I think mostly, for non-technical reasons. A typical multitasking system needs a process manager at one point to let the user manage what’s running. iOS has that (double tap the home button), but a normal user never needs to see or use that. Hell, advanced users probably very rarely ever touch it. I only use it while testing my software to make sure it behaves when killed.
I think this was a fantastic move on Apple’s part. If only as a showcase of how you can take a fairly complicated task like managing system resources, and automate it to the point where users don’t need to be involved. The user doesn’t need to know or care if an application is still running in the background. They’ll probably only notice if the launch time is a little slower sometimes, and that’s something application developers can work to fix.
I’d love for more software to take some cues from this. Here are some examples I can offer up:
Chat Tabs : I use Adium to do a lot of my communication. There are probably 20-25 people that I talk to on a very regular basis. I never close those tabs in Adium. Deciding which tabs to leave open and which to close is just not something I want to think about. Adium logs all of my conversations, so I could close it, and reopen it later without anything lost. I know that. But I swear, hitting cmd-w is just too much work. ”What if Mr Orange wants to talk again in 20 minutes?” So I just leave them open until one day I realize I have 50 tabs open and it’s time to do some major house cleaning. Adium could very easily tell if it’s been over a day since my last talk with someone and tidy up after me. Hell it could build in smarts to determine if statistically I’m likely talk start talking to that person soon, but that’d be substantially more work.
Browsing Tabs : I don’t close browser tabs either. And I’m a one-browser-window-fullscreen-on-a-22inch-display kind of guy (I know it’s terrible and inefficient, but when I’m browsing I don’t want distractions). My browsing style leads to tab-hell, too. I’ll almost never just click a link on a page. I cmd-click everything. Just in case I find another link on that page that I also want to load. If I’m _really_ sure that I’m done with the page, I’ll close it before going to its offspring (or sometimes I leave the offspring out in tab purgatory for me to find later). Safari is also my Cocoa document tool of choice. cmd-tab to safari, cmd-t, tab to get to search field, “nsstring class reference”. I probably have 4 other NSString class references open somewhere in my tabs, but finding them takes longer than that little finger dance so I just keep opening new ones.
I see a few things that could be done to help this. One is better history tracking. Right now browser histories are brutally basic. From what I can tell, Safari stores a low quality screenshot of the page, indexes the text, and that’s about it. I search through my history to find things fairly frequently and it works, but what I get is just that page. I don’t get to the whole browsing tree related to when I was at that page. So I can’t go “back” to the preceding page. Having this ability would make me more likely to close tabs as the damage it does is lower. If I wanted to, I could jump right back to where I was.
Tab amalgamation. If I have 3 tabs open to the same NSString documentation page, I probably wouldn’t be too offended if it decided to fold these together. I just looked… I have 4 NSManagedObjectContext doc tabs open, all one beside another. I’m not even sure how that happens, but it did. Haven’t touched those tabs in probably a week. If the URLs match, and they haven’t been touched in over X hours, combine them.
Automatic tab closing. With the better-history tracking, I don’t see why Safari couldn’t just start closing tabs that I haven’t touched in a long time. There’d be no real harm in doing so.
I think as developers we need to be more conscious of what we can do to automate tedium for our users. I think we’ve come a long way with this, but there’s something decidedly unsexy about coding house-cleaning routines. ”Oh the user can figure out when to do that.” Well.. they could. Or we could, and free them to do more important things.