“Requirements Gathering” is a critical process in creating successful software projects. The requirements of a project are usually defined by a number of stakeholders and these need to be documented, clear to all stakeholders, actionable, testable and agreed to fulfil the project requirements. In most projects the software developer/architect is the most critical component in this phase and needs to perform the requirements gathering as it is their responsibility to action them afterwards. It may sound simple but not asking the right questions or capturing the right amount of detail can seriously hinder or derail a project at a later stage.
I think the best way to describe how I have failed at capturing the correct requirements in the past is to describe a project I worked on last year which hit a number of stumbling blocks which I could have easily avoided. I was working on a project to create an application that would acquire temperature measurements from a number of test rigs. I was working with my colleague who communicated with the end user to gather information on the requirements of the software (I did not interact with the end user directly). As I was developing the software, I had to ask the questions. The following is the account of the first telephone meeting I had with my colleague to gather the requirements for the system:
Me: “What is the application supposed to do?”
Colleague: “It needs to acquire data from a compact DAQ which has four thermocouple modules. Each thermocouple module needs to be attached to a different test rig.”
Me: “How quickly are we supposed to acquire the data?”
Colleague: “It only needs to be acquired at 10Hz. The data needs to be displayed in separate windows. It needs to be like the Finite Acquisition Project Template. If we base it on that then the end user will be more familiar with the layout.”
Me: “Will the end user also further develop this application?”
Colleague: “The end user does not have any knowledge of LabVIEW but is planning to get some training so that in the future he can update the application.”
At that I decided I had gathered enough information to get started and opened LabVIEW.
As you might imagine I had not gathered enough information since what ensued is a lot of wasted time and effort which can be very demoralising. Had I gathered enough information I would not have created a fantastic prototype application based on the Finite Measurements Project Template in which I had poured my heart and soul. It turned out I had misunderstood “It needs to be like the Finite Acquisition Project Template” as working like the template, not looking like the template. The end user needed a system for continuous acquisition and upon reflection the complexity of the project template was too high. This could have all been avoided.
The process of gathering any requirements can be viewed as a repeated 4 step process:
1. End user has an idea for a requirement
2. End user communicates the requirement to the developer
3. Developer listens to and tries to understand requirement
4. Developer documents requirement
As you can see by the illustrations there is a lot of data loss when we communicate our requirements. The amount of data loss can be attributed to the quantity and quality of questions when going through the requirements gathering phase. Hopefully the following tips will provide you with some helpful hints as they have for me. Through better control of the requirements gathering process I can avoid getting into the same troubles as I have done in the past.
I surfed the internet and looked into various different methods to help capture better requirements. There are a lot of helpful articles out there discussing requirements gathering. They are not all for software development as this topic can apply to any project, even articles written in context of business requirements can be very useful. The following is my top 10 list of tips for requirements gathering which I am going to use on my projects in future:
My Other New Year's Resolution is to... |
---|