Fresh baked extensibility
When will developers and UI designers learn that they can never foresee what work-flow a user will have. We design these complex systems with predetermined work-flows or user stories and try to plan out every action that the user will want to perform. Unfortunately software developers and designers forget that the user is a human being and in a somewhat misguided attempt to create crisp clean interfaces they let extensibility fall to the wayside.
Microsoft is just learning this lesson. Go ahead. I dare you to try to extend the functionality in Internet Explorer. Now compare that with how much easier it is to create and discover Firefox plug-ins. The Eclipse project is built around extensibility to the point that it has little definition of self and seems to be a loosely coupled set of points where extension is the default option. Whether you are designing the next killer app or a line of business app consider how the user can enhance the experience without users turning to you the developer to write more code. Bake the extensibility into the system from the beginning and you will be surprised how much happier the users will be.
You want some real word examples? Why didn’t you say so?
Let’s start with something existing. The site rememberthemilk.com is an online task manager with nice nice features built into the standard interface. One of the nice things is that you can create something called smart lists. These are basically dynamic to-do lists that key off of data about the task. Seems simple right? It’s actually an incredibly powerful tool. I would constantly juggle tasks that existed on separate lists (work, personal, etc) but I needed in one place so I could plan my day. With smart lists I could create a dynamic list that contains (for a simple example) all tasks that are tagged “response needed”. That fits my work-flow better and rememberthemilk.com doesn’t force me to work within a strict predetermined structure.
How about an example of functionality that doesn’t exist yet? Glad you asked. Think of your touch screen mp3 player or phone. How often have you run into a “you know what this moment calls for” situation. You know, the one where you have to dig through all of your music to find the song or album that you are looking for because it matches the mood exactly. Don’t you wish you could create your own shortcut or macro to make “party mode” a first class element in the UI. Then you would just have to press the “party now” button and your friends wouldn’t be waiting while you look for Aha’s Take On Me (or whatever you listen to). Or you could tag the music with “road trip classic” and when you jump into the car all you have to do is hit the “road trip” button and it will find all of the songs you tagged “road trip classic” and create a dynamic playlist for you. The idea here is that the user is allowed to create a first class element in the UI and have it perform custom action without having to know anything about software development.
I think Google is doing something along these lines with the AppInventor (http://appinventor.googlelabs.com/about/index.html). At least at some level the idea is similar. It seems that Google is taking the to the next step and saying, “We left you a completely extensible interface here – do whatever you want”. So instead of creating a single point of extension and saying that you can create a button to drive a dynamic playlist they are saying you can drag and drop your way to an entire application. It’s hard to tell yet if it is extensible for users or if it is like Microsoft’s dream of business analysts dragging and dropping their way to production ready apps through Visual Studio.
Sometimes developers need to let go of the fact that they don’t know everything. They need to stop planning on boxing the users into a specific set of work-flows. Bake the extensibility into the software at the very system level and let the user implement any custom functionality without needing a degree and access to source code for you application. If your software will be around for more than this week it might be worth looking into creating extension points in your application for power users to exploit and new comers to grow into.