Designing APIs that reflect an application's core business value, delight the developers who use them, and will stand the test of time.
Refactoring the code-base into Horizontal Layers and Vertical Slices and Subsystem Modules to tackle “Structural Erosion” or “Accumulation of Structural Debt”. Usually, the “Structural Erosion” begins with minor deviations from the intended design due to changes in requirements, time pressure or just simple negligence. In the early stages of a project, this is not a problem; but during the later stages, the structural debt grows much faster than the code base. As a result of this process, it becomes much harder to apply changes to the system without breaking something. Productivity is decreasing significantly and the cost of change grows continuously up to a point where it becomes unbearable. Exactly how we choose to divide the problem is of overriding importance and requires the definition of a logical architecture for the software system. By grouping the physical level elements like classes, interfaces or packages into higher-level architectural artifacts like layers, subsystems or vertical slices; we can define the the allowed and forbidden dependencies between the architectural artifacts.