All concepts

Dependency Inversion Principle

Software design principle that advocates for high-level modules to depend on abstractions, rather than on low-level modules, to allow for flexibility, maintainability, and scalability of the system.

Origin

Robert C. Martin — widely known as "Uncle Bob" — introduced the principle in a June 1996 column for The C++ Report, arguing that conventional layered architectures caused "software rot" by coupling high-level business logic directly to low-level implementation details. Martin had been developing a family of object-oriented design principles through the early 1990s and collected five of them in a 2000 paper. Programmer Michael Feathers coined the SOLID acronym around 2004, making the set a professional software education standard.

Updated February 22, 2026