Aspects help in improving the modularisation of a system by encapsulating cross cutting concerns such as distribution, exception handling, debugging, tracing/logging/auditing/timing/testing, design patterns, idioms, etc. The implementation of such concerns usually is spread through the classes and objects of a system. This makes code harder to understand and less maintainable/evolvable.