I spent most of yesterday going through 60+ verbose PowerPoint slides and 45 pages of detailed requirements. You see I have a customer who has run into several issues rooted in their initial design considerations. They are a CMM level 3 organization with detailed procedures, voluminous documentation, and honestly it is not unnecessary. They build large, complex systems and their end users require structured documentation.
The requirements seemed to have been written after they selected and architecture and specific technologies, a serious no no. They had established nearly 30 requirement categories with low level must perform and shall provide statements. There is a proposed logical architecture establishing 5 plug-able service modules and a core services ‘bus’. Many of the requirements define object life cycle management and strive to maintain location transparency. This all smelled to me like a JINI and CORBA based approach. Not the most unreasonable thing to do … except they are working with an exclusively Microsoft development environment.
My first goal was to shred these requirements into something I could get my mind around. Focus on the “real” business requirements. Try to figure out just what where they trying to accomplish with location transparency? High availability and loose binding seems likely; both laudable goals for an enterprise caliber infrastructure. But I couldn’t reconcile the plug-able components. Maybe they were looking for High cohesion within each component?
Using my favorite mind mapping program, MindManger, I began re-sorting each requirement, deleting duplicated, identifying orthogonal requirements and pulling policy or hardware related items into an out-of-scope category. The result is a set of 11 services, each with 6 to 25 detailed, testable requirements. For many I have been able to map them to existing Microsoft technologies (COM+ Enterprise Services, the COM hosting environment, the Enterprise Information Framework, etc … ) effectively removing them as items to be developed.
My next task is to establish a few high level use case documents and a simple block and line architecture model to present back to the customer and hopefully validate my findings.