Did you know? DZone has great portals for Python, Cloud, NoSQL, and HTML5!

Creating a Software Product - Are You Doing it Wrong?

April 05, 2010 AT 6:36 AM
  • submit to reddit

The goal of software, be it web, mobile or desktop applications, is to help achieve business goals. However, without achieving people's goals, and with that the ones of software users, it is very unlikely that the business will achieve its own goals. This is why software projects should start with design, not programming. User centric design, that is, where accent is on understanding users and especially their activities. Not to diminish the value of other aspects, the quality of user experience is the most important.

You would think this is obvious? Absolutely not. The fact is that a large number of software projects neglect design completely and this inevitably brings about bad user experience. After posting Designing User Interfaces For Business Web Applications on Smashing Magazine and a large number of comments and e-mails that followed, I realised that problems I faced are still there and little is done to understand them and solve them. And, what are these problems?

The first problem is competency and responsibility. Most companies don't have a person in charge of making design decisions. That's what Bill Buxton calls Chief Design Officer (CDO) in his book Sketching User Experiences. Instead of having a person who'll make decisions and understand why they were made and what the consequences are, design is often everybody's and nobody's responsibility.

The next problem follows on to the first, and this is the work process. Although it is very ungrateful to generalise things, we could say that the process of developing a typical software project is oriented almost entirely at its functionality. By this I mean implementing business requirements. The problem is that business requirements describe only what and how the system should do (business rules), leaving out the fact that software will be used by people.

The process looks something like this:

  1. Project starts by gathering requirements and writing a specification
  2. Based on this, resources are planned and estimates given
  3. Further decomposition happens to get from abstract to necessary implementation documentation
  4. Backend and frontend are implemented
  5. Designer is found to create a "theme" for the application (when I hear something like this my left eye starts to twitch)
  6. Software is delivered (with a huge delay)
  7. Users start using the software, after which starts a series of usability issues, complaints and a lot of work for support staff
  8. After a while, it turns out that only 20% of delivered software is being used and sometimes it's not even used at all.

Although I've caricatured a little, you get the point. Many of us have taken part in this type of projects. Where are the users? Where is the interaction with people? Software is used by users and not analysts, project managers, or developers. Most project stakeholders create the software to suit their own needs i.e. for themselves. Most developers, for instance, just don't have the knowledge necessary to design a UI for humans. Just because it makes technical sense, it doesn't mean that it will help user experience. The technology is there to help people and not to make them its slaves.

To avoid these catastrophic scenarios, it's necessary to change the whole idea of software development, root and branch. So, instead of creating a "clean, professional and good looking theme" for a completed software it is necessary to design the behaviour of user inteface before the software is created. This includes various aspects of design, from determining the scope to interaction and interface design. Thus, decisions on user interface should affect the behaviour of the system and not vice versa. Technical contraints and business rules permitting, UI behaviour should not be stipulated by system backend implementation.

As Jessy James Garett says in his book The elements of user experience:

Everything user experiences should be the result of a conscious decision on your part. Realistically, you might have to make a compromise here and there because of the time or expense involved in creating a better solution. But a user centric design process ensures that those compromises don't happen by accident. ... It can be easy to fall into the trap of thinking that we are designing our site for one idealized user - someone exactly like us. But we aren't designing for ourselves; we're designing for other people, and if those other people are going to like and use what we create, we need to understand who they are and what they need.

This is certainly easier said than done, because as I have already said in the SM article - a good software product takes harmonization between needs and goals of both the business and the users. To achieve this you need to harmonize management, design and development. Otherwise, we come to a situation where everybody is frustrated, from developers and managers to clients and users.

Since this subject is somewhat neglected, I'd like to hear your experiences and opinions.

From http://www.jankoatwarpspeed.com/post/2010/04/04/software-product-doing-it-wrong.aspx

Comments

Lieven Doclo replied on Tue, 2010/04/06 - 1:18am

Although you bring up some really interesting ideas, what you are suggesting is impossible in real software development. Unless you're simply porting an old application to a new platform without adding functionality (why such projects exist is another discussion), you won't be able to find out all the behavior your userbase needs. You might be able to get about 30 to 40 percent, maybe.

Remember, software users are a special breed of humans. As programmers, it's hard to find out the specifics of a business, just because we're not confronted with its quirks every day. As users, it's hard to understand the complexity that goes into a software application. To this day this mismatch, I believe, has caused the most project failures.

Your statement 'software projects should start with design, not programming', therefore, is incorrect. I believe that the best way to find out user needs is to use prototyping until the sun explodes. How do find out what a user wants? By quickly showing him what you think he wants. You'll know quickly enough whether your assumptions were right. User interface design is not the responsibilty of a developer. It's the responsibility of your key users. After all, they're the one who'll end up working with the damn thing. We're only there to materialize their needs and provide guidance when their needs are technically impossible.

While I applaud any programmer that takes up usability study (every front-end developer should have read Designing Interfaces), what we really need are middlemen. People that can transfer knowledge between the business end and the technical user interface. Unfortunately, there aren't many of those around who excel at this.

Alex(JAlexoid) ... replied on Wed, 2010/04/07 - 6:33pm

 By quickly showing him what you think he wants. You'll know quickly enough whether your assumptions were right.

 Actually, you will stick with the technicality of "You approved this way of doing it". Witch, is in fact, not good for users.

There is actually no right way of doing it. And prototyping a lot just makes your users angry and the prototype presentations short and indecisive.  Basically any UI has to be designed together with the analysis, not after the functionality and use cases(stories or whatever)  are committed to.

 But even then it will fail, since the users are still users and will complain just for the sake of it. Unless you're Steevie Jobs and his Reality Distortion Field(TM).

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.