Software development is a journey. No two paths are the same, and the journeys we each take rarely stay on the course we thought they would. Last night I was inspired by Lane Halley’s talk at the local XPWM about the great combination of User Experience (UE) and Agile. Although her journey and mine have been very different, we’ve arrived at similar places.
The reason seems to be that we are both moving towards focusing on human needs. The role of software, both functionally and visually, is to meet the needs of a person. It may be something as critical as saving a life or something as simple as ensuring someone with color blindness can effectively utilize your app. Software is not just about being functional, though. It needs to be value-adding, usable, discoverable, intuitive, and functional.
Building software like this is hard, and building software not aimed at this can be meaningless. This can be quite a mental shift for someone who simply solves problems in the guts of code and doesn’t put themselves in a position to think beyond that. It’s taken me a number of years to really “get-it”. And this is where I’m at in my journey—software development is more than producing “little turds of brilliance” (Lane Halley quote) in code. It’s about understanding the behavior before implementing the functionality… and then writing quality code when that time comes.
Consider this objective: Users should be able to create expense reimbursements. Writing code based on this objective gives you the freedom to implement the functionality in a number of ways, most of which probably will be very wrong for the user and that will leave remnants of change-impeding turds in the code base for when you need to change it. Instead, start to understand how users should be creating expense reimbursements and then write the code supporting that. Your code and your users will end up in a far better place far sooner.