ASP.NET Security Consultant

I'm an author, speaker, and generally a the-way-we've-always-done-it-sucks security guy who specializes in web technologies and ASP.NET.

I'm a bit of a health nut too, having lost 50 pounds in 2019 and 2020. Check out my blog for weight loss tips!

Why Agile Can't Work Without a Focus on User Experience

Published on: 2014-10-19

If you make software for a living, or work with people who do, you've probably heard of Agile programming techniques. Unfortunately what is not as common knowledge is user experience design. But it is extremely tough to do Agile programming well without also being able to incorporate user experience research into your designs.

What is user experience design?

User experience design, or UX design, is the practice that determines how software should behave so that it is as intuitive for the user as possible. The example most often given about how this works is the button on a web page. In many cases, this button says "Submit", in large part because this is how the programmer who created the form sees what the button does. But the user is not thinking of it as submitting the form. Instead, they are purchasing items, signing up for a newsletter, etc. In those cases, a user experience designer would suggest that the buttons would be labeled "Purchase Items" or "Sign Up".

A good user experience designer does a lot more than just naming buttons, though. Here are a few more examples of the types of changes a good UX designer would make:

  • Since Westerners typically read from left to right and top to bottom, a page should generally read from more general items on the left to more specific items on the right
  • In order to make signing up for newsletters as easy as possible, forms should generally require as little information as possible to get people to follow through with the sign-up process
  • Navigation within a website should be as easy as possible, allowing users multiple means to find the same information
  • Users should be able to find help for problems when they first start using new software, but this help should not be a distraction once familiarity is gained

The general idea is that software should be easy to learn and intuitive to use, reducing the need for user manuals and increasing overall user satisfaction.

What is Agile, really?

First, it's important to note that I'm not talking about the pseudo-Agile that's practiced at many companies that's really just Waterfall with multiple releases. Agile, when at its best, embodies these principles, as found on

We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:

Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

That is, while there is value in the items on the right, we value the items on the left more.

It's important to emphasize that merely doing your code in sprints does not mean you're doing Agile. Instead, Agile, when done well, is focused on maximizing collaboration by quickly and frequently adapting to users' needs. Sprints, timeboxes, multiple releases, scrum meetings, etc., are all a byproduct of these goals, not the endgame.

A perfect match

Well-executed Agile projects contain changes early and often. In such an environment, creating documentation is difficult and keeping the documentation up-to-date is nearly impossible. Training would also be difficult to do, because changes to the system will come early and often. In order to avoid confusion and dissatisfaction, software teams have no reasonable choice other than to create a system that's as easy to use as possible. Most developers I know (me included), tend to focus on adding as much functionality as possible and lose sight of the fact that less-experienced computer users might not find the system intuitive. This is where the user experience designer comes in. The UX designer should be able to create front-ends to the system which allow users to understand the system and its changes quickly and easily. This increases user satisfaction and user adoption, and frees up developers to continue doing what they do best - adding still more needed functionality to the system. 

This article was originally posted here and may have been edited for clarity.