The ability to take a broad view of the world and incorporate lessons learned from other disciplines distinguishes the best practitioners in any field. As UX professionals, there is much we can learn from good software engineering practice, which maps a team’s understanding of a problem at a human level onto the implementation of a technical solution. The essence of good software engineering practice is effective user experience—from developing the high-level design documentation that describes how the main elements of a system interact to its implementation in clearly written code. Though the relationship between software engineering and user experience is not always an easy one, software engineers and UX professionals share some common goals. Both have a vested interest in producing systems that are useful and usable.
This column, Innovating UX Practice, will explore how we can apply software engineering concepts and practices in the context of user experience design and, hopefully, build greater understanding between the two disciplines.
“Programmers rate themselves almost exclusively by these two rubrics: how challenging is the field and toolset, and how virtuoso are their talents.”—Alan Cooper
“Let us change our traditional attitude to the construction of programs. Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do.”—Donald Knuth
“Design and programming are human activities; forget that and all is lost.”—Bjarne Stroustrup
The Need for Refactoring
Both software engineers and UX professionals can find themselves in the position of having to modify a system that has evolved without strategic planning rather than resulted from requirements‑driven design. When faced with a situation in which we are trying to improve a user experience without adding new functionality, we can apply refactoring, a common approach in software engineering. Martin Fowler, coauthor of the book Refactoring: Improving the Design of Existing Code, defines refactoring as follows:
“…changing a software system in such a way that it does not alter the external behavior of the code yet improves its internal structure…you are improving the design of the code after it has been written.”—Martin Fowler" (Continued via UXmatters, Peter Hornsby) [Usability Resources]