complex systems arise through a process of sequential assembly Software is developed by assembling reusable modular components, that is functions, classes, libraries, multiple layers, integrations, APIs, and components interacting in de fi ned sequences Technical debt can be viewed as steps in the assembly process that happen in time with complexity leading to future problems 1 2 3 Abstraction simpli fi es the assembly process, making complex systems easier to build by reducing the amount of detailed assembly required Refactoring and automated testing are the process of simplifying the structure, making the steps of assembly clearer and more maintainable 4 IN SOFTWARE DEVELOPMENT CONTEXT independent, interchangeable, a part that constitutes a whole