Info

В этом файле мы описываем как именно мы решаем проблемы «слабый мобильный банкинг и устаревшие ИТ-системы»: архитектуру Core+Modules, модульную модель продукта, технологический стек, подход к real-time, безопасность, наблюдаемость и масштабирование.


Оглавление

  1. 1. Ключевые тезисы
  2. 2. Суть проблемы
  3. 3. Подход DARCA: платформенное ядро + подключаемые модули
  4. 4. Архитектура платформы (высокий уровень)
  5. 5. Core (общее ядро): что в нём и почему именно это
  6. 6. Modules (подключаемые расширения): что это такое “по-настоящему”
  7. 7. Механика “реального времени”: event-driven вместо batch
  8. 8. Durable workflows: как мы делаем “несрываемые” процессы
  9. 9. API-first и контрактность
  10. 10. Security-by-design (многоуровневая безопасность)
  11. 11. Reliability & Observability (стабильность как стандарт)
  12. 12. Технологический стек
  13. 13. UI/UX и команда
  14. 14. Итог: как это закрывает проблемы исследования

1. Ключевые тезисы

Основные концепции платформы: единое транзакционное ядро, подключаемые модули, real-time подход и встроенная безопасность.

Мы строим банковскую платформу нового поколения и решаем ограничения legacy-ИТ не «косметическими улучшениями», а архитектурой. В основе - единое транзакционное ядро (Core), которое отвечает за неизменяемые свойства системы (учёт, безопасность, доступ, аудит), и подключаемые функциональные модули (Modules), которые расширяют продукт без разрушения ядра.

Мы проектируем платформу как real-time систему: статусы операций, критичные сценарии и синхронизация каналов строятся на потоковой модели (events/workflows), а не на пакетных «окнах» обработки. Это позволяет сделать мобильный банкинг быстрым и предсказуемым: пользователь видит понятный статус, причину и следующий шаг, а не «ожидайте обработки».

Мы заранее закладываем, что функционала будет много, но он нужен разным пользователям по-разному. Поэтому наша продуктовая модель - модульная: пользователь или компания подключают только те модули, которые им действительно нужны (например, P2P, Earn/стейкинг, бизнес-лимиты и согласования, отчётность и интеграции). В результате приложение не превращается в перегруженный комбайн, а платформа может расти по функциям и рынкам без экспоненциального роста сложности интерфейса.

Мы строим систему так, чтобы быстро добавлять новое безопасно. Это достигается контрактностью (API-first + событийные контракты), управляемыми политиками доступа и изоляцией модулей по правам, метрикам и отказам. Безопасность и комплаенс встроены в основу: риск-движок (allow/step-up/hold/deny), неизменяемый аудит критичных действий, протокольные защиты от дублей и повторов, централизуемые правила лимитов и доступов.


2. Суть проблемы

Анализ того, почему мобильный банкинг слаб: проблемы UX, отсутствие real-time, нестабильность и архитектурные ограничения legacy-систем.

2.1. Что ломает мобильный банкинг

Warning

Мы видим, что “слабый мобильный банкинг” почти всегда состоит из нескольких одинаковых компонентов:

  1. Плохой UX и перегруженность

    Приложение пытается быть “всем для всех”: много лишних экранов, непоследовательная логика, слишком много шагов в базовых сценариях (перевод, обмен, управление лимитами). В результате пользователь тратит усилия на навигацию, а не на управление деньгами.

  2. Отсутствие ощущения real-time

    Пользователь не получает понятного статуса “что происходит прямо сейчас”: операции обновляются с задержкой, история подтягивается “волнами”, уведомления приходят поздно. Это воспринимается как нестабильность, даже если операция в итоге прошла.

  3. Слабая производительность и нестабильность клиента

    Лаги интерфейса, долгие загрузки, ошибки в критичных местах (логин, подтверждения, статусы операций) напрямую бьют по доверию. В исследовании отдельно подчеркивается, что слабые интерфейсы, ограниченный функционал и низкая производительность остаются типовой проблемой банковских приложений.

  4. Функциональные разрывы между B2C и B2B

    То, что удобно физлицу, часто не подходит бизнесу: бизнесу нужны роли, лимиты, approvals, выгрузки, интеграции - но в мобильном канале это либо отсутствует, либо сделано неудобно, либо вынесено во внешний “кабинет”.


2.2. Что ломает IT

Danger

Проблема мобильного банкинга почти всегда является следствием того, как устроена IT-база банка.

  • Legacy core и монолитность - устаревшие core-системы сложно развивать: любое изменение затрагивает слишком много компонентов, тестирование дорогое, а риск регрессий высокий. В исследовании отдельно отмечено, что в банках до сих пор встречаются legacy-языки (например, COBOL) и наследуемые платформы, которые повышают хрупкость и усложняют развитие.

  • Batch processing вместо потоковой модели - многие процессы выполняются пакетно: обновления балансов, расчёты, сверки, статусы. Из-за этого пользовательский интерфейс часто отображает “не то, что сейчас”, а “то, что обновилось последним пакетом”. В исследовании прямо описывается зависимость legacy-банков от batch processing.

  • Разрозненные данные и слабая интеграционная модель - информация распылена по системам, нет единого источника истины и стандартного контрактного взаимодействия. В итоге внедрение новых функций (AI-персонализация, open banking/API, новые платежные сценарии) тормозится не “желанием”, а архитектурными ограничениями.

  • Высокая операционная стоимость изменений - большая часть ресурсов уходит на “поддерживать, чтобы не упало”, а не на развитие продукта - это типовая картина legacy-IT.

  • Повышенные риски отказов и безопасности - когда система сложная, связная, с накопленным техническим долгом, она хуже выдерживает нагрузку, хуже наблюдается и сложнее обновляется с точки зрения безопасности.


