And identifying the purpose of a softer system means
defining the requirements for the system. And if you have
ever done anything like that, for example, we did
it for the first project in the previous mini course,
you will know that it is an extremely hard
task. Identifying the purpose of the software and defining its
requirements is very, very hard. Why is it so hard?
First of all, the purpose of most systems is inherently,
extremely complex, so this has to do with the
sheer complexity of the purpose of the requirements. Just think
of how complex is the functionality provided by most systems.
Second, it is hard, very hard to extract from humans
this purpose and make it explicit. So, paraphrasing a
famous quote from the late Steve Jobs, often people don't
know what they want until you show it to them.
It's hard to figure out what people really want. Third,
requirements often change over time. Customers change their
mind. Designing and building a system raises new requirements.
So for many reasons requirements tend not to
be stable, tend to evolve. And that, of course,
makes it harder to collect them. Finally, for
any realistic system, there are many stakeholders and they
often have conflicting goals and requirements. And it
can be very hard to reconcile the possibly conflicting
requirements that might emerge in these cases. So for all these reasons,
it is very, very difficult to
perform requirements engineering in an effective way.