Eventually, after chipping away at the edges, we will finally reach the core. The real guts of the monolith. The important bits.
Tread Carefully
This will be where any missteps have very hard ramifications. When a problem is introduced in the core, it will be very noticeable. Luckily, by now we have quite a bit of practice. The biggest hurdles to clear here are still around defining the module boundaries. These core pieces will be more interconnected than tho pieces we found at the edges earlier.
The danger here really lies in breaking the modules into too small of pieces. Going too small will obviously make the transactional boundaries incredibly painful.
The Microservice Core
One thing to make special note of is that perhaps the core itself is microservice-enough. It may still be bigger than what a microservice really should be, but that may be okay. It is much better to have an actually working system than a pristine microservice architecture. The cost to break apart the core more than what has already been done may not be worth the return. We will investigate this more in the next installment.
After separating the fairly clear edges from the core, our job may be done. We may have split off enough services to gain the benefits we were looking to microservices for. If we do need to proceed further and break the core apart more, we just need to reiterate what we have already done. Use Domain Driven Design approaches to their full extent here to gain insight into how the core modules should unfold themselves.