Creating a software product - are you doing it wrong?

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.

More articles in Blog archive or elsewhere
Advertisement

35 Comment(s)

Marco

Marco 04 Apr 2010 #

You're totally right. I mean, how can you build a house when you don't even have any plans on how it's going to look like? With software, it's the same (but, when following the agile principles, you still need to remain flexible in your design).

Janko

Janko 04 Apr 2010 #

Unfortunately, many companies are not aware of that. Many software project, be it "customer-driven" or "product-driven" fail because they neglected the importance of design.

Bish

Bish 07 Apr 2010 #

Design? Do you not mean software engineering?

Janko

Janko 07 Apr 2010 #

Nope, I mean design.

Marc

Marc 04 Apr 2010 #

I think that starting software development by design or programming is narrow. Software, from scratch, starts with an idea. Often time the idea is not tested before hand. The idea gets discussed among designers, developers and the people behind the idea. It will be tinted by whoever has most leadership among the group.

The best way to develop software is by involving people with different backgrounds and concentrating has much as possible on core functionalities and the best way to realize them on every level.

Thanks for sharing your thoughts.

Janko

Janko 05 Apr 2010 #

Hey Marc, thanks for the comment! What I meant by design is user experience design, starting with strategy, objectives and goals, user research, specifications and so on. This is where teams should focus first. But without professionals with wide range of skills capable to make necessary design decisions I am afraid the idea won't come a long way.

WC

WC 05 Apr 2010 #

I couldn't agree more.  At work, I'm often left to design the user interface and any attempt to get involvement from anyone else in the company is futile.

