Test Driven Design
I recently worked with a client where one of our deliverables were wireframes that illustrated how pages would be laid out and how the UI would work. We were quite pleased with the results, there was some quite complex AJAX based functionality that provided a really immersive, goal orientated experience that looked like it would make finding products easy and enjoyable. Testing the initial wireframes with users was an enlightening exercise, and demonstrated that the wireframes we had developed were not yet ready – users were not able to fulfill the goals they were set. More worrying, some of the complex functionality we were introducing just did not work (some of the navigation, filters and sorts were confusing, just presenting information on a single page would suffice).
Usability testing often gets discussed and is a good intention but all too often budgetary or time constraints mean it never happens. The user testing I refer to here impacted neither. We did our testing in a meeting room, the customer sitting at one end with a facilitator, and the team watching on the projection screen in the same room. We used a talk-aloud protocol walking through the static powerpoint wireframes that were linear in their presentation according to the ‘happy path’ to realise the customer goal. Someone took notes as we went through the wireframes (in the notes section at the bottom of the PowerPoint deck). It was quick and dirty but produced results. After a couple of sessions things that we, too close to the design, had missed. Changes to the wireframes took a few hours and allowed retesting the following day. Indeed we made some quite significant changes to the user interaction model. When we re-tested the wireframes the improvements were evident. The feedback was more positive; there were fewer blank faces, less confusion and “I’ve no idea what to do next” was never uttered. This was true iterative design in cycles that took a few hours. Compare this to the days if code was involved.
Where does this fit into the agile way of delivering software? In the agile/ lean zealot’s passion (and impatience) delivery, and their (dogmatic?) assertion that anything but code (working software) is waste, they loose focus upon what is really important, that of overall product quality. Product quality is not only zero/ minimal defects and meeting the business requirement, but also delivering something that is usable and delightful to use. Developers may do Test Driven Development, but this is based on assumptions that what they will code is right. TDD should start earlier in the process, Test Driven Design. It takes time to write your tests up-front, but we know it to be a good thing. So why not design the user interface (wireframes) and test that up front?