Wednesday, November 04, 2009

Productivity Pron

One of my former coworkers & I used to spend hours talking about how to set up the best individualized personal information manager. We used to call those conversations productivity porn, not realizing that someone would come along an formalize that term, albeit slightly skewed, as Productivity Pr0n. Finding a good system that doesn't get in your way yet allows you to organize all the things going on in your life (both personal and professional) is surprisingly difficult, given the number of tools that purport to do just this. At the time we were having these discussions (late 1990's), the best thing going was Franklin Covey's Ascend (a desktop application for Windows) and the Palm Treo. Ascend replaced some of the anemic default applications on the Treo (like the laughable ToDo application) with their own versions, and it worked really well. The death knell for me with Ascend was its poor quality. It was written as a desktop application that used an Access database for its back end, and it was a bit fragile. About once a year, it would spontaneously corrupt the database, which required cracking it open with Access to fix the mess it had gotten itself into. Seeing the broken and corrupted records and the general ghetto-ness of the database Ascend supposedly owned entirely didn't give me confidence. I still haven't found as good as integrated system today, but I have cobbled together a nice workable system for myself, consisting of 5 moving parts.

Calendar

This piece to me is the easiest slot to fill. Maybe I'm just not discriminating, but almost any calendar application works fine for me. As long as I can add appointments with all the standard stuff (reminders, time zones, etc.), I'm pretty happy. The biggest headache with calendars is keeping them in sync. Back in the bad old days of Lotus Notes at ThoughtWorks, I basically ignored the corporate calendar, keeping all my stuff in Google Calendar instead and giving people who cared an HTML view into my work calendar. Google calendar is quite nice, including good synchronization / replication with iCal. Most of my interaction with Google calendar was through the web interface, so much that I created a fluid application that had only my calendar. One of the slick tricks you can do with fluid applications is make all the chrome disappear, giving me a full-screen calendar bound to one of my desktops that looked like the wallpaper for that desktop, which was nice because you get the biggest possible calendar. I also liked the 4 views afforded by Google calendar: 1 day, 1 week, 1 month, and next 4 days.

Since ThoughtWorks moved our infrastructure to Google applications, I just exported my old work calendar and sucked it into the new ThoughtWorks Google calendar. My itineraries, my wife's schedule, etc. I subscribe to (and share subscriptions to interesting events with her). We each "own" our own calendar and cross-subscribe to get shared events. Using sites like TripIt makes keeping travel under control and subscribable. Going forward, I want all calendar stuff delivered as iCal feeds.

For synchronization, I'm using iCal as the integration point. I still have a fluid application that now points to my ThoughtWorks calendar, but I'm using iCal as the main calendar. Of course, iCal synchronizes nicely with the iPhone. Before moving back to iCal, I was using CalenGoo on my iPhone, which is a slick iPhone interface directly to Google calendar. It doesn't really provide off-line access but does cache the previous results so you can see your calendar even if you can't get to it online. The native iPhone calendar application handles that for me now.

ToDo / Task List

If the calendar is the easiest, this is by far the hardest slot to fill. Virtually all of the To Do / Task List applications I've used are seriously deficient in one way or another. Ascend replaced the Palm ToDo application (which was laughably bad) with one it called Task List, which was quite good. One of the killer features I need is a start date in additional to a due date (they all do due dates, but most don't handle start date properly). I have a fair number of tasks that I don't need to see right now, but I don't need to find out about them the day they're due either. I need a system that allows me to express "this thing is due on 11/5, but start pestering me about it on 10/30". I also want a tag-based system using contexts, one of the really nice refinements to come from the Getting Things Done cult, rather than a hierarchy of folders.

