Read my book

I wrote books about Webpack and React. Check them out!

Wednesday, November 30, 2011

Lean UX - Better Software, Faster?

As you might well know, most software projects are considered failures. We've developed software products for a long time and we still don't get it right. What's going on?

I believe it has something to do with the intrinsic complexity of software development. Barriers between various stakeholders definitely aren't helping the situation. In addition we're bound by basic laws of communication. In this post I'm going to provide some kind of way, lean UX, that can help us to deal with these issues better. Read on if that rang a bell.

Stakeholders - The Heroes of Our Story

Code Cowboys by PlingPl├Âng (CC BY-NC-SA)
Whether you wanted or not, your project is going to have stakeholders. At minimum you'll present a few of these at once. You might be developing software for yourself. Often things are more complicated than that. Enter customer and actual user (say Jane Doe at the Mulberry Street).

What complicates things further is that each of these groups has its own sets of goals. You as a developer might want to end up with a nice and clean architecture that's easy to work with. The customer might want just something to pass onto her users to serve her business goals.

Even if a piece of software managed to pass the customer's scrutiny, this doesn't mean actual users will like or use it even. Business goals don't always equal to user goals.

Conflicting goals are just one problem. Where there are people with different backgrounds, there's friction. Add a several cultures to the mix and you've got a nice soup together and hilarity ensues.

Lost in Translation
Trip and Fall Down Carefully by jimmiehomeschoolmom

Each time you communicate somehow, something is lost in translation. In a way this blog post itself is just a crude approximation of my current thoughts. It probably would look a lot different in my native language. The language itself puts some constraints on your thought.

This same idea can be thought to apply on cultural level. In a way we're trapped to our environment. Fortunately things aren't all that bleak and we can always push the boundaries around a bit if we're willing to.

As each group of stakeholders passes information to each other, some of it is lost or mutated somehow. You might remember the old children's game where they whisper something to the next in line till you reach the end. That's pretty much what happens in business too.

Is there something we can do about the situation? Sure. We could cut down some hierarchy and provide more effective ways of communication. It's easier just to say that than do it in practice. That's where I believe lean UX helps us. It also yields us several other advantages including better visibility to the project and its progress.

Lean as in Steve Prefontaine

Steve Prefontaine by The Happy Rower (CC BY-NC-SA)
What does that lean part in lean UX mean? I've discussed this topic before in the context of software development really briefly. It all comes down to doing things in efficient, not wasteful manner. Let's examine the concept on a broader scope to understand better what this means.

Consider a runner such as Steve Prefontaine. Becoming a top runner takes definitely a lot effort, and it requires some amount of talent too. There's a certain parable related to software development in it, though.

Endurance running is not just about speed. It takes a huge amount of stamina to make it through the event. No sane person runs a marathon in sprints. You'll have to make a constant, steady effort to get anywhere.

Running on a high level in particular requires excellent technique (waste less power) and a good idea of where your limits lie. You'll want to pace your training and eventually the big run right.

This is definitely true for software development as well. Unlike in running though, there's usually no definite goal in software development, though. How to deal with that?

That's something you have to figure out during the development work. You might have some initial hunch but that's about it. Lean development can serve as a compass of sorts. We'll have to prioritize our development effort and thrive towards a common goal. How can we find this goal? This is where UX design kicks in.

It's Not About the Features, It's About the Experiences

iPod Toilet Paper Dispenser by Won-Tolla (CC BY-NC-SA)
Who in their right mind would want to use an iPod toilet paper dispenser? If you ask me, that's a good example of a pointless product. If they had simply asked who do we sell this thing for, perhaps I wouldn't have to ask this particular question.

As developers we really love to see those feature lists on products. My figure on this particular component is better than yours! Guess what? That really doesn't make that much of a difference if the UX is there and the product has been designed a concrete user in mind.

You might remember the impact Apple's iPhone made as it came to the market. Technically it wasn't that great. It had something really special, though. The design had been concocted a relatively ordinary person in mind. Instead of aiming for techy nerds, they delivered something a casual person could use with ease. That's all it took to change the world.

There's an X in UX for a Reason

Happiness by paloetic (CC BY-NC-SA)
Have you ever wondered why they put X in UX? It stands for eXperience. These days we don't talk about just User Interface design but rather focus on how the user experiences the user interface. In short it provides us a nice way to include actual users to the design process as well. After all it's those that matter in the end.

I think it's kind of ironic that UX design has met the same fate as testing. It's something you put at the end of the software development process. Sadly there's no easy way to bake UX in the product then. On the contrary! In my view it's something that should guide the development of the product. As they say, you can't polish a turd.

Fortunately things seem to be changing. Testing is appreciated these days more and its value has been discovered. Specific techniques, such as Test Driven Development, embrace this. It seems to me lean UX is a welcome step to this direction.

Lean UX - The Solution?

Temporary Solution by Paul G (CC BY-NC-SA)
By putting the cat (aka UX) on the table, we can begin to provide concrete value to actual user straight from the start. Instead of going through excruciating amount of guesswork we can work earlier with the people who are going to end up using our software.

Smashing Magazine's article on lean UX splits the UX part of the process in the following parts: concept, prototype, validate internally, test externally, learn from user behavior, iterate. I presume pretotyping could fit the conceptual stage especially if we're just validating various product ideas. I've also covered some wireframing tools before that could be beneficial in the early phases.

By focusing on the UX first we'll have a much better chance at delivering something that's actually useful. This gives us a chance to experiment and try out various solutions before getting too emotionally invested in any of them. Sometimes bad ideas, when implemented, have surprisingly much inertia. It's difficult to let go of something you've already "done".

What does mean from the perspective of a programmer? It makes it easier for us to do what we do best. We have to guess less and we can produce implementations of higher quality as there's going to be less churn. Some aspects of the design still might change, that's just natural. I do believe focusing on the UX first yields huge benefits compared to the alternative.


Is lean UX some kind of a silver bullet? No. It still takes hard work and expertise to come up with an excellent piece of software. There's no way to get past that. Perhaps the biggest advantage is that it allows good people to do their work better.

Jeff Gothelf is currently writing a book about the subject. I think this case study gives some idea of what's in store. There are also two presentations you might want to check out if you're really interested: Lean UX: Getting out of the deliverables business, Lean + UX + Agile: Putting It all Together.

Even though I'm just a lowly programmer I'm really exited about this. Process-wise this seems like a huge thing especially in products facing actual users. It's going to be interesting to see if this is something that'll make a lasting impact on the industry.