Bridging the gap - Agile and the troubled relationship between UX and software engineering
This article appeared as the cover story for the September 2009 edition of T.E.S.T magazine.
For most of its history software engineering has had great difficulty building applications that users found enjoyable. Far too many applications were frustrating and wasted users' time.
That has slowly changed with the arrival of web developments, and I expect the spread of Agile development to improve matters further.
I'm going to explain why I think developers have had difficulty building usable applications and why user interaction designers have struggled to get their ideas across. For simplicity I'll just refer to these designers and psychologists as "UX". There are a host of labels and acronyms I could have used, and it really wouldn't have helped in a short article.
Why software engineering didn't get UX
Software engineering's problems with usability go back to its roots, when geeks produced applications for fellow geeks. Gradually applications spread from the labs to commerce and government, but crucially users were wage slaves who had no say in whether they would use the application. If they hated it they could always find another job!
Gradually applications spread into the general population until the arrival of the internet meant that anyone might be a user. Now it really mattered if users hated your application. They would be gone for good, into the arms of the competition.
Software engineering had great difficulty coming to terms with this. The methods it had traditionally used were poison to usability. The Waterfall lifecycle was particularly damaging.
The Waterfall had two massive flaws. At its root was the implicit assumption that you can tackle the requirements and design up front, before the build starts. This led to the second problem; iteration was effectively discouraged.
Users cannot know what they want till they've seen what is possible and what can work. In particular, UX needs iteration to let analysts and users build on their understanding of what is required.
The Waterfall meant that users could not see and feel what an application was like until acceptance testing at the end when it was too late to correct defects that could be dismissed as cosmetic.
The Waterfall was a project management approach to development, a means of keeping control, not building good products. This made perfect sense to organisations who wanted tight contracts and low costs.
The desire to keep control and make development a more predictable process explained the damaging attempt to turn software engineering into a profession akin to civil engineering.
So developers were sentenced to 20 years hard labour with structured methodologies, painstakingly creating an avalanche of documentation; moving from the current physical system, through the current logical system to a future logical system and finally a future physical system.
However, the guilty secret of software engineering was that translating requirements into a design wasn't just a difficult task that required a methodical approach; it's a fundamental problem for developers. It's not a problem specific to usability requirements, and it was never resolved in traditional techniques.
The mass of documentation obscured the fact that crucial design decisions weren't flowing predictably and objectively from the requirements, but were made intuitively by the developers - people who by temperament and training were polar opposites of typical users.
Why UX didn't get software development
Not surprisingly, given the massive documentation overhead of traditional techniques, and developers' propensity to pragmatically tailor and trim formal methods, the full process was seldom followed. What actually happened was more informal and opaque to outsiders.
The UX profession understandably had great difficulty working out what was happening. Sadly they didn't even realise that they didn't get it. They were hampered by their naivety, their misplaced sense of the importance of UX and their counter-productive instinct to retain their independence from developers.
If developers had traditionally viewed functionality as a matter of what the organisation required, UX went to the other extreme and saw functionality as being about the individual user. Developers ignored the human aspect, but UX ignored commercial realities - always a fast track to irrelevance.
UX took software engineering at face value, tailoring techniques to fit what they thought should be happening rather than the reality. They blithely accepted the damaging concept that usability was all about the interface; that the interface was separate from the application.
This separability concept was flawed on three grounds. Conceptually it was wrong. It ignored the fact that the user experience depends on how the whole application works, not just the interface.
Architecturally it was wrong. Detailed technical design decisions can have a huge impact on the users. Finally separability was wrong organisationally. It left the UX profession stranded on the margins, in a ghetto, available for consultation at the end of the project, and then ignored when their findings were inconvenient.
An astonishing amount of research and effort went into justifying this fallacy, but the real reason UX bought the idea was that it seemed to liberate them from software engineering. Developers could work on the boring guts of the application while UX designed a nice interface that could be bolted on at the end, ready for testing. However, this illusory freedom actually meant isolation and impotence.
The fallacy of separability encouraged reliance on usability testing at the end of the project, on summative testing to reveal defects that wouldn't be fixed, rather than formative testing to stop these defects being built in the first place.
There's an argument that there's no such thing as effective usability testing. If it takes place at the end it's too late to be effective. If it's effective then it's done iteratively during design, and it's just good design rather than testing.
So UX must be hooked into the development process. It must take place early enough to allow alternative designs to be evaluated. Users must therefore be involved early and often. Many people in UX accept this completely, though the separability fallacy is still alive and well. However, its days are surely numbered. I believe, and hope, that the Agile movement will finally kill it.
Agile and UX - the perfect marriage?
The mutual attraction of Agile and UX isn't simply a case of "my enemy's enemy is my friend". Certainly they do have a common enemy in the Waterfall, but each discipline really does need the other.
Agile gives UX the chance to hook into development, at the points where it needs to be involved to be effective. Sure, with the Waterfall it is possible to smuggle effective UX techniques into a project, but they go against the grain. It takes strong, clear-sighted project managers and test managers to make them work. The schedule and political pressures on these managers to stop wasting time iterating and to sign off each stage is huge.
If UX needs Agile, then equally Agile needs UX if it is to deliver high quality applications. The opening principle of the Agile Manifesto states that "our highest priority is to satisfy the customer through early and continuous delivery of valuable software".
There is nothing in Agile that necessarily guarantees better usability, but if practitioners believe in that principle then they have to take UX seriously and use UX professionals to interpret users' real needs and desires. This is particularly important with web applications when developers don't have direct access to the end users.
There was considerable mutual suspicion between the two communities when Agile first appeared. Agile was wary of UX's detailed analyses of the users, and suspected that this was a Waterfall style big, up-front requirements phase.
UX meanwhile saw Agile as a technical solution to a social, organisational problem and was rightly sceptical of claims that manual testing would be a thing of the past. Automated testing of the human interaction with the application is a contradiction.
Both sides have taken note of these criticisms. Many in UX now see the value in speeding up the user analysis and focussing on the most important user groups, and Agile has recognised the value of up-front analysis to help them understand the users.
The Agile community is also taking a more rounded view of testing, and how UX can fit into the development process. In particular check out Brian Marick's four Agile testing quadrants. UX straddles quadrants two and three. Q2 contains the up-front analysis to shape the product, and Q3 contains the evaluation of the results. Both require manual testing, and use such classic UX tools as personas (fictional representative users) and wireframes (sketches of webpages).
Other people who're working on the boundary of Agile and UX are Jeff Patton, Jared Spool and Anders Ramsay. They've come up with some great ideas, and it's well worth checking them out. Microsoft have also developed an interesting technique called the RITE method.
This is an exciting field. Agile changes the role of testers and requires them to learn new skills. The integration of UX into Agile will make testing even more varied and interesting.
There will still be tension between UX and software professionals who've been used to working remotely from the users. However, Agile should mean that this is a creative tension, with each group supporting and restraining the others.
This is a great opportunity. Testers will get the chance to help create great applications, rather than great documentation!