My research in this area eventually led me to OmniFocus. I say "eventually" because I recently went through this category of application again. I started with OmniFocus but found it too complex for my day to day usage, which led me to Things. I like Things because it is so radically simple, but that became a bottleneck for me because of the way I like to attack projects. That in turn led me back around to OmniFocus and some concentrated learning about how it wants to work. It's heritage is OmniOutliner, and you can still see that lineage, which adds some complexity to some parts. Because OmniFocus has lots of ways to get information into it, I kept misplacing stuff. The thing that took OmniFocus from "nice but tolerable" to "can't live without it" is the custom perspectives. OmniFocus allows you to save customized views, including filters, columns, etc. I created a bunch of custom perspectives that show me exactly what I need ("what things are coming due within the next week", "what needs to be done next on this project", "I have 10 minutes at home -- is there anything that can be done here and now?") and assigned those perspectives to hot-keys using the standard Mac feature of assigning keys to menu items (each perspective shows up as a menu item, making this possible). Now, I never use the built-in views, I always use my custom perspective depending on the information I need right now. Since doing that, OmniFocus has worked fantastically. It allows me to organize my days and weeks, just shows me what I need right now, and I'm confident when I add something to it that it'll appear at the right place and time. Learning to use OmniFocus right was the key, and now that I have I think I have the best task list stuff that I've ever had (beating out Ascend for this title is no small feat).

Of course, OmniFocus syncs with the iPhone (and has a terrific iPhone application) so that I can keep all my To Do stuff with me at all times.

Recurrence

OmniFocus is great for tasks that have firm due dates and works for recurring tasks as well (including some nice flexibility around "schedule the next one of these 5 weeks after the completion of this occurrence", which is great for things like haircuts). However, I have a few but important categories of things where I want to define rules like "I want to post to my blog every 9 days or so", which could be rewritten as "remind me after 7 days that I need to post a blog entry, and start yelling after 11 days if it isn't done". I use a highly specialized tool for this called Sciral Consistency. That's all this tool does: allows you to set up ranges for things that need to be done and remind you.

I could almost replicate this using OmniFocus features, but I already had Sciral and I like the minimal display & single-mindedness of the tool. This doesn't synchronize anywhere, but I always consume this information at my computer anyway.

Random Notes

The combination of calendar and OmniFocus handles all the structured stuff -- what about unstructured notes? I have two mechanisms for that: Evernote and Moleskine.

Evernote

Evernote is a desktop, web, and iPhone application that allows you to capture notes (organized into notebooks) for whatever information you want to keep and search. A few killer features for me:

  • Automatic synchronization always everywhere. Every time you capture something with Evernote, it automatically synchronizes across all views.

  • OCR for white board text. I tend to draw on white boards a lot, and if you capture the drawing with Evernote's picture note, it will allow you to do text searches in the web and desktop client for words in the white board drawing. It's not perfect but surprisingly good at this.

  • Automatic forwarding address. Evernote sets up an email address for you; anything you forward to that address becomes a notebook entry. This is nice because it allows you to get stuff out of your email client. Evernote has much better searching capabilities than most email clients, and having the forwarding address means you can get searchable emails into Evernote very easily. This is particularly nice for those who use their email inbox as the world's worst filing cabinet; get that stuff out of your email client and into something where it can be useful.

Moleskine

The only bad thing about an entirely electronic PIM: there are still times when you cannot use it (like when the plane it taxiing). This may not seem like a big deal, but I find that I have lots of capturable ideas at exactly the times when I can't capture them. Thus, my other permanent GTD accessory is a soft-sided Moleskine book along with a Fisher space pen. I capture interesting ideas as soon as I have them (because ideas, especially those from the right brain, are fleeting). Once I get back to my computer, I transcribe the Moleskine notes into the rest of my system. At any given time, I usually have a page or so of new stuff in the Moleskine. I could get by with a few index cards but I've been carrying the Moleskine for a while and I'm used to it.

Tying It Together

