Software requirements :practical techniques for gathering and managing requirements throughout the product development cycle