In the current world of software development clients want deliverables to be turned around as fast as possible, time is money, and the software development company that can deliver the fastest is usually the one that gets the contract. Traditional methods of software development/project management such as the waterfall methodology have increasingly become antiquated due to the time constraints that are placed upon the process, and this very much so because of the way requirements gathering is conducted. In this article we take a look at how Agile, combined with User Centric Design processes, can significantly improve the accuracy and delivery time of software applications.
-THE IMPORTANCE OF GATHERING REQUIREMENTS-
One of the most important parts of any development process is gathering project requirements. In the fast paced world of software development the accuracy and quickness of this process can dramatically affect the timing and cost of the entire project. Traditional waterfall methodologies approached this task as a one-time phase that occurred at the beginning of a project. A contract between the software producer and the client (who represents the user) is agreed upon at the beginning of the project through the creation of a set of two key documents, business requirements & functional requirements documents. One of the major pitfalls of creating these documents up front is that the client may not be 100% sure of the specifications that they want or need.
In traditional waterfall methodologies, developers are often forced to take the lead in this process and may either create a set of overly detailed requirements that overwhelm the client and are not fully comprehended, or a set of weak requirements based upon supposition rather than clear/concise direction. As a result requirements can change later in the project and can majorly effect the development of the digital product, as well as associated cost and timing.
-USING AGILE FOR GATHERING REQUIREMENTS-
Today, we increasingly see software companies adopting the Agile methodology towards project development. Agile addresses the need of companies to be quick and reactive to evolving business needs during the project lifecycle. The main component of the Agile approach that allows for the flexibility needed for fast paced projects is collaboration between project stakeholders, most importantly the collaboration between the client and the development team.
In Agile, client requirements are addressed through User Stories which are brief statements that describe functionalities that the system needs to express. User Stories should be written in a visually flexible way like on post-it notes or on a black board. The way these statements are written highlights user roles and the business benefits that the desired features will provide. All of the gathered User Stories are prioritized and grouped in a Product Backlog, they are then grouped into multiple development sprints. The Product Backlog can be seen as a queue that releases functionalities in order of priority ensuring that the digital product is developed and released in phases according to order of importance.
The owner of the Product Backlog is the "Product Owner", this person can be the tech lead, business analyst, user experience lead or the project manager depending upon the hierarchy and organization of a given project. The Product Owner serves as a conduit between the users/client and the development team. In order to facilitate communication, the Product Owner often creates as glossary for the development team to familiarize themselves with the business vocabulary for a specific project.
In order to build a comprehensive Product Backlog the following steps must be taken to ensure accuracy and ease of communication:
1. GATHERING REQUIREMENTS FOR THE "PRODUCT BACKLOG"
Different requirements gathering methods are used depending upon each project:
a. Requirements gathering methods can include, brainstorming session, workshops and interviews.
- The most commonly used method is workshops which allow users to write down user stories with the cooperation and guidance of the development team.
- Note: It is important that a trained user-experience specialist supports the elicitation and definition of user requirements during workshops.
b. Requirements gathering should be approached in two ways, breadth first and then depth.
- High level requirements constitute the breadth of the client needs. This allows the project to focus on the essential functionalities and direction of the project.
- The depth dimension of requirement gathering allows the team to drill down to a more granular level in regards to functionality. The depth dimension should follow the breadth phase and add detail to the essential functionalities that were previously identified.
2. PRIORITIZING THE "PRODUCT BACKLOG"
Different classification systems can be used to help prioritize the functionalities identified in the Product Backlog. The prioritization of the functionalities should happen in cooperation with the key project stakeholders. Depending on the fidelity of the gathered requirements and how the project team agrees to prioritize the functionalities, different techniques can be chosen. It is paramount that all key stakeholders agree on the chosen technique.
a. Kano: Based on customer satisfaction degree
b. Wiegers: Based on value, cost and risk
c. MoSCoW: Must, should, could, would not
3. MAINTENANCE OF THE "PRODUCT BACKLOG"
a. Refinement meetings should take place once or twice during development sprints to insure the team is ready and aware of the priorities associated with the sprint in progress. It is important to keep the client and key stakeholders involved in these meetings to insure cross team alignment.
b. Fast feedback is extremely important, the faster the feedback comes the quicker corrective action can take place. This is different from more traditional methodologies like Waterfall when the client would only see the developed product during UAT, at this point it is too late to make changes without adversely effecting timing.
In Agile, delivery dates and resources are fixed (fixed budget). This means user stories are regularly re-prioritized. Users can adapt their needs but this cannot impact a sprint that is in progress, (though lightweight usability tests can be employed to identify usability issues to be addressed in subsequent sprints). The new needs will be prioritized for the next sprint and released later. The sprint methodology helps avoid the domino effect that can often be produced in waterfall like projects.
In conclusion; the organized flexibility that Agile provides can help insure on-time delivery of a product that has been consistently guided and approved by all project stakeholders, including the client. In order to attain the benefits of such a method:
- It is important to follow a systematic approach towards development and project management. Although Agile is flexible, a set of structured project parameters/guidelines must be established and agreed upon at project initiation by all parties.
- It is also a best practice to define a broad set of user experience guidelines (often in the form of user personas and scenarios) before beginning development iterations sprints. This will help in regards to analyzing the success of each sprint in terms of achieving pre-stated goals.
If you want to read more on agile user requirements the following books might be usefull :
Gestion de projet agile (Véronique Messager Rota / Eyrolles)
Agile Software Requirements (Dean Leffingwell / Addison Wesley)