2.3. Почему “просто переписать core” не подходит

Мы считаем неправильным путь “переписать всё целиком”, потому что на практике это:

  • длительный проект с высокой стоимостью
  • повышенный риск нестабильности в процессе перехода
  • параллельное замедление продуктового развития (всё внимание уходит в migration)

Tip

Поэтому мы выбираем платформенную стратегию:

Строим устойчивое Core-ядро с неизменяемыми инвариантами (учёт, безопасность, доступ, аудит, маршрутизация операций), а рост функционала и быстрые эксперименты реализуем через подключаемые модули, которые можно выпускать и обновлять независимо, без разрушения ядра.


3. Подход DARCA: платформенное ядро + подключаемые модули

Архитектурный подход, в котором стабильное ядро обеспечивает неизменяемые свойства, а модули добавляют функционал без усложнения основы.

3.1. Основной принцип: Core + Modules

Info

Мы строим платформу по принципу “одно общее ядро + подключаемые модули.

Два ключевых компонента:

  • Core (ядро) - это стабильная основа, которая обеспечивает неизменяемые свойства системы: корректный учёт активов, безопасность, контроль доступа, аудит, базовые платежные сценарии, единые статусы и телеметрию.

  • Modules (модули) - это расширения, которые добавляют новые продуктовые возможности и вертикали (P2P, Earn/стейкинг, RWA, бизнес-функции и т.д.) без того, чтобы “раскачивать” и усложнять ядро.

Мы делаем это сознательно, потому что в legacy-банках основная проблема - любое расширение превращается в рискованный проект, который цепляет весь монолит. У нас расширение функционала происходит вокруг ядра, а не внутри него.


3.2. Зачем модульность продукту

Мы заранее учитываем, что функционала будет много, и он будет разным для разных сегментов. Поэтому мы не строим “комбайн”, который одинаково показывает всё всем.

Модульность даёт продукту:

  • Чистый и быстрый интерфейс - базовое приложение остаётся лёгким: кошелёк, балансы, переводы, история, безопасность, уведомления. Всё остальное подключается по необходимости.

  • Персонализация и рост без перегруза - набор модулей фактически становится “профилем продукта” для пользователя: физлицо подключает одно, бизнес - другое. UI расширяется ровно там, где это нужно.

  • Понятная монетизация - часть модулей может быть платной (подписка/тариф/комиссия), а базовый функционал - бесплатным или с минимальными затратами. Это удобно и для пользователя, и для бизнеса.


3.3. Зачем модульность разработке и операционной устойчивости

Модульность - это не только “про интерфейс”. Это способ сделать систему управляемой и устойчивой.

  1. Независимые релизы - мы можем выпускать и обновлять модуль без необходимости трогать ядро и без глобального регресса по всей системе.

  2. Изоляция рисков - если модуль деградирует (ошибка, нагрузка, нестабильность), ядро продолжает работать. Модуль можно отключить когорте пользователей или откатить версию, не ломая базовые операции.

  3. Масштабирование команд и скорости - разные команды могут развивать разные модули параллельно, не блокируя друг друга и не создавая “очередь релизов”.

  4. Быстрая интеграция новых технологий - новые технологии и направления (новые платежные рельсы, новые сети, новые AI-модели) проще добавлять как модуль или как изолированный компонент, чем переписывать core.


3.4. Future-proofing: мы учитываем, что технологии меняются быстро

Question

Как построить систему, которая сможет эволюционировать без накопления технического долга?

Мы исходим из реальности: технологии, платежные рельсы, требования комплаенса и пользовательские ожидания меняются быстро. Поэтому мы строим систему так, чтобы:

  • ядро оставалось стабильным и менялось редко (только когда действительно нужно менять инварианты)
  • всё быстро меняющееся жило в модулях и подключалось через контракты
  • инфраструктурные компоненты можно было заменять без “перезапуска банка” (за счёт слоёв, контрактов и изоляции)

Это принципиальное отличие от legacy-подхода: мы проектируем не “систему под текущий год”, а платформу, которая может эволюционировать и расширяться без накопления критического технического долга.


4. Архитектура платформы (высокий уровень)

Слои архитектуры: Experience Layer, Core Platform Layer, Modules Layer и Integration Layer, каждый с чёткой ролью и независимым развитием.

4.1. Слои архитектуры

Note

Мы строим платформу как набор слоёв, где каждый слой имеет чёткую роль и может развиваться отдельно. Это снижает связность, ускоряет изменения и упрощает масштабирование.

4.1.1. Experience Layer (клиентские приложения и интерфейсы)

Слой, который отвечает за пользовательский опыт и быстрые сценарии.

  • Mobile (iOS/Android) - основной продукт для B2C и часть сценариев B2B
  • Web / Business console - корпоративные сценарии: роли, лимиты, согласования, отчётность
  • Backoffice / Support tools - инструменты оператора, комплаенса и поддержки
  • Partner / Developer portals - документация и управление API/ключами (для интеграций)

Цель слоя: быстрый, понятный UX и единые паттерны работы со статусами операций, ошибками и безопасностью.


4.1.2. Core Platform Layer (платформенное ядро)

Слой неизменяемых инвариантов: то, что должно быть надёжным и одинаковым для всех модулей и всех пользователей.

  • Identity & Access (DARCA ID) - сессии, устройства, MFA/passkeys, роли
  • Ledger & Wallet Core - учёт активов и балансов, неизменяемая история
  • Payments Orchestrator - единая маршрутизация операций и статусов
  • Risk & Compliance Core - риск-решения, лимиты, политики, аудит
  • Notifications Core - уведомления и системные события
  • Observability & Audit Core - метрики, трассировка, логирование, аудит-трейл
  • Module Registry & Entitlements - включение/отключение модулей, версии, права, тарифы

