Technology / Working set

The tools I reach for—and why.

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.

// 01

Languages & runtimes

The language should make the system easier to reason about, not make the author look clever.

Go

Default for services

My first choice for network services, concurrency, platform tooling, and systems where operational clarity matters more than abstraction density.

C# / .NET

Enterprise platforms

A mature ecosystem for long-lived services, rich domain models, and the enterprise systems I help evolve at scale.

TypeScript

Product surfaces

The connective tissue for interfaces, SDKs, and full-stack product work when browser reach and ecosystem leverage matter.

Python, JVM & beyond

Context dependent

Python, Java, Kotlin, and Scala remain part of the toolbox. I care more about fit, team fluency, and system constraints than language identity.

// 02

Data & event systems

Different workloads want different shapes. Transactional truth, connected context, streaming, and analytics are not the same problem.

ClickHouse

Analytical scale

For high-volume event analytics, large aggregations, materialized views, and workloads where row-oriented storage becomes the bottleneck.

PostgreSQL

Transactional core

The dependable default for relational product data, strong consistency, migrations, and the parts of a system that need a clear source of truth.

Kafka & event streams

System movement

For durable event flow, decoupled services, replayable history, and platforms designed around what happened rather than only what exists now.

Neo4j & Redis

Specialized leverage

Graph storage when relationships are the product; Redis when a small amount of fast, ephemeral state simplifies the larger system.

// 03

Platform & delivery

Architecture includes the path to production, the failure modes, and the experience of the next engineer who touches it.

AWS

Production platform

Cloud services, event-driven infrastructure, and the practical tradeoffs involved in evolving systems already carrying real traffic.

Kubernetes

Workload orchestration

From enterprise environments to lean k3s clusters: deployment primitives, health, storage, networking, and controlled rollouts.

Terraform & ArgoCD

Reproducible systems

Declarative infrastructure and GitOps delivery so changes are reviewable, environments are repeatable, and operations stay understandable.

Docker & LocalStack

Developer experience

Local environments that make complex service dependencies easy to start, inspect, reset, and hand to another engineer.

// 04

Interfaces & engineering tools

Deep systems still need clear interfaces—and powerful tools still need experienced judgment.

React, Next.js & Vue

Established product UI

For full product surfaces, reusable platform components, and interfaces that need mature ecosystems and team-scale conventions.

SvelteKit

Focused product work

A direct, low-friction way to build fast interfaces when I want the framework to stay out of the design conversation.

AI-assisted development

Amplifier, not autopilot

Useful for implementation, exploration, testing, and design pressure-testing—never a substitute for architectural judgment or review.

Benchmarks & working POCs

Evidence over instinct

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.