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
A profile lookup path has accumulated controller/service/manager/repository layers. Before adding privacy filtering and membership badges, review the architecture and recommend a migration path that reduces maintenance risk without a broad rewrite.
Produce architecture_critique.md.
Input:
class UserController:
def get_user(self, request):
return UserService().get_user(request.args['id'], request)
class UserService:
def get_user(self, user_id, request):
return UserManager().get_user(user_id, request)
class UserManager:
def get_user(self, user_id, request):
row = UserRepository().get_user(user_id, request.tx)
if row['status_code'] == 9: return {'error': 'inactive'}
return row
class UserRepository:
def get_user(self, user_id, tx):
return tx.query('select * from users where id=?', [user_id]).one()