About

Building reliable systems under real constraints.

I've spent 8+ years building backend systems across fintech, nonprofit tech, and B2B SaaS — at companies like GoFundMe, GÜENO, Kreitech, and ChimiChurri. Most of my work has been in Java, Kotlin, and TypeScript, usually with PostgreSQL underneath.

I approach engineering with a bias toward action, but not recklessness. Ship early, iterate based on real feedback, and never let perfect be the enemy of deployed. But speed without discipline is just chaos — every system I build has proper security, testing, and observability from day one.

Working across different domains taught me that good engineering principles transfer: type safety, defense in depth, designing for failure modes, and understanding the business context behind technical decisions. The problems change — the discipline doesn't.

I don't just build what's specified — I question requirements, propose alternatives, and optimize for long-term maintainability over short-term convenience. Technical decisions are organizational decisions. Infrastructure choices affect team velocity, cognitive load, and how quickly you can respond to market changes.

Shipped highlights
2026

nest-tenant — Published to npm

Multi-tenant library for NestJS with row-level isolation and schema-per-tenant support. Open source.

2026

Konduit — Open Source

Lightweight workflow orchestration engine. DAG-based execution with distributed coordination.

2025

GoFundMe Hackathon Winner

Built the winning project that shipped to production. Demonstrated ability to move fast and deliver impact.

Shipped

NPO Claim Pipeline

End-to-end redesign of GoFundMe's nonprofit claim flow. Cut manual review queue by ~97% with automated verification and tiered approval logic.

How I Work

I optimize for reversibility before elegance. The best architecture is the one you can change when requirements shift. Premature optimization and over-abstraction both poison future flexibility.

I bias toward boring technology until scale forces otherwise. Postgres, Redis, and monoliths solve most problems. Microservices, event sourcing, and novel databases are solutions to specific constraints — not default choices.

Infrastructure decisions are organizational decisions. Choosing a monorepo vs multi-repo, monolith vs microservices, or sync vs async affects team structure, deployment velocity, and cognitive load. Technical choices have human consequences.

I design for failure modes before happy paths. What happens when Redis is down? When a migration fails halfway? When a user bypasses the UI? Systems that only work under ideal conditions don't work.

Speed matters — but only when it doesn't poison the future. Shipping fast is valuable. Shipping fast in a way that makes the next feature harder is debt. I choose speed that compounds, not speed that extracts.

Past work with
GoFundMeGÜENOKreitechChimiChurri
Toolbox

TypeScript, JavaScript, Java, Kotlin, Next.js, React, Node.js, NestJS, Spring Framework, PostgreSQL, MongoDB, Redis, Drizzle ORM, AWS, testing (Jest, Vitest, Playwright), CI/CD, Docker, monorepo tooling (Turborepo, pnpm workspaces), infrastructure fundamentals. And a lot more.

I'm currently looking for my next senior backend role — ideally a team that values reliability, clear thinking, and shipping things that work. If that sounds like your team, let's talk.