# Revolut Engineering

Revolut under the hood - Medium

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Building the Web that Moves Money: inside Web engineering at Revolut

DevFeed: [Building the Web that Moves Money: inside Web engineering at Revolut](<https://devfeed.tech/articles/building-the-web-that-moves-money-inside-web-engineering-at-revolut-26340.md>)

Original publisher: [Read original article](<https://medium.com/revolut/building-the-web-that-moves-money-inside-web-engineering-at-revolut-3dd4fb78fbfa?source=rss----44c5ac415e14---4>)

Author: Revolut

Published: 2025-10-16T09:45:59Z

Content type: article

Language: en

Sources: [Revolut Engineering](<https://devfeed.tech/sources/revolut-engineering.md>)

Topics: [Web Development](<https://devfeed.tech/topics/web-development.md>), [modern web development](<https://devfeed.tech/topics/modern-web-development.md>), [web applications](<https://devfeed.tech/topics/web-applications.md>), [Low-Code / Internal Tools](<https://devfeed.tech/topics/internal-tools.md>), [Agile](<https://devfeed.tech/topics/agile.md>)

Tags: [agile](<https://devfeed.tech/tags/agile.md>), [applications](<https://devfeed.tech/tags/applications.md>), [building](<https://devfeed.tech/tags/building.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [fintech](<https://devfeed.tech/tags/fintech.md>), [internal-tools](<https://devfeed.tech/tags/internal-tools.md>), [modern-web-development](<https://devfeed.tech/tags/modern-web-development.md>), [revolut](<https://devfeed.tech/tags/revolut.md>), [web](<https://devfeed.tech/tags/web.md>), [web-applications](<https://devfeed.tech/tags/web-applications.md>), [web-development](<https://devfeed.tech/tags/web-development.md>), [web-engineering](<https://devfeed.tech/tags/web-engineering.md>)

### AI overview

Revolut describes its web engineering approach across customer-facing products and roughly a hundred internal web applications. The article discusses secure financial experiences, modern development practices, small empowered teams, and agile principles inspired by Extreme Programming.

### Source excerpt

Building the Web that moves money: inside Web engineering at RevolutIntroduction In today's digital-first economy, the web is the critical touchpoint between people and their money. At Revolut, we embrace this reality in our approach to web engineering: focusing on not just building interfaces, but on creating seamless, secure, and future-proof financial experiences. Our mission at Revolut is to redefine the global standard for digital finance. Every line of code, design decision, and feature we release serves this goal: to make finance more accessible and beautifully engineered. These principles shape our culture, set a high standard for excellence, and require constant attention to detail. They also drive us to rethink modern web development tools and practices. This article focuses on the principles that help us deliver secure, beautiful financial products worldwide, and explains how engineers are building their careers along the way. The scope of Revolut web products Two independent but complementary pillars represent the current stage of the Revolut web ecosystem. Customer-facing applications These are the digital gateways through which our customers and partners experience Revolut directly: Main website and brand hub Revolut Business platform Revolut crypto exchange platform Human Resources Management Systems (HRMS) by Revolut Each of these touchpoints is an individual part of a unified ecosystem offering a consistent product experience that is closely aligned with our mobile platform. Internal web products Alongside our external platforms, Revolut operates around a hundred internal web applications. These provide our employees, operations, and partners with tools for: Back-office management Compliance and risk monitoring Customer support services Data and reporting systems Operational efficiency at scale These internal tools are the driving force behind Revolut, ensuring customer-facing products remain fast, secure, and globally scalable Core principles of we

## Reinventing Risk at Revolut

DevFeed: [Reinventing Risk at Revolut](<https://devfeed.tech/articles/reinventing-risk-at-revolut-26346.md>)

Original publisher: [Read original article](<https://medium.com/revolut/reinventing-risk-at-revolut-77e63c552503?source=rss----44c5ac415e14---4>)

Author: Konstantin Vasilev

Published: 2024-12-10T07:46:23Z

Content type: opinion

Language: en

Sources: [Revolut Engineering](<https://devfeed.tech/sources/revolut-engineering.md>)

Topics: [Finance](<https://devfeed.tech/topics/finance.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Software](<https://devfeed.tech/topics/software.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [banking](<https://devfeed.tech/tags/banking.md>), [fake-accounts](<https://devfeed.tech/tags/fake-accounts.md>), [finance](<https://devfeed.tech/tags/finance.md>), [financial](<https://devfeed.tech/tags/financial.md>), [fraud](<https://devfeed.tech/tags/fraud.md>), [knowledge-graph](<https://devfeed.tech/tags/knowledge-graph.md>), [operations](<https://devfeed.tech/tags/operations.md>), [outage](<https://devfeed.tech/tags/outage.md>), [revolut](<https://devfeed.tech/tags/revolut.md>), [risk-management](<https://devfeed.tech/tags/risk-management.md>), [services](<https://devfeed.tech/tags/services.md>)

### AI overview

Revolut describes how its Risk function approaches financial and operational risk in a financial-services business. The article explains that risks can overlap, such as fraud involving fake accounts leading to unpaid loans, and discusses the limitations of segregating risks into separate departments.

### Source excerpt

Using probability, reasoning and AI Revolut is known for its innovation in delivering "super-app" financial services to its customers. The success is evident not only through the rocketing user growth, but also via the ripple effects caused across the banking industry -- traditional finance has to reinvent and evolve, or remain part of history, just like the internet search replaced the paper phonebook. Behind this success stands a complex and impressive machinery, which is still piloted by the same founders, who also engineered the very first components and set the Revolut rocketship in motion. This machine is mostly known for its software excellence, however, with any financial services comes the responsibility of navigating a complex net of regulations and risks. True to the company values, the Risk function at Revolut also innovates, leveraging the decades of banking experience of its leadership and adding the challenger way of thinking with the latest technology. What is Risk? One can find many definitions of risk, ranging from explanations suitable for children, "The possibility of something bad happening", to advanced statistical definitions used in finance: Uncertainty of the return on investment, characterised by standard deviation, asymmetry and tails of the return distribution and the generic ISO 31000 definition: "The effect of uncertainty on objectives" In addition, both graduate textbooks and banking regulations define two general types of risk: Financial: related to financial positions, such as: user deposits, lending, and investments in market instruments. Operational: related to failure of operations, such as: system outage, fraud and natural disasters. Some of you might already sense the inevitable challenges in distinguishing the above definitions and risks. Events seldom happen in isolation and independently: a natural disaster can lead to system outages and market crashes, similarly fraudsters might use fake accounts to withdraw loans which would

## The fundamentals of iOS at Revolut

DevFeed: [The fundamentals of iOS at Revolut](<https://devfeed.tech/articles/the-fundamentals-of-ios-at-revolut-26349.md>)

Original publisher: [Read original article](<https://medium.com/revolut/the-fundamentals-of-ios-at-revolut-f75acb765ac8?source=rss----44c5ac415e14---4>)

Author: Illia Kucheriavyi

Published: 2024-05-14T11:41:25Z

Content type: tutorial

Language: en

Sources: [Revolut Engineering](<https://devfeed.tech/sources/revolut-engineering.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [iOS development](<https://devfeed.tech/topics/ios-development.md>), [feature flags](<https://devfeed.tech/topics/feature-flags.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [SDKs](<https://devfeed.tech/topics/sdks.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [experiments](<https://devfeed.tech/topics/experiments.md>), [Development](<https://devfeed.tech/topics/development.md>), [Agile](<https://devfeed.tech/topics/agile.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [releases](<https://devfeed.tech/topics/releases.md>)

Tags: [agile](<https://devfeed.tech/tags/agile.md>), [continuous-delivery](<https://devfeed.tech/tags/continuous-delivery.md>), [continuous-integration](<https://devfeed.tech/tags/continuous-integration.md>), [development](<https://devfeed.tech/tags/development.md>), [development-process](<https://devfeed.tech/tags/development-process.md>), [experiments](<https://devfeed.tech/tags/experiments.md>), [feature-flags](<https://devfeed.tech/tags/feature-flags.md>), [fundamentals](<https://devfeed.tech/tags/fundamentals.md>), [ios](<https://devfeed.tech/tags/ios.md>), [ios-development](<https://devfeed.tech/tags/ios-development.md>), [releases](<https://devfeed.tech/tags/releases.md>), [revolut](<https://devfeed.tech/tags/revolut.md>), [sdks](<https://devfeed.tech/tags/sdks.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

This article describes Revolut's iOS development practices, covering its applications and SDKs, weekly App Store updates, continuous integration and delivery, feature flags, gradual rollouts, rollback procedures, and experimentation with statistical measurement.

### Source excerpt

Let's take a look behind the scenes of the iOS development at Revolut, where we strive to provide exceptional financial services and seamless customer experiences for the customers who rely on our iOS apps to manage their financial lives. We believe that it's possible to deliver high-quality software, fast. To achieve this we follow a set of important principles and apply a number of modern agile practices, mainly inspired by XP (eXtreme Programming). Deliver fast Currently, on the iOS platform, we have both applications and SDKs. Here's a list of what's live: Revolut, Revolut <18, Revolut Business, Revolut POS and Revolut Pay SDK. All iOS applications are updated in the App Store on a weekly basis. We operate on the principles of continuous integration and continuous delivery to swiftly deliver new functionality to customers -- as soon as a feature or part of it is ready. We've built our own in-house framework for feature-based releases. According to our process, the Product Owner specifies a feature to be enabled starting from a selected version of the application. Then both the application version and its features are rolled out gradually, starting with a small percentage of our customer base. These two approaches -- feature flagging and gradual version and feature rollout -- enable delivering value to customers with the minimum amount of risk. If anything goes wrong, the flag will be turned off or the older version will be re-submitted as rollback, to remove the problematic change. Moreover, feature flags allow team members to easily switch between different user experiences, compare them, or turn them on and off for testing. We've also developed an in-house experimentation platform that allows teams to experiment with new features and measure their impact using predefined metrics in a statistically significant way. This platform guarantees that experiments are properly set up, and that results are produced using a robust statistical framework. All ideas are teste

## Canvas-based JavaScript Blur detection

DevFeed: [Canvas-based JavaScript Blur detection](<https://devfeed.tech/articles/canvas-based-javascript-blur-detection-26341.md>)

Original publisher: [Read original article](<https://medium.com/revolut/canvas-based-javascript-blur-detection-b92ab1075acf?source=rss----44c5ac415e14---4>)

Author: Eremingeorgy

Published: 2024-01-22T08:38:54Z

Content type: article

Language: en

Sources: [Revolut Engineering](<https://devfeed.tech/sources/revolut-engineering.md>)

Topics: [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Canvas](<https://devfeed.tech/topics/canvas.md>), [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [blur-detection](<https://devfeed.tech/tags/blur-detection.md>), [canvas](<https://devfeed.tech/tags/canvas.md>), [case-study](<https://devfeed.tech/tags/case-study.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [library](<https://devfeed.tech/tags/library.md>), [typescript](<https://devfeed.tech/tags/typescript.md>)

### AI overview

The article describes developing a JavaScript algorithm to detect whether an image is blurred and estimate the degree of blur. The work began during development of a banking KYC module because existing open-source solutions did not meet the requirements, and it discusses potential client-side image-quality applications.

### Source excerpt

Introduction While developing the Know Your Customer (KYC) module in the banking sector, we faced a specific challenge. KYC is a process where banks verify the identity and assess the risk profile of their clients. As part of this module's development, we needed a JavaScript library that was capable of analysing images -- specifically, we required it to detect if an image is blurred and, importantly, to determine the degree of that blur. This functionality was crucial because clear images are essential for accurate identity verification in KYC processes so a dedicated library was needed. Unfortunately, there were no suitable solutions in opensource that fulfilled criteria satisfactorily. Left with no alternative, we embarked on creating an algorithm on our own. The outcome was a user-friendly algorithm that effortlessly checks any image for the presence and degree of blur. From the voluminous inquiries we observed on platforms like StackOverflow, it became evident that our solution could greatly benefit the community. This utility has significant potential for diverse applications, such as image quality analysis on the client side. Yet, surprisingly, a modern, uncomplicated, resource-friendly library to tackle this common problem remains absent in today's software landscape. Our experience, therefore, not only serves as a case study, but also underscores the urgent need for such a library in the JavaScript/TypeScript ecosystem. Relevance In an era where the visual web dominates, the quality of images plays a significant role in user engagement and experience. Blurry images can tarnish user perceptions and limit the effectiveness of visual communication. Yet, our research has shown a glaring gap in the JavaScript/TypeScript ecosystem: the lack of a simple, accessible tool to detect and quantify image blur. This absence impacts developers, businesses, and users alike, leaving a critical need unmet. In the digital age, the quality of visuals is paramount across a broad

## Evolution of translations management for Android at Revolut

DevFeed: [Evolution of translations management for Android at Revolut](<https://devfeed.tech/articles/evolution-of-translations-management-for-android-at-revolut-26343.md>)

Original publisher: [Read original article](<https://medium.com/revolut/evolution-of-translations-management-for-android-at-revolut-2f97b5969bfb?source=rss----44c5ac415e14---4>)

Author: Yaroslav T

Published: 2023-12-05T17:28:51Z

Content type: article

Language: en

Sources: [Revolut Engineering](<https://devfeed.tech/sources/revolut-engineering.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Development](<https://devfeed.tech/topics/development.md>), [migration](<https://devfeed.tech/topics/migration.md>), [Script](<https://devfeed.tech/topics/script.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [Groovy](<https://devfeed.tech/topics/groovy.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [development](<https://devfeed.tech/tags/development.md>), [evolution](<https://devfeed.tech/tags/evolution.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [gradle-plugin](<https://devfeed.tech/tags/gradle-plugin.md>), [groovy](<https://devfeed.tech/tags/groovy.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [management](<https://devfeed.tech/tags/management.md>), [migration](<https://devfeed.tech/tags/migration.md>), [translation](<https://devfeed.tech/tags/translation.md>)

### AI overview

An engineering retrospective on how Revolut evolved Android translation management across multiple apps, modules, and languages. It describes using Lokalise, moving translation downloads from app startup to scripts, and migrating the script from Python to Groovy through a Gradle task.

### Source excerpt

Here's everything you need to know about how translations have evolved at Revolut. We currently have 6 apps, with 330 modules containing strings.xml files. And don't forget, we need to support 33 languages. To make the translation process smooth, we use the API of Lokalise. When one of our engineers adds a new string on the platform, it's translated into all languages within 1 hour. After that, we need to download and place the translations into the correct module. Now, from an engineering perspective, here comes the most interesting part! Initial implementation In 2017, we began our expansion, and the first supported languages were French and Polish. We quickly reached a stage where fast translation became an integral part of the feature release process. Using our partner, Lokalise.com, we started implementing translations for a single app (only Revolut retail app existed at the time). We added Lokalise library to our project and used keys from it via a Singleton pattern: https://medium.com/media/b55574683f8ebc328b4049d46f1114bf/href Library downloads translations from the server once the user opens the app. This approach was fast to implement, but had 2 limitations: API has user limit, which is critical for the fast-growing application Download translations on app launch degrades the performance First script To answer both of these problems, we created a simple local script that downloads strings and puts them into the resources' folder. Before releasing a new version of the app, one of the engineers has to call this script and merge translated files into the release branch. https://medium.com/media/78c6e72e4148de66b8d461b467b0df55/hrefSimplifying developers' life Later on, one of our engineers introduced an additional script to upload keys to Lokalise. The goal was to let engineers create new keys in strings.xml during the development process, automatically upload them to the provider, translate them, and then download them back. However, we soon discovered that

## Improving product reliability by imposing constraints as a part of CI/CD process

DevFeed: [Improving product reliability by imposing constraints as a part of CI/CD process](<https://devfeed.tech/articles/improving-product-reliability-by-imposing-constraints-as-a-part-of-ci-cd-process-26344.md>)

Original publisher: [Read original article](<https://medium.com/revolut/improving-product-reliability-by-imposing-constraints-as-a-part-of-ci-cd-process-597cf2307224?source=rss----44c5ac415e14---4>)

Author: Pedro Moura

Published: 2023-11-03T14:26:59Z

Content type: article

Language: en

Sources: [Revolut Engineering](<https://devfeed.tech/sources/revolut-engineering.md>)

Topics: [CI/CD](<https://devfeed.tech/topics/cicd.md>), [Application Security](<https://devfeed.tech/topics/application-security.md>), [Vulnerabilities](<https://devfeed.tech/topics/vulnerabilities.md>), [Data analysis](<https://devfeed.tech/topics/data-analysis.md>)

Tags: [application-security](<https://devfeed.tech/tags/application-security.md>), [blocking](<https://devfeed.tech/tags/blocking.md>), [ci-cd](<https://devfeed.tech/tags/ci-cd.md>), [data-analysis](<https://devfeed.tech/tags/data-analysis.md>), [devsecops](<https://devfeed.tech/tags/devsecops.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [sast](<https://devfeed.tech/tags/sast.md>), [sca](<https://devfeed.tech/tags/sca.md>), [scanners](<https://devfeed.tech/tags/scanners.md>), [security](<https://devfeed.tech/tags/security.md>), [security-vulnerabilities](<https://devfeed.tech/tags/security-vulnerabilities.md>), [software-development](<https://devfeed.tech/tags/software-development.md>)

### AI overview

Revolut describes a CI/CD approach that uses automated risk calculation, data analysis, security scanning, and deployment constraints to improve product reliability. The approach aims to identify vulnerabilities and bugs early, mitigate them, and potentially block high-risk applications from reaching production.

### Source excerpt

At Revolut, we always aim to consistently provide efficient, high-quality, and secure services. Our primary goals are to enhance product quality, increase customer satisfaction, and reduce business risk. To achieve those goals, we should aim to be as proactive -- rather than reactive -- as possible. This means fixing any point of failure before it reaches production by identifying, reporting, and potentially blocking deployments that can impact the reliability of our products. In this article, we'll explain how we achieve those goals using automated risk calculation, data analysis, and imposing constraints to push for the mitigation of open vulnerabilities and the fix of reported bugs identified in our products. Challenges faced by Revolut Each application/service has its own specifications, with different technology stacks and architectures, bringing a diversity of security challenges and different vulnerabilities. That being said, application risk cannot be based only on the reported security vulnerabilities but also in the context of that specific application. Continuous scanning, reporting, visibility, and risk evaluation are essential to providing the best security advice and automated security controls. Nowadays there are several types of security scanners (SAST, SCA, DAST, IaC, etc.) that help security professionals to identify and report vulnerabilities, where each of them can belong to a different third-party provider. For further information on these, read our article on continuous security. Data scraped from different sources creates friction when it's needed to group findings and provide mitigations. This can also decrease mean time to identify vulnerabilities and mean time to provide mitigations. Also, to avoid such negative workflow impact, security must be shifted left. Without a centralised source of truth for security-related application data, most of the time is wasted on searching for information/findings in segmented platforms and finding the corre

## Customising Android app UI with themes

DevFeed: [Customising Android app UI with themes](<https://devfeed.tech/articles/customising-android-app-ui-with-themes-26342.md>)

Original publisher: [Read original article](<https://medium.com/revolut/customising-android-app-ui-with-themes-a251e42b1451?source=rss----44c5ac415e14---4>)

Author: Maxim Kostenko

Published: 2023-07-19T11:14:44Z

Content type: tutorial

Language: en

Sources: [Revolut Engineering](<https://devfeed.tech/sources/revolut-engineering.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Dark Mode](<https://devfeed.tech/topics/dark-mode.md>), [Development](<https://devfeed.tech/topics/development.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [dark-mode](<https://devfeed.tech/tags/dark-mode.md>), [fintech](<https://devfeed.tech/tags/fintech.md>), [layout](<https://devfeed.tech/tags/layout.md>), [themes](<https://devfeed.tech/tags/themes.md>), [ui](<https://devfeed.tech/tags/ui.md>), [ui-design](<https://devfeed.tech/tags/ui-design.md>)

### AI overview

This tutorial explains how to customize Android app interfaces with themes. It covers light and dark mode, Android 12 Dynamic Color, and user-selectable color themes, drawing on Revolut's experience and a demo project.

### Source excerpt

Keeping an app fresh and engaging is important to provide users with an enjoyable experience. One effective method is to add a personal touch to your app by supporting different themes in the application. In this article, we'll explore the various options that developers have to enhance user experience with the themes. We'll also share our company's experience in building themes, and the technical hurdles we faced during Android development. Let's dive in! Depending on your app and company goals, you have several options to consider when implementing theming in your Android app. Here are a few: Switching between light and dark mode: This has become almost a necessity on mobile platforms due to users' preference for dark mode Implementing dynamic colours. Android 12 introduced Dynamic Color, allowing you to adapt your app's colour scheme to match the user's wallpaper Going above and beyond, as we did in Revolut: We offer all the options mentioned above, and also provide our customers with the ability to choose colour-based themes in the app. This allows them to select their favourite colour from a predefined palette, and the app's appearance changes to match it By leveraging these options, you can create an app with a look and feel that aligns with your company's branding and goals. In this article, we'll build a simple app that takes advantage of all the mentioned customisations options: Switching between light and dark mode With many platforms now offering system-wide dark mode, implementing a dark theme in your app has become almost an industry standard. While there are numerous resources available for implementing dark mode, we won't delve into all the technical details here. That said, if you're interested in learning more about implementing a dark theme in Android, you can refer to the official guide. In our demo app, we support dark and light mode by defining two styles: Light:https://medium.com/media/68c7ff182cdd7a8095299976aa1eee50/hrefDark:https://medium.co

## The Fundamentals of Android at Revolut

DevFeed: [The Fundamentals of Android at Revolut](<https://devfeed.tech/articles/the-fundamentals-of-android-at-revolut-26348.md>)

Original publisher: [Read original article](<https://medium.com/revolut/the-fundamentals-of-android-at-revolut-3537101a2c7c?source=rss----44c5ac415e14---4>)

Author: Revolut

Published: 2023-03-17T09:48:42Z

Content type: article

Language: en

Sources: [Revolut Engineering](<https://devfeed.tech/sources/revolut-engineering.md>)

Topics: [android-development](<https://devfeed.tech/topics/android-development.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [Design system](<https://devfeed.tech/topics/design-system.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [ci-cd](<https://devfeed.tech/tags/ci-cd.md>), [design-system](<https://devfeed.tech/tags/design-system.md>), [fintech](<https://devfeed.tech/tags/fintech.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [mobile-development](<https://devfeed.tech/tags/mobile-development.md>), [platform-teams](<https://devfeed.tech/tags/platform-teams.md>), [product](<https://devfeed.tech/tags/product.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

The article describes how Revolut organizes and operates its Android development. It covers the Android engineering organization, Platform and Product streams, and the responsibilities of the Mobile Platform and Design System teams, including architecture, Gradle build performance, dependencies, CI/CD, releases, internal tools, libraries, analytics, testing, security, and reusable UI components.

### Source excerpt

People deserve more from their money. More visibility, more control, more freedom. Since 2015, Revolut has been on a mission to deliver just that. With an arsenal of awesome products that span spending, saving, travel, transfers, credits, crypto, investing, exchanging, and more, our mobile super app has helped 25+ million customers send, spend, save, and invest smarter. Let's take a look behind the scenes of the Android development at Revolut and learn how we deliver our iconic apps to millions of customers all over the world. Dream team Our Android team is one of the best in the industry -- and we're proud of it. It's one of our driving forces: over a hundred excellent Android engineers work on our key products, such as Revolut for personal customers, Revolut Lite, Revolut Business, and Revolut < 18 for teens. At Revolut, we believe that building diverse, lean teams of brilliant go-getters who break down barriers, is the key to winning. That's why we have around 70 strong teams that split their work across two main streams: Platform and Product. The Platform stream consists of Design System and Mobile Platform teams, while the Product stream includes various product teams, such as the Onboarding team, Payments team, Trading team, Crypto team, Credit team, and more. Each team is made up of Product Owners, Designers, iOS, Android, Backend, and Frontend engineers who work together to deliver exceptional results. To better understand our teams and how they contribute to our success, let's take a closer look at their roles and responsibilities. Mobile Platform Team 👨🔧 Our Mobile Platform team is involved in a broad range of areas, such as building infrastructure, managing releases, maintaining architecture, and owning internal tools and libraries. The team upgrades projects configuration, particularly improve performance of Gradle Builds, maintains architecture, manages dependencies and keeps architecture sustainable, modernises CI/CD pipeline, facilitates mobile releas

## Security Drone: scaling continuous security at Revolut.

DevFeed: [Security Drone: scaling continuous security at Revolut.](<https://devfeed.tech/articles/security-drone-scaling-continuous-security-at-revolut-26347.md>)

Original publisher: [Read original article](<https://medium.com/revolut/security-drone-scaling-continuous-security-at-revolut-862bcd55956e?source=rss----44c5ac415e14---4>)

Author: Krzysztof Pranczk

Published: 2023-01-03T09:24:53Z

Content type: tutorial

Language: en

Sources: [Revolut Engineering](<https://devfeed.tech/sources/revolut-engineering.md>)

Topics: [Application Security](<https://devfeed.tech/topics/application-security.md>), [Security](<https://devfeed.tech/topics/security.md>), [CI/CD](<https://devfeed.tech/topics/cicd.md>), [sdlc](<https://devfeed.tech/topics/sdlc.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [software-development](<https://devfeed.tech/topics/software-development.md>)

Tags: [application-security](<https://devfeed.tech/tags/application-security.md>), [article](<https://devfeed.tech/tags/article.md>), [automated](<https://devfeed.tech/tags/automated.md>), [ci-cd](<https://devfeed.tech/tags/ci-cd.md>), [development](<https://devfeed.tech/tags/development.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [fintech](<https://devfeed.tech/tags/fintech.md>), [pipelines](<https://devfeed.tech/tags/pipelines.md>), [security](<https://devfeed.tech/tags/security.md>), [software](<https://devfeed.tech/tags/software.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

Revolut describes Security Drone, an approach for scaling application security assurance in fast CI/CD environments. The article explains the limits of manual review and automated scanner triage as development activity and pipeline volume increase.

### Source excerpt

Security Drone: Scaling Continuous Security at RevolutIntro As we're continuously growing and extending our product offerings, we can face many technological challenges. These challenges are solved by our engineers and this results in many features, changes and updates being developed and successfully delivered to our customers. However, with the development of new features comes many security challenges that are faced by the internal Application Security Team. This lovely bunch is responsible for the security assurance of every new feature developed by our engineers. To provide the highest level of security assurance to our products, we've implemented a number of processes placed in different stages of the Software Development Life Cycle (SDLC), including automated scans in our CI/CD pipelines. However, it wouldn't be possible to efficiently triage every security finding produced by automated scanners. In July 2022, there were nearly 39,000 commits created by over 900 authors! To address this challenge, we developed Security Drone. In this article, we'd like to share with you our approach to provide the highest security assurance in fast CI/CD environments. Challenges faced by Revolut The classic approach to security testing requires the security teams to perform a manual review of any developed features, with the help of automated security scans. Traditionally, this work was executed on a risk and priority basis and that need was stretching the team beyond its capacity. Additionally, the team had to cope with the numerous CI pipelines across the company. This approach wasn't a viable solution in terms of scaling, quality and coverage. Some of you may have an idea of the security challenges faced in a fast CI/CD environment. If not, let us make a little recap of the challenges we've been facing: Software changes are constantly increasing New changes are integrated and deployed every day Engineers tend to prioritise the development of functionalities over security T

## iOS Screen Navigation Engine at Revolut

DevFeed: [iOS Screen Navigation Engine at Revolut](<https://devfeed.tech/articles/ios-screen-navigation-engine-at-revolut-26345.md>)

Original publisher: [Read original article](<https://medium.com/revolut/ios-screen-navigation-engine-at-revolut-1b189f45240?source=rss----44c5ac415e14---4>)

Author: Vincent Berihuete

Published: 2022-08-17T11:35:30Z

Content type: tutorial

Language: en

Sources: [Revolut Engineering](<https://devfeed.tech/sources/revolut-engineering.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [Code](<https://devfeed.tech/topics/code.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [implementation](<https://devfeed.tech/topics/implementation.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [fintech](<https://devfeed.tech/tags/fintech.md>), [ios](<https://devfeed.tech/tags/ios.md>), [ios-app-development](<https://devfeed.tech/tags/ios-app-development.md>), [ios-engineering](<https://devfeed.tech/tags/ios-engineering.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [revolut](<https://devfeed.tech/tags/revolut.md>)

### AI overview

This article describes Revolut's custom Flow Engine for iOS screen navigation. It compares storyboard- and view-controller-driven navigation with an abstraction that uses a state machine to manage flows, screens, dependencies, and actions.

### Source excerpt

Ever heard about the Coordinator pattern? Good for you, this article isn't about it. I'm here to open your eyes to Custom Navigation Engines just like the one we created on our Revolut Flow Engine. First let's talk about some traditional approaches for navigation before we get into our Flow engine: Storyboard actions navigation The most traditional way of doing navigation with storyboards is the one that's triggered by an action. As you know, you can ctrl + drag from your button to reach the desired screen on your storyboard. Segue driven navigation Another traditional type of storyboard navigation are segues, by doing ctrl+drag from one view controller to another we create a connection of a certain type (push, modally, etc) and assign it an ID. https://medium.com/media/8976cef3dea76b0581556b979848d899/href ViewController code driven navigation The most traditional way outside storyboards, is to instantiate and push or present your view controllers programmatically. https://medium.com/media/efae70b3641c09ff15c404f46504a84e/hrefFlow Engine Now let's bring out the big guns: the abstraction of navigation outside view controllers. Why do we need to abstract navigation? Well, imagine you have a FoodDeliveryApp and in there you have a screen called ProductDetails that shows the information for a given product (Hamburger 🍔, fish and chips 🍟, etc) -- but you want to call this screen and its dependencies from anywhere. Will it be enough to just instantiate the screen everywhere, with its dependencies and its actions? 🤯 of course not! 😅 Wait, what? Don't worry, here's some code: https://medium.com/media/b24d2268c0b542848c5d8a6f05379a6e/href When we want to call our ProductDetail screen and pass its business actions through dependency injection, we end up doing this: https://medium.com/media/cb3e85b0c7ae83eb4080db9b221086f3/href Code looks clean to you? Well, kind of 😅. What happens when you need to show that product page from other view controllers and handle its actions? .sho