My PIM lives between 4 different applications and a notebook with no real built-in integration between them. I always use them as a unit. For example, I have all 4 applications bound to the same desktop in Mac OS X, and those are the only things bound to that desktop. That allows me to always leave them in the same window state and position. Anytime I switch to one of the PIM applications, it goes to the appropriate desktop. I've also used Automator to create a PIM application that performs "Launch Application" for each of the 4 that make up my PIM. I no longer think about these applications as separate things.

PIM as Life Support for Focus

Obviously, this system is highly customized to me and won't work without changes for anyone else. I think that it is every knowledge worker's responsibility to find a system that allows them to get to and stay in flow as much as possible. Any tools that you use should make it easier to get to flow, not harder. I find that I tend to work best in 2 hour chunks (which I'm calling work blocks), which is similar to the very popular Pomodoro technique. One of the custom views in OmniFocus allows me to review projects that have pending work blocks so that I can find out what I need to work on, then immerse myself in that problem for a contiguous chunk of time. Whatever system you find, make sure that it supports how you want to work. Don't change your effective work habits to conform to some tool's vision of what your day should look like.

Wednesday, October 07, 2009

Twitter Matters: The Meme Abiogenesis of the Internet

This is part three in an exploration of why Twitter makes sense, highlighting its use as a legitimate tool for connections and idea generation. The first article is under Twitter Matters: Keeping Up with Weak Social Links and the second is under Twitter Matters: Conversations vs. Monologues for those who want to catch up.

Abiogenesis, the study of how a primordial soup of chemicals eventually lead to amino acids and life, is an area of fascinating study by biologists. This spontaneous generation of life happened here a long time ago, and its study obviously interests those investigating life on other planets because this primordial soup seems to be the first prerequisite for life as we know it.

You can think of the Internet as a free-form gathering place for memes, an element of a culture or system of behavior that may be considered to be passed on from one individual to another by non-genetic means. Examples of memes include hit songs, water-cooler conversations about hit TV shows, and things like communism. If you are in the idea business (meaning that you are always looking for new sources of ideas and how to apply them to a broad subject like software development), you are always on the lookout for primordial meme pools. Twitter meets that goal admirably. As I mentioned in the first installment, weak social links are your best source for "outside the box" ideas. That makes Twitter a great place to harvest and generate new ideas. New ideas frequently start from seeds of an idea that are nourished into full-formed thoughts. Twitter now only delivers these seeds to your door, you can use them as an incubator for your own seeds.

Here's an example. One of my recent blog entries was called the Suck - Rock Dichotomy. That particular turn of phrase came from a quick one-off Twitter entry where I was responding to a Tweet from someone that combined rock and suck. I mentioned that the entire argument was really part of the pervasive suck/rock dichotomy in the software world. That worked nicely in a 140 character Twitter post, and it was modestly re-tweeted. But it started more serious thinking on why that phenomena exists, which further lead me to an entire blog post (i.e., essay) on the subject. The turn of phrase came from me, but in response to some other stimuli. Would I have ended up writing a blog post on that subject if it hadn't come up in a virtual conversation? Probably eventually, but having a conversational medium close by encouraged the original Tweet, which lead to more fully formed thoughts about the subject.

Finding new sources of in-context ideas is a gold mine because you can never tell what fruit those idea seedlings will bear. Yes, 99% of Twitter is mindless trivia, but discovering or creating a new idea that you wouldn't have had otherwise? Priceless. People complain that most of Twitter is drivel, and I won't dispute that against overwhelming evidence, but the remaining usefulness is an artifact of the volume of memes present. Here's an analogy. Numbers vary, but some sources suggest that up to 95% of the human genome is "junk DNA", DNA that isn't used (or at least its use hasn't been determined). That's how nature tries out new ideas, and the really good ones survive. Most of Twitter is junk, but good ideas do lurk in these murky meme pools.

Twitter has evolved to fill a niche that didn't exist before. Just like any social environment, users have to figure out a way that it can provide value. I've certainly found that for me. The combination of keeping up with my weak social links, having terse conversations vs. email monologues, the enforced constraint to keep ideas atomic, and the new medium of ideas forms a completely unanticipated but welcome enhancement to the way I work. Rather than cast stones at new technologies like social networks, ask yourself why people find it useful and how can it be useful to you. The answer may be "no", but you need to understand why it matters before dismissing it.

Tuesday, September 29, 2009

Twitter Matters: Conversations vs. Monologues

This is part two in an exploration of why Twitter makes sense, highlighting its use as a legitimate tool for connections and idea generation. The first article appears as Twitter Matters: Keeping Up with Weak Social Links.

The 140 character limit is perhaps the most distinctive characteristics of Twitter. Some of my Twitter friends have commented that conversations on Twitter tend to be more civil: you just can't cram much message and bile into a 140-character message. This has happened to me: carrying on a debate on Twitter is an interesting exercise in conciseness. Tight constraint is a forcing function on creativity: sensibility, lucidity, and articularity in just 140 characters is tough. You would think that all discussions on Twitter are either about trivial subjects (so that you can fit it into the built-in limit) or quickly degrade into multi-part messages. While the latter happens sometimes, it is rare in my experience, and the former doesn't occur as much as you might think.

An example is in order. I recently posted a message in response to Jim Weirich that I thought that cyclomatic complexity wasn't as useful a metric in Ruby because so much of the things that normally require loops and branches are so handily encapsulated in powerful libraries. Thus, this effect causes cyclomatic complexity numbers to be lower when comparing apples-to-apples code in Java & Ruby. Jim correctly pointed out that that does in fact make the Ruby code simpler, and therefore cyclomatic complexity is measuring exactly what it is supposed to measure. During this same discussion, Glenn Vanderburg weighed in on a related subject, and then so did Ola Bini. The conversation quickly turned to the Sapir-Whorf Hypothesis and how viable it is for spoken languages (not much) and computer languages (much more so). Along they way, I learned the distinction between the strong and weak versions of Sapir-Whorf. All this took place over about 20 minutes, 140 characters at a time. Yet at the end, I knew a lot more than when I started. The combination of (shortened) links to external sources and brief forays kept the conversation focused, covering just a few topics and exploring the implications between them.

How would the conversation work without Twitter? It could only work if all the interested parties (myself, Jim, Glenn, and Ola) were somehow on the same email mailing list or happened to be at the same place at the same time. While our location does coincide occasionally, it's rare (we're based in Atlanta (sometimes), Cincinnati, Dallas, and Stockholm). Even so, the topic would have to come up in conversation. If we were on the same mailing list, the conversation would proceed differently. Because there is no character limit on email (I'll let you immerse yourself in the fantasy of a limitimg function on email for just a second), it's no longer a conversation, it's a series of monologues.

A tricky balance exists between constraint and creativity. Obviously you can cram more information and context into a sonnet than a Haiku (I explored this idea in a blog series about the expressiveness of the Ruby language back in 2007). 140 characters seems to be a bit of a sweet spot: enough to convey some thought but not enough to go overboard. Composing a good Twitter update is different from composing an entire blog but they aren't as far apart as you might think. I certainly have noticed that the people who both Twitter and blog have cut down on the number of blog entries they write. I'm certainly that way. It used to be that I would blog for 2 types of messages: short announcement type blogs ("I'm speaking at Random City Users Group next week") and essays. Now, all the short announcements happen on Twitter, leaving my blog for more formal essays. I like this distinction because I find that the blogs I read tend to be more substantive.

There is no question that most of what comes through Twitter aren't deep thoughts (many think that Twitter is just for food and travel). I find that people who only post obvious messages, too much information, or too much that I either don't care about or I find offensive don't stay on my list of people I follow long. There is at least one prominent technologist who mixes his interesting posts with right-wing bile, and I dropped him like a hot potato because I don't need a subscription to a channel for misinformed dogma. Managing your user list becomes important in Twitter so that you filter out stuff you don't want or need.

Twitter creates a new communication stream for those who contribute and consume Tweets (conversations vs. monologues). By creating a new specifically constrained communication channel, it moves conversations that used to occupy other spaces to a more appropriate space. This combination of a new conversational outlet between people with who I maintain weak links and the built-in constraints mean that I have a new source of ideas (both raw ideas and refinements of my ideas) to keep my brain percolating. In the next post, I explore the idea that Twitter can be a form of meme generator.

Thursday, September 17, 2009

Twitter Matters: Keeping Up with Weak Social Links

Lots of people just Don't Get(tm) social networking sites like FaceBook, MySpace, and especially Twitter. On the face of it, Twitter doesn't seem to make much sense: 140 character updates. But those of us who use Twitter a lot (I'm @neal4d, BTW) know that it's much more than that. Twitter engenders so much puzzlement because it's so restrictive, but the restriction is the genius of Twitter.

In this and the next two blog entries, I'm going to explore why Twitter is a Good Thing(tm) and some surprising ways it can insinuate itself into a useful workstream. The first of these observations is around links.

Andrew McAfee of Harvard has done a lot of research on how social networking intersects with the enterprise (soon to be captured in a book I can't wait to read, Enterprise 2.0). I saw him talk recently about why social networking is a valuable resource left barren by most companies. He defines 3 kinds of social links: strong, weak, and potential, shown in a bulls-eye layout:

bulleye diagram

Your strong links are the people you see regularly, either at the office or during the normal course of your life. There's a good chance you know what these people had for lunch, or at least one of their meals in the last week. The next layer represents your weak links. These are people you see intermittently (perhaps once a year). They are your friends that you don't get to see on a regular basis (because of geography, for example). A good example for me is my friend Hadi Hariri, who lives in Malaga, Spain. He & I see each other perhaps once a year (generally at conferences) and always have good fun & conversation. It's this group that social networking sites support. This is a valuable link because you are more likely to get novel ideas from this group than from your strong group. Before social networks, how did you keep up with your weak links? The Christmas Letter, summarizing a year's events? You are wasting an important link if you can't reach out to your weak links sometimes. You see your strong group all the time, so they hold few surprises. However, your larger and more diverse weak links provide novelty. The potential links are those who you'll form weak & strong links with, but you haven't met them yet. You're also more likely to be introduced to a potential links through your weak links.

Twitter provides a strong connectivity to your weak link. Here's an example of how weak links can lead down interesting paths. I met someone at the erubycon conference last year who's a well known figure in the Rails world and subsequently started follow his Twitter feed. He had very recently gone vegan for health reasons, and he tweeted a reference to an astounding book called The China Study. I read this book (and several other referenced in it) and have since been strictly vegetarian, at least for the time being. It's worth reading: it lays out the case against animal protein in your diet, and backs up the claims with real science. It's a profound book, enough to convince me to change my eating habits. I don't know if I'll stay this way forever, but I've been there for about 6 weeks and it has been quite pleasant. He was very much a weak link; I would have a hard time spotting him in a room. Yet we share enough context in the Ruby community for me to use him as a source of ideas, which sometimes lead to interesting places. In this case, I wouldn't currently be vegetarian if it wasn't for Twitter.

Finding a good mechanism for maintaining weak links and finding (and exploring) potential links allows you to work smarter because you have a broader arena for ideation. The combination of links, constraint, and meme ooze make Twitter very useful to me. I explore these other two aspects in the next two installments.

Wednesday, September 09, 2009

The 2009 Edition of the Rich Web Experience: Adding Spice to Your Applications

Several years ago, I called an Ajax conference a condiment conference because most everyone there concerned themselves with technologies that augmented other technologies (for example, your base language is Java but you need JavaScript to make your applications suck less). Now, I think that user interaction, web design, the rise of Rich Internet Applications (when used suitably), and other user-facing issues have a deeper relationship to the underlying technologies. Thus, I'm calling this year's Rich Web Experience the spice for your underlying technology. Food is edible without condiments, but bland without spices. You can't avoid the browser as a platform; might as well embrace it in Orlando in December.

Wednesday, August 05, 2009

The Suck/Rock Dichotomy

Lots of people are passionate about software development (much to the confusion and chagrin of our significant others), and that unfortunately leads to what I call the "Suck/Rock Dichotomy": everything in the software world either sucks or rocks, with nothing in between. While this may lead to interesting, endless debates (Emacs vs. vi, anyone?), ultimately it ill serves us as a community.

Having been in software communities for a while, I've seen several tribes form, thrive, then slowly die. It's a sad thing to watch a community die because many of the people in the community live in a state of denial: how could their wonderful thing (which rocks) disappear under this other hideous, inelegant, terrible thing (which sucks). I was part of the Clipper) community (which I joined at its height) and watched it die rather rapidly when Windows ate DOS. I was intimately part of the Delphi community which, while not dead yet, is rapidly approaching death. When a community fades, the fanaticism of the remaining members increases proportionally for every member they lose, until you are left with one person whose veins stick out on their forehead when they try to proselytize people to join their tribe, which rocks, and leave that other tribe, which sucks.

Why is this dichotomy so stark in the software development world? I suspect a couple of root causes. First, because it takes a non-trivial time investment for proficiency in software tribes, people fear that they have chosen poorly and thus wasted their time. Perhaps the degree in which something rocks is proportional to the time investment in learning that technology. Second, technologists and particularly developers stereotypically tend to socialize via tribal ritual. How many software development teams have you seen that are not too far removed from fraternities? Because software is fundamentally a communication game, I think that the fraternal nature of most projects makes it easier to write good software. But tribal ritual implies that one of the defining characteristics of your tribe is the denigration of other tribes (we rock, they suck). In fact, some tribes within software seem to define themselves in how loudly they can say that everything sucks, except of course their beautiful thing, which rocks.

Some communities try to purposefully pick fights with others just so they can thump their collective chests over how much they rock compared to how much the other guys suck. Of course, you get camps that are truly different in many, many ways (Emacs vs. vi, anyone?) But you also see this in communities that are quite similar; one of the most annoying characteristics of some communities is how much some a few of their members try to bait other communities that aren't interested in fighting.

The Suck/Rock Dichotomy hurts us because it obscures legitimate conversations about the real differences between things. Truly balanced comparisons are rare (for an outstanding example of a balanced, well considered, sober comparison of Prototype and JQuery, check out Glenn Vanderburg's post). I try to avoid this dichotomy (some would say with varying degrees of success). For example, for the past 2 years, I've done a Comparing Groovy & JRuby talk at JavaOne, and it's been mostly well received by members of both communities. Putting together such a talk or blog entry takes a lot of effort, though: you have to learn not just the surface area details of said technologies, but how to use it idiomatically as well, which takes time. I suspect that's why you don't see more nuanced comparisons: it's a lot easier to resort to either suck or rock.

Ultimately, we need informed debates about the relative merits of various choices. The Suck/Rock Dichotomy adds heat but not much light. Technologists marginalize our influence within organizations because the non-techies hear us endless debating stuff that sounds like arguments over how many angels can dance on the head of a pin. If we argue about seemingly trivial things like that, then why listen to us when we passionately argue about stuff that is immediately important, like technical debt or why we can't disprove The Mythical Man Month on this project. To summarize: the Suck/Rock Dichotomy sucks!

Wednesday, July 15, 2009

Productivity & Location Awareness

The iPhone has retaught me the power of location awareness in user interfaces. I have lots of iPhone applications (about 90 at the current count, but, in my defense, some of those are saved bookmarks), and until the iPhone 3 update, touching the icon is the only way to invoke them. Because I have so many, I started organizing them on desktops based on usage (for example, I have a travel desktop, a food desktop, hyperlink desktop, etc). This became too arbitrary, so I recently just went alphabetical for all but the first desktop, which has a special hot key to get back to it, making it the perfect place for really oft-used applications.

The point is that I've rearranged my iPhone icons several times. It continues to surprise me how quickly I remember the desktop and location on the desktop of a given application. I very quickly learn where the applications I use all the time (TripIt, I'm looking at you) and can get there really fast. I find that even though Spotlight now works on the iPhone, I still generally go directly to the application via the icon.

While clearly launchers like Quicksilver, Spotlight, and Launchy work better for the huge numbers of applications you find traditional computers, the power of location awareness suggests several things for the builders of applications.

  • Don't move stuff around.

navigation controls are hyperlinks. But, because of add placement, they move around slightly, turning reading the groups a game of "Whack-a-Mole". I use either the NumberFox plugin or Firefox's incremental hyperlink search (the apostrophe hotkey) rather than chase the stupid hyperlinks with a mouse.

I hate applications that move menu options around based on usage. Consistency is important for usability. In fact, I use the Mac's the Smart Menu Search feature, which allows you to incrementally search for menu items without regard for their physical location, as my favorite menu affordance.

  • Context sensitivity makes it hard to leverage location awareness.

Context sensitivity for toolbar buttons makes it hard to definitively learn where something lives, which kind of dooms the ribbon user interface metaphor in modern versions of Office. While I understand the need for a rethought user interface metaphor for the huge number of features (perhaps that's the underlying problem?), having a context-sensitive set of toolbars means that, to become really effective, you have to memorize each combination of buttons and the corresponding locations. Not having used the ribbon much (I avoid Office applications pretty assiduously), I can't say whether you eventually build up the cognitive ability to utilize location awareness.

  • User interface designers should understand Fitt's Law

Pop quiz: what?s the biggest clickable target on your screen? It?s the one right under your cursor, which is why the right-mouse menu should have the most important things on it. The target right under your mouse is effectively infinitely large. Second question: what?s the next biggest target? The edges of the screen because you can accelerate as fast as possible to the edge and not overshoot it. This suggests that the really important stuff should reside on the edges of the screen. These observations come from Fitt's Law, which states that the ease of clicking on a target with the mouse is a combination of the distance you must navigate and the size of the target.

The designers of Mac OS X knew this law, which is why the menu bar resides at the top of the screen. When you use the mouse to click one of the menu items, you can ram the mouse pointer up against the top of the screen and you are where you want to be. Windows, on the other hand, has a title bar at the top of each window. Even if the window is maximized, you still must carefully find your target by accelerating to the top, and then use some precision mousing to hit the target. For right-handed users, the upper right corner is an easy mouse target. What's there on the Mac? Spotlight, the universal search utility. What's there on Windows? Nothing unless your application is full screen, and, if it is, it's the close button (which suggests the most important thing you can do to a Windows applications is close it).

There is a way to mitigate this for some Windows applications. The Microsoft Office suite has a Full Screen mode, which gets rid of the title bar and puts the menu right at the top, like Mac OS X. There is help for developers, too. Visual Studio features the same full-screen mode, as does IntelliJ for Java developers. If you are going to use the mouse, using your applications in full-screen mode makes it easier to hit the menus because it takes advantage of location awareness and consistency.

Regardless of the power of location awareness, for sophisticated computer users (like developers), location awareness doesn't scale. You should spend the time to learn the keyboard shortcuts for every possible thing you need to do. It takes longer, but it scales almost indefinitely. In fact, I turn toolbars and buttons off in IDEs and Emacs and take the time to learn how to get to what I need without reaching for the evil mouse. I'm curious to see how much I start using Spotlight on the iPhone as the number of applications I have keeps growing (which seems inevitable at this point).