The Investment Platform team build and run the cloud-hosted systems that look after all the financial assets retained by Moneybox. The platform manages over £3 billion worth of assets and processes over 10 million financial transactions every month. Due to the scale we operate at, we treat performance and scalability as a feature of the system and it’s at the forefront of everything we do.
How is the team structured?
We’re currently separated into three teams, each with their own areas of responsibility (for example, trading, cash management and payments). We operate with a high level of autonomy and all our engineers are experts in their relevant subjects, working very closely with project and change teams to put together requirements and solutions to business processes and features.
Which tools do the team use?
We embrace Platform-as-a-Service (PaaS), so that the team can focus on delivering business value without worrying about infrastructure maintenance. We also use Terraform to ensure that our infrastructure is consistent and repeatable across all of our environments. There are too many to list, but the main technologies we use are Azure App Services, Functions, CosmosDB, SQL Server, .NET Core (currently running .NET 5 in Production), Azure Functions, Azure CosmosDB, Azure Service Bus, GitHub, Azure DevOps, Hangfire, MediatR, xUnit.
What does the development lifecycle look like?
We follow an agile, continuous delivery model where development teams are fully responsible for delivering the end-to-end service, deploying changes several times a day. Due to the financial nature of the system and the rapid release cadence, we rely on quality, test automation and early feedback systems.
We do use Jira for ticket tracking, but only to track project delivery, with tickets representing large items of work. For technical design, we follow an ADR (Architecture Design Record) process, where any significant system changes are documented and reviewed by the team to ensure we always arrive at the best possible design for complex problem-solving.
Do the team run automated testing and practice Test Driven Development?
We loosely follow TDD, but more domain-driven development, with entities responsible for business logic. Every feature is fully tested and we run full unit and integration test suites as part of our build pipeline. We tend to lean towards more feature level testing, as alluded to with our coding test (Transfer / Withdraw vs Account), instead of finer grained unit tests which can be brittle and resistant to refactoring.
Does the team do code reviews?
Every code change goes through a review process via PRs in GitHub, no matter how small. We value honesty and open feedback in our reviews and use them to drive quality and standards within our codebases.
How often does the Platform team deploy their code to Production?
We ship as soon as things are ready, so we often deploy to Production multiple times a day. We are strong believers in feature switching, so we use that to control feature releases instead of big bang releases. We host most of our services via Azure App Services or Functions, making use of deployment slots to ensure no downtime releases.
Does the Team have design sessions?
There are no architect roles at Moneybox, so design is the responsibility of the engineers working on new features. As part of any significant change, we produce ADRs (Architectural Decision Records) which clearly and concisely describe changes and new technical designs, which are then reviewed by teams.
How do the team manage technical debt?
The Platform Engineering codebase is just over three years old, so it’s in great condition. We’ve put a lot of effort into maintaining a clear and concise codebase, with a focus on self containing features into their own files instead of logic sprawling over multiple entry points. Over time, technical debt naturally emerges and we tackle this as part of larger projects to ensure we never fall behind the curve.