While developing software, a programmer must select an
appropriate combination of algorithms and data structures that facilitate the delivery of a
software solution that addresses the wants and needs of the end user within the constraints
of time, cost and available computing power. However, when the technical specifications
fail to convey the full meaning of the end user requirements, misunderstandings will arise
between the end-user and the program developer and will take on the form of output errors,
unwanted features and awkward user interfaces.