The Swoop engineering team is passionate about providing solutions to the product problems by embracing best in class technologies. It is a constant challenge to keep abreast with the evolving product dynamics and the engineering hygiene. Although we work as autonomous squads, collaboration remains a core underpinning principle for our development practices and approaches. The squads take ownership of their work and know the ins and outs of the products they’re responsible for; the cost of keeping engineering hygiene uniform across all our teams which translates to keeping pace with technology and best practices within the industry and then ensuring we inherit the practices that best adds value to the teams and company.
Building the platform and associated stack took approximately 14 months, and it continues to evolve at a challenging pace. The core design goals have remained consistent throughout: Scalability, Reliability and Resilience at every stage. To achieve the desired outcome a careful selection of tools and processes were selected as well as designing and building a number of innovative in-house processes and tools which have allowed us to deliver significant improvements in the areas of productivity and security.
The new platform embraces the need for maintaining and continuing to deliver exceptional service levels for our existing platform (built atop API’s running in Virtual Machines) whilst powering forward with the latest technologies.
At Swoop we love to code and that is reflected in our diverse tech stack. Being able to choose the most effective approach to a problem, allows for solutions as diverse as the stack itself that are built robustly with a core focus on efficient, maintainable and supportable code with modern tooling utilised throughout.
Terraform powers our Infrastructure-As-Code capabilities, we are presently targeting Microsoft Azure with flexibility across a number of cloud providers to offer redundancy, flexibility and scalability today and in the future.
We embrace the declarative approach by keeping the configuration as a code (GitOps). GitOps aids us to audit and secure the configuration for the kubernetes cluster with solid governance.
We take security very seriously and it is important for us to have a right set of RBAC for the sensitive information. The platform and the application secrets are declaratively stored in HashiCorp Vault and backed up by Azure services like Azure Key Vault. The certificates for our DNS are configured and automated by cert-manager, Azure DNS.
Azure DevOps pipelines & releases, FluxCD are utilised to provide a uniform consistent approach to compilation, image curation and delivery.
Pipelines benefit from a curated set of optimised templates encompassing Snyk, SonarCloud, Docker Compose, Cypress and other consistent tooling. This approach allows us to rapidly evolve and identify performance, testing and security issues early in the life cycle.
Having observability across the entire platform is critical in ensuring that we can achieve a stable, performant platform that is able to evolve and flex effortlessly based on metrics ingested from multiple sources.
To achieve this, the Swoop engineering team has embraced a number of industry recognised tools to support us on this journey:
Elastic Search (ELK) – Utilised for logging across the entire platform.
Elastic APM – Provides real-time monitoring and insights into the performance and behaviour of our workloads. With a large microservice ecosystem to support, the engineering team utilises Distributed Tracing to allow end-to-end playback of a request from inception to completion.
Prometheus Stack (Prometheus , Grafana and Alert Manager) – Prometheus allows us to ingest millions of data points per second and provide rich visualisations and dashboards via Grafana to the engineering and operations squads. Alert Manager coordinates real-time proactive notification of events to the squads through multiple channels.
For an insight into how we utilise observability at Swoop you can take a look at a recent blog post on the subject here
Databases, Messaging & Analytics
Across Swoop we utilize multiple database systems, Microsoft SQL Server, PostgreSQL and MongoDB.
Azure Storage Account Blob storage (Azure Blob storage) is implemented across our products and services to facilitate large, scalable, secure data storage and retrieval.
RabbitMQ is utilised to provide message queuing and delivery across the platform which allows us to continue to build scalable distributed microservice-based products at speed.
PowerBI and ReTool are utilised to provide centralised aggregation and reporting across data-sources alongside real-time dashboards and platform performance metrics spanning the entire business.
Complete and Point-In-Time backups are orchestrated and managed using Velero which enables us to recover rapidly and forms a core part of our business continuity plan.
Our API management solution powers the funding API for the business with real time offers/approvals. The framework provides a strong foundation to add, plug and play various integrations at speed.
Kong is used as an API gateway for the incoming traffic and APIs are all encrypted (mTLS) within the Service Mesh (Istio). In addition to acting as a Kubernetes Ingress, the Kong API Gateway allows us to implement granular authentication, security and traffic policies across the cluster. The gateway is configured to authenticate the request by our IAM services (Auth0, KeyCloak)
Asynchronous programming patterns and designs are utilised throughout to offer high concurrency and throughput with messaging providing a powerful transport mechanism backed by RabbitMQ.
Microservices allow us to achieve strong separation-of-concerns. The Swoop engineering team was an early-adopter of DAPR and it is now implemented across large areas of the platform. DAPR utilises a sidecar pattern to inject itself into our API PODs and in doing so allows developers a powerful common mechanism for working with state, secrets, messaging and many other features that DAPR brings together.
Unit, Integration and Acceptance tests are carried out continually on the platform and are powered by NUnit, XUnit, Jest.
Our talented designers provide the designs in Figma and Invision based on collaborative real-time feedback and deliver powerful, user-focused experiences.
The unit test and behavioral tests are carried out using Jest, testing-library and Cypress is used to get our end to end testing.
It’s bit of an exhaustive list but this is the result of our engineers’ passion and hard work. The stack helps us to scale with speed and flexibility and we are looking forward to improvising as we uncover.