Цель слоя: обеспечить, чтобы любой модуль работал “на стабильной платформе”, а не строил свой мини-банк внутри банка.


4.1.3. Modules Layer (подключаемые модули)

Слой продуктовых вертикалей, который быстро растёт и расширяется.

  • Модули для частных пользователей (P2P, Earn/стейкинг, инвестиционные сценарии)
  • Модули для бизнеса (ролевая модель, approvals, массовые выплаты, отчётность)
  • Модули по активам/сетям/рынкам (новые рельсы, новые сети, новые партнёры)

Цель слоя: быстро добавлять функциональность без риска для ядра, выпускать независимые релизы и масштабировать команды.


4.1.4. Integrations Layer (внешние системы и рельсы)

Слой интеграций, который подключает платформу к внешнему миру и партнёрам.

  • Fiat rails / partner banking - платёжные провайдеры, банки-партнёры, PSP
  • Blockchain gateways / nodes - подключение сетей, подтверждения, мониторинг
  • KYC/AML providers - проверки, санкционные списки, риск-сигналы
  • Enterprise integrations - ERP/CRM/бухгалтерия, платежные файлы, webhooks

Цель слоя: стандартизировать интеграции, чтобы новые подключения делались быстро и без “ручных костылей”.


4.1.5. Infrastructure Layer (надёжность, безопасность, масштабирование)

Слой, который обеспечивает отказоустойчивость и управляемость.

  • контейнеризация и оркестрация, автоскейлинг
  • наблюдаемость (метрики/трейсы/логи), алерты и SLO
  • хранение ключей/секретов, сетевые политики, mTLS
  • резервирование, бэкапы, DR-процедуры

Цель слоя: чтобы платформа масштабировалась предсказуемо и работала устойчиво даже при росте нагрузки и расширении географии.


4.2. Потоки данных и событий (как всё “дышит”)

Мы соединяем систему двумя основными “контрактными каналами”, чтобы избежать хаоса интеграций:

КаналИспользованиеПримеры
API-контракты (synchronous)Где нужен немедленный ответлогин, запрос баланса, создание операции, запрос статуса
События (asynchronous)Где важны real-time обновления и слабая связностьизменение статуса операции, риск-решение, уведомления, аналитика, реакции модулей

Паттерн работы:

  1. действие пользователя или системы создаёт команду (API вызов)
  2. ядро/модуль фиксирует состояние в своих доменах
  3. затем публикуется событие, которое получают другие сервисы и модули
  4. клиент видит изменения через подписки/пуши/обновления статусов

Это даёт real-time ощущение и позволяет добавлять новые модули, которые просто подписываются на нужные события, не меняя ядро.


4.3. Контур real-time (что мы делаем принципиально иначе, чем legacy)

Example

В legacy-системах “всё сходится” в конце операционного дня или в пакетных окнах. Мы строим иначе:

  • Real-time статусы операций - статус меняется по событиям и виден пользователю сразу
  • Единая модель статусов - одинаковые статусы и объяснения в мобильном, вебе и поддержке
  • Событийная синхронизация каналов - нет рассинхронизации “мобильное показывает одно, оператор - другое”
  • Поток для аналитики и antifraud - антифрод/скоринг питается событиями, а не выгрузками

Это фундамент для сильного мобильного банкинга: UX становится быстрым не потому что “подкрутили интерфейс”, а потому что вся платформа работает в real-time логике.


5. Core (общее ядро): что в нём и почему именно это

Компоненты Core: Identity, Ledger, Payments, Risk, Notifications, Observability и Module Registry - каждый критичен для стабильности платформы.

5.1. Identity & Access (DARCA ID)

Это фундамент безопасности и управляемости. Мы не “добавляем безопасность потом”, мы строим её как базовый слой платформы.

Что входит:

  • DARCA ID - профиль пользователя/компании, статусы, уровни KYC, сегменты
  • Сессии и устройства - привязка устройств, контроль новых устройств, доверенные устройства
  • Подтверждения - MFA/2FA, биометрия, passkeys (где применимо), step-up
  • Роли и доступы - RBAC/ABAC, особенно важно для B2B (роли, полномочия, лимиты)
  • Аудит действий - кто/что/когда сделал (критично для комплаенса и расследований)

Почему это в Core: любой модуль должен опираться на единую модель доступа, подтверждений и рисков. Иначе платформа распадается на несогласованные мини-продукты.


5.2. Ledger & Wallet Core

Это “сердце” платформы: единая модель активов, балансов и истории. Без строгого учёта сильный мобильный банк невозможен.

Инварианты:

  • единая модель счетов/кошельков для разных валют и активов
  • строгая транзакционность: операция либо проводится полностью, либо не проводится
  • неизменяемая история операций как источник истины
  • идемпотентность на уровне операций (защита от повторного списания)

Почему это в Core: учёт и корректность балансов - базовый инвариант. Модули добавляют сценарии, но не меняют правила учета.


5.3. Payments Orchestrator + Internal Transfers

Мы делаем единый слой, который управляет жизненным циклом операции - от создания до финального статуса - независимо от рельса (внутренний, партнерский, сеть).

Что включает:

  • маршрутизация операций и единая state machine статусов
  • ретраи без дублей, идемпотентность, защита от повторов
  • единая модель комиссий/лимитов/правил на маршруте
  • внутренние мгновенные переводы без комиссий, в том числе по номеру телефона/контактам

Почему это в Core: платформа должна обеспечивать одинаковый “сквозной” контур операций и статусов для любых модулей. Иначе каждая функция будет “платежами по-своему”.


5.4. Risk & Compliance Core

Слой решений “можно / нужно подтвердить / удержать / нельзя” в реальном времени.

