Systems are made of subsystems and these of further subsystems. Applying top-down design and structure diagrams to simplify complex systems, combining sequence, selection and iteration to design and produce effective and efficient solutions to complex tasks. The importance of defining a problem, showing what is going to be computed and how it is going to be computed, and the tools and techniques that are used to design a software solution to the problem. A review of the uses of and the conventions for pseudocode and flowcharts. The importance of testing systems, identifying logical, syntax and runtime errors, how to dry run algorithms using trace tables, identifying appropriate valid, invalid and boundary data when testing systems.