Skip to main content
Viithiisys
Journeys, not units

Testing that tells you whether the workflow still works, not just whether the code compiles.

We test the software we build and the software you already run, including the AI features where a pass is a judgement rather than a green tick.

Building and running software since 2007Tests delivered in your repository, not a portal we own

Build 418Suite passed

412 checks, 0 failures, 41 seconds

The journey a customer completes

  1. Browse
  2. Cart
  3. Address
  4. Pay
  5. Confirm
  6. Receipt

Every check green. Nobody ran the six steps in the order a customer does.

Green and still broken

Four ways a product with tests still breaks in front of a customer.

This is the wrong first spend when the product itself is still being argued about. Tests written against a specification that will change in a fortnight are work you throw away twice.

  1. 412 passed

    The tests cover the code, not the journey

    Every unit passes and the checkout still fails, because nothing tests the six steps in the order a real person performs them.

  2. Coverage 81%

    Testing starts after the build is finished

    The defects found are the expensive kind: the ones that need a design decision reversed, not a line changed.

  3. Suite skipped

    The suite is slow, so people skip it

    A test run nobody waits for is documentation. Releases go out on the strength of somebody's confidence instead.

  4. No assertion

    Nobody knows what an AI feature failing looks like

    The model returns a fluent answer. There is no assertion that says whether it was the right one.

What we take on

What we take on.

Six capabilities, placed at the level they belong to rather than listed as equals. What a check costs to own for the next three years is decided by where it sits.

Human judgementExpensive, and irreplaceable
  • Test strategy for a product that has none

    Deciding what is worth testing before writing a single test, which is where most of the saving is.

  • Manual and exploratory testing

    For the things a script cannot judge: whether the flow makes sense, and whether the error message helps.

The paths that earnAutomated, on every change
  • Automated regression for the journeys that earn money

    The paths a customer actually completes, run on every change, fast enough that people wait for the result.

  • Evaluation for AI and LLM features

    Scored test sets and pass thresholds, so a model change is a measured decision rather than a hope.

FoundationsCheap to run, run on everything
  • Performance and load testing

    What happens at the volume you expect next year, tested before it arrives rather than during.

  • Release and CI integration

    Tests attached to the pipeline that ships, so a failing check blocks a release instead of being noticed later.

Monitoring a model once it is live sits with MLOps and LLMOps. Building or repairing the delivery pipeline itself is DevOps consulting.

See DevOps consulting
The allocation

What to automate, what to test by hand, and what to deliberately leave untested.

Every ranking page offers a range of testing services. None says how to divide your product between them, or that some things should not be tested at all.

  • A journey that takes money, or loses it

    Automate, run on every change

    The cost of it breaking is immediate and external. This is where automation repays first.

  • A rule that is complex and stable

    Automate at the lowest level available

    Cheap to run, cheap to maintain, and it catches the regressions nobody predicts.

  • A flow that changes every sprint

    Test by hand until it settles

    Automating a moving target means rewriting the test more often than the feature.

  • Whether the thing is actually usable

    Exploratory, by a person

    No assertion captures whether an error message helps. A human judgement is the only instrument.

  • An AI or LLM output

    Scored evaluation set, not pass or fail

    Correctness sits on a range. A binary assertion either blocks every release or catches nothing.

  • A screen that is cosmetic and rarely used

    Leave it, and write down that you did

    Coverage here costs maintenance forever and prevents no incident worth preventing.

The last row is the one we get argued about. A recorded decision not to test something is stronger than an untested gap nobody has noticed, because it can be revisited.

How the work runs

How an engagement runs.

Ordered by what breaking costs you, so the highest-value coverage lands in the first weeks rather than at the end.

  1. Find out what breaking actually costs

    Which failures cause a refund, a support call or a lost customer. That ordering decides everything after it, and it is a business conversation, not a technical one.

  2. Write the strategy before the tests

    What gets automated, what stays manual, what is deliberately uncovered, and at which level each check belongs.

  3. Build the highest-value coverage first

    The money journeys, running in the pipeline, before anything else. Value arrives in the first weeks rather than at the end.

  4. Set the release rule

    What a failing check blocks and who can override it. A test that cannot stop a release is advisory, and advisory tests get ignored.

  5. Hand it to your team in a form they will keep

    Tests in your repository, in your framework, with the reasoning recorded. Suites that need us to maintain them do not survive.

