What came first, the solution or the need? Let's hope the need, but we all know that is not always (often not) the case. With the great technologies available to us today, rapid application development enables us to solve problems. But, does the ease of development actually create a new set of problems? Yes, it does.
When the software development process is lengthy and drawn out, it forces many planning activities such as requirements analysis, design specifications, and planning. Not doing these things leads to costly adjustments later. The lengthy process also forces organizations to really think about what solutions they are developing and how these solutions fit into the big picture. We've got it pretty easy today. With portals, collaboration, search, BI, content management, and
workflow platforms today, some times doing it "wrong", undoing it, and doing it again is actually less expensive than the cost of planning and documenting.
Yes, I am familiar with the
twelve principles of the Agile Manifesto (Agile Alliance, 2001). I like agile development when it follows some organized processes and produces artifacts that can be used for reference later. You still need documentation for future development, disaster recovery, and repair.
However, what I don't like is "premature
solutioning" or the practice of directly jumping from a problem to a solution design without any sort of further questioning, analysis, thought, or sanity checks. When you encounter a problem, and immediately form a solution and begin developing it, a lot is lost. You are not considering what other stakeholder needs are, what other colleagues are already working on, and how this "fly by the seat of your pants" solution actually fits in (or doesn't) into your overall information architecture.
Working with my colleagues, we recently began
formalizing our thoughts around the
solutioning process. One of the first roadblocks we encountered had to do with semantics. We began observing that our push for "requirements" was being misunderstood. When a problem-solution situation arose, we would explain that we needed to analyze requirements. The response to this typically included design specifications. We would then stop and say, no, we don't want detailed design specifications, what we want is to understand the problem better and understand how it impacts other people, so we can create a solution that will fit into our information architecture in a way that adds value and doesn't undermine anything else we are doing.
After a few more of these scenarios we decided that we had to make others aware of our
solutioning process and how we think, so that everybody would be able to communicate with
each other better. The first thing we did was make a distinction between the types of requirements that we would discuss in the course of
solutioning.
We decided on the following:
General Business Requirements - Facts and opinions that help understand the problem better. These are not design specifications and do not explain a solution. Instead, this information explains what the business needs are.
Solution Requirements - Facts and opinions that define how a solution is supposed to look, feel, or act. This information directly dictates the design specifications.
So, now when a new request arises, we start by gathering "general business requirements." We then consult with stakeholders, policies, procedures, standards, goals, etc. and analyze the information. Once we have all the facts, we begin to design a solution. At that time, we ask stakeholders to help us define the "solution requirements." The result of the latter activity is a design specifications document. Next, we schedule and plan the development activities and proceed from there.
Reference
Agile Alliance (2001). Principles Behind the Agile Manifesto. Retrieved July 24, 2010 from http://agilemanifesto.org/principles.html.