Product, service and interaction design
We map user needs and the full service journey, and test assumptions with prototypes. We build accessible interfaces and reusable design systems.
Software, integrations and AI
We build applications, connect your systems and apply AI to your data. We also review systems that already exist and are not working as they should.
How we measure quality, performance and valueRequestThe order has not arrived. Can we replace it?
Example outcomeShipment created after approval.
The customer provides the order number and asks for a replacement. Before looking up the details, the system checks that the order belongs to that customer.
A customer asks for a replacement. The agent checks the order, carrier and available stock, then prepares a shipment. The person responsible approves the cost.
If information is missing, the incident stays open. The system saves its checks so the team can pick up the work.
RequestDraft a proposal to connect the portal to the ERP.
Example outcomeDraft with sources and open questions.
The customer needs to connect their portal to the ERP. The person preparing the proposal identifies the documents they can use.
The assistant searches the catalogue and references each person is allowed to access. It matches the customer’s requirements to the company’s services and leaves open questions in the draft.
Search can combine keywords and semantic similarity, or use a graph when relationships between documents matter. We choose the approach using the project’s questions and sources.
RequestA retry is creating two orders.
Example outcomeCode change with tests, awaiting review.
Retrying a form submission creates two orders. The agent receives the issue and access to a copy of the repository.
The agent works on a copy of the repository: it reproduces the bug, proposes a change and runs tests. The team receives the code and results for review.
The agent works in an isolated environment with limited network access and no production credentials, and treats the issue text as untrusted input. The team reviews the code and authorises deployment.
RequestDoes the new version resolve incidents without duplicate shipments?
Example outcomeDecision based on recorded changes.
We include lost orders, orders already delivered and failed lookups. Each case specifies which changes are allowed and when a person should intervene.
We test versions against the same incidents, including missing data and tool failures. We check what changes in the connected systems and what the customer is told.
Data and permission checks are automated. When another model scores a response, we compare its assessment with the reviewers’ judgement.
RequestWhat does the integration service include?
Example outcomeNew answer because the catalogue changed.
The question resembles one the system has answered before. The system keeps the request’s context and the identity of the person asking.
Storing answers can avoid repeated model calls. Before reusing one, the system checks who is asking, what they need and whether the sources have changed.
A similar question may need a different answer. We discard the cached response when sources or permissions have changed and record the reason and the cost of the new request.
We design, build and modernise web applications, APIs and business systems, with or without AI.
All expertise areasWe map user needs and the full service journey, and test assumptions with prototypes. We build accessible interfaces and reusable design systems.
We define domain boundaries, data models and API contracts around the business, with the simplest architecture that meets the requirements. We modernise in steps, with rehearsed data migrations.
We keep changes small and easy to review. Peer review, static analysis and dependency checks catch problems early, and security is part of everyday development.
We use test-driven development (TDD) to define behaviour before implementing it, with unit, integration and end-to-end tests. Each defect is reproduced in a test before it is fixed.
We automate build, test and release in CI/CD, with staged releases and a recovery plan. Runbooks and documentation stay up to date so your team can run the system after handover.
We introduce coding agents and assistants into discovery, implementation, testing and maintenance. We set up repository context, permissions and review standards, then compare delivery time, defects and rework with a baseline.
We help you decide where an investment is worth it and what it takes to get it into daily use.
All expertise areasWe map how the work is done, find the bottlenecks and check what data is available. We rank opportunities by value, feasibility, risk and the effort needed to change the process.
For each task we compare conventional automation, predictive models and generative AI. We weigh build against buy, provider dependence and the full cost, from data preparation to operation.
We define a limited first release and its acceptance criteria. We redesign the workflow with the people who use it, train each role and track adoption, feedback and support requests. The training also supports the AI literacy measures in the EU AI Act.
We agree who owns the product, the data, risk decisions and support. We measure a baseline, name an owner for each expected benefit and compare results with the full cost. That evidence tells you whether to continue, adjust or stop.
We connect the applications and data your company already uses, each connection with its own permissions.
All expertise areasWe connect CRM, ERP, support and collaboration workflows through approved APIs, including Salesforce, HubSpot, Microsoft 365, SharePoint, Google Workspace, Slack and Teams, within each provider’s API terms.
We connect SQL databases, data warehouses, object storage and vector stores. We design batch and streaming pipelines, with change data capture where needed, lineage, freshness checks and handling of deletions.
We design reusable data products with named owners, shared business definitions and quality expectations. We modernise warehouse or lakehouse foundations, document data contracts and publish approved datasets in a catalogue.
We build service APIs, webhooks, queues and MCP servers. We use scoped identities and OAuth where appropriate, manage secrets and make retries safe with idempotency and explicit error handling.
We build on AWS, Google Cloud or Microsoft Azure, starting from the infrastructure you already have.
All expertise areasWe assess managed model services, serverless applications, Kubernetes and dedicated inference. Where data boundaries or existing infrastructure require it, we plan hybrid or on-premises deployment.
We provision repeatable environments with infrastructure as code, including Terraform. Network boundaries, workload identities, secrets, encryption and region are designed together.
We document where data is stored, where models process it and where logs are kept. Cross-region inference can process requests outside the chosen region, so where residency matters we use regional or EU deployments and prepare an exit plan.
We plan scaling, capacity, recovery and service-level objectives. We allocate costs by product or team, set budgets and use measured demand to choose resources and guide FinOps decisions.
Managed model access, agent services and custom machine learning in your AWS environment.
Amazon Bedrock, Bedrock AgentCore and SageMaker AI.
Gemini and custom ML, connected to your data and deployed through managed or container services.
Gemini Enterprise Agent Platform (the evolution of Vertex AI), Cloud Run and GKE.
AI applications and retrieval integrated with your Azure services and enterprise identity.
Microsoft Foundry, Azure AI Search and Microsoft Entra ID.
A shared platform for several AI applications, with quality, response time and cost measured.
All expertise areasWe use intent classification or embedding similarity to send each request to the right workflow, agent or knowledge source. We set confidence thresholds and a fallback for ambiguous requests, and enforce authorisation separately.
We select models by measured quality, latency and cost, and centralise provider access, rate limits, budgets and fallbacks.
We reuse the answer to a similar request only when context, permissions and freshness allow it. We measure incorrect reuse and invalidate stale entries.
We version data, prompts, models and configuration. Registries and evaluation run in CI/CD, with staged rollouts and rollback. Monitoring and retraining triggers keep changes repeatable and reviewable.
Agents that look things up and carry out tasks in your systems, within limits agreed up front.
All expertise areasWe design single-agent and multi-agent workflows with persistent state, scoped memory and checkpoints. Execution budgets, retries and recovery paths let long-running tasks resume safely.
We connect tools through APIs and the Model Context Protocol (MCP), and agents through Agent2Agent (A2A) when needed. An MCP server is third-party code, so we pin versions and give each one scoped credentials.
We separate working context from persistent memory, summarise long sessions and load instructions only when they are needed. Repeatable procedures become versioned agent skills with a defined scope and review.
We add approvals and intervention points to actions with consequences. Where there is no API, we assess browser or computer-use agents in isolated environments, with restricted access and recovery controls.
Retrieval built so every answer can be checked against its sources.
All expertise areasWe prepare documents through ingestion, parsing, chunking and embeddings. We track provenance, permissions, updates and deletions so the system retrieves current information that the user is allowed to see.
We combine keyword and vector search, metadata filters and reranking. Where it improves results, we add document context to each chunk, and we test query rewriting against representative questions.
We model entities and relationships to connect evidence across sources. Graph traversal and community summaries help with questions about relationships or about a whole collection. They require entity resolution, provenance and a plan to keep the graph up to date.
The system breaks a question into parts, chooses sources and searches again when evidence is missing. We limit search steps and context size, keep citations and make the system say so when the sources are not enough.
We connect natural-language questions to approved database views through constrained text-to-SQL. We validate queries and metric definitions, apply access checks and keep each query and its result for review.
These approaches can work together. We compare them on your questions and source data, including answer quality, response time and the cost of keeping the system current.
We compare models on your data, and check first whether a simpler solution is enough.
All expertise areasWe benchmark hosted and open-weight models on representative tasks, with versioned prompts and structured outputs. The same evaluation set lets you qualify a replacement when a provider retires a model.
When there is enough curated data, we assess fine-tuning, in full or with parameter-efficient methods such as LoRA, and distillation or quantisation for smaller deployments. We check quality on held-out data and review licences and data provenance.
We build classification, forecasting, recommendation and anomaly-detection models. We compare them with simple baselines, keep training and evaluation data separate, and account for uncertainty and the cost of a wrong prediction.
We extract the information a workflow needs from documents, images and audio, with a reference to the original.
All expertise areasWe combine OCR, layout analysis and vision-capable models to classify files and extract information. Outputs are validated against schemas and business rules.
We build voice applications as a chain of speech recognition, language model and speech synthesis, or with speech-to-speech models, and compare both on latency and control. The design covers interruptions, consent and handover to a person.
We keep source references, measure accuracy field by field and send uncertain results to a person. We prepare labelled examples for evaluation and check synthetic data before using it.
We turn what the application must do into test cases and run every change against them.
All expertise areasWe use model-based scoring with explicit rubrics, reference examples and cases labelled by people. Before relying on the scores, we measure agreement with reviewers and look at the disagreements.
We build evaluation sets from representative tasks, edge cases and observed failures. We keep held-out examples and rerun the checks whenever prompts, models or retrieval change.
We test multi-turn tasks in controlled environments, inspect tool use and verify the final state of the system. We repeat trials to measure variability and check recovery, permissions and escalation when something fails.
We compare configurations with the acceptance criteria, using shadow traffic or controlled A/B tests alongside offline evaluation. An agent on shadow traffic uses stubs in place of tools that make changes.
We record each request’s path to see where it fails and what it costs.
All expertise areasWe link model calls, retrieval, tool execution and agent steps in one trace, with sensitive data redacted. Where the tools allow, we follow the OpenTelemetry generative AI conventions so traces are not tied to one vendor.
We set up dashboards and alerts for task outcomes, evaluation results, latency distributions, errors, token usage and cost.
We monitor changes in input data and model behaviour, break results down by use case and investigate drift. Reviewed failures and user feedback go into the evaluation sets and inform retraining decisions.
We turn the GDPR and the EU AI Act into controls your team can understand and operate.
All expertise areasWe apply access controls to knowledge, tools and model interactions. Tenant isolation, data retention, redaction and secret handling are designed around the information each workflow needs.
We red-team prompt injection, data exfiltration and unsafe tool use. Prompt injection cannot be fully prevented, so untrusted content must not be able to trigger privileged actions or send data out.
We keep an inventory of models and their uses and record decisions and approvals. For each use we document its classification under the EU AI Act; the legal assessment remains with your advisers.
We measure performance across the relevant user groups and document limitations and uncertainty. Explanations match the decision being made, people are told when they are dealing with an AI system, and they have a practical way to question a result or ask for human review.
Choosing the right measures
We agree what outcome the user needs and measure the starting point. Then we choose the project’s metrics, including cost and the time the team spends reviewing or correcting the work.
Does the response answer the question and have supporting sources?
We use suitable reference data and human review. A score from an automated judge is an estimate to validate, not ground truth.
Does the workflow complete the intended task?
We read results in context: handing a case to a person at the right moment can be the correct outcome.
Does each request reach the right destination?
We check ambiguous requests, stale context and permission boundaries. A high hit rate alone does not show that the cache behaves correctly.
Do predictions improve the decision compared with the baseline?
We choose measures according to the cost of each kind of mistake, and account for class imbalance, time-based validation, data leakage and drift.
Does the system respond reliably when people need it?
We look at distributions and at each stage of the workflow. An average can hide a poor experience for some users.
Does the saving or revenue justify what the system costs to run?
We assess savings together with quality and task outcomes, and include review and correction time in the total cost.