I break software professionally so your users don't have to. I'm a Senior SDET at Zodia Custody, the Standard Chartered-backed institutional digital asset custodian, where I build test automation for systems that really can't be wrong. Based in London, working across API, UI and performance testing on microservices. Lately I've been applying the same discipline to AI: calibrated LLM judges, statistically defensible regression verdicts, and evals that run deterministically in CI.
Testing philosophy: test code deserves the same rigour as production code. If it's flaky, it's lying to you.
- VaultChain - fictional digital-asset custody platform built as the system-under-test for a four-layer Playwright suite with a required compliance CI gate
- test-evidence-packs - Playwright reporter + CLI that turns test runs into audit-ready, tamper-evident evidence packs
- spec-to-suite - turns OpenAPI 3.1 specs into reviewable Playwright API tests, gated by human review and mutation testing
- flake-forensics - statistically honest flake analysis: Wilson intervals, failure clustering, changepoint detection
- llm-evals-ts - LLM evals with QA discipline: judges must pass calibration before they may gate
- Playwright and TypeScript - cross-browser E2E suite with accessibility, visual and performance test dimensions
- Cypress and JavaScript - E2E framework with session-cached auth and axe accessibility gating
- TestCafe and Cucumber - BDD E2E suite with a cross-browser CI matrix and nightly runs
- qasimmahmood.org - my personal site, which ships with its own cross-browser Playwright suite (the philosophy above applies to my own code too)
- Postman and GitHub Actions - Newman-driven suite with JSON Schema validation and data-driven regression
- Playwright and TypeScript - typed API clients with zod contract validation and ADR-documented design
- Cypress and JavaScript - service-object architecture with Ajv schema validation and hermetic container CI
- Python, Pytest and Requests - pydantic strict contracts, mypy, a 3.11 to 3.13 matrix and Allure reporting
- Bruno - full CRUD lifecycle with request chaining, dual-layer assertions and hermetic CI



