Contextizing: The art of making software actually helpful
Try asking your favorite mobile device for find a nearby convenience store. You may think it’s all there: You can get a map, and there will be nice little icons showing the location of such stores in the vicinity. Problem solved, thanks to the availabilty and ease of use of LBS (Location-Based Services).
Compare the results you’d get from the LBS to results you’d get from a human: The human will note that as the time is past 9PM, most stores would be closed, and will only mention the nearby stores which are actually open now (I’m assuming the human observed enough of the situation and knows you do want to find a store now, if possible). The human will also note whether you’re driving or walking: Walking limits the definition of “nearby” to a smaller radius, but enables the selection of stores which don’t have any convenient parking. And given the late hour and the fact that you’re in a city that’s not familiar to you, the human may warn you away from less-friendly areas.
In other words, while humans may know less than the LBS regarding all businesses in the area, they excel in not just literally answering the question but in considering the context: We don’t just want to find a store, we want to find one that’s open; if we’re driving, parking must be considered; and so on, for a long list of things that affect the recommendation. This long list is the context.
Considering the context is critical. Here’s an example from a science fiction novel by James P. Hogan, The Two Faces of Tomorrow (available for free download): Imagine asking a computer program for advice on how to get rid of the cat’s fleas. The software loads all the information it has about fleas, and tells you that there’s a guaranteed and cheap way: burn them. Actually, given the information that the computer has on sizes and ease of handling cats and fleas, it might tell you that it’s even simpler to burn the cat. The answer is accurate and effective, but people won’t even think of it, because their knowledge of context includes the facts that we (some of us) want cats around; that even those who don’t like cats object to treating them so terribly; and that just about none of us want fleas around.
We don’t even expect computers, mobile devices and web services to understand and use context. Well, it’s time that we start demanding and delivering it.
Let’s start with a simple example: Vacation approval. What do we expect today from an enterprise application that handles this? Easy: The employee states the requested vacation’s date and duration. The software sends an alert to the employee’s manager, who opens the application, reviews the pending requests, decides whether to approve the employee’s vacation. Now the software relays the decision back to the employee.
That’s fine, but we can do better. A lot is going on that the software doesn’t know or care about. Let’s be generous and assume that the software displays, to both employee and manager, the number of vacation days which the employee hasn’t yet used this year, the dates of the last vacation etc. Still, a crucial factor is missing: How will the employee’s absence affect the team’s projects and commitments? The manager and employee will probably consider this, but they will get no help from the software in doing so.
Now imagine that we use just a bit of context: We ask the software to also look at the shifts and tasks that fall within the vacation’s dates, and the employee is expected to handle according to the current plan. Let’s display these to the manager. Actually, let’s go further: Let’s show the manager the impact of the absence in terms of effects on project timelines, ability to handle workload etc. Let’s also present the manager with a “what if” scenario in which the plan is changed, shifts are reassigned and tasks are rescheduled to work around the vacation. Now, the manager’s decision can be much faster and much more reliable.
Allow me to call this the “Contextizing” of software (I prefer this to “contextualization”, which already has another meaning). People have been talking about it for a while – see for example this analyst report, where Gartner “defines context-aware computing as the concept of leveraging information about the end user to improve the quality of the interaction”. Or we could just use a more informal definition – making software advice more similar to human advice.
What applications do you think will gain the most from contextizing?