high-value-testing
The Testing Oracle
Most test suites are liabilities disguised as assets. They break when you refactor internal logic, they take too long to run, and they still let critical edge cases slip into production. This skill pushes back. It treats testing not as a verification chore, but as an intellectual investigation into software risk and a strict audit of system design.
The ideas here synthesize Vladimir Khorikov's Unit Testing, Elisabeth Hendrickson's Explore It!, and Cem Kaner's Lessons Learned. The goal is simple: achieve 90% confidence with 10% effort by writing tests that actually matter.
Core Principles
1. Refactoring Resistance (The Golden Rule)
A test is only valuable if it gives you the confidence to change the code. If you refactor the internal implementation of a function—without changing its observable output—and your test breaks, you have a false positive.
False positives destroy trust in the test suite. Never write tests that couple themselves to implementation details. Do not verify how the code does its job (e.g., checking if a specific internal method was called three times); verify what the code produces (the final state or the returned value).
2. Testability is a Design Smell
If a piece of code is hard to test, the problem is rarely the testing framework; the problem is the code's design.
Before writing a single assertion, look at the dependencies. If a function reaches out to a database, reads the system clock, and mutates a global variable, testing it will be a nightmare. Use testing as a design pressure tool: force the separation of business logic (pure, easily testable) from infrastructure logic (impure, requires integration tests).
More from vmvarela/skills
methodical-programming
Apply rigorous, mathematically-grounded program construction and verification. Derive correct programs from formal pre/post specifications using axiomatic semantics, structural induction, recursive design with bounding functions, algorithm immersion, and iterative derivation with loop invariants. Language-agnostic. Use this skill whenever the user wants to implement a function correctly, reason about loops or recursion, write formal specifications, derive tests from postconditions, prove termination, design data structures algebraically, or ensure program correctness by construction — even if they don't use terms like "formal methods" or "specification".
39pragmatic-docs
Write concise, useful project documentation (READMEs, guides, docs/) inspired by Philip Greenspun's pragmatic style. Use when creating or improving README.md, writing module docs, CONTRIBUTING.md, architecture docs, CHANGELOG, or structuring any project documentation for software projects. Use this skill whenever the user needs to write, rewrite, or review any form of project documentation — even if they just say "write a README" or "document this" without asking for a specific style.
30github-scrum
Manage software projects with Scrum on GitHub. Plan MVPs, maintain a Product Backlog as Issues, run Sprints as Milestones, and automate setup with the gh CLI. Adapted for solo developers and small teams (1-3 people). Use this skill whenever the user mentions sprints, issues, backlog, milestones, pull requests, project planning, releases, retrospectives, or any aspect of managing software work on GitHub — even if they don't explicitly mention Scrum.
27github-jira
Manage software projects with Scrum using JIRA Cloud as the backlog and sprint board, GitHub for code and releases, and the native JIRA+GitHub integration for automatic synchronization. Use this skill whenever the user mentions JIRA tickets, JIRA sprints, JIRA backlog, ticket keys (e.g. ABC-123), JQL queries, wants to create or move tickets, plan a sprint, close a sprint, sync a GitHub Release with JIRA, or needs to know how to name a branch from a ticket. Also applies when the user asks how to link GitHub PRs to JIRA tickets, how to auto-label PRs from JIRA fields, or how to manage a project that has a single JIRA project for multiple GitHub repositories.
2pragmatic-build
Guide the build phase of software development. Use when writing, testing, or refactoring code — to eliminate duplication, decouple modules, program deliberately, crash early on impossible states, drive design through tests, and refactor continuously. Based on the principles from The Pragmatic Programmer.
1strategic-planning
Guide the planning phase of software development. Use when designing system architecture, planning modules, defining interfaces, or making any structural decision — to minimize complexity through deep abstractions, information hiding, and long-term maintainability over quick tactical fixes.
1