Use before implementing or refactoring software. Contains two skills: (1) Modular Software Design — for designing module boundaries, APIs, layers, abstractions, services, repositories, adapters, or architecture, helping reduce total system complexity by creating deep modules, hiding implementation knowledge, avoiding leakage and pass-through APIs, comparing alternative designs, documenting interfaces before coding, and critiquing existing architecture; and (2) Software Testing — for writing unit tests, integration tests, or end-to-end tests, creating mocks/stubs/fakes, designing a testing strategy, doing TDD, reviewing test quality, fixing flaky tests, or refactoring test suites, generating risk-focused test plans, picking appropriate test levels, choosing between mocks/fakes/real dependencies, and applying Arrange-Act-Assert patterns with concrete examples.
93
94%
Does it follow best practices?
Impact
92%
1.12xAverage score across 5 eval scenarios
Passed
No known issues
Tests assert private methods, exact call order, or internal choreography. Fix by asserting observable behavior through public seams.
Many internal collaborators or third-party types are mocked. Fix by testing cohesive behavior together, using fakes for owned boundaries, and wrapping third-party libraries behind adapters.
Tests execute code but only assert non-null results, snapshots, or absence of exceptions. Fix by checking business-relevant outputs, persisted effects, emitted events, or boundary interactions.
Failures depend on time, ordering, network, shared state, random data, or external services. Fix by isolating state, controlling clocks/randomness, replacing unsafe dependencies, and moving only necessary checks to slower levels.
Tests rely on hidden files, fixtures, or global setup. Fix by making data local, named, and purpose-built.
Helpers obscure the scenario or assert too much. Fix by keeping tests short, explicit, and domain-named.
Outcomes are hidden behind implicit dependencies or oversized classes. Fix by exposing stable outputs, domain objects, events, or adapters.