Monday, July 18, 2011
Requirements Versus Design
I thought it might be worth a quick post to describe a pet peeve of mine. On many of my past projects there is a person (let's call them a functional) whose role it is to gather requirements. In some cases this proves to be invaluable as it is that person who maintains a direct relationship with the customer so that I do not have to. Let's face it, developers in general are not always suited for interacting directly with a customer on a day-to-day basis. We don't like to wear ties, we prefer cans of Red Bull to caffe latte's and in general many of us prefer to be typing at eighty words a minute as opposed to having in depth conversations with a user.
My issue with functionals is that more often than not there is a misunderstanding on that person's part about what a requirement truly is and what it is not. As an example, let's say we are attempting to build a logging subsystem for my company's operations group to monitor the guts of our application. An okay requirement might be "users should have the ability to view 1 month of logs online and older data should be easilty restorable". Yet many times something I see something like the following provided: "we should create a consolidated table in our database for logging that is partitioned by month and also provide a way for our operatons group to easily export/import the table's data".
While I have of course overstated the prior example to a certain degree, it does amaze me how many times a "functional" person will interject implementation or design considerations into a requirement. At first my inclination was to believe this is done because there is a degree of mistrust on that person's part that development will meet the users need or perhaps they thought that the development team is "too busy" or even just that they do not think along the same lines and so to fix that "I'll just put the requirement in terms they will understand". This of course is not the case and if the development team is too busy (they aren't) or dim-witted to handle requirements as fast as they are fed to them then it is probably safe to say that they should be replaced by others who will or you have way too many functionals on your hands.
In reality it should be the development team's job to ask questions based on the requirements to arrive at a design. In the prior example, perhaps the proposed design by development doesn't even involve a database to implement a logging subsystem. Multiple applications may submit to the same logging subsystem and this while to the user they may seem like a "consolidated data store" what goes on behind the sences might be anything but a single table that stores the data. A better approach would be to start with a good set of requirements and continue the analysis by classifying actors (of which the system administrator ueser is one) and use cases. In fact a great place for development and functionals to colaborate would be on the actors and/or use cases - again all of this takes place before the design phase begins.
Having said all of this, a more important and dangerous ramification of this misunderstanding by functionals is that by jumping right to the deisgn, requirements are missed. In some ways it is analgous to a developer who just starts coding w/o working out a design. While a full tracabililty matrix is overkill on most projects today, if you don't set forth a basic set of requirements at the outset how does one know when a project is actually finished? Just like it is too easy for a coder to pull up his IDE of choice and start punching keys, it all too often is much easier to start talking about a design before a solid set of requirements are defined.
Subscribe to:
Post Comments (Atom)
2 comments: