01  Research / UX / UI / Design systems

Product design. Interfaces that survive contact with real users, delivered as a system, not a picture.

Typical 3–6 weeks1 designer + 1 researcher

We start from the job the product has to do, not a moodboard. Research, flows and high-fidelity screens, followed by a token-level design system, so the tenth screen looks like the first without a designer in the room.

Tokens

brand/600
brand/400
ink/900
surface/0
Display44 / 1.04 / -3%
Heading28 / 1.1 / -2%
Body16 / 1.5 / 0%

Component states

Continue default
Continue hover
Continue focus-visible
Continue disabled

Every component ships with all four states, keyboard behaviour and an accessibility note, so engineers never guess.

What you get

  • User interviews, synthesis and a prioritised problem list
  • A clickable prototype tested with real users before build
  • Component library with tokens, states and documentation
  • Accessibility review against WCAG 2.2 AA
Decisions traced back to research, not taste
Prototypes tested before code is written
A system your engineers can build from
Accessibility treated as a requirement

02  React / Next.js / Node / PostgreSQL

Web development. Applications that stay fast as they grow, measured on real devices and real networks.

Typical 8–16 weeks2–4 engineers

Server-rendered where it matters, typed from database to interface, tested in CI. We set performance budgets in the first week and fail the build when a change breaks them, so speed is a constraint, not a cleanup task.

app/(dashboard)/reports/page.tsxLCP 1.1s
// server component: data fetched on the server, zero client JS export default async function ReportsPage({ searchParams }: Props) { const range = parseRange(searchParams.range ?? '30d'); const [summary, series] = await Promise.all([ db.reports.summary({ range }), db.reports.timeseries({ range, bucket: 'day' }), ]); return ( <Shell title="Reports"> <SummaryCards data={summary} /> {/* only this island hydrates on the client */} <RevenueChart series={series} defaultRange={range} /> </Shell> ); }

What you get

  • A typed codebase in your repository from commit one
  • Automated tests covering the paths that earn money
  • Preview deployment on every pull request
  • Performance budgets enforced in CI
Typed contracts between every layer
Core Web Vitals measured on real devices
Migrations and rollbacks rehearsed, not improvised
Documentation written as the code is written

03  Swift / Kotlin / Flutter / React Native

Mobile development. Apps taken from prototype through store review to a release cadence you can actually keep.

Typical 10–20 weeks2–3 engineers

Native when the product demands it, cross-platform when it does not. We will tell you which and why. Signing, provisioning, staged rollouts and crash reporting are set up once and then stop being your problem.

ci/release.sh: ios + androidBUILD 412
$ longan release --track beta --rollout 10 tests 1,284 passed 96s ios archive + sign 3m12s android bundle + sign 2m41s symbols uploaded to crash reporting testflight build 412 → internal testers play console beta track, 10% staged rollout next monitor crash-free sessions for 24h, then widen to 50% status crash-free 99.94% · adoption 31% · rollback ready

What you get

  • Apps submitted, reviewed and live on both stores
  • Automated build and signing pipeline you control
  • Staged rollouts with crash monitoring and rollback
  • Offline behaviour and low-bandwidth handling tested
Store submission handled end to end
Crash-free sessions tracked per release
Tested on real low-end devices
Release process your team can run alone

04  LLM applications / RAG / Agents / MLOps

AI and machine learning. Models tied to a metric, evaluated before launch, and watched once real users arrive.

Typical 6–14 weeks1 ML + 1 backend engineer

We scope every AI feature against a number it is supposed to move: resolution rate, handling time, conversion. If we cannot define that number with you, we will say so before taking the work.

Retrieve

Your knowledge, indexed

Documents, tickets and database records chunked, embedded and kept in sync as they change.

Ground

Answers with citations

Responses constrained to retrieved context, every claim traceable to the source it came from.

Evaluate

A fixed test suite

Hundreds of graded cases run on every change. A regression fails the release the same way a broken test does.

Operate

Cost, latency, drift

Per-feature budgets, live quality sampling and alerts when behaviour moves away from the baseline.

What you get

  • A written evaluation suite you own and can extend
  • Retrieval pipeline with citations users can verify
  • Cost and latency budgets enforced per feature
  • Guardrails, fallbacks and human review where needed
Scoped against a metric, not a demo
Model-agnostic: swap providers without a rewrite
Your data stays in your infrastructure
Honest advice when AI is the wrong tool

