Modular libraries developed collaboratively with the Ocado Technology developer community to help build unified, coherent, safe, and scalable microservices are currently used by more than 120 teams and 400 production applications (and growing).
As the team who has overall ownership of the libraries we would like to share our experience of building such software, including topics like:
-Why they exist and how we avoided building “a framework on top of Spring Boot”, so that developers still feel that they write Spring apps, not “vendor” apps
-Design practices like: what makes a good module, how we balance architecture characteristics, how we structure @Conditions etc.
-Engineering practices and routines: releasing 200+ times a year, making upgrades to new Spring releases easier for users by taking “small steps” (Renovate automation practice sharing, Full CD etc.)
-Community building including how we balance contribution, communication and engagement/user-happiness while retaining ownership by the custodian team
-Leveraging platform engineering knowledge and creating an expert network (including appsecs, application & library engineers, cloud teams)
-Active lifecycle of modules including data-driven decisions (detailed feature usage metrics), alternative plans of introduction/removal of features,supportive mechanisms (validators, runtime advisories) and good collaborative upgrade guides.