Strategy before tests. Writing tests first and deciding what matters afterwards is how a suite becomes something people skip.

Evidence

Closest available, not equivalent.

We have no published QA-only engagement. The work below is testing done inside product builds, which is this page's position, but it is not a standalone testing contract.

  1. Fitelo, evaluation and cost controls in production

    An AI product running with evaluation and cost controls in place, rather than shipped and watched.

    That is the same discipline this page sells for AI features.

  2. Milo, a product used under time pressure

    A driver-facing system where a slow or wrong response has an immediate operational cost.

    Which is the case for treating journeys rather than units as the unit of testing.

  3. Vizitor, a platform in daily multi-site use

    Contextual scale only: 500+ workplaces across 15+ countries.

    Cited as evidence of software that has to keep working, not as a testing engagement.

Deliberately absent

Every competing page in this search result carries at least one of these. None of ours is sourced, so none of them appears.

  • No defect-reduction percentage
  • No coverage figure
  • No test-volume or engineer-count claim
  • No named QA tool
Where we have tested

The workflows we have tested inside.

Four kinds of product, each with its own reason that a unit test passing is not the same as the thing working.

  • Commerce and consumer products

    Checkout, payment and account journeys, where a failure is visible to a customer within seconds.

  • Workplace and operations software

    Multi-site systems where the same flow runs differently per location, which is where journey testing earns its cost.

  • Logistics and field operations

    Time-critical flows used on poor connections by people who cannot stop to report a bug.

  • AI-assisted features inside any of the above

    Where the output is generated rather than looked up, and correctness has to be scored instead of asserted.

Generated output

How we test an AI feature when the answer is not simply right or wrong.

Most testing guidance was written for deterministic software. It does not address the case buyers now bring: output that is generated, plausible, and sometimes quietly wrong.

Evaluation set, scoredThreshold 82, agreed in advance
  • Candidate v3.179£0.004 / answer · 1.9s p95

    Held. Below the line agreed in March.

  • Candidate v3.286£0.011 / answer · 2.4s p95

    Shipped, and the cost of the gain was checked first.

  1. A scored set, not a pass or fail

    A fixed set of real inputs with expected outcomes, scored on a range. The release question becomes whether the score moved, not whether one case passed.

  2. A threshold agreed with the business

    Someone decides what accuracy is good enough to ship, before a release is waiting. Made in advance, it is a policy. Made during, it is a negotiation.

  3. The failure cases kept in the set

    Every incident becomes a permanent test case, so the same class of failure cannot return quietly.

  4. Cost and latency measured alongside accuracy

    A more accurate answer that costs four times as much or takes six seconds may not be the better release.

The scores above illustrate the method rather than a client result. It is the same discipline described in the Fitelo work, which is the only direct evidence here.

What you keep

What you are left holding when we stop.

Including the gaps, written down with the reason, so the next person inherits reasoning rather than guesswork.

  1. The suite in your repository, in your framework

    Not a portal we own. If the relationship ends, the tests keep running.

  2. The strategy written down, including the gaps

    What is covered, what is not, and why each decision was made, so the next person inherits reasoning rather than guesswork.

  3. The release rule, in the pipeline

    Encoded where the software ships from, not described in a document nobody opens.

  4. Whoever on your team wants to run it, able to

    A suite only one contractor can maintain is a dependency, not an asset.

Start here

Tell us what breaks, and what it costs you when it does.

We will tell you whether this is a testing engagement, a smaller piece of work, or not a testing problem at all.

FAQ

The four questions we are actually asked.

Pick a topic, or ask us directly. We answer every inbound within one business day.

Still have questions?

Talk to a senior engineer, not a bot.

Talk to us