Design has no value

Give me a minute to explain…

My wake-up call came back in January of 2006. I started work as an engineer, or more precisely as an architect. I had worked on many projects and I was proud of my technical skills and my accomplishments. I was pleased to be starting my new job and I was excited by the prospects that lay ahead, and rightfully so, it’s been a lot of fun and it’s defined who I am now.

I got introduced to a new concept, User Experience design, but what did it mean? I met designers, people with art degrees, what place – what right, did they have to be part of a software team that was built upon degrees in Computer and Software Engineering? They threw about phrases such as user-centric design and design-thinking, they talked about personas and user ecosystems, they created wireframes and visuals designs. What did this mean to the people writing the code, the code which the users interacted with?
Something happened though, I’m now an advocate and evangelist for User Experience. If you are going to build software then start with the users, not with the architecture. It’s common sense. So not so provocative, so why make such a statement? Let me reframe the user as the consumer. I’ve come across two types of designers, those who design, and those who care passionately about their design making it in to the hands of the consumer – it has real-world tangible value for the consumer and for the brand – value we can measure and quantify.

Designing for the sake of design doesn’t add value, to the consumer or to the brand. Designing for value means putting the design firmly in the hands of the consumer and demonstrating quantifiable success. Too many designers stop at the design vision – the engineering element is a handoff.

The Experience Design team at Microsoft, which is part of Marketing Solutions, has been formed upon the principle of ‘designing for value’. We are a team that is equal parts User Experience design and User Experience engineering. We have fused a symbiotic relationship between the designer and the engineer. We share a common goal – a portfolio of referencable success – our design has value. We have refined how we bring together the principles of User Experience, the lean startup movement, agile, and Software Craftsmanship. I hope to share some of our insights in future posts and to talk more about our principles and practices.


The future is here, be part of it

I’m hiring engineers for ‘Studio 415’.

Read on if you want to bring the future to life. We are the Experience Design (XD) team – equal parts User Experience and Software Engineering. We are a design-led team and our remit is to imagine the future and to bring it to life.

Studio 415, in San Francisco, is creative and collaborative environment that promotes innovation and co-creation of solutions alongside our customers.

We are a sandboxed group within Microsoft, we have the resources and might of a large corporation behind us, but we think and act like a startup. We believe in the principles of the lean startup movement and we believe in being agile. We literally have the ability to touch billions of users and have an enviable war chest of technology at our disposal. Our weapons include Windows 8 and its extensive ecosystem that spans surfaces such as PCs, tablets, and smartphones. We have the XBox and Kinect. We have the power of Bing and cloud-based services such as Azure at our disposal. Our innovation knows no boundaries. We use the right tools for the job at hand – our job is simply to delight users and surpass their expectations.

We are looking for a mind-set. You will be passionate about technology. You will care deeply about Software Craftsmanship and crafting simple, but elegant software. You will see yourself as a polyglot, you are not bound to a single programming language, and you delight at learning new languages and perfecting your craft. You see the whole of the team as stronger than the individual.

You will be happy developing user interfaces, but not afraid to reach-in and touch back-end code. When we say user interfaces, we aren’t necessarily thinking GUIs. We want you to push beyond pixels and develop natural user interfaces that combine gestures and speech.

A love of sci-fi and gaming is an advantage, as your vision for technology holds no bounds. If this excites you then apply for one of the roles today. We exist to disrupt – our mission is to re-imagine, it is who we are.

See the available jobs in XD. All levels of experience welcome.

Tell me a story

At the tail end of last year I ran a week long ideation workshop for my extended team. We split in to four groups, with each group focusing on a different social medial scenario. It was a fun week and generated a load of unique ideas.

Having been inspired by the work the team had done I decided to revisit it in the new year. What really interested me was telling a story from the data. It also caused me to question why we were isolating social media and more broadly why digital marketing likes to treat channels separately. Is it the channel that’s important or is it the the user who’s important?

