The OSGi framework, and the service specifications, is a powerful and simple way to build modular software. However writing modular software is hard and even a simple framework doesn’t necessarily make things easy, especially when you are writing an application server consisting of over 100 discrete features. When that application server needs to dynamically respond to configuration changes, provisioning (or deprovisioning) features as required. Even worse when it has to support Java EE applications which are written with a totally different modularity (cough-cough) model. Open Liberty was designed from the ground up to use OSGi as it’s core modularity framework, making extensive use of declarative services, metatype, and subsystems. We did a lot right, we made mistakes, some we fixed some not so much, we fixed a lot of bugs including a number in Felix SCR. Come along to hear lessons learned about how we used OSGi to build the most flexible application runtime for building web and cloud applications. Come along to find out not just what we have learned over 7 years of using OSGi, but what we have done in the last 12 months to improve the startup performance of a large and complex OSGi based product.