UK Tote Group is a British Real Money Gaming company and the largest pool-betting operator in the UK, with multiple products across sports betting and online casino. The business was founded in 1928 and was most recently sold for £115 million. If you've inherited a mixed-language estate sitting on a shared relational database, with microservices already the agreed direction but no clear path from here to there, you'll recognise the position the Tote engineering team had reached.
The Tote had already concluded that the right answer to a number of platform challenges was to modernise their applications into microservices.
Many parts of the existing application were updating the same relational database, which caused issues with independent scaling and made it very difficult to reason about which workflow had changed which data. A mixture of coding languages (PHP, Python, Go) made software maintenance difficult, and the strategic direction was to move the entire codebase to C#.
The Tote had previously migrated from on-premises to Google Cloud Platform but were running into issues, notably with reliable scaling of the architecture. Cost was also running out of control on GCP.
We took time to analyse the existing applications in their various languages and built new microservices in C# to replace them. Amazon EKS provided the orchestration; Amazon SNS and SQS provided the messaging.
We put forward the case for moving away from SQL Server relational data stores to Amazon DynamoDB for the parts of the estate where the access pattern was key-value rather than relational. Redis provided in-memory caching where caching was the right move.
To address local development challenges, we built a development environment using a containerised version of DynamoDB. Testing was non-negotiable. Services were delivered with full unit and integration test coverage and DevOps pipelines that made them releasable into production without lengthy hand-off integration by the in-house team.
The first complete microservice released into production through its DevOps pipeline without the integration delay the in-house team had been working around. The Tote engineering team started using the same patterns for the next microservice and the next, and the architecture stopped being a thing being delivered to them and became a thing they were building.
A step change in pace of delivery. We quickly understood the problems and built fully tested microservices with strong releasability through the DevOps pipelines.
Complete, releasable solutions. The major business value was unlocked by delivering complete solutions that could be released to production without lengthy integration.
A pattern that endures. The patterns we established continue to be used by the Tote team for each new microservice they add to the solution.
The pattern transfers. When your strategic move is microservices and the starting point is a shared relational database and a mixed-language estate, the right architectural decisions sit at three levels at once: the language, the data store, and the engineering practice. The Tote engagement worked because all three moved together.