Wednesday, February 22, 2017

Requirements please!

I have seen it many times: One company hires another to do a project, after a while, they end up in court because the contracting party does not want to pay the contractor, arguing they didn't receive what expected, while the contractor say they did as agreed. Most of the times requirements are not adequately written, giving each company the freedom to create their own expectations, that may not match.

But, why this happens so frequently? There are a lot of factors that may make this happening. The most common are the following:

  • One of the parties is not interested in having clear requirements because they think this gives them the capacity to change things during the project or avoid specific compromises, as there is no written document.
  • The contracting party is not able to clearly define what they want or what they could expect.
  • There is no clear communication between parties, so each party has its own set of expectations taken for granted that may not match the expectations of the other party.
  • There is no adequate knowledge or compromise to do adequate requirements.

The reality is that having poor or no requirements are very bad practice for both parties. Both will end up losing money, time, credibility, or opportunities.

If you are developing a product or service for the market is the same story. Good requirements will help to make a good product or service, not losing track of what you are offering to the market.

Requirements Engineering is one of the processes of Systems Engineering, that is focused on defining, documenting and maintaining requirements. In the Waterfall Model, requirements engineering is presented as the first phase of the development process while Agile Methodologies, like Scrum, assume that requirements engineering continues through the lifetime of a system.

Basically, a requirement is a singular documented physical and functional need that a particular design, product or process must be able to perform. The systems engineer needs to carefully elicit requirements from users and stakeholders to ensure the product will meet their needs.

Fortunately, Requirements Engineering is a well standardized process by the International Organization for Standardization, under the standard ISO/IEC/IEEE 29148 Systems and software engineering - Life cycle processes - Requirements engineering.

It is crucial to ensure the requirements are correctly defined and here I will mention some key characteristics of good requirements from INCOSE (International Council on Systems Engineering) [1]

  • Necessary: State only what is determined to be necessary for achieving the client’s mission within regulatory constraints. These statements are derived through analytical means to the depth necessary for design, procurement, implementation and verification.
  • Clear: Convey what must be achieved in a manner that can be understood by those who are expected to implement the requirement, without having to ask the author what was meant.
  • Achievable: Confirm with the implementer that the requirement can be affordably achieved either by previously developed means, or within a reasonable period of development.
  • Traceable: Ensure derived requirements can be traced to a user need or a higher-level specification, and to a supporting analytical basis. Derived requirements need to also trace to the implementing item.
  • Verifiable: Requirements must be stated in a manner that compliance can be objectively confirmed. Typical methods of confirmation include analysis, inspection, demonstration and test.
  • Complete: A set of requirements needs to be complete, such that if all are met then the resulting system will successfully achieve the client’s need for the system. In addition, the needs of other stakeholders will be addressed to the agreed extent, and the regulations will be met.
  • Implementation Free: State what is required and how well it needs to be done without bias for how it will be done. The design team should be allowed to choose the best means of accomplishing the requirements. This helps to provide stable requirements and to control cost.

Requirements Engineering is not an easy task, but crucial. Is the origin of a lot of work and investments. It could be key for successful results or a terrible disaster. Let us pay the adequate attention to this process.

[1] Managing Requirements for Design. INCOSE Infrastructure Working Group
[3] Wikipedia

No comments:

Post a Comment