The separation of concerns is a key principle of software design and implementation: you organise your software so that each element in the program (layer, library, class, method, procedure, etc.) does one thing and one thing only. You can then focus on that element without regard for the other elements in the program. You can understand each part of the program by knowing its concern, without the need to understand other elements. When changes are required, they are localised to a small number of elements (Sommerville: Software Engineering).
Separation of concerns reduces complex problems into a series of manageable layers and components. It tends to reduce risks as changes are often isolated to a single component as opposed to intermingled throughout a large and complex code base.
There are many successful applications of this principle: Object Oriented Programming, Design-by-Contract, Aspect Oriented Programming, Information Hiding, Multi-tiered software architecture etc.
PiSuite is a product that relies heavily on the design principle of separation of concerns. Client’s web application focuses on its main functionalities. PiSuite delivers 6 new modules to the client’s web application, which is not even aware of PiSuite’s existence. The developers of the client’s web application can design and code wtihout any concern for PiSuite. This keeps the code clean and maintainable.