Capabilities
What we work in
We are not tied to a single stack, but we are not neutral either. These are the capabilities we have run in production long enough to know where they break.
- Capabilities
- 41
- Domains
- 8
- Tools and techniques
- 170
AI and machine learning
AI and machine learning
Systems that use models to do real work — answer from your own documents, take actions on your behalf, or handle the first line of a conversation. Built to be measured, not demoed.
LLM applications
Products built on large language models — drafting, summarising, extraction, classification — with the prompt, context and output schema treated as versioned code.
- Claude
- OpenAI
- Llama
- Structured outputs
- TypeScript
- Python
Agentic AI
Assistants that call your systems to get something done rather than only answering. Scoped tools, permission boundaries and a full audit trail of every action taken.
- Tool calling
- MCP
- Workflow orchestration
- Human-in-the-loop
- Audit logging
Retrieval-augmented generation
Answers grounded in your own documents and data, with citations back to the source so a reader can check the claim rather than trust it.
- Vector search
- pgvector
- Hybrid retrieval
- Re-ranking
- Chunking strategy
Customer service AI
Front-line assistants that resolve routine contacts and hand over cleanly — with full context — when they should not be handling something.
- Intent routing
- Live handover
- CRM integration
- Containment metrics
- Voice and chat
Healthcare AI
Administrative and documentation workloads in clinical settings: notes, coding support, triage assistance and patient correspondence. Clinician-in-the-loop by design — these are decision-support tools, not diagnostic devices.
- De-identification
- FHIR / HL7
- Clinical NLP
- Audit trails
- Access control
Evaluation and guardrails
The part most projects skip. Test sets, scored regressions and safety checks, so you can prove a change made the system better rather than hoping it did.
- Eval harnesses
- LLM-as-judge
- Golden datasets
- Red teaming
- Regression gates
Fine-tuning and adaptation
When prompting genuinely is not enough: adapting a smaller model to your domain for lower latency and cost, with an honest comparison against the simpler option.
- LoRA / PEFT
- Distillation
- Instruction tuning
- Dataset curation
Document intelligence
Turning invoices, contracts, forms and scans into structured data your systems can act on, with confidence scores and a review queue for the uncertain cases.
- OCR
- Layout models
- Schema extraction
- Confidence thresholds
Forecasting and classical ML
Demand forecasting, churn, scoring and anomaly detection. Frequently the right answer where a language model would be slower, dearer and harder to explain.
- scikit-learn
- XGBoost
- Prophet
- Feature engineering
- Pandas
Computer vision
Inspection, counting, defect detection and image classification, on the edge or in the cloud.
- PyTorch
- YOLO
- ONNX Runtime
- Edge deployment
MLOps and model delivery
MLOps and model delivery
Getting a model from a notebook into production, and keeping it working once real traffic and real data drift arrive. This is where most AI projects quietly fail.
Training and inference pipelines
Reproducible training runs and versioned artefacts, so the model in production can be traced back to the exact data and code that produced it.
- Airflow
- Prefect
- DVC
- MLflow
- Docker
Model serving
Inference endpoints sized for your actual traffic, with autoscaling, batching and a cost model you can predict before the invoice arrives.
- vLLM
- TorchServe
- SageMaker
- Kubernetes
- GPU autoscaling
Drift and quality monitoring
Watching for input drift, output quality decay and cost creep — with alerts tied to business impact rather than to raw metrics nobody reads.
- Evidently
- Prometheus
- Grafana
- Custom evals
- Cost dashboards
Feature and prompt management
One definition of a feature or a prompt, shared between training and serving, so the model does not see different data in production than it did in training.
- Feature stores
- Prompt versioning
- dbt
- Schema contracts
Inference cost engineering
Caching, routing between models, batching and right-sizing. Usually the difference between a pilot that scales and one that gets cancelled at the budget review.
- Prompt caching
- Model routing
- Token budgeting
- Batch inference
DevOps and delivery
DevOps and delivery
The pipeline from a commit to production. The measure of it is not sophistication — it is whether anyone hesitates before deploying on a Friday afternoon.
CI/CD pipelines
Automated build, test and deploy on every change, with the checks that matter blocking a merge and the ones that do not staying out of the way.
- GitHub Actions
- GitLab CI
- Trunk-based development
- Preview environments
Infrastructure as code
Environments defined in code, reviewed like application code and recreated rather than repaired — so the estate has a change history that explains itself.
- Terraform
- Pulumi
- CloudFormation
- Ansible
Containers and orchestration
Workloads packaged so they run identically on a laptop and in production, scheduled on infrastructure sized to what you actually run.
- Docker
- Kubernetes
- Helm
- ECS
- Fargate
Release engineering
Progressive delivery — feature flags, canaries and staged rollouts — so a bad release affects one percent of users rather than all of them.
- Feature flags
- Canary releases
- Blue/green
- Automated rollback
Secrets and supply chain
Credentials in a proper store, dependencies scanned, images signed. Cheap to set up at the start and awkward to introduce once a system is live.
- Vault
- SOPS
- Dependency scanning
- SBOM
- Image signing
Platform stability
Platform stability
Keeping systems up, fast and diagnosable once they carry real load. Reliability is a product feature with a cost — the job is to decide how much you are buying, deliberately.
SLOs and error budgets
An agreed definition of "working" for each service, measured continuously — so decisions about shipping versus stabilising are made on evidence, not by whoever argues hardest.
- SLI definition
- Error budgets
- Burn-rate alerts
- Reliability reviews
Observability
Metrics, logs and traces in one place, correlated well enough to answer questions nobody thought to ask in advance.
- OpenTelemetry
- Prometheus
- Grafana
- Loki
- Distributed tracing
Incident response
A rota, runbooks and blameless post-incident reviews — with alerts tied to user-visible symptoms so the pager stays credible and people keep answering it.
- On-call rotation
- Runbooks
- Post-incident review
- Alert tuning
Resilience and capacity
Load testing, failure injection and capacity planning, so you find out how the system breaks before your customers do.
- k6
- Load testing
- Chaos experiments
- Capacity modelling
- DR drills
Performance engineering
Finding and fixing what is actually slow — the query, the N+1, the payload — rather than adding capacity to hide it.
- Profiling
- Query optimisation
- Core Web Vitals
- Caching strategy
Product engineering
Product engineering
The applications themselves — web, mobile, APIs and the interfaces people use all day.
Web applications
Browser-based systems built to stay fast and accessible under real load.
- TypeScript
- React
- Next.js
- Astro
- Node.js
Mobile applications
iOS and Android, native or cross-platform, plus the release discipline behind them.
- React Native
- Swift
- Kotlin
- Fastlane
APIs and integration
The connective work — talking cleanly to the ERP, the finance system and everything that predates the project.
- REST
- GraphQL
- gRPC
- Event-driven
- Webhooks
Interface design
Design for software people use for hours, handed over as tokens and states rather than a flat picture.
- Figma
- Design tokens
- Storybook
- WCAG 2.2
Backend and services
The systems underneath — transactional, batch and everything in between.
- Python
- Java
- .NET
- PostgreSQL
- Redis
Data engineering
Data engineering
Pipelines and reporting where the numbers agree with each other. The common failure is not a missing dashboard — it is two dashboards that disagree and nobody able to say which is right.
Warehouse and modelling
One modelled definition of a metric, so every team stops inventing its own.
- dbt
- Snowflake
- BigQuery
- PostgreSQL
- Dimensional modelling
Pipelines and orchestration
Transformations that are version controlled, reviewed and tested — because a pipeline that silently drops rows is worse than no pipeline.
- Airflow
- dbt
- Spark
- Python
Streaming and events
Event-driven data movement where batch is too slow to be useful.
- Kafka
- Kinesis
- CDC
- Flink
Quality and governance
Freshness and quality checks, lineage, and access control that survives an audit.
- Data contracts
- Great Expectations
- Lineage
- Row-level security
Cloud and infrastructure
Cloud and infrastructure
Architecture that fits what you run and what you can afford to spend on it.
Cloud architecture
Designed against what you actually run today, with the cost modelled before anything is provisioned.
- AWS
- Azure
- Google Cloud
- Well-Architected reviews
Migration
Staged moves with a tested rollback at every step, rather than a weekend cutover with no way back.
- Dependency mapping
- Landing zones
- Data migration
- Cutover runbooks
Security baseline
Least-privilege access, encrypted storage, private networking and secrets in a proper store.
- IAM
- KMS
- Private networking
- Policy as code
Cost engineering
Most cloud bills are large because something was provisioned for a launch and never resized. Sometimes the recommendation is to move less.
- Cost allocation
- Right-sizing
- Savings plans
- Budget alerts
Quality engineering
Quality engineering
A suite that always passes is not necessarily a good one — it might just be testing the parts that were never going to break.
Test automation
Automation aimed at risk: what would actually hurt if it failed on a Monday morning.
- Playwright
- Vitest
- Jest
- Contract testing
Accessibility
Keyboard paths, focus handling and screen-reader semantics written as the components are, not retrofitted.
- WCAG 2.2 AA
- axe-core
- Screen reader testing
Security testing
Dependency and code scanning in the pipeline, with findings triaged rather than dumped into a report.
- SAST
- Dependency scanning
- Secrets detection
- Threat modelling
Running on something not listed here?
Ask anyway. Most of our work involves integrating with technology we did not choose — a long-lived estate rarely matches anybody's preferred stack.