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
Use doubles to control boundaries, not to duplicate object graphs.
class FakePaymentGateway:
def __init__(self):
self.captured = []
def capture(self, amount, currency):
self.captured.append((amount, currency))
return PaymentResult(success=True, transaction_id="fake-123")Use this when the test cares about the business outcome and captured state.
class SpyEmailGateway:
def __init__(self):
self.sent = []
def send_receipt(self, email):
self.sent.append(email)Use this when the observable behavior is the outgoing message itself.