I love design tools.  In architecture school, I loved the design process so much that instead of becoming an architect like my classmates, I decided to specialize my study in the field of design tool development, specifically understanding how to build software tools for architects.  That's when I traded in my drafting board for Visual C++ 1.0.  But I never gave up my sketchbook.  For me the sketchbook is a perfect design tool.  It allows for creative exploration while recording ideas in predictable (page-by-page) linear manner. 

When designing software applications, there has always been a disconnect between the tools that the creative designers use and the tools that the software developers use to implement those ideas.  It's like they are living in different worlds.  The designers use the limitless expanse of a digital canvas with programs like Photoshop or a structured tool like Visio to capture the design intent of a user interface that will either be on a desktop application, on the web, or a handheld device.  Then the software developer takes that intent and turns it into "widgets" on a form or page using a very limited toolset.  An initial implementation is crafted and then demonstrated.  In that demo, the original designer sees that many of his great ideas weren't used because they would require custom coding or they just weren't possible given the toolset.   The developer would retort that it's possible to implement the design but that it would take time and resources that could be spent on "more important things."  The designer then says to himself, "I need to start looking for a new job, one where my designs are taken seriously."  I just finished reading a great book, Dreaming in Code by Scott Rosenberg.  In the book, he writes about a software project that was running into many of the problems that I have seen first-hand in my career.

"Yin [the designer] saw the Application Bar as a last-ditch compromise, the only remaining piece of an original design that had once included many more ambitious components and capabilities; yet the developers found her sketches overambitious, full of shapes and features that they would have to custom code since there was nothing like them ready-made in their wxWidget toolkit."
Scott Rosenberg, Dreaming in Code, Crown Publisher, New York, 2007, p.312.

Having used Microsoft development tools for my entire career, I know that this was not a unique experience and that Microsoft-oriented development shops were not immune from these problems.  In many software shops, the software developers are making the interaction design decisions and you can read about that in Alan Cooper's The Inmates are Running the Asylum. That is exactly why Microsoft created the Expression Studio, a set of design-oriented applications that can help to keep the design intent consistent from conception to execution.  I have been playing around with the studio and I am blown away by the flexibility and power of the toolset.  Here's the workflow for a desktop software design process:

  1. Using Expression Media, a graphic designer manages the assets (images, video, audio, etc.) that form their digital library.
  2. Using Expression Design (not a photo editing application), the graphic designer crafts the visual styling and design for the application.
  3. The designer sends the design as XAML (a type of XML) to the interaction designer who uses it directly to craft the interactions for the application using Expression Blend.  Expression blend works directly with the Visual Studio solution that the software developer is using.
  4. The software developer then uses Visual Studio and the XAML (crafted by the graphic designer and enhanced by the interaction designer) and hooks up the business logic to the application.

The powerful thing is that the tools used by the graphic designer and interaction designer are made specifically for them, not software developers, and that pedigree shows.  These are primary tools meant to support a creative design process. 

Have you run into similar workflow problems in your software development processes?  I'd love to hear about them and how you solved them.