The Qvolution Series

Tutorials for the new QA.

A practical video series on what modern QA actually looks like — owning your test environments, your pipelines, and your results. Each episode comes with a real code snippet you can lift into your project.

Traditional QA Is Dead — Here's What Comes Next!
Episode 01

Traditional QA Is Dead

Why old-school QA no longer works and what modern QA looks like today.

Watch on YouTube
.gitlab-ci.yml — quality is a pipeline stage, not a department
yaml
stages:
  - build
  - test
  - quality   # owned by the team, not a hand-off
  - deploy

quality:
  stage: quality
  script:
    - npm run lint
    - npm run test:unit -- --coverage
    - npm run test:e2e
  coverage: '/Statements\s*:\s*([\d.]+)/'
QA's Biggest Pain: Slow, Shared Test Environments — here's the fix
Episode 02

QA's Biggest Pain: The Environment

A glimpse of a future where QA controls its own test environments.

Watch on YouTube
main.tf — spin up an isolated env per pipeline run
hcl
resource "aws_instance" "qa_env" {
  ami           = var.qa_ami
  instance_type = "t3.small"

  tags = {
    Name      = "qa-${var.pipeline_id}"
    Ephemeral = "true"
    TTL       = "2h"
  }
}

output "qa_url" {
  value = "https://${aws_instance.qa_env.public_dns}"
}
Your CI Isn't Failing — Your Environment Is
Episode 03

When Local Tests Lie

Building the test environment foundation where tests don't lie.

Watch on YouTube
Dockerfile — same image local and in CI, no surprises
dockerfile
FROM mcr.microsoft.com/playwright:v1.49.0-jammy

WORKDIR /app
COPY package*.json ./
RUN npm ci

COPY . .
ENV CI=true
CMD ["npx", "playwright", "test", "--reporter=line"]
'Same Environment' Is the Biggest Lie in QA
Episode 04

'Same Environment' Is the Biggest Lie in QA

Same environment, same setup. So how can one test pass and the other fail, while nothing changed?

Watch on YouTube
qa-env.yml — Ansible enforces the same state, every run
yaml
- hosts: qa
  become: true
  vars:
    node_version: "20.11.1"
    postgres_version: "16.4"
    app_sha: "{{ lookup('env', 'GIT_SHA') }}"

  tasks:
    - name: Pin Node.js
      ansible.builtin.apt:
        name: "nodejs={{ node_version }}-1nodesource1"
        state: present
        update_cache: true

    - name: Pin Postgres
      ansible.builtin.apt:
        name: "postgresql={{ postgres_version }}-1.pgdg22.04+1"
        state: present

    - name: Deploy app at exact commit
      ansible.builtin.docker_container:
        name: app
        image: "registry.acme.io/app:{{ app_sha }}"
        recreate: true
        env:
          NODE_ENV: test
          TZ: UTC

    - name: Verify drift
      ansible.builtin.command: node --version
      register: node_check
      changed_when: false
      failed_when: node_check.stdout != "v{{ node_version }}"
Why Staging Can't Be Trusted (And What QA Should Control Instead)
Episode 05

Why Staging Can't Be Trusted

QA usually tests in staging. But when the environment and execution aren't controlled, you can't really trust what a test result means.

Watch on YouTube
Jenkinsfile — the pipeline owns the environment and the verdict
groovy
pipeline {
  agent any

  stages {
    stage('Test') {
      steps {
        sh 'npm ci'
        sh 'npm run test:e2e -- --reporter=junit'
      }
    }
  }

  post {
    always {
      script {
        def r = junit testResults: 'reports/junit.xml'
        def verdict = currentBuild.currentResult == 'SUCCESS' ? 'PASS' : 'FAIL'

        slackSend(
          channel: '#qa-results',
          color:   verdict == 'PASS' ? 'good' : 'danger',
          message: "QA ${verdict} — build #${env.BUILD_NUMBER} on ${env.GIT_BRANCH} · ${r.passCount}/${r.totalCount} passed"
        )
      }
    }
  }
}
QA TEST RESULTS YOU CAN TRUST
Episode 06

QA Results You Can Trust

Test results only matter when the team can see them. The pipeline from episode 05 lands here — a single, clear verdict in the team's channel, with the evidence one click away.

Watch on YouTube
#qa-results
Slack preview
Q
QA BotAPP9:41 AM
QA verdict: PASS
Build
#284 on main
Tests
142 / 142 passed
Duration
4m 12s
Commit
a7f3c91 — fix: cart total

Want this in your team?

The episodes show the thinking. The services bring it into your codebase. Read more on the blog or get in touch directly.

Book a 30-min call
QA by Rody

Quality is built into the pipeline.

© 2026 QA by Rody. All rights reserved.