I do insist on them telling me what they want to DO with the software, instead of just handing me specs and building something that meets them.   (I have tried just working from specs before...  It did not go well with people who can't be exact in their 'specs'.)

On the other hand, when we were a smaller company and the 'design' was done by the owner (not a coder) and actually laid out visually with notes on each element of the design, things went very, very well and everyone was happy with the results.

Janko

Janko 05 Apr 2010 #

That is another problem with handling specs - they are not always well written, and soon after project starts they are not updated with changes that inevitably happen.

Mateus

Mateus 05 Apr 2010 #

Recently I've redesigned one of my company's systems (web based) focusing more on the user experience, basically I changed the UI, the code was left almost the same. After the go-live we started receiving lots of positive feedback, including some users saying the system was faster to load and more responsive.
I think this illustrates well what you're saying. Although it's very difficult, we (developers like me) have to think more about the user experience.

Janko

Janko 05 Apr 2010 #

I agree that developers should also develop with users in mind. Some developers have good understanding of UI design, for instance. But teams should also have professionals that have other necessary skills (user research, interaction design, usability testing...).

That said, it's better to have at least some UX awareness than none.

Miguel

Miguel 14 Apr 2010 #

Written? You mean like the times when you get an email and it says "Hey we have a "blablablatoolwhatever" we've been working on for the last 3 months, can you design the front-end for us? We want it to look sorta web 3.0 kinda thing, you know just work your magic"

Adit Gupta

Adit Gupta 05 Apr 2010 #

Programmers love their code and most of them think that a good software is just about good code. Although this is partially true, they don't realize that a normal user has no clue about programming and they just don't care about the code.
Fortunately, our team has two UI designers and we do spend a lot of time on software design.
I do think that the scenario is changing and companies have started to think seriously about software design. Smile

Janko

Janko 05 Apr 2010 #

I absolutely agree. Programmers should love their code and be passionate about it, because good code that work smoothly is a part of good user experience.

Sometimes it's though to keep developers and designers aligned and harmonized, but that is again the responsibility and structure problem.

Gaurav Chandra

Gaurav Chandra 05 Apr 2010 #

The problem with most developers think that if they can use a piece of software, all can use it. This is a big mistake. Developers and those who work on the project know how to perform an action but my parents or my friends don't.

Never under estimate the importance of usability and user experience. That's my motto.

Janko

Janko 05 Apr 2010 #

A good way to explain developers (and any other stakeholders) that they should have users in mind is to invite them to watch usability testing sessions. Although it's not easy to organize it especially if there is no necessary awareness, it's woth trying.

Dario-g

Dario-g 05 Apr 2010 #

Thats why i love "Getting Real" book from 37Signals Smile

Slobodan

Slobodan 05 Apr 2010 #

Some very valid points, Janko. I honestly believe that key to success is testing the application with users that have never seen it before. Unfortunately, this is rarely done and not doing it can lead to a disaster, or at least a waste of money and/or resources later on.

And to quote Steve Krug "It's better to test with one user early than X (can't remember the number) when it's too late".

pandora

pandora 05 Apr 2010 #

Yes  i agree with it. I am basically a PHP programmer and not a designer. But when i need to develop any website I first ask the designer to give me the design converted into the HTML. I then adds the code where needed.
When i get the website HTML design first, i can easily understand that what is really needed.
Usually I read the client's requirements and divide it into various parts and pages. This includes the interaction features required like singup, logging,chatting etc etc.  and then designer start his work. After that it makes my life easier as i clearly understand that what i need and where..........

Alek

Alek 06 Apr 2010 #

Very well said. I, by the way, enjoyed reading this even though I personally dislike design. You, however, are completely right. I remember when I had to do my first "big" project. It had to be a complete piece of software, which was no that hard to code. When I was finished testing and debugging, I realized something crucial. I looked at my program and I said to myself, "Wait a minute, this is -- supposed to be easy to understand. Even my mother should be able to use it." I didn't have a GUI, and light years away from a well designed one. So the design took about twice as much as the coding, since it had to be adopted and adjusted to what I've already created. Anyways, it was a huge mess, and If I had only read this post a week before I started that project, it would've made my experience a whole lot easier and pleasant.  

Thank you for sharing this. Keep up the great work!

annu augustine

annu augustine 06 Apr 2010 #

I agree with you 100%. I find that often user centric design is in an afterthought, the focus is always on implementing the functionality first. Later when the users complain, the focus changes to the UI, surely we do things better!

Norik

Norik 07 Apr 2010 #

Hi Janko,

This was an interesting topic you wrote about. I would like to see you write more about it. Also, do you do your wire frames on paper and scan it, or you use any digital tool? They look nice.

-Norik

joe

joe 08 Apr 2010 #

Hi!

I strongly agree with your point of view, but... (there seems to be always a "but" around the corner)

.... as I got to know daily business, the IT department usually has to struggle with:
- limited ressources
- fast changing requirements
- unstable requirements
- more stakeholders than developers
- no single point of contact taking decisions

Additional there are programmer (don't want to call them developers) for who coding is a job, not a passion together with users, who do not care about fighting for features but behave like small kids: I wanna have that and no matter what mum is telling me.

It's great if you start a project and can start with all the mentioned points: user research, set up personas (I personally like Coopers concept of personas), draw different scenarios etc.

In reality (or the business world as I am used to know) the system is set up, the changes are rebuilding functionality what the system never was used to have (e.g. putting order entry into a CRM) and with a history in user's minds.
Have you ever tried to change the mind of the users? The idea of "perfect software development" to manager who have to fight for every penny? The need for decisions on strategic level, on operations level and on user level? Not only for one department but also for about 4-6 departments?

Maybe I am in some mood of frustration at the moment, but the shiny happy world seems so far away today.

Cheers,
joe

Janko

Janko 08 Apr 2010 #

Joe, many of your points are valid, whether they came out of frustration or not. I am designing UIs for large, megalomaniac systems (and couple of years ago I was developed such systems) so I understand the problems you described.

But if there are organizational, structural or personal issues like those you mentioned, then the organization has to rethink its goals and strategy. Why such things happen? Can we do better? What we need to change? Oh, the word "change" is undesirable in such companies Smile

I know that advocating UX in a company that hasn't sense for it is a tough job so that is one of the reasons for this article. I've tried so many times to change things and many times I failed. But when I was succeeding it was more than satisfactory.

joe

joe 10 Apr 2010 #

Hi Janko!

Thanks for the response -

Changing the way of thinking of companies is quite hard from botton 2 top, as you already mentioned. And success is usually a quite fine feeling Smile

Maybe there is no revolution but some kind of evolution.... under pressure, its hard to spent time and money - but step by step it could work!

Thanks for listening/reading,
joe

Keith

Keith 09 Apr 2010 #

I completely agree, although I have an issue with your use of the word 'design' - largely because I think a good number will read this post and not realise exactly what type of person this should be, and simply feel reinforced in their selection of a good visual designer.

Design is a much overloaded term. I think the real requirement is a Usability or UX expert - whether that person is on the team, or tied in with the team, it's hugely important that they exist.

As you allude to with the "theme" word, these people really are different animals to a graphic designer or a visual designer. I find that only very few people coming from such a background understand the issues inherent to user interfaces, and almost none are aware of the massive body of research and principles surrounding the discipline.

Unfortunately, especially in smaller projects, it seems that budget is a factor. While in the long run I strongly believe one can extract more value from a product with significant investment in user experience from the beginning, I'm not going to try and hide the fact that it does cost a lot. I guess it's somewhat related to the cashflow issue - your long term goals are compromised because of short term conditions.

Eric

Eric 09 Apr 2010 #

It's time to teach developers about design! Everyone on the team needs to understand what goes into it and why the designers on their team have quite a bit of difficult work to accomplish!

Emil

Emil 17 Apr 2010 #

I agree. I have tried most of the approaches, and designing first (including the HTML and JavaScript) makes the whole process much faster and easier. I guess the only requirement would be for the designers and UX to understand how the back end works.

For most users a software is design and functionality. If the design is hard to use, or conveys the wrong message, the users will not see the functionality.

If there is good design and no functionality, then the business idea is weak.

the WebNeck

the WebNeck 17 Apr 2010 #

Software design is also a balance of business objectives with implementation which the users will accept. Many times the new project is one that is to replace or expand the scope of an existing one, collecting the same data as well as new. If this scenario is true, much is to be gained by listening and taking some notes before any design work is done.

First, listen to the ones with the money, those saying something new is necessary. Don't accept just the outlined objectives but ask for the reasons of why a change is needed, noting the good and bad of the current implementation. Now, you have the management's perspective of what is to be improved upon and what is to be minimized if it cannot be removed entirely.

Now listen to the users and note their opinions of what they like and dislike of the current system.  Now, design can leverage goals and objectives expressed by both management and users. This will minimize the gray areas.

Successful design now has focus and can now follow through implementation by showing project managers where their objectives are being met and users where their input was part of the design (users will now use it because their input was found of value and implemented).

the WebNeck

the WebNeck 18 Apr 2010 #

To stretch and define my viewpoint a bit further, design work is visual, creating a UI which is not only intuitive but one which minimizes hassle, coordinating workflow, satisfying short attention spans and defines an end.

Developers, create the toolkit with which the designers can use. Developers can place page mark-up anywhere on a page and with a few key-strokes define a new order, designer's feedback is what is used to define the order.

But, initially it is a great help to all to clarify the project's fuzziness before any work is done. A few more questions prior to project launch which further defines goals and objectives is cheaper than rework and successful projects will now have a chance to complete within budget, with less headaches for all those involved.

Designers, are not only to initialize but to follow through to completion (as well as developers) for the entire project and communication between the two is ongoing.

4@

4@ 10 May 2010 #

I get the design concept in terms of functionalities and user experiences. when it come to error messages, warning messages, or any type of system messages that appear to end user, whose responsible for this? How can a company ensure that the same standard is being used throughout the system? At my company there is no set standarss or structures and i would like to start impleneting standards to show a unified tone. How does your comapnies apply such things? I'd like to know please.

Brian laws

Brian laws 13 May 2010 #

I think it is arrogant to beliveve that designers are the only people who deal with the user interface.

As an SEO guy and a former developer, I am dealing and have dealt with userability issues all the way through my career.

I believe it is a seperate discipline from both design and developement, which encompasses both.  

But please dont get me on to the subject of the many web designers who I have worked with wo have had no concept of usability at all........

Nick

Nick 14 May 2010 #

No mention yet of Eric Evan's Domain Driven Design?

Dan

Dan 17 May 2010 #

This should be the golden rule for programmers: UI first, then start programming! As I see it the packaging is as important as the product itself.

Mark Kamoski

Mark Kamoski 20 May 2010 #

All -- This is a nice article, albeit a bit of a hand-wave. I would like to try to add some to it. When the article says this "Project starts by gathering requirements", in Step 1 above, that is absolutely correct except that it fails to mention that such gathering must be done by listening to the endusers who will be using the system, interviewing the endusers, and working with the endusers closely throughout the process. In short, one must talk to the endusers, write down what they say, show them what is written, ask them to correct it, do some work, and then repeat the process. (Of course, the engineer is obligated to correct inconsistent rules, illogical processes, and the like, as a matter of course, but such must be fully explained and understood by the endusers.) For the life of the system-- why? Because requirements. businesses, domain, context, rules, laws, technology, markets, etc, all change. If one does that, then Step 6 and Step 7 and Step 8 change drastically from what is mentioned above. However, one additional important point to note is the that development process is a workflow parallel-nature (not linear-nature) -- as such, each "step" is done (in part) simultaneously while other "steps" are being done or at the least each step is "visited" in rapid succession over and over again -- it is an integrated, intertwined, interative workflow, not a rigid stepwise process -- furthermore, listing them as "steps", or thinking of them in that way, implies an artificial order and precendence where such ought not exist-- the order may be jumbled or randomize or reprioritized, on-demand, driven by (you guessed it) enduser requirements. This is why, BTW, the YAGNI http://xp.c2.com/YouArentGonnaNeedIt.html approach makes so much good practical sense-- implement what you need as stated by the enduser. HTH. Thank you. -- Mark Kamoski

Bob

Bob 14 Jun 2010 #

Its all very well saying that a program should start with design first and let the programmers jump through hoops but I believe that is just as bad a method.  After all if you design for what the users really wanted to do with no functional restriction you'd be making something to help them sit down with a cup of coffee, watching tv. Smile

As a programmer often when you get a design template to apply to a new or existing website/program you see little understanding of the underlying functionality. They designer might slap on a search box here or put some derived bit of text there without realising the implication of implementing that would be a couple of weeks addition work.

Also designers tend to focus on what looks nice, not necesarily what will help the user.  So can often be just as much a hurldle to usability as programmers.

I agree that the UI person ideally should be neither a designer or programmer but talk to both.  More importantly there needs to be a back and forth discussion between the two camps rather than viewing them as seperate phases.  And you need to get users involved at some point because knowing how something works can make even the most obscure process seem obvious, only someone fresh can show how unclear it really is.

Comments are closed
via Ad Packs
9292