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]]