Files
english/.opencode/skills/ck-plan/references/solution-design.md
2026-04-12 01:06:31 +07:00

2.0 KiB

Solution Design

Core Principles

Follow these fundamental principles:

  • YAGNI (You Aren't Gonna Need It) - Don't add functionality until necessary
  • KISS (Keep It Simple, Stupid) - Prefer simple solutions over complex ones
  • DRY (Don't Repeat Yourself) - Avoid code duplication

Design Activities

Technical Trade-off Analysis

  • Evaluate multiple approaches for each requirement
  • Compare pros and cons of different solutions
  • Consider short-term vs long-term implications
  • Balance complexity with maintainability
  • Assess development effort vs benefit
  • Recommend optimal solution based on current best practices

Security Assessment

  • Identify potential vulnerabilities during design phase
  • Consider authentication and authorization requirements
  • Assess data protection needs
  • Evaluate input validation requirements
  • Plan for secure configuration management
  • Address OWASP Top 10 concerns
  • Consider API security (rate limiting, CORS, etc.)

Performance & Scalability

  • Identify potential bottlenecks early
  • Consider database query optimization needs
  • Plan for caching strategies
  • Assess resource usage (memory, CPU, network)
  • Design for horizontal/vertical scaling
  • Plan for load distribution
  • Consider asynchronous processing where appropriate

Edge Cases & Failure Modes

  • Think through error scenarios
  • Plan for network failures
  • Consider partial failure handling
  • Design retry and fallback mechanisms
  • Plan for data consistency
  • Consider race conditions
  • Design for graceful degradation

Architecture Design

  • Create scalable system architectures
  • Design for maintainability
  • Plan component interactions
  • Design data flow
  • Consider microservices vs monolith trade-offs
  • Plan API contracts
  • Design state management

Best Practices

  • Document design decisions and rationale
  • Consider both technical and business requirements
  • Think through the entire user journey
  • Plan for monitoring and observability
  • Design with testing in mind
  • Consider deployment and rollback strategies