11 Jan 2023
Today, I would like to dive into the key architectural principles that underpin the Nomo banking platform and how we have applied them.
At Nomo Fintech, we strongly believe in maximising reusability by leveraging the best-of-breed modern and API-first technology solutions and stitching them together into an event-driven, modular, componentised platform ecosystem - be it the server-side microservices or the mobile application.
The focus for us from day zero has been to build a highly flexible and scalable platform that scales with expansion using open architecture principles. The platform is built on the principles that smart, omnichannel, capable backends allow us to scale whilst light frontends allow us to delight customers. We believe data is an important asset and helps us navigate the complexities.
We value a great customer experience and therefore embed quality as early in the SDLC by ensuring security by design, a high degree of unit, and API test coverage. We strongly believe in early and often delivery of working software into production by leveraging devsecops principles
In keeping with our key architectural principles, we adopted the serverless framework to improve our time to market. This also helped us leverage the full-stack nature of typescript across the value chain allowing us to build a cost-effective, scalable platform solution at launch.
We leveraged AWS native technologies like the Event Bus, DynamoDB, API Gateways at the data and application layer, and Transit Gateways and IPSec Tunnels at the infrastructure layer to power the core platform.
Everything within the core platforms including most of the configuration of our key 3rd party systems was automated using Gitops principles on Gitlab. Early parts of CI included SAST, automated dependency and license checks for non-compliance.
We used Cloud Watch and X-ray to build out early observability into the platform marrying it with Opsgenie to automate incident and alert routing. We also built integrations into Sentry and Amplitude to get better visibility of customer experiences.
We went live in June 2021 and scaled the platform across multiple dimensions - some by more than 500%.
We have brought in advanced feature flagging solutions that allows us to manage scalable and risk-free product launches and technology upgrades whilst allowing us to deliver with high quality at scale as evidenced by the large number of release we have achieved in the time span. We currently have circa 70 feature flags on the platform.
We knew from the very start that we needed to pivot to run our services across cloud environments and improve our developer experience with the ability to run integration tests locally, and have since invested in containerised workloads and Kubernetes as the server-side runtime. We have introduced orchestration through the adoption of Temporal.io along with event-driven mechanisms. Today, Temporal drives our property finance application processing.
Along the way, we have further de-risked the delivery of our software by introducing Federated Graphql. We continue to invest in the evolution of the platform by building easy-to-test, re-usable API-first solutions. A part of the team has also built some key services in Golang and we continue to trial the efficacy in our stack. We initially built our external API test automation using Postman and are now trialling the use of JEST to power integration tests as part of CI. We continue to mature and evolve our use of Appium for test automation on Browserstack.
Doing all this remotely has only been possible with the use of remote-first technologies. We encourage an open and collaborative environment both within the office and remotely (using public Slack channels over private ones). This reflects in our culture of solution design and engineering as well.
Engineers are encouraged to innovate and trial best-of-breed existing, as well as newer, technologies. Because we have tried hard to cultivate a culture of ownership from cradle to grave, the ability to propose scalable solutions is a key part of this ownership principle - living and breathing the popular adage “With great power comes great responsibility“.
In adopting Lean principles (XP, Agile, Scrum) we have evolved the engineering culture to move towards better Interface Definition Language (IDLs), a high degree of unit testing, and evolution of our integration testing whilst continuing to learn together as a team.
As we scale up our technology stack into a catalogue of services, we realise the importance of being able to publish APIs to be truly re-usable both internally and externally in future. To this end, we are trialling Protobuf and GRPC. We are continuing to evolve our mobile app component architecture in keeping with Atomic Design principles. As we grow our catalogue of product offerings, we plan to invest in more scalable and highly available SQL-capable databases.
Whilst I would love to go into each of these topics individually, I feel each of these platform pieces is a story worth sharing and telling!
Even though I have been around the block, there is something new that I learn almost every week - be it in the space of technology or the complexities of cross-border payments and how to solve them with techno-functional innovation.
I am incredibly excited by what we have built so far and continue to be far more excited by what's to come. If you want in on the cool stuff we are doing here at Nomo, check us out.