Case Study: Life Insurance System with Ingenious Legacy Tech Stack

Author(s): Stefan

An insurance company developed a large and complex system to handle its life insurance policies. Due to the mixture of different technologies and paradigms, the system got very hard to maintain. The deployment cyle of 6 month was much too long for business requirements.

What is the system’s background?

The system had already been in production for about a decade and the current size of the maintenance team was about 100 people working full-time.

Insurance policies have a very long life cycle, typically spanning decades. In fact it’s quite normal for a system like this to never have its data migrated once a successor has been built; instead, you simply keep it running until all the policies handled by it are terminated (i.e., everyone has been paid out because they reached retirement age – or died).

The system had numerous connections to the outside world via integrations. Furthermore, it had a GUI client for internal staff, built using SmallTalk. The client communicated to a mainframe system via the CICS transaction monitor, where the core database and policy life-cycle logic was implemented in COBOL. The core premium calculation component was built in C++ because of an existing library. It was shared with both, SmallTalk client and mainframe.

A model-driven design was used. An UML model for the contracts was maintained with IBM Rational® Rose. Code for the serialization in the DB2 was generated with a self written mapper. Futhermore, the objects of the C++ and SmallTalk client were generated with a self written OO mapper. The model was used for the communication between the three components of the system as well.

The SmallTalk team knew object oriented (OO) programing and pushed the use of OO in the non OO world of COBOL. (Knowledge Tunnelling)

What were the good ideas?

What were the bad consequences, why was everything bad?

What happened, was there a turning or tipping point?

How could the situation be resolved?

How to avoid such a situation?

Which patterns were encountered?