I was recently speaking with a co-worker about how some projects get into a Death March because the development team never had the opportunity to speak with/see the end user. On another project, I requested that I be able to sit with the end user for a full business day. From that experience I was able to determine more about the software needs of the user than my entire business staff combined. We realized that we didn’t need certain sections of the application, but needed to beef up the main portion (the part the user utilized 99% of the time).
Agile development demands that the end user be present on-site (or remotely accessible) during the entire project. After experiencing this, I can’t imagine coding any other way. Yes, there is added pressure and most of the time the user gets to actually experience the development process. With pair programming and test driven development it becomes quite easy.
Today I read a blog entry by Marc McNeil on the ThoughtWorks blogs about this very subject. His closing line summed it up nicely:
“Moral of the story: you are not the user. What you want, how you do it and the way you (and also the person who is commisioning you to write your code) do it is almost certainly not the way the end user wants to do it. And unless you speak to them and watch them you will never know.”