In a recent EE Times newsletter, the editors re-ran a series of design articles by Niall Murphy, software engineer and author of Front Panel: Designing Software for Embedded User Interfaces. The one article from this series that really caught my eye was “Interfacing the User.” Murphy begins with a bold statement:
“Good software engineers don’t always make good interface designers. Sometimes they trust the user too much.”
As a software engineer who formerly did this kind of work at Ford, Visteon and Motorola, I suppose I should be offended by this remark. My experience at Altia, however, has taught me that Mr. Murphy is correct. Software engineers cannot do interface design on their own. It takes a (small) village – and the right tool – to create a great interface.
No matter how talented your software engineering team may be, they only provide a fraction of the expertise required to create winning UIs, which (as companies like Apple have demonstrated) result in market-leading products. Software engineers need to collaborate with their systems engineering counterparts as well as experts in Human Factors and Industrial Design to complete the circle of knowledge and know-how. The resulting user interface then needs to be tested by real people who can confirm ease of use and provide feedback about the design.
The best method to achieve this collaboration is via a model-based development approach. All of the tools from the various teams involved in interface design can be integrated into a single environment to create a working model that can be tested and refined early in development. The final executable specifications for that model can be baselined as a requirement model and then act as the initial software design, which can then be refined for embedded target performance and limitations. From that point, deployable graphics code can be generated from that refined model with a code generator like DeepScreen.