Go
Default for servicesMy first choice for network services, concurrency, platform tooling, and systems where operational clarity matters more than abstraction density.
Technology / Working set
This is a working set, not a badge wall. Each technology has earned a place by making a certain class of problem clearer, safer, faster, or easier to operate.
The language should make the system easier to reason about, not make the author look clever.
My first choice for network services, concurrency, platform tooling, and systems where operational clarity matters more than abstraction density.
A mature ecosystem for long-lived services, rich domain models, and the enterprise systems I help evolve at scale.
The connective tissue for interfaces, SDKs, and full-stack product work when browser reach and ecosystem leverage matter.
Python, Java, Kotlin, and Scala remain part of the toolbox. I care more about fit, team fluency, and system constraints than language identity.
Different workloads want different shapes. Transactional truth, connected context, streaming, and analytics are not the same problem.
For high-volume event analytics, large aggregations, materialized views, and workloads where row-oriented storage becomes the bottleneck.
The dependable default for relational product data, strong consistency, migrations, and the parts of a system that need a clear source of truth.
For durable event flow, decoupled services, replayable history, and platforms designed around what happened rather than only what exists now.
Graph storage when relationships are the product; Redis when a small amount of fast, ephemeral state simplifies the larger system.
Architecture includes the path to production, the failure modes, and the experience of the next engineer who touches it.
Cloud services, event-driven infrastructure, and the practical tradeoffs involved in evolving systems already carrying real traffic.
From enterprise environments to lean k3s clusters: deployment primitives, health, storage, networking, and controlled rollouts.
Declarative infrastructure and GitOps delivery so changes are reviewable, environments are repeatable, and operations stay understandable.
Local environments that make complex service dependencies easy to start, inspect, reset, and hand to another engineer.
Deep systems still need clear interfaces—and powerful tools still need experienced judgment.
For full product surfaces, reusable platform components, and interfaces that need mature ecosystems and team-scale conventions.
A direct, low-friction way to build fast interfaces when I want the framework to stay out of the design conversation.
Useful for implementation, exploration, testing, and design pressure-testing—never a substitute for architectural judgment or review.
When a design rests on a theory, I build enough of the real thing to stress it, measure it, and find out where the idea stops being true.