This module presents more advanced software development techniques, enabling the design and development of programs of medium-scale size and complexity. Through a series of lab exercises, students apply concepts taught in the lectures and at the same time practice the design and development of medium-scale programs. Together with its companion module, Software System Components 1, it is designed to equip students with programming abilities which may be needed in an individual final year project. The module covers the three topics of datbases, web programming and concurrency, and distributed computing.