At the beginning a short story of being lucky.
In the mid-90ies of the previous century time was ripe for developing PC- based software for quantitative finance, and, being lucky, we were asked to develop some convertible bond tools for a London based trading desk. From that point we strived for building a stable architecture for an evolutionary development approach.
Act 1. Set up the foundation - advanced numerical schemes
The pricing and calibration engines are implemented and optimized in C++. In our belief the choice of the numerical solvers is the very kernel. In a risk management workflow, you are crunching numbers millions of times and require accuracy and robustness.
Act 2. Integration into a mathamatical-programming environment
Derivatives, portfolios, scenarios can be described in functional language. This was the main reason fo integrating our kernel technologies into Mathematica. From Mathematica, we also inherit a front-end / kernel structure, link technologies and grid concepts.
Act 3. Set a distributed computing environment to work
Facing the multi-core revolution we multiplied performance by applying coarse grain symbolic parallelisation techniques. A few lines of code transformed UnRisk into gridUnRisk.
Act 4. Set up application data base management
UnRisk’s I/O relations, and control objects are represented in MS SQL Server. To access the database programmatically Java was the natural choice.
Act 5. Build a web connection layer
The UnRisk interaction patterns, implemented as a set of Java Server Pages, are part of a Java implementation wrapped up as a Servelet web application.
Act 6. Tie everything together
Web browser - UnRisk Servelet – database - UnRisk Adapter - UnRisk Service – gridUnRisk – numerical engines interact, using a mix of communication protocols.
Act 7. Make it scalable
Scalability is outsourced to license management and business modelling.