Backend engineer · TypeScript and Node.js · Lima, Peru (UTC-5)
Fifteen years building backend systems, most of them spent making systems that were never designed together behave as one. Today I design, build and run a product of my own, end to end.
I write down why. Most of what I have to show is in those notes.
Chekalo — price intelligence for Peruvian retail. It ingests nine retailers daily, resolves the same product across stores into one canonical identity, and keeps every seller's price history so a discount can be checked instead of trusted.
- Modular monolith. Ingestion, catalog and search projection, each owning its own state behind a hard boundary. One deployable.
- Deterministic identity resolution. Brand, model and variant signature, corroborated by barcode. It replaced an embeddings and LLM approach that worked, but was not reproducible, auditable or cheap.
- Ingestion that expects to be interrupted. Redis and BullMQ, per-retailer rate limits and retries, every payload validated at the boundary.
- Search as a projection. PostgreSQL holds the truth; only what changed goes to OpenSearch, reindexed behind alias swaps. The site is a read model: React Router with SSR, no API of its own.
- Decisions on record. Over a hundred ADRs in the pipeline alone.
A decade designing and delivering enterprise integration and orchestration platforms: workflow engines over message brokers, workers in .NET and Python, legacy cores behind modern web layers. Led teams of up to 22 engineers, set the engineering standards they worked under, and wrote the code myself when a deadline required it.
url-shortener |
Fastify, hexagonal architecture, separate write and read APIs, load-tested |
nodejs-result-pattern |
Expected failures returned as values; exceptions kept for what is truly unexpected |
nodejs-ddd-value-objects |
Value objects in TypeScript: self-validating, immutable, compared by value |
pragmatic-nodejs-api |
Express API with vertical slices, Zod validation and centralized error handling |
poschuler.com |
Markdown in git, derived into D1 and KV at build time, served from a Cloudflare Worker |
- Designing a URL shortener
- Implementing the Result pattern in Node.js
- Implementing Value Objects in Node.js
- Pragmatic Node.js API — a three-part series
- Boundaries before services. A modular monolith until a split earns its cost.
- Written decisions. ADRs, a domain glossary and an
AGENTS.mdin every repository. - Coding agents, daily. Fully specified issues run headless in isolated worktrees, with a human gate before anything merges. The leverage is in what the repository tells the agent, not in the model.
Backend — TypeScript, Node.js, Express, Fastify, BullMQ, Kysely, Zod, Vitest
Data — PostgreSQL, OpenSearch, Redis, SQL Server
Infrastructure — Google Cloud, Cloudflare Workers, Docker, GitHub Actions, Linux
Integration — Kafka, Camunda, .NET, Python
Frontend — React, React Router, Tailwind CSS
Architecture — Domain-driven design, modular monoliths, hexagonal architecture, vertical slices, event-driven integration
iSAQB® CPSA-F · Azure Developer Associate · MBA · B.S. in Software Engineering