At the time Nike were in the process of launching the Fuel Band and I was intrigued by the various campaigns they were running and the different channels they were using. I spent a good bit of time exploring the different channels, Twitter, Facebook, YouTube, the Fuel Band microsite, and searching for the Fuel Band in Google.

As a user it felt like a fragmented experience and it made me question what was happening with all this data I was generating and what story it was telling about me. What was the Marketer or Product Manager seeing? Did they have a dashboard or a spreadsheet that showed the number of tweets, retweets, Facebook likes, page clicks, etc. Is there really any value in reporting we had 1m Facebook likes and 10k retweets? Did they have a conversion funnel showing the number of pre-orders? Was there an Analytics Manager in the background frantically aggregating data across disparate databases and building custom reports? Was the data simply being folded around the metrics that were deemed as important, or was the data telling a story? I suspect the former.

I really wanted to move away from the metric-centric world and focus on the data telling a story. I wanted the data to provide insights that could be acted upon. I wanted to stop optimizing the metrics and focus on optimizing the experience.

Last week I watched a Ted Talk from Jer Thorp called Make data more human. It struck a cord. He was using data to tell a story.

The digital marketing space and the onslaught of big data feels ripe for disruption. Who’s going to break from the norm and innovate the data? Start telling stories, not reporting metrics!

We all need a change

I’ve made a career change! I have been a consumer of “enabling technology” my entire career. I am now stepping behind that line as I want to be able to influence and shape the technology that enables designers and developers to deliver the best imaginable experience.

I have joined the product management team for Flash runtimes at Adobe, which allows me maintain my focus on the best imaginable, and uncompromising, experience for the user. Flash has enabled this mission more than any other technology on the web and has allowed me to build some tremendous experiences. When user experience was considered a unique differentiator, the Flash/Flex partnership was there to enable.

The landscape has evolved. Thankfully user experience is no longer a differentiator, it’s an essential. To succeed we must put the user first.

The tech community has responded admirably and the expressiveness associated with Flash is moving in to the open-standards that are being defined by HTML5, which will enable a new wave of uncompromising experiences across the web. Adobe gave meaning to expressiveness and continues to innovate through contributes to HTML5 standards, such as CSS regions and CSS shaders. I am sure there is even more goodness to come as we will undoubtedly see more innovation through ongoing contributions to standards and our active participation in open-source projects such as Webkit.

So what’s next for Flash? As outlined in the recent roadmap for Flash runtimes we will be focusing on gaming and premium video. This week Adobe launched a new site specifically around gaming. There are already some tremendous games that showcase the unique capabilities of Flash, which are built on Stage3D to leverage the hardware acceleration afforded by the GPU. The AIR 3.2 release candidate brings the power of Stage3D to mobile in conjunction with the Flash Player 11.2 release candidate. Already some of the top games on the Apple App Store, such as Machinarium, have been brought to you by Flash and Adobe AIR. The Flash runtimes are alive and kicking on iOS!

I also care a lot about the experience of the designer and developer and making our technology accessible. I want to make the experience of using our technology a good one. I want to make it easy to design-develop-deliver incredible experiences.

Your thoughts are welcome.

Speak to your users in 3D

I care a lot about Software Craftsmanship.

I care a lot about User Experience.

I care a lot about designer-developer workflow.

I care a lot about continuous deployment (although I will opt for continuous delivery).

I care a lot about the lean startup movement (if you haven’t already done so buy, and read, Eric Reis’s book The Lean Startup).

I am firm believer in innovate or die and the need to conduct validated learning, and as such you should become intimately familiar with the build-measure-learn feedback loop.

I have spent a lot of time recently absorbing the technology landscape, whether that be HTML5, Flash, PaaS (Heroku, Windows Azure, …), BIG DATA, real-time, blah, blah, blah…

