Apply software design principles across architecture and implementation using deterministic decision workflows, SOLID checks, structural patterns, and anti-pattern detection; use when reviewing designs, refactoring modules, or resolving maintainability and coupling risks.
Does it follow best practices?
Evaluation — 99%
↑ 1.01xAgent success when using this tile
Validation for skill structure
Your e-commerce platform needs to integrate with multiple payment providers. Currently, the checkout service directly instantiates and calls specific provider SDKs, making it difficult to:
The team has decided to create an abstraction layer for payment processing. Your task is to design the interfaces and contracts that will enable flexible payment provider integration while maintaining testability and clean separation between domain logic and infrastructure.
Create an interface design document called payment-interfaces.md that:
Defines the abstraction:
Defines ownership:
Shows implementation guidance:
Documents tradeoffs:
Includes validation step before proceeding to implementation
=============== FILE: checkout-service.ts (problematic) =============== export class CheckoutService { async processPayment(orderId: string, amount: number, provider: string) { // Direct coupling to concrete implementations! if (provider === 'stripe') { const stripe = new StripeGateway('sk_live_xxx'); return await stripe.charge(orderId, amount); } else if (provider === 'paypal') { const paypal = new PayPalClient('client_id', 'secret'); return await paypal.executePayment(orderId, amount); } else if (provider === 'square') { const square = new SquareClient('access_token'); return await square.charge(orderId, amount); } // This if-else chain will keep growing // Testing is impossible without real SDKs throw new Error('Unknown provider'); } }
Install with Tessl CLI
npx tessl i pantheon-ai/software-design-principlesevals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
references