Esteban Saravia M. — Staff Software Engineer

Designing scalable platforms for fintech and enterprise environments.

Focused on distributed systems, architecture, and high-criticality delivery at scale.

TypeScript DDD Hexagonal Architecture Platform Engineering AI Workflows
Esteban Saravia

Esteban Saravia M.

Staff Software Engineer
Available for consulting
Worked with
Scotiabank · BHP · Collahuasi
Scotiabank CCAU BHP Australia Collahuasi MOBDEV

Selected work.

Scotiabank CCAU · OneBank Initiative 2023 – Present

Digital onboarding platform for financial products.

Problem

Fragmented onboarding flows across 4 product teams. No shared component system. Every team duplicating validation logic, form orchestration, and UI infrastructure per product.

Solution

3-layer modular component library: primitives / components / forms. Schema-driven form validation via Zod. Pure configuration resolvers for regulatory context. Jenkins CI/CD with independent builds per package.

Impact

4+ financial products ship from a single shared platform. New developer produces a compliant, on-brand form page in 4 hours. 80% of major version migration work automated via codemods. Insurance team reused shared schemas in 2 days instead of 2 weeks.

// ARCHITECTURE — @onebank component platform
graph TB P["@onebank/primitives\nheadless · API-stable · strict semver"] C["@onebank/components\ndesign system · themed implementations"] F["@onebank/forms\nZod schemas · regulatory resolver · audit log"] L[Loans] Ca[Cards] Ac[Accounts] I[Insurance] BFF["Node.js BFF\nAuth · Orchestration"] API["Core Banking API"] P -->|extends| C C -->|orchestrates| F F --> L & Ca & Ac & I L & Ca & Ac & I --> BFF BFF --> API
4+ financial products
4h dev onboarding time
80% migration automation
2d cross-team reuse
KEY DECISIONS
ADR-001 3-layer package separation: primitives → components → forms. API stability without coupling visual evolution to structural contracts. Consumers update visual layer independently.
ADR-002 Zod schemas as single source of truth for validation — decoupled from the UI layer, independently testable, importable across products without React dependency.
ADR-003 Discriminated unions on tipoPersona for compile-time persona type safety. TypeScript narrows correctly in conditional branches — eliminates runtime errors from invalid persona/field combinations.
ADR-004 Pure resolverConfigFormulario() for regulatory field configuration. No React, no hooks, no side effects. Business rules testable in isolation without a browser or mock infrastructure.
React Node.js TypeScript Zod Jenkins Monorepo Modular Architecture DDD Hexagonal
→ Full engineering case study
BHP Australia · Collahuasi Chile 2013 – 2021 · 8 years

Enterprise systems for tier-1 mining operations.

Problem

Mission-critical software for large-scale mining operations across two countries. Zero tolerance for downtime. No scheduled maintenance windows. 15+ integrated enterprise systems with complex cross-boundary dependencies.

Solution

Resilient distributed architecture with strict domain separation by operational context. Event-driven integration pattern across system boundaries. No shared database between domains. Circuit breakers for upstream dependency failures.

Impact

8-year technical ownership across 2 countries. Zero critical production failures in operational systems. Platform accommodated full operational growth without architectural rewrites. Systems remained legible for teams inheriting them years later.

// ARCHITECTURE — operational domain boundaries
graph TB Op["Operations\nPostgreSQL · eventual consistency"] Ma["Maintenance\nPostgreSQL · strong consistency"] Sa["Safety / Compliance\nappend-only · immutable"] Bus["Enterprise Event Bus\nasync · durable · guaranteed"] SC["SCADA Adapters\npush-only"] ERP["ERP Integration\nSAP · JDE"] Rep["Reporting\nread models"] Op & Ma & Sa --> Bus Bus --> SC & ERP & Rep
8 years ownership
2 countries
15+ integrated systems
0 critical failures
KEY DECISIONS
ADR-001 Domain separation by operational context, not by technology. Each bounded context owns its persistence, API contract, and deployment lifecycle independently.
ADR-002 Event-driven integration for cross-system communication. Systems publish events; consumers interpret. No synchronous cross-boundary calls on the critical operational path.
ADR-003 No shared database across system boundaries. Data duplication accepted as deliberate tradeoff for operational independence, deployment decoupling, and failure isolation.
ADR-004 Circuit breaker pattern for all upstream integrations. Operational software cannot block on unavailable dependencies — graceful degradation is a correctness requirement, not an optimization.
Java .NET PL-SQL Distributed Systems Event-Driven High Availability DDD
→ Full engineering case study

