Hi All,
I'm testing/prototyping the viability of a CQRS approach to a complex business application. Data contention is a serious issue, so the legacy CRUD app implements a recursive-singleton R/W lock. Fine at low data volumes, but scales and performs badly at high volumes. There is a proven business need for a better solution.
With my prototypes, I can demonstrate with high certainty that a single threaded event-sourced app solves the contention issue, is scalable, performant and also leads to lock-free multithreading and high scalability downstream - an excellent outcome.
That said, selling a CQRS re-write is proving difficult in spite of obvious provable benefits. I wonder if somehow making a transition to the new paradigm would ease the sale.
Points of note:
Firstly, the legacy App was expensive - 24+ man years (6 devs), but has served a decade.
Secondly I'd want to avoid having to maintain/extend 2 codebases during a transition from CRUD/Locking to EventSourced/LockFree so a refactoring transition might be desirable over a rewrite. In past experience, my refactored applications have won out against re-writes which were ultimately cancelled since they were always playing "feature catchup" - management couldn't justify the cost.
In any re-write/refactor the business logic would not have to be re-thought - merely translated from 1 paradigm to another.
However, I'm having trouble figuring out how I can transition the app from 1 paradigm to another. They appear to be diametrically opposed.
Advice here would be greatly appreciated.
Cheers,
Martin