Our company has completely redesigned our main security app so that it is broken down into independent parts that have well-defined interfaces with exactly two other parts, one to get information and the other to provide information to. In this way, our future versions will not need to be designed and replaced in entirety. Instead, only the part undergoing improvement is replaced by update, just like major operating systems do. This is design practice called open design.
A - least privilege.
B - modularity.
C - separation of domain.