Decoupling is a technique used in computing to unravel two tightly connected or integrated components with the goal of decreased complexity and increased [[Performance|Application Performance]]. Decoupling is an application of the theory of [[Separation of Concerns]]. ## [[Agile]] In [[Agile]] methodology, work is split up into the smallest possible unit that is still meaningful and tangible, called a [[Sprint]]. Breaking something down into its constituent parts presents some interesting advantages: - Small things can be used and reused to build something larger and more complex. - Smaller chunks of information are easier to understand. - Understanding a subject at an atomic level is true expertise. - The whole can gain new attributes, but it cannot lose attributes present in its parts. Getting things right on an atomic level is essential to getting it right as a whole. ## [[Performance Testing]] [[Performance Testing|Performance engineer]] [[Scott Moore]] talks about the importance of having templates in the reporting process, each one being contained enough to be reusable. ![[How to Go From Performance Tester to Performance Engineer - TechBeacon#^83298538]] Atomicity helps during the load testing process itself, too. Especially at the beginning stages, it can be very helpful to design tests that specifically target atomic components. [[Chaos Engineering]] refers to this as [[Minimize the blast radius|minimizing the blast radius]]. Starting out with a small scope reduces the risk of unforeseen circumstances, as compared to running a test or experiment on the entire application, as well as other integrated applications, right from the get go. ## Databases In databases, building atomic transactions (ones that do not make changes if there is an error somewhere within that block of code) is important in ensuring that a database is not populated with partially complete data. In cases where an error stops the code within an atomic transaction from completing, all changes are discarded. [^02] ## [[Software architecture]] Many modern software architectural design patterns, such as [[Microservices]], [[Service-oriented architecture]], and [[Event-driven architecture]], are based on [[Decoupling]] ## [[Containerization]] Containerization is decoupling application code from hardware, or decoupling functionally separate components of an application from each other. [^02]: [[Atomicity (Database Systems) - Wikipedia]]