Recently I had a brief meeting/discussion with a doctor from the Texas Medical Center who conducts research in the realm of public health. We met so that I could receive feedback on some health-related software that I had developed for a class. Among the many things I learned during the conversation, there was an intriguing observation that I perceived: software engineering methodologies for creating a solution are philosophically different than the techniques the doctor was employing, and the methods I was learning about in class.
In software development, one of the core principles is to operate continually, using an loop of building software and getting feedback. This is absolutely necessary in the world of software where goals, technologies, and requirements change at dizzifying rate. The answer to the speed of software was to use a set of adaptive and flexible methodologies, often referred to as “Agile” practices.
The method on the other end of the spectrum is to engage in research that results in a deep understanding of users and the solution domain. Rather than prototype quickly and get feedback, the idea behind user-centered design is that users are sufficiently understood so that when it is time to design, prototype, and evaluate, time spent will be more efficient and effective because there is a solid understanding of the stakeholders and their environment. This is effective in most situations, because the assumptions are not changing even while one is prototyping.
In reality, the methods are not too far apart from each other, as they both operate in iterations that contain similar elements. However, there is an important philosophical difference; in the two figures, user centered design places the main elements in a circular loop while agile development reinforces the continual and parallel nature of the processes. This is only because of the ridiculous speed of the software industry. But in the end, each party at both ends of the spectrum could take notes from each other. A healthy balance of user-centered design combined with fast prototyping and quick iteration cycles would provide an approach that is both responsive and precise.