Что входит:

  • risk decisioning: allow / step-up / hold / deny
  • лимиты по операциям/контрагентам/странам/устройствам/ролям
  • комплаенс-контур (KYC/AML, санкционные проверки через провайдеров)
  • аудит “почему принято решение” (traceability)

Почему это в Core: риск и комплаенс - обязательная несущая конструкция платформы, а не функция “по желанию”.


5.5. Notifications & Messaging Core

Уведомления - часть UX и часть безопасности. Мы делаем это платформенным сервисом.

Что входит:

  • push/email/sms/мессенджеры/in-app
  • событийные триггеры (статусы операций, входы, смены устройства)
  • пользовательские настройки уведомлений и шаблоны

Почему это в Core: единая система уведомлений гарантирует одинаковую предсказуемость по всем модулям и каналам.


5.6. Observability & Audit Core

Мы строим эксплуатацию как часть продукта: видеть проблемы, понимать причины, быстро восстанавливаться.

Что входит:

  • метрики/логи/трейсы end-to-end
  • SLO и алерты по критичным операциям и сервисам
  • неизменяемый audit-trail по критичным действиям и решениям

Почему это в Core: без наблюдаемости и аудита любая сложная система со временем превращается в “хаос ошибок”.


5.7. Module Registry & Entitlements

Это механизм, который превращает модульность в управляемую систему.

Что входит:

  • каталог модулей (id, версии, зависимости, совместимость)
  • eligibility (страна, KYC-уровень, риск-профиль, тариф)
  • entitlements (какие права выдаём при подключении и забираем при отключении)
  • rollout control (когорты, feature flags, мгновенное отключение/откат)

Почему это в Core: без реестра и entitlements “модульная платформа” не существует - останутся просто разрозненные фичи.


5.8. Base App Capabilities (Default Modules) - базовые функции приложения, включённые по умолчанию

Note

Важно разделять платформенное Core и базовые продуктовые функции, которые включены “из коробки”. Эти функции мы фиксируем как default modules: пользователь получает их сразу, но архитектурно они реализованы поверх Core и могут эволюционировать отдельно, не превращая ядро в монолит.

Что включаем по умолчанию (как базовый пакет приложения):

  1. Моментальные транзакции внутри банка (без комиссий)

    • мгновенные внутренние переводы
    • переводы по номеру телефона/контактам
    • моментальные уведомления о статусе
  2. Обмен валют и криптовалют + уведомления о выгодном курсе

    • мгновенный обмен внутри приложения
    • алерты по курсу/цене
  3. Резервирование средств (цель/срок) - “копилки/цели”

  4. Оплата услуг и автоплатежи

    • автооплата счетов
    • автопереводы другим пользователям по расписанию
  5. Отчёты и аналитика (включая “monthly wrapper” формат)

    • расходы/категории/динамика
    • отчёты за период и “упаковка месяца”
  6. Предсказание нехватки средств (cashflow-сигналы и предупреждения)

  7. Настраиваемые шаблоны интерфейса под цели пользователя (персонализация UX)

  8. Хранение документов (Document Vault внутри приложения)

  9. Моментальный чат на любой странице приложения (поддержка/консьерж/ассистент)

    • быстрый доступ к техподдержке без выхода со сценария
    • единый “точечный” вход в помощь и сопровождение

Почему это здесь (в разделе Core): эти возможности - базовый стандарт мобильного банка, который должен быть доступен большинству пользователей сразу. Но мы фиксируем их как “default modules”, чтобы сохранить ключевую идею: продукт расширяется модульно, а не превращается в монолит.

Всё, что не обязательно всем пользователям (геймификация, сторис, консьерж/AI-чат, рейтинги, карты и т.п.), мы выносим в раздел Modules как подключаемые расширения.


6. Modules (подключаемые расширения): что это такое “по-настоящему”

Модули как самодостаточные продуктовые блоки: финансовые, бизнес-функции, контент, поддержка и карты - каждый с независимыми релизами и изоляцией рисков.

6.1. Принцип: модуль - это продуктовый блок, который расширяет платформу, не ломая Core

Note

Модуль - это не “пара экранов” и не “одна функция”. Мы определяем модуль как самодостаточный продуктовый блок, который:

  • добавляет новые сценарии и интерфейс (UX/UI)
  • имеет свою бизнес-логику и сервисы
  • подключается к Core через контракты (API + события)
  • получает доступ к данным строго через entitlements и политики
  • имеет собственные метрики, SLO и возможность быстрого отключения

То есть модуль - это единица масштабирования одновременно:

АспектЗначение
Продуктановые вертикали и функции
Разработкинезависимые релизы и обновления
Эксплуатацииизоляция деградаций и быстрый откат
Монетизациитарифы/подписки/комиссии, где уместно

6.2. Категории модулей (как мы группируем расширения)

6.2.1. Financial Modules (финансовые сценарии)

  • P2P / Exchange - расширенные обменные сценарии, P2P-рынок, OTC-потоки
  • Earn / Staking - продукты доходности, staking/earn, условия и ограничения
  • Invest / Portfolio - портфель, цели, стратегии, риск-профиль (если включаем)
  • RWA / Tokenization - токенизация активов, выпуск/управление, витрина активов

6.2.2. Business Modules (B2B-контур)

  • Roles & Permissions for Teams - роли, подразделения, доступы
  • Approvals (Four-Eyes) - согласования платежей и операций
  • Limits & Policies - лимиты на уровне ролей/команд/контрагентов
  • Mass Payments / Payroll - массовые выплаты, зарплатные проекты
  • Invoices / Reconciliation - счета, сверки, выгрузки, отчёты
  • API / Webhooks - интеграции для бизнеса (ERP/CRM/бухгалтерия)

6.2.3. Engagement & Content Modules (контент и вовлечение)

Warning

