Software systems and the concerns addressed by them are becoming increasingly complex hence posing new challenges to the mainstream software engineering paradigms. The objectoriented paradigm is not sufficient to modularise crosscutting concerns, such as persistence, distribution and error handling, because they naturally crosscut the boundaries of other concerns. As a result, these broadly-scoped concerns cannot be systematically reused and evolved. Aspect-oriented software development (AOSD)  tackles the specific problem of managing crosscutting concerns throughout the software development lifecycle. It supports a new abstraction – the aspect – and new composition mechanisms to facilitate developers to modularise, analyse and reason about crosscutting concerns in a system. Its potential benefits include improved comprehensibility, reusability, evolvability and maintainability of the system.