Systematic Approach to Problem Solving

Table of Contents

1 Aspects of software development


  • Before a problem can be solved, it must be defined, the requirements of the system that solves the problem must be established and a data model created.
  • Requirements of system must be established by interaction with the intended users of the system.
  • An agile approach that involves an iterative process of designing, prototyping, testing, feedback, refining may be used to deliver the final solution.

Agile software development describes a set of principles for software development under which requirements and solutions evolve through the collaborative effort of self-organizing cross-functional teams. …

In February 2001, 17 software developers met at the Snowbird resort in Utah to discuss lightweight development methods. They published the Manifesto for Agile Software Development, in which they said that by "uncovering better ways of developing software by doing it and helping others do it," they have come to value "individuals and interactions over processes and tools, working software over comprehensive documentation, customer collaboration over contract negotiation, and responding to change over following a plan".

  • Agile approach allows for:
    • adaptive planning
    • evolutionary development
    • early delivery
    • continuous improvement
    • rapid and flexible response to change


Before constructing a solution, the solution should be designed and specified, which may include:

  • designing data structures
    • How data will be stored and accessed; a flat file, a database, array?
  • Specifing input
    • What are the input data? How are they inputted? from a file, database, user interactive input, fetched from external locations, from a sensor?
  • specifing output
    • What are the output data? What formats are the output in? How often?
  • designing algorithms
    • What are the processes or business logics that are part of the solution?
  • designing an appropriate modular structure for the solution
    • What are the modules and what they intend to do and to be used.
  • designing the human user interface
    • forms, dialogues, menus,hardware with controls.
  • sepcifying security
    • How the data it to be secured against accidental and intentional damage?
  • specifying hareware and software
    • What are the hardware and software requirements?

Using the agile approach, the design stage can be prototyped to have a data model (data structure and how they related to each other) and a user interface to demonstrate to the client how they will interact with the system. Any feedback from the client can then be incorporated.


  • The models and algorithms need to be implemented in the form of data structures and code (instructions) that a computer can understand
  • Using the agile approach, developers should focus on solving the critical path first.
  • Developers need to be flxible to adopt to changes as design flaws detected and user feedback incorporated.


  • The implementation must be tested for the presence of errors, using selected test data covering normal (typical), boundary and erroneous data.
  • It should also undergo acceptance testing with the intended user(s) of the system to ensure that the intended solution meets its specification.
  • Acceptance testing is done by the client and use test data supplied by the client. It fullfils the following objectives:
    • to find out the solution meets the preset requirements set by the client
    • to find out if any operational procedures will need to be changed in the client's organisation.
    • to find out if the solution will perform in the intended environment with expected work load.
    • Testing is iterative as errors and flaws being discovered, and changes are made, more tests are conducted.
  • Unit testing referring to test process carried out in the smallest testable parts of an application, called units. Each unit is individually and independently tested for proper operation. Unit testing is often automated but it can also be done manually. For example, testing only if inserting an item into an array works.


  • The solution will go through a period of evaluation after deployment in production against a set of criteria.
    • solution's actual performance vs the anticipated objectives
    • against preset criteria
    • limitations
    • unexpected benefits and problems
  • The solution will be evaludated in terms of its:
    • effectiveness: how effective against requirements/objectives?
    • usability: how user experience is like? efficient, interactive, effective, engaging, error tolerant and easy to learn?
    • maintainability: how easy to maintain?