То, что не является обязательным для всех пользователей и может перегрузить продукт, мы делаем подключаемым:

  • Gamification - достижения, миссии, обучающие игры, “тамагочи/RPG”-механики
  • Stories / Feed - сторис и контентные блоки
  • Rating / Social - рейтинги и социальные механики

6.2.4. Support & Concierge Modules (расширенная поддержка)

Базовый чат мы держим в “default modules”, но расширенные сценарии - это модули:

  • Concierge - персональное сопровождение, премиальные сценарии
  • AI Assistant - помощник/нейросеть с контекстом, подсказками и сценариями

6.2.5. Cards & Payments Modules (карты и покупки)

  • Crypto card / spending - карта и покупки за криптовалюту

Tip

Эти вещи почти всегда зависят от партнёров, юрисдикций и регуляторики, поэтому мы держим их как модуль.


6.3. Как модуль подключается пользователем (Module Marketplace → entitlements → UI)

Подключение модуля - это управляемый процесс, а не “показали экран”.

  1. Module Marketplace - пользователь видит описание, условия, ограничения, риски и требования (например, уровень KYC)

  2. Eligibility check - перед включением мы проверяем:

    • страна/регион
    • уровень KYC/статус аккаунта
    • риск-профиль и ограничения
    • тариф/подписка (если применимо)
  3. Consent / acceptance - если модуль требует согласий (например, условия продукта доходности), пользователь подтверждает

  4. Entitlements выдаются Core-слоем - модуль получает права: какие API можно использовать, какие лимиты применимы, какие операции доступны

  5. UI раскрывается только для активного модуля - добавляются экраны, маршруты, компоненты - пользователь видит только то, что включил

  6. Событийная подписка - модуль подписывается на необходимые события (статусы, изменения баланса, риск-решения) и работает в real-time


6.4. Как модуль устроен технически (Module Package)

Каждый модуль имеет пакетную структуру и манифест:

  • module_id, version (SemVer)
  • required_core_version (совместимость)
  • permissions (доступ к доменам данных)
  • entitlements (какие права выдаём)
  • api_contracts (OpenAPI)
  • event_contracts (какие события публикует/читает)
  • policy_bundle (лимиты/правила/доступ)
  • observability (метрики, SLO, алерты)
  • kill_switch (мгновенное отключение, если нужно)

Это обеспечивает управляемость и быстрые независимые релизы.


6.5. Изоляция модулей: безопасность, стабильность, быстрый rollback

Чтобы модульность была безопасной и не превращалась в хаос:

  1. Контрактная изоляция - модуль взаимодействует с Core через API и события, а не напрямую с “внутренностями” ядра

  2. Policy-as-code и entitlements - модуль не может получить больше прав, чем разрешено политиками. Лимиты и доступы задаются декларативно

  3. Операционная изоляция - у каждого модуля:

    • собственные метрики и SLO
    • собственные алерты
    • возможность ограничения по когорте пользователей
    • быстрый rollback или отключение

6.6. Почему модульность - это ключ к масштабированию продукта и IT

Модульная система решает сразу три класса проблем из исследования:

  • слабый UX → “показываем только нужное”, интерфейс не перегружается
  • устаревший монолитный IT-контур → новые функции живут независимо и не ломают core
  • низкая скорость внедрения инноваций → релизы и эксперименты возможны на уровне модуля, без остановки платформы

7. Механика “реального времени”: event-driven вместо batch

События как нервная система платформы: мгновенные статусы, полная трассируемость и согласованность всех каналов в реальном времени.

7.1. Событийная модель (events как “нервная система” платформы)

Мы строим платформу так, чтобы любое значимое действие фиксировалось не только как запись в базе, но и как событие, на которое могут реагировать другие компоненты и модули. Это основа real-time поведения и согласованности каналов.

Базовые категории событий:

  1. Account & Identity events - вход/выход, новое устройство, смена настроек безопасности, изменение статуса KYC

  2. Ledger events - изменение баланса, проводка, резервирование, списание/зачисление

  3. Payment lifecycle events - операция создана → принята → проверка риска → отправлена → подтверждена → завершена/отклонена

  4. Risk & compliance events - risk decision (allow/step-up/hold/deny), срабатывание правила, изменение лимита

  5. Notification events - событие, которое должно отразиться в уведомлении/центре событий

  6. Module events - события модулей (staking, P2P, RWA, B2B approvals и т.д.) поверх платформенных

Info

Почему это важно: в legacy-системах статус “живёт” внутри отдельных подсистем и обновляется пакетно. У нас статус - это последовательность событий, одинаково доступная мобильному приложению, вебу, поддержке и бэк-офису.


7.2. Зачем это mobile UX (реальный эффект для пользователя)

Event-driven модель напрямую превращается в сильный мобильный банкинг:

  1. Мгновенные статусы операций - пользователь видит, что происходит: “создано → проверка → отправлено → подтверждено”. Это снимает тревожность и снижает нагрузку на поддержку

  2. Понятная причина и следующий шаг - если операция удержана или требует подтверждения, событие несёт причину/класс причины (например, “нужно step-up подтверждение”) и UI показывает конкретное действие

  3. Единая история и отсутствие рассинхронизации - история операций - одна и та же во всех каналах, потому что построена на одной событийной последовательности. Не возникает “в приложении одно, у оператора другое”

  4. Реактивные уведомления - уведомления и центр событий становятся продолжением статусов: пользователь получает уведомление не “когда смогли”, а когда произошло событие


7.3. Зачем это business и compliance (прозрачность и управляемость)

