Interface segregation tells us that different types of clients (e.g., mobile apps, web apps, CLI programs) should be able to interact with services through the contract that best suits their needs. Deployability acknowledges that in the microservice era, which is also the DevOps era, there are critical design decisions and technology choices developers need to make regarding packaging, deploying and running microservices. Event-driven suggests that whenever possible we should model our services to be activated by an asynchronous message or event instead of a synchronous call. Availability over consistency reminds us that more often end users value the availability of the system over strong data consistency, and they’re okay with eventual consistency. Loose-coupling remains an important design concern in the case of microservices, with respect to afferent (incoming) and efferent (outgoing) coupling.
Finally, Single responsibility is the idea that enables modeling microservices that are not too large or too slim because they contain the right amount of cohesive functionality. To achieve the right size service and achieve the goals of IDEALS, it is important to model around the domain. Many have suggested using DDD to help define the functional scope of microservices by modeling around the domain. But how to apply DDD for microservices “in practice” is not clear to everyone. DDD principles can help to create microservices with better availability, scalability, reliability, and modifiability. This talk will relate these IDEALS to techniques, tools, technologies and domain modeling principles (DDD) that can be uses today to develop modern service-based distributed systems (microservices).
Joseph (Joe) Yoder