identifying the problem
needs of the client
functionality requirements
compatibility issues
performance issues
boundaries of the problem
Problems can come from a number of different sources. It may be that an outside company is looking to contract a software developer to construct a solution for their business. It could be a new idea for a product. In either case, the problem itself needs to be defined precisely so that both the developer and the client understand what will be done. Some questions that need to be asked to help define and identify the problem are:
What are the client’s needs that this product will meet?
Compatibility issues with other existing software and hardware?
Possible performance issues, particularly for internet and graphics intensive systems?
What are the boundaries of the new system?
NEEDS OF THE CLIENT
A need is an instance in which some necessity or want exists. The implication is that some form of solution is required to meet this need. Without articulating the needs clearly, it will be difficult to develop a clear picture of the precise problem to be solved.
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 fulfilment. The final evaluation of a project’s success or failure is based on how well the original requirements have been achieved.
COMPATIBILITY ISSUES
Software of various types runs on a variety of operating systems, browsers, hardware configurations and even a range of different devices, such as smart phones and tablet computers. Users are able to configure their device in a variety of manners, for example screen resolution, colour depth and font sizes. Today many software products require and use internet or LAN connections. Such connections operate at varying speeds and will often encounter errors or even complete loss of connectivity. When designing software, developers must ensure their products are compatible with a wide range of likely user devices and network conditions. Some examples of common compatibility issues include:
Problems with different versions of the intended OS
Not all graphics cards are supported by many graphics code libraries
Screens which do not resize to support different screen resolutions
Labels for screen elements which overlap or are no longer aligned correctly when fonts are enlarged
Loss of server connection causes fatal errors over wireless networks.
Any existing hardware, software and communications systems must be documented and the taken into account when defining the problem to ensure the solution will be compatible with these existing resources.
PERFORMANCE ISSUES
Often the specifications of the computers used by developers far exceed those likely to be present in a typical user’s computer. In addition multi-‐user applications and applications that access large files and databases will perform very differently under real world conditions.
Testing environments and actual tests should simulate real world conditions. Some common examples of performance issues include:
The computer appears to be not responding after some function has been initiated. In fact it is busy processing a time consuming task
Users experience poor response times. This is often seen with networked applications where during data entry users spend most of their time waiting for the application.
BOUNDARIES OF THE PROBLEM
Boundaries define the limits of the problem or system to be developed. Anything outside the system is said to be a part of the environment. The system interacts with its environment via an interface. Input and output to and from the system takes place via an interface. The keyboard provides an interface that allows humans to input data into a computer system. An internet service provider provides an interface between computers and the internet.
It is vital to determine the boundaries of a problem to be solved. Determining the boundaries is, in effect, determining what is and what is not part of a system. When defining a problem, it is important to define the boundaries for the problem so that the customer has realistic expectations of the limits of the system.