// Methodology / Phase 3

Environment & Test Data

A performance result is only as transferable as the environment it was measured in. Phase 3 makes the gap between test and production explicit — and either closes it or accounts for it.

Environment parity

We audit the test environment against production across compute (instance types and counts), data volumes, network topology (load balancers, TLS termination, WAF, CDN), configuration (pool sizes, heap settings, autoscaling policies) and external dependencies. Differences are recorded in a parity matrix; each is classified as negligible, scalable (results can be extrapolated with stated assumptions) or blocking (results will not transfer — fix before testing).

The half-size environment trap. "Test at half scale, double the result" fails whenever any component doesn't scale linearly — which is most of them (databases especially). We extrapolate only where the scaling behaviour of the specific tier has itself been measured.

Test data at production scale

Database performance is a function of data volume: a query that's instant against 10,000 rows may be a table scan against 50 million. We size test databases to production volumes (current or forecast), with realistic cardinality and skew — synthetic data generated uniformly produces unrealistically balanced indexes. Where production data is cloned, we apply masking that preserves statistical shape (lengths, cardinalities, distributions) while removing personal information.

Dependencies and service virtualisation

Third-party services (payments, identity, messaging) usually can't be load tested directly. We stand in service virtualisations that reproduce each dependency's latency distribution and error profile — not instant stubs, which hide real queueing behaviour. Each virtualised dependency is listed in the report as a stated assumption.

Observability readiness

Before execution we verify monitoring coverage on every tier: application metrics, JVM/runtime internals, database wait events, OS-level resources, and load-generator health. Missing instrumentation gets added now — discovering a blind spot during a failing test run wastes everyone's time.