05  Ingestion / dbt / Warehouse / Orchestration

Data engineering. One set of numbers your whole company agrees on, traceable back to the row that produced them.

Typical 6–12 weeks1–2 data engineers

Ingestion, modelling and orchestration treated like application code: reviewed, tested and versioned. When a number looks wrong, you can follow it back through every transformation instead of guessing.

ModelFreshnessTestsOwner
fct_orders12 min ago24 passedrevenue
dim_customers12 min ago17 passedgrowth
fct_subscriptions1 hr ago31 passedfinance
mart_exec_daily1 hr ago9 passedexec

What you get

  • Every source landing on a schedule you can rely on
  • Business definitions written once, under version control
  • Freshness and quality tests that fail loudly
  • Column-level lineage from dashboard to source row
One definition of every core metric
Bad data caught before it reaches a meeting
Warehouse spend reviewed against real usage
Analysts unblocked without engineering tickets

06  Terraform / Kubernetes / CI-CD / Observability

Cloud and DevOps. Infrastructure defined in code, deployed on merge, and observable when something breaks.

Typical 4–10 weeks1–2 platform engineers

Environments, secrets, rollbacks, alerting and budgets set up properly once. The goal is boring: releases happen several times a day, nobody watches them, and the person on call knows what to do.

infra/production/main.tfPLAN 0 destroy
$ terraform plan -var-file=production.tfvars + module.api.aws_ecs_service.api create ~ module.api.aws_lb_target_group.blue update in-place + module.observability.alarm.p95_latency create + module.observability.alarm.error_rate create Plan: 3 to add, 1 to change, 0 to destroy. # guardrails deploy blue/green, automatic rollback on error-rate breach slo 99.95% availability · p95 < 200ms budget alert at 80% of monthly forecast

What you get

  • Every environment reproducible from version control
  • Zero-downtime deploys with automatic rollback
  • Dashboards and alerts tied to user-facing objectives
  • Runbooks and an on-call rotation your team can own
No environment that only one person understands
Secrets managed, rotated and audited
Alerts that mean something, not noise
Cloud cost reviewed every quarter

Three ways to
work with us.

Most engagements start with a two-week discovery, because a fixed price is only honest once we both understand the problem. After that, pick the shape that fits how your team is set up.

Model 01

Fixed-scope project

A defined outcome, a fixed price and a date. We own delivery and hand over everything at the end.

  • Scope and price agreed after discovery
  • Demo at the end of every two-week sprint
  • Full handover with documentation

Best for a launch, a rebuild, or a board deadline you cannot move.

Model 02

Embedded team

Senior engineers and designers join your team, work in your tools and follow your process.

  • Monthly rate, one month notice
  • Your backlog, your standups, your repository
  • Scale the team up or down each quarter

Best for teams with a roadmap and not enough hands to build it.

Model 03

Product partnership

We take ongoing ownership of a product or platform, building, running and improving it with you.

  • Quarterly roadmap agreed against outcomes
  • We carry the pager and the SLOs
  • Exit plan and handover documented from day one

Best for founders without an in-house engineering team yet.

Common questions

The things people ask before signing anything.

If your question is not here, write to us and you will get a straight answer from an engineer, not a sales team.

Who owns the code?

You do, from the first commit. We work in your repository or hand one over at the end, including infrastructure definitions, documentation and the deployment pipeline. There is no proprietary framework you have to keep paying us for.

How do you price work?

Discovery is a small fixed fee. After that, fixed-scope projects are quoted as a single price against an agreed outcome, and embedded teams are a monthly rate per person. You will not get an invoice for a number you have not already approved.

How quickly can you start?

Discovery usually starts within two weeks of a signed agreement. Build teams are typically assembled within three to four weeks, depending on the disciplines involved.

Can you work with our existing codebase and team?

Yes, and it is most of what we do. We start by reading the code and talking to the people who wrote it. If we think a rewrite is the wrong answer, we will tell you. Incremental improvement is usually cheaper and less risky.

What time zones do you cover?

Our teams overlap with both European and North American working hours, with at least four hours of shared time daily. For product partnerships we agree on-call coverage explicitly in the contract.

What happens when the engagement ends?

You get a documented handover: architecture notes, runbooks, access, and a working session with whoever takes over. We would rather you be able to leave than be unable to.

Tell us what you're building.

Send us the problem, not a specification. We'll come back with scope, a timeline and the team to deliver it, usually within two working days.

Start a project