System topology.

Representative architectures from enterprise fintech and industrial operations.

// onebank · full-stack deployment topology
Channel Apps · BFF Gateway · Domain APIs · Core Banking · Observability
graph TB subgraph FE["Frontend Layer"] L["Loans App"] C["Cards App"] A["Accounts App"] I["Insurance App"] end subgraph BFF["BFF Gateway — Node.js"] GW["Auth · Rate Limiting\nRequest Orchestration\nFraud Signal Append"] end subgraph APIS["Domain APIs"] LA["Loans API"] CA["Cards API"] AA["Accounts API"] end subgraph CORE["Core Banking"] CB["Core Banking API\nScotiabank Internal"] FRAUD["Fraud Detection"] CMF["CMF Regulatory\nService"] end OBS["Observability\nMetrics · Traces\nAudit Log · Alerts"] L & C & A & I --> GW GW --> LA & CA & AA LA & CA & AA --> CB CB --> FRAUD & CMF GW --> OBS LA & CA & AA --> OBS

How I think.

01

Scalability failures are boundary failures.

Every performance bottleneck I've diagnosed traced back to a missing abstraction boundary, not a missing machine. Systems fail to scale because responsibilities aren't separated — not because hardware is insufficient.

02

Governance is what makes shared platforms survive.

Every platform I've seen decay started the same way: shared code without shared ownership rules. Components without explicit governance become debt with an API. The organizational agreement matters more than the technical implementation.

03

Enterprise bottlenecks are coordination problems in disguise.

The technical problem is usually solvable. What blocks the solution is always the same: unclear ownership, competing priorities, systems not designed with organizational change in mind. Diagnosis matters more than implementation.

04

Operational complexity is a first-class design constraint.

Systems become fragile when operational complexity is hidden inside abstractions. If your team cannot explain what the system is doing in production without reading the code, it will fail in ways you can't predict.

05

Architecture is constraint management.

Good architecture isn't about choosing the best technology. It's about making constraints explicit so they can be reasoned about, challenged, and revisited as the system evolves. The constraint you don't name is the one that will surprise you.

06

Developer experience is a reliability metric.

Friction in development compounds into bugs in production. Measure how long it takes for a new engineer to ship their first real change. That number tells you more about your system's health than any SLA or test coverage report.

07

Platform thinking is the senior engineer's primary deliverable.

Features expire. Platforms compound. The architectural decisions that define how the next 50 features are built matter more than any individual feature. A Staff engineer's job is to make good future decisions easy and bad ones hard.

08

AI accelerates reasoning, not judgment.

The gap between AI-generated code that compiles and code that belongs in your system is the gap between syntax and context. That gap is a human responsibility. AI amplifies the quality of a decision; it doesn't replace the need to make one.

09

Specification is leverage.

The quality ceiling of any implementation is set before the first line is written. A precise spec makes every downstream activity faster: implementation, review, testing, onboarding. The specification is not overhead — it's the work.


Timeline

Staff Software Engineer
MOBDEV · Scotiabank CCAU
2023 – Present
ReactNode.jsTypeScriptZodJenkinsDDDHexagonal
Senior Software Engineer
MOBDEV
2021 – 2023
TypeScriptReactDDDPlatform Engineering
Project Leader
e-process · BHP · Collahuasi
2013 – 2021 · 8 yrs
Java.NETPL-SQLTechnical LeadershipDistributed Systems
Instructor — Computer Engineering
INACAP
2008 – 2014
QA Lead
Oriencoop
2010 – 2013
Software Analyst
Oriencoop
2008 – 2010


Let's work together.

Available for technical leadership, architecture design, and consulting engagements.