There is a set of SW practices that I consider non-negotiable, and they begin with 2 that are requirements-related:
1. Written, reviewed, approved requirements
2. A requirements baseline, implemented with a requirements management (RM) tool
In my last company, getting these done in a way that was accepted by engineers and management alike did require a pinch of “writing the requirements spec ourselves” and a dash of “entering the spec into the RM baseline and doing the updates ourselves”. That the CTO and I (the VP) were willing to do that work shows how important we deemed it as well as how easy our RM tool was to use (we used DOORS®).
Many companies assign the spec writing task to Product Marketing (PM), and this is a fine place for it if there is someone there committed to do it “right”. We often had good specs from PM at our company. But sometimes there was information needed by engineering that was more easily discovered and input by one of us. This partnership between PM and the CTO/VP served us well.
The fact that our engineers wouldn’t work on a requirement until the spec was updated in the DOORS® baseline is testament to how important the engineers felt this practice was (whether for the project or for themselves is almost irrelevant) and how well they bought in.
Management too (including Marketing, Sales, everyone) accepted this process and knew that there was no way any feature would be implemented unless it appeared in the DOORS® baseline, either initially or by the formal change process.
These requirement practices were made easier by the use of a formal RM tool, and I can’t stress enough the importance of having one of these. Yes, RM tools can be expensive, but if you do the cost/benefit tradeoff, buying one will win. There are open-source tools that might take more staff-power to implement than a commercial one, but that would still be preferable to trying to manipulate a word-processing or spreadsheet application into serving this role.
The primary reason you need a formal RM tool is its ability to create attribute categories and assign attribute values for individual requirement objects. We created attributes for the assigned release, test information (needs testing, was tested, when tested, etc.), and change tracking (links into our change tracking tool). The release assignment (per requirement object) meant that we could maintain a single spec for a feature or product and not spec fragments per release. This might not seem important as you create version 1 and even version 2 of your product, but when you get to version 5 or 6, trust me, you’ll wish you had some single requirements document that described the whole product.
A second important benefit of an RM tool is the history it keeps (per requirement object). Tracing back the reason for changes can save tons of time later in research.
But, if you are just starting out with a tiny team and don’t have the time, energy, focus, money, etc. to acquire and use a formal RM tool, more important is to get the requirements written, in something, and stored away somewhere accessible to everyone but changeable only by you. An RM tool can come later. You’ll know when you need it, and remember, it’s never too late to move to it.
These 2 requirement practices passed the “practicality” test. Everyone understood their value, everyone bought into them, they had evangelists, and we made it all easy to implement.
www.duckpondsoftware.com (see the Consulting tab)
Instructor, UCSC Extension in Silicon Valley
Software Requirements Engineering and Management (next class Aug 2009)
Software Project Planning, Monitoring, and Management (next class Oct/Nov 2009)