On my way back from a training course in Seattle I decided to watch a video of a presentation from the Professional Developer Conference on developing for Microsoft Surface. As a UX person with a huge interest in HCI, the form factor of Surface really excites me. It's not just about having a touch sensitive UI on a table (with the same interaction you'd get with a tablet) but a totally new form of interaction. Surface is an example of a NUI (Natural User Interface) where users can interact with computing devices in a more pervasive way.

The key offerings of Surface over other touch devices in the market are:

  • Direct interaction - you manipulate the UI with your hands, not with hardware
  • Multi-touch contact - several touch points can be on the UI at any time
  • Multi-user experience - several users can gather around the Surface and collaborate together
  • Object recognition - the device will recognise objects that are placed on it

When designing a Surface application, it's important to consider these offerings. For example, taking an existing UI and porting it to Surface would normally mean it can only be viewed from one direction - this means users can't gather around the device. Furthermore, a normal GUI application is designed for a single user on a PC therefore there is no concept of simultaneous use or multi-user collaboration. Object recognition can be very powerful when designing for NUIs as users already have associations with objects in the real world. This can be taken advantage of by adding value to that real world object using the device. For example a business card could be placed on the Surface and automatically access information about the person over the Internet, connecting to blogs, shared files etc. As with any new technology it's important that the use be considered carefully. There's nothing worse than using technology for the sake of it and coming up with a badly designed and implemented solution!

From a development point of view, Surface couldn't be easier! I was very happy to hear that apps can be built using WPF with extra Surface controls. There are alternatives to a lot of standard WPF controls e.g. SurfaceButton, SurfaceInkCanvas and SurfaceWindow and a couple of new ones that offer powerful functionality:

  • TagVisualizer - this provides the functionality for object recognition. Objects can be tagged with images representing byte codes which the app can recognise and bring up a UI element defined within the TagVisualizer. This UI then follows the object if it's moved or hides it when the object is taken away. There are lots of properties to control how this looks.
  • ScatterView - In my opinion, the most powerful control for Surface. ScatterView is a panel that arranges its children randomly across the Surface and provides gesture recognition for dragging, resizing and rotating. There's no configuration or code needed - just put items in the panel and it's all done for you!

So that's my quick intro to Surface! I'm hoping to get involved in a project soon to explore it further!

More info can be found at: http://www.microsoft.com/surface/ and http://blogs.msdn.com/surface/. Some really cool concept videos are at http://www.microsoft.com/surface/Default.aspx?page=Videos.