/architecture
Posts touching architecture.
50 posts
- April 12, 2026 4 min
The portfolio is the proof. Ship your work or it did not happen.
Not resumes. Not endorsements. Not interview performance. The code you ship, the systems you build, the writing you publish. Ship it or it did not happen.
- /career
- /engineering-leadership
- /architecture
- /experience
- March 29, 2026 5 min
The Cloudflare container platform changes what I would self-host
Edge containers win for stateless batch jobs and lightweight APIs. Self-hosting still wins for stateful services and observability. The line is shifting faster than expected.
- /cloudflare
- /self-hosting
- /homelab
- /architecture
- /learning
- March 22, 2026 5 min
Why every fintech startup eventually builds its own ledger
FinanceOps started with a third-party ledger. Within 18 months we built our own. Ledger semantics are too coupled to business rules for abstraction.
- /fintech
- /financeops
- /architecture
- /postgres
- /blog
- March 10, 2026 5 min
Architecture debt is usually a decision-quality problem first
The worst architecture debt comes from low-quality decisions made with plenty of time. Improving decision quality reduces debt faster than refactoring sprints.
- /architecture
- /engineering-leadership
- /decision-making
- /blog
- March 1, 2026 5 min
How I evaluate build-versus-buy decisions at a 50-person startup
Build-versus-buy is not about cost. It is about where your team's attention goes. Build what differentiates. Buy the commodity.
- /engineering-leadership
- /architecture
- /decision-making
- /startup-life
- /blog
- February 20, 2026 4 min
Startup speed and enterprise readiness are not opposites
Audit logging, RBAC, and proper error handling actually accelerate delivery by eliminating rework. Enterprise readiness is a speed multiplier, not a speed tax.
- /engineering-leadership
- /startup-life
- /architecture
- /financeops
- /blog
- February 2, 2026 5 min
Drizzle ORM crossed 32K stars and I still think ORM choice barely matters
Query patterns, migration discipline, and connection pooling matter far more than which ORM you choose. The ORM was never the bottleneck.
- /postgres
- /typescript
- /architecture
- /decision-making
- /blog
- January 26, 2026 4 min
Why I run my portfolio site on the same stack I use at work
Next.js, Payload CMS, PostgreSQL, Cloudflare. Not laziness. Every problem solved on the portfolio feeds back into production expertise.
- /architecture
- /typescript
- /react
- /postgres
- /career
- December 22, 2025 5 min
Building a fintech reconciliation engine that handles ten million transactions a day
PostgreSQL partitioned tables, Node.js worker pools, idempotent batch processing, and a custom diffing algorithm. Sub-minute reconciliation at ten million daily transactions.
- /fintech
- /financeops
- /postgres
- /architecture
- /node
- December 8, 2025 5 min
S3 Vectors at re:Invent made me reconsider our entire RAG architecture
2 billion vectors per index at 90% cost reduction. Our pgvector pipeline still makes sense, but the calculus for startups without millisecond latency needs is changing.
- /aws
- /ai-ml
- /architecture
- /financeops
- /learning
- November 17, 2025 4 min
Fifteen years of writing code and I still mass-delete my first draft
The first draft reveals the problem's shape. The second draft solves it. Engineers who try to write perfect code on the first pass are optimizing for the wrong thing.
- /career
- /engineering-leadership
- /architecture
- /experience
- November 10, 2025 5 min
The Prisma-to-Drizzle migration we almost did and why we stayed on Prisma
We built a prototype, benchmarked it, and stayed on Prisma because the migration cost exceeded the performance gain for our actual query patterns.
- /postgres
- /typescript
- /architecture
- /financeops
- /learning
- November 3, 2025 4 min
Why your engineering strategy document is probably a wish list, not a strategy
A strategy is a diagnosis, a guiding policy, and coherent actions. Everything else is a roadmap pretending to be a strategy.
- /engineering-leadership
- /architecture
- /decision-making
- /blog
- October 6, 2025 4 min
Upgrading to Next.js 16 inside a Payload CMS monorepo was harder than expected
Cache Components and React Compiler 1.0 are compelling, but upgrading inside a CMS-coupled codebase surfaced dependency conflicts that deserved their own sprint.
- /react
- /typescript
- /architecture
- /learning
- September 24, 2025 5 min
What payment reconciliation systems teach you about distributed consistency
Eventual consistency in payment reconciliation is a business requirement, not a technical compromise. Idempotency keys and reconciliation windows replaced two-phase commits.
- /fintech
- /financeops
- /architecture
- /postgres
- /blog
- September 3, 2025 5 min
Running Kafka at startup scale is a decision you will regret exactly once
Kafka was justified for our payment event streaming. The operational burden in year two consumed a disproportionate share of platform bandwidth.
- /kafka
- /architecture
- /startup-life
- /financeops
- /learning
- July 21, 2025 4 min
Fintech compliance is not a checkbox. It is an architecture constraint.
Compliance that lives in code survives team turnover. Compliance that lives in spreadsheets does not.
- /fintech
- /architecture
- /financeops
- /blog
- June 23, 2025 4 min
Kubernetes 1.33 and the features that finally made me stop questioning container orchestration for small teams
Every six months someone says Kubernetes is overkill for a small team. Kubernetes 1.33 continued a trend of sane defaults and reduced overhead that invalidates that argument for teams deploying more than two services.
- /kubernetes
- /k3s
- /architecture
- /decision-making
- /blog
- June 2, 2025 5 min
TypeScript strict mode migration: the six-month project I wish I had done in month one
We started with TypeScript loose mode because "we will tighten it later." Eighteen months and 40,000 lines later, migrating to strict surfaced 847 errors, including three that affected financial calculations.
- /typescript
- /architecture
- /ci-cd
- /financeops
- /blog
- May 26, 2025 5 min
Claude Opus 4 and Sonnet 4: the week AI coding tools stopped being novelties and became infrastructure
When Claude Opus 4 hit 72.5% on SWE-bench and solved a TypeScript generics issue that had stumped our team, the conversation shifted from "should we use AI" to "how do we integrate it."
- /ai-ml
- /typescript
- /architecture
- /engineering-leadership
- /blog
- May 5, 2025 4 min
Grafana, Loki, and Tempo: building an observability stack that a four-person team actually uses
Most observability guides assume a platform team. We do not have one. The hard part was not installation but building dashboards engineers actually check daily.
- /observability
- /kubernetes
- /architecture
- /self-hosting
- /blog
- April 28, 2025 5 min
The compliance audit that exposed every shortcut we took in our first year
Our first formal compliance audit surfaced 23 findings. Hardcoded keys, PII in logs, missing audit trails. None malicious, all "we will fix that later." The remediation sprint that followed.
- /fintech
- /security
- /cross-functional
- /architecture
- /experience
- April 14, 2025 5 min
Why I stopped mass-applying "best practices" and started asking "best for what"
Microservices, event sourcing, CQRS, DDD. I had been cargo-culting patterns from companies 100x our size. The question "who benefits from this complexity" changed my architectural decisions.
- /architecture
- /decision-making
- /engineering-leadership
- /startup-life
- /experience
- March 24, 2025 4 min
Our Kafka consumer lag crisis and why I stopped trusting "it works on my machine" for event-driven systems
Consumer lag grew silently for two weeks because local dev processed events instantly while production dealt with partition rebalancing and back-pressure from a slow downstream service.
- /kafka
- /observability
- /architecture
- /financeops
- /blog
- March 17, 2025 4 min
Google's $32B Wiz acquisition and what it signals about security as a first-class infrastructure concern
Google paying $32B for a cloud security startup signals that security is no longer a checkbox but a competitive differentiator, especially in fintech where trust is the product.
- /security
- /aws
- /architecture
- /decision-making
- /blog
- March 3, 2025 5 min
Postgres connection pooling: the problem you do not know you have until you have 50 concurrent users
Our Node.js API opened a new PostgreSQL connection per request. At 50 concurrent users we exhausted the connection limit and the whole system halted. PgBouncer fixed it.
- /postgres
- /architecture
- /node
- /financeops
- /blog
- February 3, 2025 5 min
The tech debt spreadsheet that made my cofounder finally understand why we need a refactoring sprint
Saying "we have tech debt" to a non-technical cofounder is meaningless. A spreadsheet mapping each debt item to customer-facing risk and remediation cost finally moved the conversation.
- /engineering-leadership
- /startup-life
- /cross-functional
- /architecture
- /experience
- January 27, 2025 5 min
DeepSeek R1 and the moment I realized open-source AI would change how we build internal tools
DeepSeek R1 shipped as a 671B open-source model matching GPT-4o benchmarks for under $6M training cost. Self-hostable reasoning models change the calculus for regulated fintech.
- /ai-ml
- /architecture
- /fintech
- /decision-making
- /blog
- January 20, 2025 5 min
Migrating from REST to a hybrid REST/event architecture without stopping the train
Our reconciliation engine needed async event processing but API consumers expected synchronous responses. The strangler fig pattern applied to a fintech data pipeline.
- /kafka
- /architecture
- /api-design
- /node
- /blog
- January 6, 2025 5 min
AWS re:Invent announcements that actually matter for a three-person fintech team
Aurora DSQL, S3 Tables, Amazon Nova. re:Invent 2024 dropped a firehose of announcements, but most solve problems we will not have for years. Three that actually changed our roadmap.
- /aws
- /architecture
- /fintech
- /decision-making
- /blog
- December 16, 2024 5 min
The meeting where product, sales, and engineering all had different definitions of "real-time"
Product wanted sub-second dashboard updates. Sales had promised "real-time" reconciliation. Engineering was thinking about eventual consistency with 30-second polling. One word nearly derailed a quarter of work.
- /cross-functional
- /architecture
- /financeops
- /decision-making
- /experience
- December 9, 2024 4 min
React 19 Server Components in production: the migration nobody warns you about
React 19 shipped with Server Components stable and the React Compiler, but migrating a real fintech dashboard was nothing like the blog posts suggested.
- /react
- /typescript
- /architecture
- /ci-cd
- /blog
- November 11, 2024 4 min
What Payload CMS 3.0 taught me about choosing frameworks that grow with you
Payload CMS 3.0 shipped with native Next.js App Router integration, validating a framework evaluation approach that prioritizes embeddability over feature count.
- /react
- /typescript
- /architecture
- /decision-making
- /blog
- November 4, 2024 4 min
The day our monolith's database hit 80% CPU and nobody noticed until sales called
A slow query compounded by a missing index took our PostgreSQL instance to the brink. Sales noticed before engineering did because client reports were timing out.
- /postgres
- /observability
- /architecture
- /financeops
- /experience
- October 23, 2024 5 min
Claude 3.5 Sonnet v2 and the week I mass-refactored our codebase with an AI pair programmer
I used Claude 3.5 Sonnet v2 to refactor our error handling layer, migrate 80 test files, and generate TypeScript types from our OpenAPI spec. This is a workflow journal.
- /typescript
- /architecture
- /ai-ml
- /startup-life
- /blog
- October 9, 2024 4 min
Next.js 15, Turbopack stable, and the mass codebase migration nobody is talking about
Next.js 15 shipped with Turbopack stable and async request APIs that break every existing middleware and dynamic page in your application.
- /react
- /node
- /typescript
- /architecture
- /blog
- September 25, 2024 4 min
The night our database ran out of connections and what I learned about pooling
At 2am our payment processing froze. Every database connection was consumed by long-running report queries sharing a pool with transactions.
- /postgres
- /node
- /architecture
- /fintech
- /experience
- September 18, 2024 5 min
Making technology bets: how I evaluate frameworks when the wrong choice costs a year
At a startup, picking the wrong framework is a survival threat. Here is the five-criteria scoring model I use for every significant technology decision.
- /decision-making
- /architecture
- /startup-life
- /experience
- September 11, 2024 4 min
PostgreSQL 17 just dropped and COPY performance alone makes the upgrade worth it
PostgreSQL 17 shipped with 2x COPY performance, JSON_TABLE, and MERGE with RETURNING. The COPY improvement cut our nightly import from 12 minutes to under 6.
- /postgres
- /fintech
- /architecture
- /blog
- August 14, 2024 4 min
The PostgreSQL query that took 47 seconds and how I got it to 3 milliseconds
A financial report query joined five tables across 2 million rows and took 47 seconds. The fix was not adding an index.
- /postgres
- /architecture
- /fintech
- /blog
- July 17, 2024 4 min
Why we picked React Server Components over a separate API layer
I tried React Server Components for our internal dashboard and realized I could eliminate the entire API serialization layer for read-heavy pages.
- /react
- /node
- /architecture
- /api-design
- /blog
- July 10, 2024 4 min
Building a payment reconciliation engine that catches every penny
When your product handles financial transactions, close enough is not a rounding strategy. Here is the three-way reconciliation engine I built.
- /fintech
- /financeops
- /postgres
- /architecture
- /blog
- June 19, 2024 4 min
The AWS bill that made me rethink everything about infrastructure
Our third month AWS bill was 4x what I projected. The culprit was not compute. It was data transfer, NAT gateway charges, and CloudWatch log ingestion.
- /aws
- /architecture
- /startup-life
- /decision-making
- /experience
- June 12, 2024 4 min
How I use PostgreSQL as a job queue and why you probably should too
Every guide says use Redis or BullMQ for background jobs. I used PostgreSQL SKIP LOCKED and it handled thousands of jobs per day with zero additional infrastructure.
- /postgres
- /node
- /architecture
- /fintech
- /blog
- May 29, 2024 4 min
Building a real-time notification system with zero external dependencies
We needed real-time payment notifications but could not justify Redis or a managed WebSocket service. SSE and PostgreSQL LISTEN/NOTIFY did the job.
- /node
- /react
- /api-design
- /architecture
- /blog
- May 22, 2024 4 min
Node.js 22 dropped and here is what actually matters for production backends
Node.js 22 shipped with require(esm) and a built-in WebSocket client. Here is what I benchmarked and what I adopted immediately.
- /node
- /typescript
- /architecture
- /blog
- May 8, 2024 4 min
Designing a multi-tenant PostgreSQL schema that does not make you cry at 3am
Shared database, shared schema, row-level security. That was the bet. Here is how it played out.
- /postgres
- /architecture
- /fintech
- /api-design
- /blog
- April 24, 2024 4 min
The mass migration: moving 200 API endpoints to TypeScript strict mode in one sprint
A production bug from an unchecked null cost us a weekend. I spent the next sprint converting 200 API endpoints to strict mode.
- /typescript
- /api-design
- /architecture
- /blog
- April 10, 2024 4 min
Bootstrapping a Next.js monolith when everyone says microservices
I shipped our entire fintech platform as a single Next.js application. Here is why a monolith was the right call for a team of three.
- /react
- /node
- /architecture
- /startup-life
- /blog
- April 3, 2024 4 min
Why I chose PostgreSQL over MongoDB and how it shaped our entire fintech stack
Every fintech startup I talked to was defaulting to MongoDB. I went the other way and bet on PostgreSQL with strict schemas from day one.
- /postgres
- /architecture
- /fintech
- /decision-making
- /experience