This module explores the nature of the design and implementation processes, and identifies the role they play in software development. The module covers most of the technical aspects of rigorous structured software design, with particular focus on programming-in-the large with the C programming language. The main topics covered are: the software design process and its objectives; principles of abstraction, decomposition, modularity and reusability; the specification and handling exceptions; an introduction to the principles of verification and validation; testing and debugging. Emphasis is also given on software documentation and documentation standards. The module covers some introductory material on other aspects of the software development process, such as requirements analysis, maintenance and software quality assurance.