Splash Financial, US consumer-lending platform
A bank-linking fallback across origination and decisioning
role: Specified and built it across two services; filed the ERD and the ADR.
// problem
When the bank-aggregation provider cannot link a borrower's account, the application cannot move forward. Borrowers needed a manual path that origination and decisioning could both trust.
// approach
- Spec, technical design, ERD and ADR before the code.
- Hexagonal Kotlin and Spring Boot services, so the domain does not depend on the provider.
- PostgreSQL with Flyway migrations, and explicit aggregates and invariants.
- Transactional outbox events carry state changes from origination to decisioning.
- Delivered through specify, plan, tasks and implement, with every ticket traced to the spec.
// architecture
Borrower
manual bank entry
Origination service
hexagonal Kotlin
PostgreSQL
aggregate + outbox
Outbox events
Decisioning service
// guardrails and production concerns
- Invariants are enforced in the aggregate, not in the UI.
- The transactional outbox keeps state changes and events from drifting apart.
// outcome
A manual bank-entry fallback across origination and decisioning, documented with an ERD and an ADR, and delivered against a committed spec.
// stack
- Kotlin
- Spring Boot
- PostgreSQL
- Flyway
- Transactional outbox