A design approach that emphasizes the use of interchangeable software components to build complex systems.