I work in a software company with a single product, a 25 year old monolith application (1.2m lines of code) handling all HR related data (employments, salary, collective agreements etc.).
I've been put on a team that needs to research how we can modernize our application and so I've started reading up on different design patterns and architectural styles. The entire developer department, including me, have had this idea that a cloud native, microservices architecture is a no brainer, but the more I read about the style the more I seem to doubt that this style is actually compatible with our extremely complex and large business domain.
A couple of examples for better clarification:
An employment is terminated
- All work times and absence items after the termination date must be deleted.
- According to the employees collective agreement, a last date of salary must be set.
- The employees vacation, flex, time off in lieu account etc. must be paid out or used before this date
- The employees logins our platforms must be revoked
- Our integration partners must get the information that this employee is no longer with the company
- etc...
A shift is created
If the shift is on top of a vacation period, the vacation account must be deducted.
if the shift exceeds the collective agreements max work hours for the given period(month, week etc.). The shift should not be created OR there should a created an overtime addition for said shift
+a million other events triggered in the dependencies
These examples does not even start to cover the complexities of what happens when a collective agreement changes and the impact that can have on salary, accounts etc.
It seems to me that our business boundaries are too large to cover by small microservices without having an absolutely wild amount of redundancy, in addition we are handling peoples salaries. Every part of the CAP principles (consistency, availability, partition tolerance) are all of high importance.
What are your immediate thoughts on the matter?