Design Problem:
A department aligned system (an application/UI and database, which we'll call System A) is used to manage both customer information and customer transactional data like orders, charges, billing information, etc. Connected to System A are 15 downstream systems - all with UI (about 12 are department aligned systems, the rest are not). Customer and order data is replicated to the downstream systems via an ESB. ESB queries System A database to retrieve data which need to be replicated. A few downstream systems connect directly to System A tables. The structure of the customer related tables is very department centric.
Now there is a requirement to decentralize the customer data maintenance (as customer data is currently being managed in different department aligned systems), i.e., build an Master Data Management system for customers, to streamline business processes of various departments. Part of the MDM push is to restructure the customer related tables into a more flexible table structure to cater to other department's customer data. Also, the 15 downstream system interfaces should not be affected.
Which solution would be appropriate?
Solution 1 - Rewrite System A (including customer orders modules)
This requires:
- Rewrite System A to be System B (both application/UI and database). System B having: 1) a database with flexible customer table structure 2) rewrite of System A customer order modules
- Migrate all System A data onto System B
- Rewriting all ESB stored procedures
- Create adapters in ESB layer to abstract message format changes and not impact existing downstream interfaces
- For downstreams that connect directly to System A database tables, create database views to mimic old customer table structures
Solution 2 - Retain System A, Create System B
This requires:
- Create System B having a read-weite UI and database with flexible customer table structure (this will become part of MDM)
- Make customer modules/UI in System A readonly; maintenance of customer data will be in System B; no further changes required in System A; all downstream systems will continue to connect to System A
- Create component that will replicated data changes from System B to System A
I'm reserving the pros, cons and risks I have come up with for later because I don't want to influence any answer.
Any input is appreciated.