The requirements for a software system should be worked out in consultation with the prospective users. In software engineering parlance these are often referred to as "the client". It is important to realise that the system designer has to build a bridge between the language that the designer/programmer understands and the language that the cusotmer understands. An effective way to do this is through the use of rapid prototyping.
Rapid prototyping allows the designer to take account of the human factors involved in the interface to a computer. As a left hander I keep my mouse on the left hand side of my terminal, some machine designs (not to mention some trackball designs) make this difficult, (have you ever seen a scroll bar on the left side of a window?). Color is important, (more people are color blind than you might think.) In this course we will not spend much time on the interface. It is however very important. Many journals have regular columns on the subject. You are referred to the web pages for the IEEE computer scoiety and the ACM for the names of journals.
The requirements phase should lead to a specification of the system that is comprehensibel to both user and system builder. In this corse we will see how the OMT technique does it. There are other methods. For example the prototype itself can serve as a specification. (This is the source of the "demo" joke. Once the requirements are set it is advisable to avoid adding to them. Failure to observe this leads to systems that are late, not what the user wanted, if indeed they ever get completed.