{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Tim Stacey — Field notes",
  "description": "Field notes on testing and quality engineering by Tim Stacey.",
  "home_page_url": "https://tim.sillysamoyed.com/blog",
  "feed_url": "https://tim.sillysamoyed.com/feed.json",
  "authors": [
    {
      "name": "Tim Stacey",
      "url": "https://tim.sillysamoyed.com"
    }
  ],
  "items": [
    {
      "id": "https://tim.sillysamoyed.com/blog/test-health-ci-logs-vs-observability",
      "url": "https://tim.sillysamoyed.com/blog/test-health-ci-logs-vs-observability",
      "title": "Where Test Health Belongs: CI Logs or an Observability Backend",
      "summary": "Your suite emits pass rate and flake count every run, then buries them in a CI log nobody scrolls; export them over OTLP and a dashboard catches the rot.",
      "date_published": "2026-06-09T00:00:00.000Z",
      "tags": [
        "TestAutomation",
        "OpenTelemetry",
        "TestObservability",
        "CICD",
        "DevOps"
      ]
    },
    {
      "id": "https://tim.sillysamoyed.com/blog/retries-hide-real-bugs",
      "url": "https://tim.sillysamoyed.com/blog/retries-hide-real-bugs",
      "title": "Retrying a flaky test deletes the evidence of a real bug",
      "summary": "A bug that fails one run in four passes CI 99.6 percent of the time under three retries. Quarantine the test instead and keep the signal.",
      "date_published": "2026-06-07T00:00:00.000Z",
      "tags": [
        "TestAutomation",
        "FlakyTests",
        "CICD",
        "SoftwareTesting",
        "DevOps"
      ]
    },
    {
      "id": "https://tim.sillysamoyed.com/blog/github-actions-cache-strategy",
      "url": "https://tim.sillysamoyed.com/blog/github-actions-cache-strategy",
      "title": "Three caching changes that take 80% off a GitHub Actions build",
      "summary": "A cached ~/.npm drops a cold Node install from four minutes to thirty seconds, and two more cache changes take the rest of the pipeline down with it.",
      "date_published": "2026-06-04T00:00:00.000Z",
      "tags": [
        "GitHubActions",
        "CICD",
        "DevOps",
        "SoftwareDevelopment",
        "TestAutomation"
      ]
    },
    {
      "id": "https://tim.sillysamoyed.com/blog/resume-site-behind-460-tests",
      "url": "https://tim.sillysamoyed.com/blog/resume-site-behind-460-tests",
      "title": "My resume site ships behind 460 tests",
      "summary": "I set the direction and Claude Code wrote the code and the tests; 247 unit tests and 213 browser tests are how I trust a site I never hand-wrote.",
      "date_published": "2026-06-04T00:00:00.000Z",
      "tags": [
        "Astro",
        "StaticSite",
        "Playwright",
        "ContinuousIntegration",
        "TestAutomation"
      ]
    },
    {
      "id": "https://tim.sillysamoyed.com/blog/github-actions-parallel-steps",
      "url": "https://tim.sillysamoyed.com/blog/github-actions-parallel-steps",
      "title": "GitHub Actions parallel steps and the matrix jobs you can retire",
      "summary": "Three matrix jobs for lint, type-check, and unit tests pay three runner boots and an artifact handoff for concurrency that parallel steps fold back into one job.",
      "date_published": "2026-06-02T00:00:00.000Z",
      "tags": [
        "GitHubActions",
        "CICD",
        "DevOps",
        "TestAutomation",
        "SoftwareDevelopment"
      ]
    },
    {
      "id": "https://tim.sillysamoyed.com/blog/contract-testing-vs-e2e",
      "url": "https://tim.sillysamoyed.com/blog/contract-testing-vs-e2e",
      "title": "Contract Testing vs End-to-End: Where Integration Bugs Belong",
      "summary": "A contract test catches a renamed field in seconds; a 20-minute E2E suite catches it after booting six services. Put each test where it earns its minutes.",
      "date_published": "2026-06-01T00:00:00.000Z",
      "tags": [
        "ContractTesting",
        "Microservices",
        "APITesting",
        "TestAutomation",
        "CICD"
      ]
    },
    {
      "id": "https://tim.sillysamoyed.com/blog/k6-script-authoring-live-telemetry",
      "url": "https://tim.sillysamoyed.com/blog/k6-script-authoring-live-telemetry",
      "title": "k6 Script Authoring calibrates load tests to live traffic",
      "summary": "Grafana Assistant reads your telemetry, finds endpoints by real RPS and p95, and generates a k6 script that inherits that profile.",
      "date_published": "2026-05-26T00:00:00.000Z",
      "tags": [
        "PerformanceTesting",
        "k6",
        "Grafana",
        "TestAutomation",
        "DevOps"
      ]
    },
    {
      "id": "https://tim.sillysamoyed.com/blog/playwright-ai-test-explosion",
      "url": "https://tim.sillysamoyed.com/blog/playwright-ai-test-explosion",
      "title": "When AI can write every test, what ships to CI is the job",
      "summary": "AI-generated Playwright tests flake under 1.5%. The new problem is test explosion, and coverage intent is still yours to define.",
      "date_published": "2026-05-24T00:00:00.000Z",
      "tags": [
        "Playwright",
        "TestAutomation",
        "SoftwareTesting",
        "AI",
        "CICD"
      ]
    },
    {
      "id": "https://tim.sillysamoyed.com/blog/github-copilot-fixes-failing-ci",
      "url": "https://tim.sillysamoyed.com/blog/github-copilot-fixes-failing-ci",
      "title": "One click to fix a failing GitHub Actions run",
      "summary": "Fix with Copilot puts a cloud agent on the failure: it investigates, pushes a fix, reruns CI, and tags you for review.",
      "date_published": "2026-05-21T00:00:00.000Z",
      "tags": [
        "GitHubActions",
        "CICD",
        "TestAutomation",
        "DevOps",
        "SoftwareDevelopment",
        "Playwright"
      ]
    },
    {
      "id": "https://tim.sillysamoyed.com/blog/ai-cicd-adoption-gap",
      "url": "https://tim.sillysamoyed.com/blog/ai-cicd-adoption-gap",
      "title": "90% use AI in the IDE; the pipeline is another story",
      "summary": "JetBrains data: daily AI in the editor, almost none in CI/CD. The trust gap closes when AI reduces noise instead of adding it.",
      "date_published": "2026-05-19T00:00:00.000Z",
      "tags": [
        "CICD",
        "DevOps",
        "TestAutomation",
        "SoftwareDevelopment",
        "AITesting"
      ]
    },
    {
      "id": "https://tim.sillysamoyed.com/blog/bitbucket-agentic-pipelines",
      "url": "https://tim.sillysamoyed.com/blog/bitbucket-agentic-pipelines",
      "title": "Bitbucket Agentic Pipelines automates the chores",
      "summary": "Define an agent block in bitbucket-pipelines.yml, scope it, tie it to an event. It drafts the docs and the coverage gaps; you review.",
      "date_published": "2026-05-17T00:00:00.000Z",
      "tags": [
        "Bitbucket",
        "DevOps",
        "CICD",
        "TestAutomation",
        "SoftwareDevelopment",
        "Playwright"
      ]
    },
    {
      "id": "https://tim.sillysamoyed.com/blog/playwright-1-59-healer-agent-ci",
      "url": "https://tim.sillysamoyed.com/blog/playwright-1-59-healer-agent-ci",
      "title": "Playwright 1.59 turns failures into reviewable evidence",
      "summary": "The 1.59 agents plus screencast and browser.bind shift your job from chasing selectors to reviewing what the Healer did.",
      "date_published": "2026-05-14T00:00:00.000Z",
      "tags": [
        "Playwright",
        "TestAutomation",
        "AITesting",
        "QA",
        "CI"
      ]
    },
    {
      "id": "https://tim.sillysamoyed.com/blog/k6-2-ai-performance-testing",
      "url": "https://tim.sillysamoyed.com/blog/k6-2-ai-performance-testing",
      "title": "k6 2.0 moves load-test authoring into the CLI",
      "summary": "Grafana previewed k6 2.0 at GrafanaCON 2026: AI authoring in the CLI, an MCP server, and a Playwright-to-k6 converter.",
      "date_published": "2026-05-12T00:00:00.000Z",
      "tags": [
        "PerformanceTesting",
        "TestAutomation",
        "k6",
        "Grafana",
        "AI"
      ]
    },
    {
      "id": "https://tim.sillysamoyed.com/blog/playwright-mcp-locator-tax",
      "url": "https://tim.sillysamoyed.com/blog/playwright-mcp-locator-tax",
      "title": "The locator tax nobody puts in the budget",
      "summary": "Broken-test triage is a staffing decision disguised as a process one. Here is the cost, and where AI self-healing pays it back.",
      "date_published": "2026-05-12T00:00:00.000Z",
      "tags": [
        "EngineeringLeadership",
        "SoftwareEngineering",
        "TestAutomation",
        "DevProductivity",
        "QualityAssurance"
      ]
    },
    {
      "id": "https://tim.sillysamoyed.com/blog/playwright-ai-agents",
      "url": "https://tim.sillysamoyed.com/blog/playwright-ai-agents",
      "title": "Playwright agents and the new QA skills gap",
      "summary": "Playwright v1.56 put a Planner, Generator, and Healer in the test runner. The interesting part is what it asks of the engineers who own the suite.",
      "date_published": "2026-05-10T00:00:00.000Z",
      "tags": [
        "Playwright",
        "SoftwareTesting",
        "AI",
        "TestAutomation",
        "QualityAssurance"
      ]
    }
  ]
}