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.
88
88%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
Use these examples as patterns while designing or reviewing modules.
Bad shallow wrapper:
class OrderService:
def create_order(self, request):
return self.order_repository.create_order(request)Why bad:
Better deep module:
class OrderPlacement:
def place_order(self, customer_id, cart_id, payment_method_id):
cart = self.carts.load(cart_id)
customer = self.customers.load(customer_id)
order = Order.from_cart(customer, cart)
order.require_valid_shipping_address()
order.require_available_inventory()
authorization = self.payments.authorize(order.total, payment_method_id)
reservation = self.inventory.reserve(order.items)
return self.orders.save_confirmed(order, authorization, reservation)Why better:
place_order.Bad leaky code:
def cancel_order(order_row):
if order_row["status_code"] == 7:
raise Exception("Already shipped")
order_row["status_code"] = 9
db.orders.update(order_row)Why bad:
Better domain abstraction:
class Order:
def cancel(self):
if self.has_shipped():
raise OrderCannotBeCancelled("Shipped orders cannot be cancelled.")
self.status = OrderStatus.CANCELLEDWhy better:
Bad pass-through variables:
def generate_invoice(order, locale, tax_table, rounding_mode, currency_rules):
...
def email_invoice(order, locale, tax_table, rounding_mode, currency_rules):
invoice = generate_invoice(order, locale, tax_table, rounding_mode, currency_rules)
...Why bad:
Better owned policy:
class InvoiceGenerator:
def generate_for(self, order):
tax = self.tax_policy.calculate(order)
total = self.currency_policy.round(order.subtotal + tax)
return Invoice(order, tax, total)Why better:
Bad temporal modules:
RequestParser
RequestValidator
RequestProcessor
ResponseBuilderProblem:
Better conceptual modules:
SubscriptionSignup
EligibilityPolicy
BillingAccount
WelcomeMessageWhy better:
Bad layered pass-through stack:
UserController.get_user
UserService.get_user
UserManager.get_user
UserRepository.get_user
UserDAO.get_userProblem:
Better distinct layers:
HTTP layer: translate request/response details.
Application layer: load an active member profile use case.
Domain layer: represent member eligibility and account status.
Infrastructure layer: hide user, membership, and permission storage.Example operation:
class MemberProfileQuery:
def load_active_profile(self, member_id):
user = self.users.fetch(member_id)
membership = self.memberships.fetch_current(member_id)
permissions = self.permissions.resolve(member_id)
if not user.active or not membership.current:
return None
return MemberProfile(user, membership, permissions)Why better: