| || |
The last few years have seen an unprecedented increase in the power of the tools and technologies that software developers use to build today's enterprise applications. New languages have increased the level of abstraction and improved the productivity with which we can address and solve user problems. The application of object-oriented methods has produced designs that are more robust and extensible. Tools for version management, requirements management, design and analysis, defect tracking, and automated testing have helped software developers manage the complexity of thousands of requirements and hundreds of thousands of lines of code.
As the productivity of the software development environment has increased, it should now be easier than ever before to develop systems that satisfy real business needs. However, as we have seen, the data demonstrates that we remain challenged in our ability to truly understand and to satisfy these needs. Perhaps there is a simpler explanation for this difficulty that may represent the "problem behind the problem." Development teams spend too little time understanding the real business problems, the needs of the users and other stakeholders, and the nature of the environment in which their applications must thrive . Instead, we developers tend to forge ahead, providing technological solutions based on an inadequate understanding of the problem to be solved .
Development teams tend to forge ahead, providing solutions based on an inadequate understanding of the problem to be solved.
The resulting systems do not fit the needs of the users and stakeholders as well as could have been reasonably expected. The consequences of this mismatch are inadequate economic rewards for the customers and developers of the system, dissatisfied users, and career challenges. It seems obvious, therefore, that an incremental investment in an analysis of the problem will produce handsome rewards downstream. The goals of this team skill are to provide guidelines for problem analysis and to define specific goals for this skill in application development.
In the following chapters, we will explore ways and means of defining just exactly what the problem is. After all, if your team can't define the problem, it's going to be difficult to develop a proper solution.