/blog
Posts touching blog.
59 posts
- 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 15, 2026 5 min
The real job of a Head of Engineering
Make throughput predictable and quality sustainable. Not hero-shipping. Not writing the most code. Build a system that delivers without depending on any single person.
- /engineering-leadership
- /career
- /decision-making
- /cross-functional
- /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 5, 2026 5 min
Engineering teams do not need more process. They need better defaults.
Every incident triggers a new process proposal. The real fix is better CI pipelines, better templates, and better linters. Better defaults scale. More process does not.
- /engineering-leadership
- /team-building
- /ci-cd
- /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 28, 2026 4 min
What AI changes about engineering leadership
Code review matters more than code writing. Architectural taste matters more than implementation speed. Evaluating AI-generated code is the new critical skill.
- /ai-ml
- /engineering-leadership
- /hiring
- /decision-making
- /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 19, 2026 4 min
Cross-functional alignment is not a meeting problem. It is an incentive problem.
Restructuring OKRs so engineering, product, and sales shared a single top-line metric per quarter fixed what years of alignment meetings could not.
- /engineering-leadership
- /cross-functional
- /startup-life
- /blog
- January 12, 2026 5 min
The homelab Loki stack that monitors my production alerts
A Grafana/Loki/Tempo stack on homelab k3s aggregates logs from personal projects and FinanceOps production alerting. A personal observability stack makes you a better leader.
- /homelab
- /observability
- /self-hosting
- /cloudflare
- /blog
- 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 15, 2025 4 min
How I budget engineering time and why I give 20 percent to platform work non-negotiably
Twenty percent of every sprint goes to platform work. The compounding cost of deferring platform investment is measurable in incident frequency and developer velocity.
- /engineering-leadership
- /decision-making
- /startup-life
- /blog
- December 1, 2025 5 min
Opus 4.5 is the first AI model I trust to refactor production code unsupervised
Claude Opus 4.5 refactored a 500-line TypeScript module, maintained all tests, and passed review without modification. The bottleneck has shifted from writing to reviewing.
- /ai-ml
- /engineering-leadership
- /typescript
- /blog
- November 24, 2025 4 min
When your SLOs and your sales team disagree, the SLOs lose
An enterprise prospect required 99.99% uptime. Our SLOs were 99.9%. Engineering leaders who refuse to engage with commercial reality get bypassed.
- /engineering-leadership
- /cross-functional
- /financeops
- /observability
- /blog
- 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 27, 2025 4 min
ArgoCD taught me that GitOps is about audit trails, not about git
After running ArgoCD in homelab and production for over a year, the real value is not deployment automation. It is the complete, immutable audit trail.
- /argocd
- /kubernetes
- /self-hosting
- /homelab
- /blog
- October 13, 2025 4 min
Managing up to a non-technical founder without losing your integrity
Business-outcome framing for every technical decision. Risk quantified in dollars, not story points. Never say "technical debt" without a customer impact number.
- /engineering-leadership
- /startup-life
- /cross-functional
- /decision-making
- /blog
- 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 10, 2025 4 min
Sonnet 4.5 replaced our first-pass code review and nobody complained
AI handles style violations and missing error handling. Human reviewers focus on architecture and business logic. Review turnaround dropped from 24 hours to 4.
- /ai-ml
- /engineering-leadership
- /ci-cd
- /blog
- August 25, 2025 4 min
How I use Grafana dashboards to run engineering meetings instead of slide decks
Replacing weekly status slides with live Grafana dashboards eliminated performative reporting and forced teams to instrument what matters.
- /observability
- /engineering-leadership
- /cross-functional
- /blog
- August 11, 2025 4 min
GPT-5 shipped and my team asked if we still need junior engineers
The answer is yes, but for reasons that forced us to articulate what junior engineers actually contribute beyond lines of code.
- /engineering-leadership
- /ai-ml
- /hiring
- /decision-making
- /blog
- August 4, 2025 4 min
Why I stopped asking candidates to whiteboard and started asking them to review pull requests
Whiteboard coding measures performance under artificial stress. PR reviews measure what the job actually requires.
- /hiring
- /engineering-leadership
- /team-building
- /blog
- 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 16, 2025 4 min
Building Cloudflare Tunnel access to our homelab staging so the team stops saying "works on my machine"
Our k3s staging cluster sat behind my home network. Cloudflare Tunnels gave the whole team stable HTTPS access without exposing my home IP or managing VPN credentials.
- /cloudflare
- /homelab
- /self-hosting
- /ci-cd
- /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 21, 2025 4 min
OpenAI o3 and o4-mini: reasoning models are getting good enough to replace junior code review
o3 drops 20% fewer major errors than o1, and o4-mini makes reasoning affordable for CI pipelines. A financial calculation rounding error caught by AI review that three humans missed.
- /ai-ml
- /ci-cd
- /typescript
- /engineering-leadership
- /blog
- April 7, 2025 5 min
ArgoCD and GitOps for a team of four: overkill or exactly right
After three months of ArgoCD managing our k3s and production clusters, the deployment confidence, audit trail, and rollback speed paid for the setup cost within the first incident.
- /argocd
- /kubernetes
- /ci-cd
- /k3s
- /blog
- 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 17, 2025 5 min
Claude 3.7 Sonnet's extended thinking and what it means for code review at a small team
Extended thinking mode changed how I approach code review on a team too small for dedicated reviewers. Step-by-step deliberation catches subtle type issues that fast-pass models miss.
- /ai-ml
- /ci-cd
- /engineering-leadership
- /typescript
- /blog
- 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 23, 2024 4 min
Setting up k3s on a mini PC for staging and why every startup needs a junk drawer environment
A $300 mini PC running k3s gave our team a staging environment that mirrors production topology without the cloud bill. The real value was deployment confidence.
- /k3s
- /kubernetes
- /homelab
- /self-hosting
- /blog
- 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
- 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 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
- September 4, 2024 5 min
Observability on a shoestring: Grafana, Loki, and Tempo for free
We could not afford Datadog. I self-hosted the Grafana stack on our k3s homelab cluster and pointed production at it.
- /observability
- /kubernetes
- /homelab
- /docker
- /blog
- August 28, 2024 3 min
Why every API endpoint at FinanceOps returns the same error shape
Our frontend had seven different error format handlers. I standardized every endpoint to return the same discriminated union error shape.
- /api-design
- /typescript
- /node
- /fintech
- /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
- August 7, 2024 4 min
ArgoCD on a single-node k3s cluster: overkill or exactly right
Everyone told me ArgoCD on a single-node homelab was absurd. GitOps on a single node means I can rebuild from a Git repo in under 10 minutes.
- /argocd
- /k3s
- /homelab
- /kubernetes
- /blog
- July 31, 2024 4 min
Docker multi-stage builds that actually make your images small
Our production Docker image was 1.2 GB. After an afternoon of optimization it was 89 MB. Here is the exact Dockerfile evolution.
- /docker
- /ci-cd
- /node
- /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
- July 3, 2024 4 min
Setting up Cloudflare Tunnels so I never open a port on my homelab again
I replaced every port forward with a zero-trust Cloudflare Tunnel in a single evening. Here is the exact setup.
- /cloudflare
- /homelab
- /self-hosting
- /security
- /blog
- June 26, 2024 4 min
TypeScript 5.5 inferred type predicates changed how I write validation code
TypeScript 5.5 shipped inferred type predicates and it quietly eliminated an entire category of boilerplate in our codebase.
- /typescript
- /api-design
- /blog
- 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 17, 2024 4 min
Standing up CI/CD from scratch with GitHub Actions and zero budget
No DevOps person. No budget. I built our entire CI/CD pipeline in a single weekend using GitHub Actions free tier.
- /ci-cd
- /docker
- /startup-life
- /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