A requirement is a specification or a description of a feature (or a part of a feature). A requirement can be fulfilled through implementation, and validated through the test coverage process.
A requirement typically goes through the following lifecycle:
Create/Edit ➞ Review/Self Approve ➞ Finalize
After a requirement is created, the creator or owner of the requirement edits it. Once editing is complete, the owner can have it reviewed by team members. After all reviewers accept, the owner can then finalize the requirement. The owner can also finalize a requirement with a self-approval. Finalizing a requirement freezes it forever and it can no longer be edited as is. To edit it, a new version of the requirement must be derived.
Thus, a requirement can evolve using versioning. When a requirement is created, its first version is created. To derive a new version of this requirement, the previous one must first be finalized after a review or self-approval.
Create/Edit ➞ Review/Self Approve ➞ Finalize ➞ Derive new version ➞ Review ➞ Finalize