Expanding on the previous posts, it's clear that the objects and gadgets (and spimes) we interact with understand a great deal about their current context and record a great deal about the way we use them. These facts present specific design challenges.
Designing for Context
First: As objects become increasingly aware of the context in which they are used, they can help us make more real-time decisions about the presentation of design at the time of interaction. An obvious, real-world example of this is the way applications alter their layout based on the orientation of the iPhone. Other examples might be altering functionality based on time of day, geographic location, or weather conditions based on network calls to web services. The primary design consideration here becomes anticipating and accounting for all the meaningful changes in context.
For example, if your application is designed to direct users to the nearest dining establishments, you may want to cross-check hours of operation with the current time of day. If the weather is not permitting, you may want to steer them away from restaurants known for their al fresco dining experiences. If you can infer that a particular holiday is approaching (say St. Patricks Day), you may want to steer them toward an Irish Pub. There are a number of factors that could influence the functionality of your application. The trick is to identify these and adjust the functionality of an app or object accordingly.
Listening to the Object
The flip-side of context-aware design is usage-aware design. In other words, no matter how well you anticipate changes in context, your user will interact with the application in unexpected ways. These interactions should be recorded. They will become meaningful both individually and in aggregate.
What does it mean when you present the users with five options and 80% of them choose the third option? It means option #3 should become option #1. What does it mean when an individual chooses al fresco dining in the rain? I means that weather is not as important a consideration to that user as you thought it was. There is a wealth of data which can be gathered during usage that should affect your design choices at the time of interaction. Make sure your design accounts for those.
In the old days of web development, the quantum leap in design thinking was that the user's display mechanism was non-uniform. Many print designers had a problem with the fact that you couldn't lock down design. Each browser had its own peculiarities (unlike paper). In order to satisfy the usage requirements of your users, you needed to test for the different browsers and supply different layouts to satisfy the requirements of each. The best web designers were able to overcome the ambiguity of the medium and create designs that worked well regardless of the display mechanism.
The type of design I'm discussing here is really an extension of those design principles. In addition to OS and browser considerations, you can now tell where and when a user is, whether or not the user is in motion, what the weather conditions are, what events are occurring at the time, etc. If you can create your design so that it gathers all the appropriate contextual data, marries that with usage data, and makes an informed decision about what features and functions to present and how to present them... Well, then you've designed for the modern user.
Back in college, I studied electronic music. We discussed the differences between classical music and electronic music in the following terms: Classical Music designed the raindrops while Electronic Music designed the clouds - letting the raindrops fall where they may. The same kind of leap in logic needs to be made by modern interactive design. Instead of designing specific interactions, design for a constellation of interactions as determined by contextual and usage factors. As a result, your product will be more useful, usable, and compelling.