Inversion of control (IOC) and dependency injection are inter-related topics that provide abstract tools that can be immensely valuable to making an application easy to maintain over the long term. However, the topic is often misunderstood and IoC/DI often gets implemented late in the development life cycle.