Skip to content
Engineering practice

How we build software that holds up.

A demo is easy these days. A product that survives real users, real edge cases, real model upgrades and a regulator looking over your shoulder is a different job. This page covers the harness, the toolbelt and the practice that close that gap on every build.

The Doddle harness

Nine pillars that turn a working build into something you can rely on.

Building a working version of something is the easy half. Production-grade software needs the surrounding system — testing, evals, monitoring, code analysis, security and governance — wired in from day one rather than bolted on at the end. This is the part of the practice we're known for.

Quality testing for AI

Every AI feature is tested continuously. Bad answers caught before users see them; upgrading models becomes a measured decision, not a leap of faith.

Automated testing

Tests at every level, run automatically on every change. Nothing ships without passing them.

Code review & analysis

Code is checked automatically for quality, security and architecture compliance. AI-written code is held to the same bar as human-written code.

Continuous delivery

Every change flows through the same automated pipeline. Deployable in minutes; nothing skips the checks.

Visibility in production

Cost, performance and quality on live dashboards. Every interaction can be replayed for debugging. Nothing hidden.

Security built in

Security woven through delivery, secrets, dependencies, vulnerabilities, not bolted on at the end.

Governance & guardrails

Policies enforced, sensitive data handled properly, AI outputs checked. Designed for audit from day one.

UX consistency

A shared design system means the product stays coherent as it grows, visually and behaviourally. Accessibility checks are built in.

Brand adherence

Brand is codified in the system itself, colours, typography, voice. Every sprint stays on-brand, including the AI-assisted ones.

The toolbelt

What we reach for, and why.

A few we lean on most in each category. The right pick depends on your data, your risk and your cost envelope.

AI providers

Claude, OpenAI and OutSystems Agent Workbench. Open or self-hosted models when residency or cost demand it.

Languages, frameworks & data

TypeScript, Python and Next.js. Postgres with pgvector for the data layer, with other shapes where the job calls for them.

Automation & orchestration

OutSystems for workflows your team needs to own end to end. n8n for cross-app automation across the tools you already use.

Monitoring, logging & evals

OpenTelemetry, Sentry and Grafana. Continuous evals on every AI feature, wired in from day one.

Code analysis & review

SonarQube, CodeQL and GitHub Advanced Security on every change. Same bar for human-written and AI-written code.

CI/CD & infrastructure

GitHub Actions and Terraform. Repeatable across environments, nothing skips the checks.

For teams going in-house

Want your team to deliver AI in-house? Start with the harness.

If your strategy is to grow AI capability internally, the harness is the part most teams underestimate. We stand it up with you — evals, governance, observability, code review pipelines, the lot — then your team owns delivery, with us on speed-dial when the harder moments come.

In-house AI delivery, supported

Got a build that needs to hold up?

Bring us the goal and the constraints. We'll come back with how we'd ship it, what tooling fits, and where the harness earns its keep on your stack.