What we have on
production right now.
A live, opinionated map of the tools, frameworks, and patterns we actively ship. Updated quarterly by the practice leads. Adopt, trial, hold, retire — the same vocabulary the Thoughtworks Radar uses, applied to our actual work.
Languages & frameworks
TypeScript
AdoptDefault for any new web/mobile/Node work. Strict mode on, no exceptions.
Next.js (App Router)
AdoptDefault for marketing, content-heavy, and BFF-style apps.
Python 3.12 + Pydantic
AdoptData, ML, and back-office services. We've moved off Flask.
Swift (SwiftUI)
AdoptNative iOS work. Composable architecture for non-trivial apps.
Kotlin (Jetpack Compose)
AdoptNative Android. Compose has won — we no longer ship XML layouts.
React Native (Expo)
TrialStrong fit when teams need one codebase + product velocity wins over native polish.
Go
TrialPicking it up for high-throughput services. Used selectively, not as a default.
Server actions
HoldUseful, but we still prefer explicit /api routes for testability and tracing.
Platforms & infra
PostgreSQL
AdoptThe boring choice that keeps winning. RDS, Aurora, Supabase, or self-hosted.
AWS (EKS + Lambda + RDS)
AdoptDefault cloud for greenfield. We'll meet you where you are otherwise.
Vercel
AdoptFor Next.js marketing/web product where DX outweighs cost.
ClickHouse
TrialAnalytics workloads where Postgres OLAP starts to hurt.
Cloudflare Workers
TrialEdge logic, AI gateways, light APIs. Quietly excellent.
Heroku
HoldWe maintain it on existing engagements, but no new projects.
Tools & tooling
Playwright
AdoptDefault E2E. Replaces the Cypress estate we used to maintain.
GitHub Actions
AdoptStandard CI for every repo we ship.
Datadog + OpenTelemetry
AdoptTracing, metrics, logs as a first-class concern from sprint one.
Linear
AdoptUsed internally and on most engagements. Jira when the client mandates it.
OpenAI Responses API
AdoptPrimary path for Ask Prometheas and new customer-facing assistants.
Claude (Sonnet 4.6 / Opus 4.6)
TrialFallback or fit-specific provider for selected agent and copilot work.
shadcn/ui + Radix
AdoptComponent foundation for new web work. Owned, not vendored.
Patterns & techniques
RAG with hybrid retrieval
AdoptVector + keyword + structured filters. Pure-vector RAG is no longer a default.
LLM evaluation pipelines
AdoptEvery production LLM app ships with offline + online eval. No exceptions.
Feature flags as the default
AdoptTrunk-based dev + flags. Long-lived branches retired across our practice.
Service mesh (Istio)
HoldWe've found the operational cost rarely pays back outside the largest estates.
Microservices by default
RetireModular monoliths first. Split when forced, not for fashion.