Для бизнеса и комплаенса event-driven архитектура даёт то, что legacy обычно не умеет:

  1. Полная трассируемость - мы можем восстановить цепочку: кто инициировал, какая проверка сработала, какое решение принял risk engine, на каком этапе операция задержалась

  2. Меньше ручных расследований и “операционного админства” - проблемы становятся видимыми сразу: есть события, метрики по каждому этапу, алерты по деградации

  3. Проще строить отчётность и мониторинг - отчёты и аналитика формируются на потоке событий, а не на выгрузках “в конце дня”. Это важно как для финансовой аналитики, так и для риск-мониторинга


7.4. Как это реализовано технически (без “магии”, но понятно)

Example

Чтобы событийная модель работала стабильно, мы закладываем:

  • единые контракты событий (схемы, версии, совместимость)
  • гарантированная доставка (at-least-once, с дедупликацией на стороне получателя)
  • упорядоченность в пределах потока (события одной операции/аккаунта идут в порядке)
  • версионирование событий (старые версии обрабатываются, новые поля игнорируются)
  • наблюдаемость потока (метрики задержек, потерь, обработки)

Это не “просто Kafka”, это управляемая событийная система, которая гарантирует согласованность и надёжность.


8. Durable workflows: как мы делаем “несрываемые” процессы

Долгоживущие рабочие процессы, которые выживают при сбоях: платежи, approvals, асинхронные операции с гарантированной доставкой.

Warning

В legacy-системах долгие операции часто “теряются” при сбоях. Мы строим durable workflows - процессы, которые выживают при отказах и гарантируют завершение.

Примеры:

  • Платежи - от создания до финального статуса, с ретраями и идемпотентностью
  • Approvals - согласования, которые ждут решения, но не “зависают”
  • Асинхронные операции - интеграции, которые работают в фоне, но видны пользователю
  • Риск-проверки - долгие проверки (KYC, AML), которые не блокируют интерфейс

Мы используем state machines + event sourcing, чтобы:

  1. восстановить состояние после сбоя
  2. избежать дублей и потерь
  3. дать полную видимость процесса пользователю и операционной команде

9. API-first и контрактность

Формализованные контракты API и событий: синхронные и асинхронные интерфейсы, версионирование, совместимость и партнёрские интеграции.

9.1. Почему API-first - это основа модульности

Info

API-first подход означает, что мы сначала определяем контракты, а потом реализуем. Это даёт:

  • ясность о том, как компоненты взаимодействуют
  • возможность разрабатывать параллельно (фронтенд и бэкенд)
  • стабильность при эволюции системы
  • основу для партнёрских интеграций

В legacy-системах обычно наоборот: код пишется, а потом “как-то” интегрируется. Результат - хаос и высокая стоимость изменений.


9.2. Два типа контрактов

Мы закрепляем контрактность на двух уровнях:

9.2.1. API Contracts (синхронные)

Используются там, где нужен немедленный ответ:

  • логин/сессия
  • запрос баланса
  • создание операции
  • запрос статуса
  • управление модулями и настройками

9.2.2. Event Contracts (асинхронные)

Используются для real-time и слабой связности:

  • обновления статусов операций
  • риск-решения
  • уведомления
  • события модулей

Tip

Почему это важно: без контрактов событий event-driven архитектура превращается в “зоопарк”, где каждый публикует что хочет. Мы сразу фиксируем схемы, версии и совместимость событий.


9.3. Версионирование API и событий (как мы избегаем “ломающих релизов”)

Мы закладываем управляемую эволюцию:

  1. SemVer-логика

    • minor-изменения совместимы назад
    • major-изменения - только через новую версию и миграционный период
  2. Стратегия “расширяем, а не ломаем”

    • добавляем новые поля, не удаляя старые
    • ошибки и статусы имеют стабильные коды
  3. Deprecation policy

    • объявление депрекации
    • период поддержки
    • телеметрия использования старых версий
    • плановое отключение только после миграции

9.4. Как это помогает модульности и скорости релизов

Контракты - это основа того, чтобы модули действительно могли быть независимыми:

  • модуль может развиваться и релизиться отдельно, пока он соблюдает контракт ядра
  • ядро может эволюционировать, не ломая модуль, пока сохраняется совместимость
  • новые модули подключаются быстро, потому что “точки входа” платформы формализованы

В результате мы получаем то, чего почти нет в legacy:

  • быстрые релизы
  • предсказуемые интеграции
  • меньше регрессий
  • возможность роста экосистемы партнёров

9.5. Партнёрские интеграции и B2B API (как мы делаем это “правильно”)

Для бизнеса и партнёров мы строим интерфейсы так, чтобы они были:

  • понятны
  • безопасны
  • воспроизводимы

Что важно:

  • управление ключами/доступами через политики и роли
  • webhooks и события для real-time интеграции
  • ограничение прав на уровне entitlements
  • аудит всех действий интеграции

Это делает интеграции частью платформы, а не набором уникальных “ручных подключений”, которые каждый раз делаются заново.


10. Security-by-design (многоуровневая безопасность)

Безопасность встроена в платформу: аутентификация, risk engine, policy-as-code, аудит и комплаенс как базовые инварианты.

10.1. Принцип: безопасность встроена в платформу, а не “прикручена потом”

Мы строим безопасность как набор базовых инвариантов Core. Это означает:

  • любой модуль работает только в рамках разрешений и политик
  • критичные операции всегда проходят через единый контур risk/безопасности
  • все действия и решения имеют трассировку и аудит

Именно так мы избегаем типичной legacy-проблемы, когда безопасность становится “пакетом правил поверх хаоса” и начинает мешать продукту вместо того, чтобы защищать его.


10.2. Аутентификация и доступ: сильная безопасность без трения

Наша цель - высокая безопасность при минимальном трении в UX.

10.2.1. Устройство и сессия как фактор доверия

  • привязка доверенных устройств
  • контроль новых устройств
  • уведомления и подтверждения при подозрительных входах

10.2.2. Step-up подтверждения

