Product & systems engineering

We design and build software products, platforms, and the systems behind them, from interface to infrastructure.

Product engineering is what we do. Systems thinking is how we do it.

What we do

What we build

We can take responsibility for a complete product or join around a difficult part of one. The work spans four connected areas.

Product engineering

New applications and features, from early architecture and interfaces through APIs, data models, and production delivery.

  • Web and mobile applications
  • Backend services and APIs
  • Product architecture and technical direction

Platforms & distributed systems

The shared capabilities a product needs as it grows, from multi-tenant foundations to event-driven services and integrations.

  • Application platforms and internal tooling
  • Event-driven and distributed services
  • Integrations, permissions, and multi-tenancy

AI workflows & agents

AI-enabled systems that use models for judgment while keeping execution, state, and control explicit.

  • Agentic workflows and tool integrations
  • Evaluation, tracing, and model boundaries
  • Human approval where actions need oversight

Infrastructure & delivery

The foundations required to ship, operate, and evolve a product without making infrastructure the product.

  • Cloud architecture and infrastructure as code
  • CI/CD and repeatable environments
  • Observability, security, and developer tooling

How we build

Systems thinking, throughout

We treat product design, application architecture, AI workflows, and infrastructure as one connected system. Ownership, state, failure, and recovery are considered early, not left for production to expose.

01

Clear boundaries

Explicit contracts, state ownership, and permissions keep the system understandable as the product and team grow.

02

Durable execution

Queues, idempotency, bounded retries, deduplication, and replay make important workflows safe to depend on.

03

Bounded AI

Models handle judgment where they help. Code, workflow constraints, evaluation, and human approval control what happens next.

04

Built to operate

Telemetry, recovery paths, and operational controls are part of the design, so the people running the system can see and change it.

Technologies

Tools we use

The tools, patterns, and platforms we use most often, with short notes on why we choose them.

Application stack

The layer clients see first. Every entry here is running in something we shipped or operate ourselves, and each one has a boundary where it stops paying.

Next.js, React Native / Expo, NestJS + 5 more

AI systems

AI features are software with a probabilistic component. These tools keep the probabilistic part bounded, traced, and swappable.

Bounded agents, Langfuse, Model gateways

Platforms

Where the workloads run. Most of what we deploy lands on Google Cloud and Cloudflare, with Vercel hosting the frontends that benefit from it.

Cloud Run, Kubernetes, Cloudflare Workers

Infrastructure as Code

Infrastructure as code keeps resources and changes reviewable, and makes environments easier to reproduce.

Terraform / OpenTofu, Ansible, Infracost

Delivery

A reliable delivery pipeline reduces the routine work and uncertainty around testing, deployment, and rollback.

GitHub Actions, GitLab CI/CD, ArgoCD + 3 more

Observability & incident response

Useful observability narrows the search during development and incidents by connecting service behavior to traces, metrics, and logs. This section also covers what happens after the alert fires.

OpenTelemetry, Google Cloud Observability, Grafana + Prometheus + 3 more

Security & access

Security controls are easier to maintain when they are part of the normal delivery workflow and enabled by default.

Workload identity, IAM as code, Secrets management + 4 more

Patterns

Ways of building rather than products you can buy. The entries in the other sections are how we implement them.

Event-driven architecture, Durable execution, Multi-tenancy + 3 more

How we engage

Meet the product where it is

01

Start something new

Take a product from an early idea through architecture, implementation, launch, and the first rounds of learning.

02

Evolve a platform

Add capabilities, clarify boundaries, or strengthen delivery as an existing product and engineering team grow.

03

Own a hard subsystem

Join around a difficult workflow, AI system, integration, backend service, or platform problem that needs focused ownership.