Design Process - Requirements

Defining common terminology and learning the business

When designing a new product, it's helpful if everyone understands the same concepts and is able to talk the same language. One mechanism to accomplish this is by defining common terminology (i.e. glossary of terms) that the end user will be required to know in order to successfully use the product. Every product has a set of terms that each user must know in order to operate the product. By defining this common terminology early in the project, it's possible for management, the domain experts and the developers to easily communicate and exchange ideas on how the product should behave and function.

It is also imperative that the developers take the time to learn the client's business. Developers should not become domain experts but they should have a vague understanding of the business. Too often, new developers joining a project are rushed into the coding without a clear understanding of what they are building. Do you really want a developer guessing on how to implement a key requirement in the system? Take the time to educate the developers on the business and this will result in a much higher quality application.

Capturing requirements

The quality of the end product is largely determined by how well the requirements were captured. This step requires a large involvement by the domain expert and/or business analyst for the project. The domain expert/business analyst is someone that has a thorough understanding of the domain and/or business model and provides assistance to the development team in capturing requirements.

Not all requirements need to be defined before proceeding with development but at least 50% should be flushed out before writing a single line of code. This forces the requirements and/or business team to really think about the role and scope of the system. In addition to capturing each requirement prior to development, each requirement should have a unique requirement number which can be used to provide full requirements traceability through the application code and test cases. This requirement number can be generated manually using a spreadsheet or using a tool such as Rational's Requisite Pro.

On a recent consulting assignment, we had the developers insert the requirement number in the source code comments. A parser was then used to cross reference the requirement numbers against the source code. This parser enabled the development team to track the outstanding development. Inserting the requirements number in the source code was essential in ensuring that the developers did not forget to develop a system requirement while making it much easier to find where each requirement was implemented. This was the most important process followed by the development team and it greatly improved system quality and traceability.

Prototype

Nothing is worse then spending time and resources on something the client does not want. Clients should be engaged early in the project lifecycle and no tool is better than engaging the client than a prototype. The prototype should be more than a collection of screen shots, workflows and Visio diagrams. Ideally, the client should be presented with an interactive prototype.

For example, an HTML prototype for a web based application can be put together fairly quickly and greatly improves client communication as well as provide a big return on investment (ROI). A prototype makes it easier for a client to understand the brilliance of the user experience that is being proposed because they can now experience it for themselves.

A prototype can also be use to disqualify poor ideas and to solicit client input. Your client and or developers may suggest a feature that once prototyped will demonstrate if it's feasible or not. As well, a prototype makes the development process much easier because it is easy to communicate to developers exactly how the final product needs to work.

Finally, most of the code used for the prototype is often re-used in the final development thus the effort expended to develop the prototype is not wasted.

Use Cases

A use case is a user's view of the tasks required to accomplish a particular job. A proper set of use cases defined with the assistance of a domain expert provides a blueprint for the system. A typical use case is composed of actors and the steps that an actor takes to accomplish a particular task. The use case has a number, a title and the requirement number that it maps to. Each use case includes details about what has to be done by the user to accomplish the functionality of a use case.

Ideally use cases should not make any assumptions about the underlying infrastructure or platform. This allows the most flexibility in the design of the system. The use cases can also be used by the test team as a model for their test cases.

Return to Design Process