For over 15 years I have primarily been involved in implementing complex business processes, e.g. energy trading at E.ON, wind tunnel organization at BMW, or contract management for Telefonica - getting to know the inner workings of many companies. :-) As a coder, I have a soft spot for readable APIs and testable specs and made manifold open source contributions on GitHub. And as a curious domain “decoder”, I am on a first name basis with Domain-Driven Design as well as BPMN, DMN and CMMN. I am also an editorial member of the well-read German software magazine OBJEKTspektrum and write about topics such as Agile, Microservices and the particularly exciting field of “long running” behavior. In my spare time, I organize several meetup groups in my hometown Vienna, Austria.
With patterns like Saga and Process Manager we control a flow of domain events across transactional aggregate boundaries and context boundaries. But how do we anchor the flow logic in the ubiquitous language, make it transparent to domain experts and maintainable for developers? In this talk we demonstrate how end-to-end views on business processes contribute to strategic DDD and how we model them in harmony with principles like the bounded context. In the space of tactical DDD we discuss how to deal with services which need hours, days or weeks to deliver results. The logic needed to support "long running" behaviour represents important domain knowledge, including business strategies needed to react to problems, to handle timeouts or to apply compensating actions. Backed by real-life stories and concrete code examples we show how we leverage lightweight and embeddable state machines, illustrate alternatives and discuss pros and cons in the context of DDD.