More than ever I feel technology doesn’t really matter. It’s an enabler. The difference between the choices that we have are closer than ever. Make the right choice for the job at hand. Practice Software Craftsmanship and you will have the confidence to adapt.

Software Craftsmanship in isolation is not enough. User Experience in isolation is not enough. Build-measure-learn on its own is not enough.

It’s a question of how we bring these methodologies and practices together and how an organisation molds itself around them. They need to be absorbed in to the corporate DNA and used to weave the fabric of innovation.

Going forward I feel our innovation mantra should be Design-Develop-Deliver. Like the build-measure-learn feedback loop advocates we need to rapidly move around this loop.

We need to shift our horizons to fully encompass the user. We start with the user and we end with the user. In his book Eric provides an anecdote about a feature not being complete until it has been validated by the users. I love this. It’s seems obvious and a subtle shift from the product owner or QA saying a feature is done, but its a big leap in terms of mindset. Imagine having the confidence to remove a feature (and deleting all the code) if users don’t actually get value from the feature? The focus this would bring to an organization would be immense.

We can destroy the traditional mindset and reject the dogma that software follows a fixed release cycle (regardless of how short it is). When the feature has been coded, give it to the user, it not done until the user says it is done.

I believe the Design-Develop-Deliver philosophy will allow us to innovate faster and deliver experiences that users want. It also creates opportunity for tech companies to enable this workflow. I would love to have a seamless set of tools and services that enable me to design-develop-deliver, this is far more powerful than getting caught up in the underlying technology debates and teams practicing their principles in isolation. We need to blend it all together.

Speak to your users in 3D.

Building organic software

I’ve been thinking a lot recently about how I can build “organic software” that permits services to transparently join the network and leave again. I want to know when a service joins the network and for it to advertise itself. I want to know when a service leaves the network so its consumers can gracefully adapt. I want a service to browse the network for the services it requires. I don’t want worry about configuration.

This is not new. If I cast my memory back to the big days of JavaOne I remember Jini (now Apache River) being the “big thing”.

Yesterday I started looking at Multicast DNS (and Zeroconf), which is used by Apple’s Bonjour. Once again the Node community has not disappointed, I quickly discovered node_mdns.

I decided to do a quick spike around MQTT, which I have also been looking at. Again, the Node community delivers with MQTT.js.

I have a service that provides an MQTT broker. When the broker is ready it advertises itself on the network.

My client browses the network for an MQTT broker, when it finds one it connects to the broker and starts publishing messages. If the broker leaves the network it stops publishing. When the broker rejoins the network, it is again discovered, and the client resumes publishing again.

Take a look at my Gist.

Although my exploration has been limited I have found it to be simple and robust. As we shift our mindset from the monolithic deployment of software to one where we build, deploy, and scale processes independently I feel this offers some really interesting and exciting possibilities. This is especially true as we look more and more at how we bridge in to the physical world to build real time experiences that consume large amounts of data and tap in to sensor networks. The end solutions are broad, it can be digital marketing, gaming, home automation (or automation anything). I came across Pachube the other day, which folds in to this and opens the door to some really interesting possibilities.


I’ve spent some time recently looking at AMQP. I’ve been using it with RabbitMQ and Node. The de facto library for Node is node-amqp, which is powerful, but I have found it to be too low-level for my every day needs of pub/sub.

I wanted a more succinct syntax for publish and subscribe so I created node-messaging.

Below are some code snippets, for complete examples and further documentation jump over to node-messaging.


messaging.createMessenger( url, function( messenger ) {
    messenger.openForPublish( exchangeName, exchangeOptions, function() {
        messenger.publish( exchangeName, routingKey, { body: "hello world" }, messageOptions );


messaging.createMessenger( url, function( messenger ) {
    messenger.openAndSubscribe( exchangeName, exchangeOptions, queueName, queueOptions, bindingKey, subscribeOptions, function( message ) {
        console.log( "Received message '%s'", message.body );