Мы не заставляем пользователя подтверждать всё одинаково. Мы используем step-up:

  • обычные действия проходят быстро
  • подозрительные действия требуют усиленного подтверждения (MFA/passkeys/биометрия)

10.2.3. Passkeys / phishing-resistant подход

Там, где это применимо, мы используем passkeys-подход как устойчивый к фишингу способ аутентификации и подтверждений. Это даёт:

  • меньше рисков компрометации паролей
  • быстрее логин
  • выше доверие к продукту

10.3. Risk Engine: решения allow / step-up / hold / deny

Вместо статического “разрешить/запретить” мы строим risk decisioning, который работает в реальном времени и умеет управлять риском гибко.

10.3.1. Типы решений

  • allow - пропустить
  • step-up - требовать усиленное подтверждение
  • hold - удержать до проверки/доп.условий
  • deny - отклонить

10.3.2. Что учитываем в сигналах

  • новый девайс, география, скорость перемещения
  • поведенческие паттерны
  • аномалии суммы/частоты
  • контрагент/рельс/сеть
  • статус KYC и история

10.3.3. Почему это важно

Такой подход позволяет одновременно:

  • снижать фрод и потери
  • не ломать UX массовыми “лишними подтверждениями”
  • обеспечивать прозрачность для комплаенса

10.4. Политики как код (Policy-as-code): доступы и лимиты централизованно

Note

Одна из главных проблем legacy - правила “размазаны” по коду, что делает их:

  • неаудируемыми
  • сложными для изменения
  • непредсказуемыми

Мы переносим правила в декларативный слой (policy-as-code), чтобы:

  • доступы и лимиты были едиными для всех модулей
  • изменения правил могли происходить управляемо
  • комплаенс и аудит могли видеть “что именно разрешено и почему”

Что задаём политиками:

  • доступ к доменам данных
  • лимиты по ролям, странам, KYC-уровням
  • условия на операции (например, step-up при определённых параметрах)
  • правила комплаенса и санкционные проверки

10.5. Неизменяемый аудит: полная трассировка критичных действий

Все критичные действия фиксируются в неизменяемом audit-trail:

  • кто (user/role/system)
  • что (действие, параметры)
  • когда (timestamp)
  • результат (успех/ошибка, решение risk engine)
  • почему (какие правила/политики применены)

Это даёт:

  • полную видимость для комплаенса
  • возможность расследования инцидентов
  • доказательства соблюдения требований

10.6. Интеграция с KYC/AML провайдерами

Мы интегрируем проверки как часть платформы:

  • проверки при регистрации и повышении уровня KYC
  • периодические переверки
  • санкционные списки и PEP-проверки
  • сигналы для risk engine

11. Reliability & Observability (стабильность как стандарт)

Наблюдаемость платформы: метрики, трейсы, логи, SLO, алерты и incident management как часть продукта.

11.1. Почему observability - это не “опциональная” часть

Example

В legacy-системах часто “что-то сломалось”, но никто не знает что и где. Мы строим observability как часть архитектуры:

  • метрики - что происходит в реальном времени
  • трейсы - как запрос проходит через систему
  • логи - детали для расследования
  • SLO - обещания пользователям и командам
  • алерты - уведомления о проблемах

Это даёт:

  • быстрое обнаружение проблем
  • быстрое восстановление
  • понимание причин
  • данные для улучшения

11.2. Метрики и SLO

Мы отслеживаем метрики по ключевым операциям:

ОперацияМетрикиSLO
Логинlatency, success rate, errors99.9% success, <500ms p99
Платёжlatency, success rate, fraud rate99.95% success, <2s p99
Запрос балансаlatency, cache hit rate99.99% success, <100ms p99
Риск-решениеlatency, decision distribution<100ms p99

Метрики публикуются в dashboard и используются для алертов.


11.3. Трейсинг и логирование

Каждый запрос имеет trace ID, который позволяет отследить его путь:

  • от клиента через API-gateway
  • через Core-сервисы
  • через модули
  • до внешних интеграций

Логи структурированы и содержат контекст (trace ID, user ID, operation ID), что упрощает поиск проблем.


11.4. Incident Management и On-call

Мы строим процесс:

  1. Detection - алерт срабатывает при нарушении SLO
  2. Escalation - уведомление on-call инженера
  3. Investigation - быстрый поиск причины через метрики/трейсы/логи
  4. Mitigation - быстрое восстановление (откат, отключение модуля, масштабирование)
  5. Resolution - постоянное исправление
  6. Postmortem - анализ и улучшения

12. Технологический стек

Выбор технологий: языки, фреймворки, базы данных, очереди и инструменты, которые поддерживают архитектуру.

Info

Технологический стек - это не “мода”, это инструмент, который должен поддерживать архитектурные принципы:

  • контрактность (API-first)
  • event-driven обработку
  • масштабируемость и наблюдаемость
  • быстрые независимые релизы

Ключевые компоненты:

  • Языки: Go/Rust для Core (скорость, надёжность), TypeScript для модулей и UI (экосистема, скорость разработки)
  • Фреймворки: gRPC/HTTP для API, Kafka/RabbitMQ для событий
  • Базы данных: PostgreSQL для транзакционности и аудита, Redis для кэша и сессий
  • Оркестрация: Kubernetes для масштабирования и управления
  • Наблюдаемость: Prometheus/Grafana для метрик, Jaeger для трейсов, ELK для логов

13. UI/UX и команда

Дизайн-система, компонентный подход, метрики UX и организация команд для быстрого развития.

13.1. Дизайн-система как основа

Tip

Мы строим дизайн-систему, а не “макеты”:

  • единые компоненты (кнопки, формы, статусы, ошибки)
  • единые паттерны (как показываем операции, как объясняем ошибки, как подтверждаем действия)
  • единые принципы (скорость, прозрачность, контроль)

