A problem must be understood. It must have an objective and a clearly defined end, and the problem definition should consider any constraints likely to restrict the problem solution. The user perspective of the problem is most crucial. You cannot solve a problem unless you know what caused or why it exists. The user is the most likely person to be aware of such issues.
Questions to help define and identify the problem
- What are the users specific needs?
- What are the objectives involved in meeting these needs?
- What boundaries or limitations might exist for the problem?
A. Needs Of The Client
A need is a necessity or want.
For example, a user may dislike the interface of the program they work with. They might prefer other colours or different backgrounds. None of these are needs just preferences. If useful output requires that numbers be shown to two decimal places, then that is a need.
Needs are often based around the health and safety of the computer user. They are essentials.
The implication - some form of solution required to meet this need. Needs to be clearly articulated.
This is the primary reason software projects are developed.
Often expressed in general statements:
"We need to monitor sales made at each of our stores"
Preferences are those elements of a program that a user would rather work with.
A program developer aims to meet needs first and then to provide a range of preferences where possible. Screen design elements are very important aspects of meeting both needs and preferences in program development.
A.1 Objectives
Objectives are aims. Achieving the objectives will help to meet the needs of the user.
Some of the other major objectives to be achieved in many programming projects include:
- Meeting social and ethical standards
- Using an appropriate method of display
- Providing for input and output
- Deciding on relevant data formats for display
- Providing clear and understandable methods of navigating between screens.
A.2 Analysis of Needs
Often needs are expressed in non-specific, even emotive terms. For example, we need to improve customer relations, or we want to improve our turnaround times.
Analysing needs is an important aspect of beginning to define the problem and for large systems a professional systems analyst is used. A number of tools and techniques are available for accomplishing the analysis.
- Surveys - Completed by all key personnel. For example, managers, IT personnel, users and clients. Survey’s are an excellent tool for gathering information from large numbers of people, however they often limit the detail and explanations participants are able to provide.
- Interviews - Personal interviews will allow participants to more freely express their needs. Detailed responses and explanations are possible, however performing interviews is labour intensive and hence expensive.
- Time management studies - How much time is really spent on each specific function. Actually watching and recording the time, nature and order of tasks as they are performed will often highlight priority areas.
- Business analysis - Examining different aspects of a business’ activities in search of areas where improvement can be made. Often such analysis will include a cost benefit analysis to ensure a profitable return on the software investment is likely.
Many developers have great ideas for new products. This is all well and good, but is there a need for this product? Developing a new product of any type without establishing a need for the product is like putting the proverbial cart before the horse. Many great inventions have remained as ideas because no market or need exists for the product. Conversely, many fine products appear which fail economically because they don’t meet the needs of the market place.A.3 Functionality Requirements
Functionality requirements describe what the system will do.
- They are what you are aiming to achieve.
- Requirements are statements that if achieved, will allow needs to be met.
- The requirements of a system give direction to the project.
- Throughout the design and development of a system the functionality requirements should continually be examined to ensure their fulfillment.
The final evaluation of a project’s success or failure is based on how well the original requirements have been achieved.
To be able to evaluate the degree of success or failure of requirements requires that the requirements be stated in such a way that they can be readily verified. In terms of software development, this often means they must be quite scientific or mathematical statements. For example, a requirement may be: ‘The system will be able to redraw the screen at least 12 times per second’ or ‘95% of orders will be filled within 24 hours’. Each of these requirements can be precisely tested.
A.4 Compatibility Issues
When designing software developers must ensure their products are compatible with a wide range of likely user devices and network conditions.
Any existing hardware, software and communications systems must be documented and then taken into account when defining the problem to ensure the solution will be compatible with these existing resources.
A.5 Performance Issues
When defining and understanding the problem it is common for performance requirements to be included.
For example, “Online payments must be approved within 5 seconds” or “The application will load in less than 3 seconds”.
Testing environments and actual tests should simulate real world conditions.
Boundaries
Boundaries are limits or borders.
No program development can consider everything in an environment, and its not feasible to think that a single program can do everything a user requires.
Some of the issues in deciding boundaries will relate to the Users environment and computer configuration.
- The program to be written may well be limited to a particular clock speed. Other hardware factors include memory and storage. e users environment and computer configuration.
Carefully documenting the boundaries enables all those involved in the program development to have realistic expectations of what the eventual program can or cannot achieve.