‘You do not need to be a mechanical engineer to drive your car or you do not need to have a hold on any automobile mechanics to use your car’. You just need to know how to operate the steering, clutch, break and gear, and of course other monitor and control interfaces. In short, you need to know ‘how to use your car’ and that is how ‘you want your car designed for you’. Software design is no different.
Most of the times, the end-users of a software product are not the software developers. Even if the software developers are the end users of your product, they do not want to go through a big hassle to put the software into use. For example, if a Java developer is using any profiling tool from within his IDE, it makes his life easier if the product offers itself as an easy-to-use tool apart from being feature-rich and he doesn’t really need to learn the technology behind profiling. Usability is one of the major factors in the assessment of software. The complexity that you built into your software need not (and should not) reflect in its usage too.
As a software developer, you need to visualize how different end-users would be using your product (or would like to use your product) and design and develop accordingly. You may formally call it ‘User Centric Design or Development’ but in the end what matters is ‘the comfort and the ease with which the users understand and use your product’. In other words, if there are any possibilities where ‘design is driving the requirements’ (and you know what I mean), it is strongly suggested you pay close attention and strictly avoid such practices. Though ‘design-driven-requirements’ is not a common practice, it is sometimes likely to happen. Usability is often confused with rich-looking interfaces (GUI) of the product. No, it’s not just that, though it is a part of it.
For example, while there are many Social-Networking sites out there, why are a few sites more popular than the others? Is it just the GUI? Why are some eCommerce sites more popular than others? Giving out an example from the other side of software development – if you have developed a makefile, how would other developers in the team find it as ‘usable’? The makefile should able to tell you – ‘what are the different targets available and different options to use with those targets’. Also, things like, different module owners be able to build and deploy their own modules than building the whole software, every time they want to test something. The interface is not a GUI here. ‘User Documentation’ is often considered as replacement to Usability. It’s not correct. A detailed User Documentation is often considered as a replacement to address Usability requirement (example, how to navigate and how to recover from this error etc). Remember it is not just how the Documents talk to the user, but it is mainly about how the Product itself talks to the users. So, in brief, Documentation need to serve as a Complement and not a Replacement in using your product.
So, if you are designing your software, there are a few important things that you should ask yourself.
- Who is going to use this software? Business users? If so, who are the different types of Business users? Software developers? If so, what would different categories of developers like to achieve from this product.
- What they need to learn to put the software into use and maintain the same? How they interface with the product? How easy is the interface to use the product? What are the possible errors that users might hit while using the software? How does the software help the user understand and recover from these errors? Always remember that you are the constructor of the software but not the end user. The learning and complex configurations to deploy the software into production might look trivial and easier for you as you know the ins and outs of the software but NEVER ASSUME that the end user is expected to know all this information. So, take this additional care at the very beginning of your software analysis and design stages and avoid last minute surprises.
- What is the importance given to the Usability when you design Software?
- What is your process to invite the feedback on Usability with your Iterative development model?