Это позволяет:

  • быстро добавлять новые экраны (компоненты уже есть)
  • обеспечивать консистентность (пользователь узнаёт интерфейс)
  • масштабировать команды (новые разработчики быстро включаются)

13.2. Метрики UX и фокус на результат

Мы не полагаемся на “нравится/не нравится”. Мы измеряем:

  • скорость сценариев - сколько времени занимает перевод, обмен, подключение модуля
  • drop-off - где пользователи бросают процесс
  • ошибки - какие ошибки встречаются и как часто
  • NPS/CSAT - удовлетворённость по ключевым операциям

Эти метрики питают наши решения о приоритизации и улучшениях.

Note

Почему это важно: в legacy-банках часто “красивый дизайн” не решает реальные проблемы. Мы фокусируемся на том, что действительно влияет на пользователей.


13.3. UX для B2C и B2B: разные продукты внутри одной платформы

Мы изначально проектируем два режима - для частных пользователей и для бизнеса, чтобы B2B не был “случайной надстройкой”.

13.3.1. B2C (физлица)

  • максимум скорости в ключевых сценариях: перевод, обмен, контроль безопасности
  • прозрачные статусы и понятные причины
  • персональная сборка модулей: пользователь сам включает то, что нужно (Earn, P2P, отчёты расширенные и т.д.)

13.3.2. B2B (компании)

  • роли и полномочия, лимиты по ролям/подразделениям
  • approvals (four-eyes), журналы действий, экспорт и отчётность
  • удобные массовые операции, интеграции, веб-панель управления
  • модульность на уровне компании: бизнес подключает только то, что соответствует его процессам

14. Как это закрывает проблемы исследования

Матрица решений: как каждый компонент платформы решает конкретные проблемы мобильного банкинга и legacy IT.

14.1. Матрица “проблема → механизм решения → где реализовано”

Проблема из исследованияМеханизм решенияГде реализовано
Слабый UX, перегруженное приложениеМодульный UX: базовый интерфейс остаётся лёгким, расширения подключаются точечноExperience Layer + Module Marketplace + Entitlements
Нет ощущения real-time, статусы “живут своей жизнью”Event-driven статусы + единая state machine операцийPayments Orchestrator + Event Backbone
Долгие/ломающиеся процессы (KYC, выводы, согласования)Durable workflows с сохранением состояния, ретраями и компенсациямиWorkflow Engine + Core
Legacy core делает изменения дорогими и рискованнымиCore + Modules: ядро стабильно, новое добавляется модулями по контрактамCore Platform + Modules Layer
Интеграции каждый раз “уникальные”, ломаются при измененияхAPI-first + контрактность (OpenAPI + event contracts), версионированиеAPI Layer + Contracts + CI/CD
Безопасность “догоняет продукт” и мешает UXSecurity-by-design + step-up + risk decisioningIdentity & Access + Risk Core
Правила лимитов/доступов размазаны по кодуPolicy-as-code: декларативные политики, единый контрольPolicy Engine + Entitlements
Слабая наблюдаемость: проблемы узнают от пользователейObservability стандарт: traces/metrics/logs + SLO/alertsObservability Core
Рост функций приводит к росту хаоса и стоимости поддержкиИзоляция модулей: SLO, kill-switch, canary, rollbackModule Ops + Feature Flags
Бизнесу неудобно: роли, согласования, контрольB2B модули: roles, approvals, лимиты, массовые операцииBusiness Modules + Core

14.2. Что это даёт платформе (в терминах результата)

  1. Скорость развития

    Мы можем добавлять новые направления через модули, не переписывая ядро и не создавая “очередь релизов”

  2. Надёжность и управляемость

    Операции имеют прозрачный жизненный цикл, процессы устойчивы через workflows, а эксплуатация контролируется через наблюдаемость и SLO

  3. Сильный мобильный продукт без перегруза

    UI остаётся понятным, потому что функционал раскрывается через модульность - пользователь подключает нужное

  4. Безопасность, которая не убивает UX

    Risk engine и step-up подтверждения позволяют усиливать контроль только там, где это действительно нужно

  5. Готовность к масштабированию

    Слои архитектуры, контракты, изоляция модулей и cloud-native подход позволяют масштабировать нагрузку, команды и функционал предсказуемо


14.3. Почему этот подход future-proof (технологии меняются - платформа остаётся)

Question

Как построить систему, которая останется актуальной, когда меняются технологии, рынки и требования?

Мы исходим из того, что:

  • появляются новые рельсы, сети, провайдеры
  • меняются требования комплаенса
  • меняется поведение пользователей и ожидания от UX

Поэтому мы строим систему так, чтобы изменения происходили:

  • через контракты (API + события)
  • через модули (добавляем/заменяем функциональные блоки)
  • без разрушения Core (ядро остаётся стабильным)
  • с управляемыми релизами (canary, flags, rollback, SLO)

Это позволяет нам быстро внедрять новое и при этом сохранять стабильность платформы - ключевое отличие от legacy IT, где инновации всегда конфликтуют с устойчивостью.


Заключение

Мы строим банковскую платформу нового поколения, которая решает проблемы слабого мобильного банкинга и устаревших ИТ-систем не “косметическими улучшениями”, а архитектурой.

Ключевые идеи:

  • Ядро + Модули - стабильная основа, которая не ломается при расширении
  • Real-time - события и потоки вместо пакетной обработки
  • Контрактность - API-first и управляемые интеграции
  • Безопасность встроена - не “прикручена потом”, а часть архитектуры
  • Наблюдаемость стандарт - видим проблемы, быстро восстанавливаемся
  • Масштабируемость - слои, контракты, изоляция позволяют расти предсказуемо

Результат - мобильный банк, который быстрый, надёжный, безопасный и готов к будущему.