
Architecture Design Review
- 59 installs
- 14 repo stars
- Updated January 23, 2026
- dauquangthanh/hanoi-rainbow
Architecture Design Review is an agent skill that evaluates architecture documentation and decisions so developers can catch design risks before implementation.
About
The architecture-design-review skill runs structured reviews of software architecture designs, validating patterns, quality attributes, technology choices, and scalability. It gathers diagrams and ADRs, detects anti-patterns, and outputs detailed reports with risks and recommendations. Use it when you need an architecture validation pass before committing teams to implementation.
- Architecture style and anti-pattern checks
- Scalability and performance validation
- Security and technology stack assessment
- Severity-rated findings and risk report
Architecture Design Review by the numbers
- 59 all-time installs (skills.sh)
- Ranked #552 of 1,352 Code Review & Quality skills by installs in the Skillselion catalog
- Data as of Jul 29, 2026 (Skillselion catalog sync)
npx skills add https://github.com/dauquangthanh/hanoi-rainbow --skill architecture-design-reviewAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 59 |
|---|---|
| repo stars | ★ 14 |
| Last updated | January 23, 2026 |
| Repository | dauquangthanh/hanoi-rainbow ↗ |
How do you objectively validate an architecture against scale, security, and pattern fit before code is written?
Review architecture docs for pattern fit, quality attributes, risks, and actionable fixes before build-out.
Who is it for?
Tech leads and architects who have C4 diagrams, ADRs, and NFRs ready for structured critique.
Skip if: Implementers who only need coding help without existing architecture materials to review.
When should I use this skill?
Users mention architecture review, design assessment, technical review, or architecture validation.
What you get
Detailed review reports with findings, severity ratings, recommendations, and risk assessments.
Files
Architecture Design Review
Conduct systematic architecture design reviews to validate system design, assess quality attributes, evaluate technology choices, and identify risks before implementation.
Review Process
Follow this structured approach for comprehensive architecture reviews:
1. Gather Architecture Documentation
Collect required materials:
Required Documents:
- Architecture diagrams (C4: Context, Container, Component)
- Architecture Decision Records (ADRs) with rationale and alternatives
- Technical specifications and non-functional requirements (performance, scalability, security)
- Data models, schemas, and API specifications
- Technology stack with justifications
- Deployment and infrastructure diagrams
Context Information:
- Business constraints (budget, timeline, compliance requirements)
- Performance targets (quantified: response time, throughput)
- Scalability goals (user growth, data volume projections)
- Security requirements (authentication model, data protection, compliance)
- Integration requirements (internal/external systems, APIs)
2. Assess Architecture Style and Patterns
Validate architecture style appropriateness:
Style-Requirement Fit:
- Monolithic: Small teams (<10), simple domains, <1000 users
- Microservices: Large teams (>20), complex domains, >100K users
- Serverless: Event-driven, variable load, stateless operations
- Event-Driven: Asynchronous workflows, loose coupling, high throughput
Pattern Assessment:
☐ Architecture style matches requirements (scale, team, complexity)
☐ Service boundaries align with business domains (DDD)
☐ Communication patterns appropriate (sync vs async)
☐ Data management strategy clear (per-service vs shared DB)
☐ Integration patterns documented (gateway, mesh, events)
☐ Deployment model specified (containers, VMs, serverless)Anti-Pattern Detection:
- Big Ball of Mud: No structure, tight coupling, shared database
- God Service: Single service handling multiple domains
- Chatty Communication: Excessive inter-service calls (>5/request)
- Distributed Monolith: Services coupled through shared database
- Golden Hammer: Same technology for all problems
3. Evaluate Quality Attributes
Scalability Assessment:
- Horizontal scaling: Load balancers, stateless services, auto-scaling
- Database scaling: Sharding, read replicas, caching layers
- Capacity planning: Current load → projected load (document growth strategy)
- Cost implications: Baseline and peak infrastructure costs
Performance Validation:
- Response time budgets allocated per layer
- Caching strategy (CDN, Redis, application cache)
- Database optimization (indexes, connection pooling, query analysis)
- Async processing for long-running tasks (queues, background jobs)
Security Review:
☐ Authentication mechanism (OAuth 2.0, JWT, SAML)
☐ Authorization model (RBAC, ABAC, policy-based)
☐ API security (rate limiting, input validation, CORS)
☐ Data encryption (at-rest: AES-256, in-transit: TLS 1.3)
☐ Secret management (AWS Secrets Manager, HashiCorp Vault)
☐ Network security (VPC, security groups, WAF)
☐ Security headers (HSTS, CSP, X-Frame-Options)Availability & Reliability:
- Multi-AZ/region deployment for high availability
- Circuit breakers prevent cascade failures
- Health checks and auto-recovery configured
- Backup/DR procedures (RPO < 1hr, RTO < 4hrs)
- Graceful degradation for non-critical features
4. Review Technology Stack
Technology Fit Validation:
- Backend framework matches use case (Spring Boot, Node.js, Django, Go)
- Database selection justified (PostgreSQL, MongoDB, Cassandra, Redis)
- Deployment platform appropriate (Kubernetes, ECS, Cloud Run)
- Assess alternatives considered and documented in ADRs
Technology Risk Assessment:
- Vendor Lock-in: Evaluate portability and migration complexity
- Team Skills: Document training needs and timeline
- Community Support: Check ecosystem maturity and long-term viability
- Performance: Validate technology meets requirements
- Licensing: Verify compliance with commercial use
5. Analyze Data Architecture
Data Strategy Validation:
- Database per service vs shared database (justify choice)
- SQL vs NoSQL selection with rationale
- Data partitioning and sharding strategy
- Data consistency model (strong vs eventual)
- Data ownership clearly assigned
- Cross-service queries minimized
6. Review Monitoring and Observability
Observability Checklist:
☐ Metrics: Application, infrastructure, business metrics
☐ Logging: Centralized aggregation with correlation IDs
☐ Tracing: Distributed tracing across services
☐ Alerting: Error rate, latency, availability thresholds
☐ Dashboards: Real-time visibility into system health
☐ On-call: Rotation and escalation procedures7. Generate Review Report
Report Structure:
1. Executive Summary: Architecture style, overall assessment (Approved/Conditional/Not Approved), top strengths and concerns
2. Findings: Organized by severity (Critical/High/Medium/Low) with:
- Description and impact
- Recommendation with effort estimate
- Priority (Must Fix / Should Fix / Consider)
3. Risk Assessment: Technical, resource, timeline, operational risks with mitigations
Finding Format:
Finding: [Clear description]
Severity: Critical | High | Medium | Low
Impact: [Specific consequences]
Recommendation: [Actionable solution]
Effort: [Time estimate]
Priority: Must Fix | Should Fix | ConsiderReference Documentation
Load detailed guidance for specific review areas:
Core Review Resources:
- [architecture-review-process.md](references/architecture-review-process.md) - Complete review methodology with phase-by-phase checklists
- [review-checklists.md](references/review-checklists.md) - Comprehensive validation checklists for all architecture aspects
- [quality-attributes.md](references/quality-attributes.md) - Detailed assessment of scalability, performance, security, reliability, maintainability
- [common-patterns-to-validate.md](references/common-patterns-to-validate.md) - Validation criteria for architecture patterns (microservices, event-driven, serverless)
- [anti-patterns.md](references/anti-patterns.md) - Common design flaws with detection criteria and remediation
- [review-report-template.md](references/review-report-template.md) - Report structure with examples and severity classification
- [review-severity-levels.md](references/review-severity-levels.md) - Severity classification criteria (Critical/High/Medium/Low)
- [best-practices-for-architecture-reviews.md](references/best-practices-for-architecture-reviews.md) - Review methodology best practices
API & Integration:
- [api-design.md](references/api-design.md) - REST, GraphQL, gRPC design assessment
Data Architecture:
- [data-management.md](references/data-management.md) - Data strategy, ownership, synchronization, consistency patterns
- [data-storage-strategy.md](references/data-storage-strategy.md) - Database selection, partitioning, replication
- [data-consistency.md](references/data-consistency.md) - Consistency models and trade-offs
- [data-scalability.md](references/data-scalability.md) - Sharding, replication, caching strategies
- [database-selection.md](references/database-selection.md) - SQL vs NoSQL, technology selection criteria
Security:
- [application-security.md](references/application-security.md) - Security architecture including authentication, authorization, encryption, compliance
- [authentication-and-authorization.md](references/authentication-and-authorization.md) - Identity and access management patterns
Scalability & Performance:
- [horizontal-scalability.md](references/horizontal-scalability.md) - Horizontal scaling strategies and auto-scaling
- [caching-strategy.md](references/caching-strategy.md) - Cache layers, invalidation, CDN
Reliability & Operations:
- [high-availability-design.md](references/high-availability-design.md) - HA architecture, redundancy, failover
- [fault-tolerance.md](references/fault-tolerance.md) - Circuit breakers, retries, bulkheads, timeouts
- [disaster-recovery.md](references/disaster-recovery.md) - Backup, recovery procedures, RPO/RTO planning
- [monitoring-and-observability.md](references/monitoring-and-observability.md) - Metrics, logging, tracing, alerting
Microservices:
- [service-boundaries-microservices.md](references/service-boundaries-microservices.md) - Service decomposition, bounded contexts, domain boundaries
Additional Topics:
- [external-integrations.md](references/external-integrations.md) - Third-party API integration patterns
- [testing-strategy.md](references/testing-strategy.md) - Test coverage, integration testing, contract testing
- [operational-readiness.md](references/operational-readiness.md) - Production readiness checklist
- [cost-analysis.md](references/cost-analysis.md) - Infrastructure cost estimation and optimization
- [infrastructure-costs.md](references/infrastructure-costs.md) - Detailed cost breakdown by component
- [infrastructure.md](references/infrastructure.md) - Infrastructure design and deployment patterns
- [risk-assessment.md](references/risk-assessment.md) - Technical risk identification and mitigation
Note: For technology selection guidance (frameworks, databases, cloud platforms), reference the architecture-design skill.
Critical Review Principles
Focus on Architecture, Not Implementation:
- Review designs and patterns, not code quality
- Validate decisions and trade-offs, not syntax
- Assess structure and boundaries, not variable names
Be Specific with Findings: ✅ "Circuit breaker missing on Order→Payment calls (avg 50 calls/sec). Add Resilience4j with 50% error threshold." ❌ "Need better error handling"
Quantify Performance Requirements: ✅ "API response time must be <200ms for 95th percentile at 1000 req/s" ❌ "API should be fast"
Provide Actionable Recommendations: ✅ "Split UserService into Authentication (identity) and Profile (data) services. Estimated 3-week effort. Use event bus for sync." ❌ "Consider improving service boundaries"
Assess Based on Context:
- Startup MVP has different requirements than enterprise system
- 100-user system doesn't need microservices complexity
- Evaluate appropriateness for scale, team, and timeline
Common Architecture Anti-Patterns
A comprehensive guide to identifying and avoiding common architecture anti-patterns.
Overview
Architecture anti-patterns are common solutions to recurring problems that are ineffective and counterproductive. This guide helps identify these patterns and provides alternatives.
Table of Contents
1. Distributed System Anti-Patterns 2. Data Management Anti-Patterns 3. Integration Anti-Patterns 4. Design Anti-Patterns 5. Deployment Anti-Patterns
---
Distributed System Anti-Patterns
1. Distributed Monolith
Description: Microservices that are tightly coupled and must be deployed together.
Symptoms:
- Services share same database
- Services call each other synchronously for every operation
- Cannot deploy services independently
- Cascading failures common
- All services must be updated together
Example:
OrderService → calls → InventoryService → calls → PaymentService
↓ ↓ ↓
Same Database Same Database Same DatabaseWhy It's Bad:
- Complexity of microservices without benefits
- Cannot scale services independently
- No fault isolation
- Difficult to develop independently
- Defeats purpose of microservices
How to Fix:
- Database per service pattern
- Asynchronous communication via events
- API Gateway for client requests
- Circuit breakers for resilience
- Each service independently deployable
Alternative Pattern: Start with modular monolith, extract services when needed.
---
2. Chatty Communication
Description: Too many fine-grained service calls causing performance issues.
Symptoms:
- Multiple API calls to complete one operation
- High network latency
- N+1 query problem across services
- Poor user experience
- High bandwidth usage
Example:
Client → getOrder() → Order Service
→ getCustomer() → Customer Service
→ getAddress() → Address Service
→ getPayment() → Payment Service
→ getItems() → Item Service (N times for N items)Why It's Bad:
- High latency (network round trips)
- Increased failure points
- Resource intensive
- Poor performance
- Difficult to troubleshoot
How to Fix:
- Aggregate APIs (BFF - Backend for Frontend)
- GraphQL for flexible querying
- Data denormalization where appropriate
- Batch API endpoints
- Caching layer
Pattern: API Gateway with data aggregation
---
3. Single Point of Failure (SPOF)
Description: Critical component with no redundancy causing system-wide failure.
Common SPOFs:
- Single database instance
- Single load balancer
- Single message broker
- Single cache instance
- Single authentication service
Example:
All Services → Single Database → Failure = Total OutageWhy It's Bad:
- Complete system failure risk
- No fault tolerance
- Poor availability
- Business impact high
- Customer trust erosion
How to Fix:
- Database replication (primary-replica)
- Load balancer redundancy
- Multi-AZ deployment
- Circuit breakers for graceful degradation
- Health checks and auto-recovery
Pattern: Active-Passive or Active-Active redundancy
---
4. Cascading Failures
Description: Failure in one service propagates and causes failures in dependent services.
Symptoms:
- One service failure brings down entire system
- Thread pool exhaustion
- Connection pool exhaustion
- Timeout not configured
- No circuit breakers
Example:
Service A (healthy) → Service B (slow) → Service C (down)
Result: All services fail as threads waitWhy It's Bad:
- Magnifies impact of single failure
- Difficult to recover
- Affects all dependent services
- Hard to identify root cause
- Extended downtime
How to Fix:
- Circuit breaker pattern (Hystrix, Resilience4j)
- Timeouts on all external calls
- Bulkhead pattern for isolation
- Graceful degradation
- Health checks and monitoring
Patterns:
- Circuit Breaker
- Bulkhead
- Timeout
- Fallback
---
Data Management Anti-Patterns
5. Database as Integration Point
Description: Multiple services sharing the same database tables.
Symptoms:
- Services access same tables
- Schema changes affect multiple services
- Tight coupling through data
- Cannot deploy independently
- No service ownership
Example:
OrderService → Shared Database ← CustomerService
InvoiceService → (Orders, Customers) ← ShippingServiceWhy It's Bad:
- Tight coupling defeats microservices
- Schema changes require coordination
- Cannot scale database per service needs
- No data ownership boundaries
- Transaction spanning services
How to Fix:
- Database per service pattern
- Services own their data
- API calls for cross-service data
- Event-driven data synchronization
- CQRS for read models
Pattern: Database per Service
---
6. Data Monolith
Description: Single massive database with all application data.
Symptoms:
- One database for all services
- Schema grows indefinitely
- Cannot scale independently
- Backup/restore takes hours
- Performance degradation over time
Why It's Bad:
- Scalability bottleneck
- Single point of failure
- Difficult to maintain
- Long backup/restore times
- Technology lock-in
How to Fix:
- Separate databases by bounded context
- Read replicas for read-heavy workloads
- Sharding for horizontal scaling
- Archive old data
- Different databases for different needs (SQL, NoSQL)
---
7. Shared Mutable State
Description: Multiple components sharing and modifying the same state.
Symptoms:
- Race conditions
- Data corruption
- Difficult to debug
- Unpredictable behavior
- Cannot scale horizontally
Why It's Bad:
- Concurrency issues
- Not thread-safe
- Cannot scale horizontally
- Difficult to reason about
- Bugs hard to reproduce
How to Fix:
- Immutable data structures
- Event sourcing
- Stateless services
- External session store (Redis)
- Message-based communication
---
Integration Anti-Patterns
8. God Service / API
Description: One service that does everything.
Symptoms:
- Service has 100+ endpoints
- Handles multiple business domains
- Large codebase (10K+ lines)
- Multiple teams working on it
- Frequent conflicts and deployments
Why It's Bad:
- Violates Single Responsibility
- Difficult to maintain
- Cannot scale specific functions
- Deployment risk high
- Team coordination overhead
How to Fix:
- Decompose by business capability
- Extract smaller services
- Domain-Driven Design
- Clear service boundaries
- Strangler fig pattern for gradual migration
---
9. Anemic Domain Model
Description: Domain objects with no behavior, just data and getters/setters.
Symptoms:
- POJOs with only getters/setters
- Business logic in service layer
- Entities are just data containers
- No domain behavior
- Procedural programming in OO language
Example:
// Anemic
class Order {
private double total;
public double getTotal() { return total; }
public void setTotal(double total) { this.total = total; }
}
class OrderService {
public void calculateTotal(Order order, List<Item> items) {
double total = 0;
for (Item item : items) {
total += item.getPrice() * item.getQuantity();
}
order.setTotal(total);
}
}Why It's Bad:
- Not object-oriented
- Business logic scattered
- Difficult to test
- Violates encapsulation
- Procedural mindset
How to Fix - Rich Domain Model:
class Order {
private List<OrderItem> items;
private Money total;
public void addItem(Product product, int quantity) {
items.add(new OrderItem(product, quantity));
recalculateTotal();
}
private void recalculateTotal() {
total = items.stream()
.map(OrderItem::getSubtotal)
.reduce(Money.ZERO, Money::add);
}
public Money getTotal() { return total; }
}---
10. Integration Spaghetti
Description: Point-to-point integrations creating a tangled mess.
Symptoms:
- Direct service-to-service calls everywhere
- No integration layer
- Difficult to trace requests
- Each service knows about many others
- Circular dependencies
Example:
ServiceA ←→ ServiceB ←→ ServiceC
↕ ↕ ↕
ServiceD ←→ ServiceE ←→ ServiceFWhy It's Bad:
- High coupling
- Difficult to change
- Hard to understand dependencies
- Cannot add new service easily
- Testing difficult
How to Fix:
- API Gateway pattern
- Event-driven architecture
- Service mesh (Istio, Linkerd)
- Message broker (Kafka, RabbitMQ)
- Clear service boundaries
---
Design Anti-Patterns
11. Big Ball of Mud
Description: System with no recognizable structure.
Symptoms:
- No clear architecture
- High coupling everywhere
- No separation of concerns
- Spaghetti code
- "Just make it work" mentality
Why It's Bad:
- Impossible to maintain
- Difficult to understand
- Cannot scale or evolve
- High bug rate
- New features take forever
How to Fix:
- Identify bounded contexts
- Refactor toward layered architecture
- Apply SOLID principles
- Introduce clear boundaries
- Gradual improvement (boy scout rule)
---
12. Premature Optimization
Description: Optimizing before understanding actual performance issues.
Symptoms:
- Complex code for theoretical performance
- Micro-optimizations everywhere
- Caching everything
- No performance measurements
- "It might be slow" reasoning
Example:
// Premature optimization
String result = new StringBuilder()
.append("Hello")
.append(" ")
.append("World")
.toString();
// Simple is better
String result = "Hello World";Why It's Bad:
- Increased complexity
- Harder to maintain
- May not solve real problems
- Wastes development time
- "The root of all evil" - Donald Knuth
How to Fix:
- Measure first, optimize second
- Use profiling tools
- Focus on algorithmic improvements
- Keep it simple (KISS)
- Optimize bottlenecks only
---
13. Golden Hammer
Description: Using same solution/technology for all problems.
Examples:
- "Everything is a microservice"
- "Always use NoSQL"
- "Use same framework for all projects"
- "Always use Kubernetes"
Why It's Bad:
- Wrong tool for the job
- Unnecessary complexity
- Poor performance
- Higher costs
- Team frustration
How to Fix:
- Understand problem first
- Evaluate alternatives
- Choose appropriate tool
- Consider trade-offs
- Polyglot architecture when needed
---
Deployment Anti-Patterns
14. Manual Deployment
Description: Deploying software manually through UI or scripts.
Symptoms:
- Deployments take hours
- Different process for each environment
- "Works on my machine"
- Frequent deployment failures
- Manual configuration steps
Why It's Bad:
- Error-prone
- Not reproducible
- Time-consuming
- Risky
- Cannot deploy frequently
How to Fix:
- CI/CD pipeline automation
- Infrastructure as Code
- Containerization (Docker)
- Automated testing in pipeline
- Blue-green or canary deployments
---
15. Shared Development Database
Description: All developers sharing single database instance.
Symptoms:
- Cannot test locally
- Conflicts with other developers
- Schema changes affect everyone
- Cannot reproduce bugs
- Test data pollution
Why It's Bad:
- Development slowdown
- Cannot work offline
- Difficult to test
- Data inconsistency
- Lack of isolation
How to Fix:
- Local database per developer
- Database migration scripts (Flyway, Liquibase)
- Docker for local databases
- Test containers
- Database seeding scripts
---
16. Configuration in Code
Description: Hardcoding configuration values.
Symptoms:
- Environment-specific values in code
- Need to rebuild for config changes
- Secrets in source control
- Different code per environment
Why It's Bad:
- Security risk (secrets exposed)
- Cannot change config without rebuild
- Different builds per environment
- Violates 12-factor app
How to Fix:
- Externalize configuration
- Environment variables
- Configuration server (Spring Cloud Config)
- Secrets manager (Vault, AWS Secrets Manager)
- 12-factor app principles
---
Anti-Pattern Detection Checklist
Use this checklist during architecture reviews:
Distributed Systems:
- [ ] Services can deploy independently?
- [ ] No shared databases between services?
- [ ] Asynchronous communication where possible?
- [ ] Circuit breakers implemented?
- [ ] No single points of failure?
Data Management:
- [ ] Each service owns its data?
- [ ] No shared mutable state?
- [ ] Appropriate database type selected?
- [ ] Data consistency model defined?
Integration:
- [ ] No point-to-point integration spaghetti?
- [ ] API Gateway or service mesh used?
- [ ] Services not chatty?
- [ ] Bounded contexts clear?
Design:
- [ ] Clean architecture principles followed?
- [ ] Not over-engineered?
- [ ] Appropriate technology choices?
- [ ] Not premature optimization?
Deployment:
- [ ] Automated deployment?
- [ ] Configuration externalized?
- [ ] Infrastructure as Code?
- [ ] Environment parity?
---
Summary
Anti-patterns are common pitfalls that seem like good solutions but cause problems. Key takeaways:
1. Recognize anti-patterns early - easier to fix 2. Understand the "why" - learn the root cause 3. Apply patterns, not anti-patterns - know the difference 4. Context matters - what's anti-pattern in one context may be acceptable in another 5. Refactor gradually - don't try to fix everything at once
Remember: "The first rule of architecture is: don't over-architect." Keep it simple, measure, and improve based on actual needs.
API Design
☐ API contracts well-defined ☐ Versioning strategy specified ☐ Error handling standardized ☐ Rate limiting considered ☐ Authentication/authorization defined ☐ API documentation complete (OpenAPI/Swagger)
Application Security
☐ Input validation on all inputs ☐ SQL injection prevention ☐ XSS prevention ☐ CSRF protection ☐ Dependency vulnerabilities scanned ☐ Security headers configured ☐ API rate limiting ☐ OWASP Top 10 addressed
Architecture Review Process
Follow this systematic approach when conducting architecture reviews:
Phase 1: Pre-Review Preparation
1. Gather Architecture Documentation
Required Documents:
- Architecture overview and context
- Mermaid C4 diagrams (Context, Container, Component)
- Architecture Decision Records (ADRs)
- Technical specifications
- Non-functional requirements
- Technology stack documentation
- Data models and schemas
- API specifications
- Deployment diagrams (Mermaid format)
- Security architecture
Optional Documents:
- Performance test results
- Load test reports
- Security audit results
- Cost analysis
- Team skill matrix2. Understand Context
Project Context:
- Business objectives and goals
- Project constraints (budget, timeline, resources)
- Regulatory requirements
- Current system state (greenfield vs legacy)
- Team size and experience
- Timeline and milestones
Technical Context:
- Expected load and scale
- Performance requirements
- Availability targets (SLA)
- Security requirements
- Integration requirements
- Data volume and growth3. Define Review Scope
Review Focus Areas:
☐ Overall architecture style and patterns
☐ System decomposition and boundaries
☐ Technology stack appropriateness
☐ Scalability and performance
☐ Security architecture
☐ Data architecture
☐ Integration patterns
☐ Deployment architecture
☐ Monitoring and observability
☐ Cost optimization
Out of Scope:
- Implementation details
- Code review
- Project management
- Team processesPhase 2: Architecture Style Review
1. Architecture Pattern Assessment
# Architecture Pattern Review Checklist
Authentication & Authorization
☐ Authentication mechanism appropriate (OAuth, JWT, etc.) ☐ Multi-factor authentication considered ☐ Authorization model defined (RBAC, ABAC) ☐ Token management secure ☐ Session management secure ☐ Password policies enforced
Best Practices for Architecture Reviews
1. Be Objective
- Focus on design, not people
- Use data and evidence
- Avoid personal preferences
- Consider context and constraints
2. Be Constructive
- Provide alternatives, not just criticism
- Explain the "why" behind recommendations
- Acknowledge good decisions
- Focus on high-impact issues
3. Be Thorough
- Review all aspects systematically
- Check against requirements
- Consider long-term implications
- Document all findings
4. Be Clear
- Use clear, specific language
- Provide examples
- Prioritize findings
- Make recommendations actionable
5. Consider Context
- Understand business constraints
- Consider team capabilities
- Factor in timeline pressures
- Balance perfection with pragmatism
Caching Strategy
☐ Cache layers identified ☐ Cache invalidation strategy ☐ Cache eviction policies ☐ Cache warming strategy ☐ Distributed caching for stateless
Common Patterns to Validate
Monolithic Architecture
☐ Justified for project size and complexity ☐ Modularization strategy defined ☐ Scaling strategy documented ☐ Migration path considered (if applicable)
Microservices Architecture
☐ Service boundaries follow business domains ☐ Services are independently deployable ☐ Database per service enforced ☐ Service communication patterns defined ☐ Service discovery mechanism specified ☐ Circuit breakers and resilience patterns included ☐ Distributed tracing implemented ☐ Saga pattern for transactions (if needed)
Event-Driven Architecture
☐ Event schemas defined ☐ Event sourcing strategy documented ☐ Event ordering guarantees defined ☐ Dead letter queue handling specified ☐ Event replay capability considered ☐ Message broker selected appropriately
Serverless Architecture
☐ Function boundaries appropriate ☐ Cold start impact assessed ☐ Stateless design enforced ☐ Vendor lock-in considerations documented ☐ Cost model validated
Layered Architecture
☐ Layer responsibilities clearly defined ☐ Layer dependencies unidirectional ☐ Cross-cutting concerns addressed ☐ Layer coupling minimized
**2. Design Principles Assessment**
Design Principles Checklist
Cost Analysis
Estimated Monthly Costs
| Component | Cost | Notes |
|---|---|---|
| Compute | $X | [Details] |
| Database | $X | [Details] |
| Storage | $X | [Details] |
| Network | $X | [Details] |
| Total | $X |
Cost Optimization Opportunities
- [Opportunity 1]: Potential savings of $X/month
---
Data Consistency
☐ Consistency model defined (strong vs eventual) ☐ Transaction boundaries clear ☐ Distributed transaction handling ☐ Conflict resolution strategy ☐ Data synchronization approach
Data Management
☐ Data ownership clearly defined ☐ Database per service (if microservices) ☐ Data consistency strategy defined ☐ Caching strategy documented ☐ Data migration plan specified
**2. Integration Patterns**
Integration Review Checklist
Data Scalability
☐ Database sharding strategy ☐ Partitioning approach defined ☐ Archive/purge strategy for old data ☐ Read/write separation (CQRS)
Data Storage Strategy
☐ Hot vs cold storage defined ☐ Data retention policies ☐ Archival strategy ☐ Data purging procedures ☐ Backup and restore tested
Database Selection
☐ Database type appropriate (SQL vs NoSQL) ☐ Consistency requirements met ☐ Query patterns supported ☐ Scalability characteristics ☐ Backup and recovery features ☐ Cost implications
Disaster Recovery
☐ Backup strategy defined ☐ Backup frequency appropriate ☐ Backup testing planned ☐ Recovery Time Objective (RTO) defined ☐ Recovery Point Objective (RPO) defined ☐ DR runbooks created ☐ DR testing scheduled
External Integrations
☐ Third-party APIs properly abstracted ☐ Anti-corruption layer for legacy systems ☐ Integration resilience patterns applied ☐ API rate limits handled ☐ Webhook security implemented
## Phase 4: Quality Attributes Assessment
**1. Scalability Review**
Scalability Assessment
Fault Tolerance
☐ Single points of failure identified and addressed ☐ Graceful degradation defined ☐ Circuit breakers implemented ☐ Bulkhead pattern for isolation ☐ Retry with exponential backoff ☐ Timeout policies defined
High Availability Design
☐ Multi-AZ/multi-region deployment ☐ Load balancing configured ☐ Health checks implemented ☐ Automatic failover configured ☐ Database replication setup ☐ SLA targets defined and achievable
Horizontal Scalability
☐ Services/components stateless ☐ Session management externalized ☐ Load balancer configured ☐ Auto-scaling policies defined ☐ Database read replicas planned ☐ CDN for static content
Infrastructure Costs
☐ Compute costs estimated ☐ Storage costs calculated ☐ Network/bandwidth costs ☐ Database costs projected ☐ Third-party service costs ☐ Cost optimization strategies identified
Infrastructure
☐ Environment strategy (dev, staging, prod) ☐ Infrastructure as Code (Terraform, CloudFormation) ☐ Resource provisioning automated ☐ Configuration management ☐ Secrets management
Monitoring & Observability
☐ Logging strategy defined ☐ Metrics collection configured ☐ Distributed tracing implemented ☐ Alerting rules defined ☐ Dashboards for key metrics ☐ On-call procedures documented
**4. Maintainability Assessment**
Maintainability Review
Operational Readiness
☐ Monitoring configured ☐ Logging centralized ☐ Alerting rules defined ☐ Incident response procedures ☐ Escalation paths documented ☐ On-call rotation defined
## Phase 8: Cost and Performance Review
**1. Cost Analysis**
Cost Review
Quality Attributes Assessment Guide
Comprehensive guide for assessing non-functional requirements and quality attributes in software architecture.
Overview
Quality attributes (also called non-functional requirements) are critical properties that determine system success beyond basic functionality. This guide provides methods to assess and validate these attributes.
Key Quality Attributes
1. Scalability
Definition: Ability to handle increased load without performance degradation.
Assessment Criteria:
Horizontal Scalability
- Can services/components be replicated?
- Is session state externalized?
- Are services stateless?
- Is load balancing configured?
- Are auto-scaling policies defined?
- Can database handle increased connections?
Vertical Scalability
- What are resource limits?
- Can resources be upgraded easily?
- What's the maximum single-instance capacity?
- Is there a vertical scaling ceiling?
Data Scalability
- Is database sharding planned?
- Are read replicas configured?
- Is partitioning strategy defined?
- How is data distributed?
- What's the archive/purge strategy?
Assessment Questions:
1. What's the current load capacity? 2. What's the expected growth (users, data, transactions)? 3. How will the system scale to 10x, 100x current load? 4. What components are scaling bottlenecks? 5. What's the cost of scaling?
Evaluation Metrics:
- Concurrent users supported
- Requests per second
- Database transactions per second
- Data storage growth rate
- Network bandwidth utilization
Red Flags:
- Single monolithic deployment
- Shared database with no replication
- No load balancing
- Stateful services without session management
- No auto-scaling configuration
- Database with no sharding strategy
Recommendations:
- Implement horizontal scaling with load balancers
- Externalize session state (Redis, database)
- Use database read replicas
- Implement caching layers
- Plan for database sharding
- Configure auto-scaling policies
---
2. Performance
Definition: System responsiveness measured by latency, throughput, and resource utilization.
Assessment Criteria:
Response Time
- Target latency defined (p50, p95, p99)?
- API response time acceptable?
- Database query performance?
- Page load time metrics?
- Time to first byte (TTFB)?
Throughput
- Requests per second target?
- Transaction processing rate?
- Data transfer rates?
- Concurrent operations?
Resource Utilization
- CPU utilization under load?
- Memory usage patterns?
- Network bandwidth usage?
- Disk I/O performance?
Assessment Questions:
1. What are response time requirements (p50, p95, p99)? 2. What's the expected throughput (requests/second)? 3. Have performance tests been conducted? 4. What are current bottlenecks? 5. What's the performance budget?
Evaluation Metrics:
- Average response time
- p95/p99 response time
- Requests per second
- Error rate
- CPU/Memory utilization
- Database query time
- Cache hit ratio
Red Flags:
- No performance requirements defined
- No performance testing planned
- N+1 query problems
- No caching strategy
- Synchronous processing for long operations
- No database indexing strategy
- Large API payloads without pagination
Optimization Strategies:
Application Level:
- Database query optimization
- Connection pooling
- Asynchronous processing
- Batch operations
- Lazy loading
Caching:
- Application-level caching (Redis, Memcached)
- Database query caching
- CDN for static content
- Browser caching
- HTTP caching headers
Database:
- Index frequently queried columns
- Query optimization
- Read replicas
- Connection pooling
- Query result caching
Network:
- Compression (gzip, brotli)
- CDN for global distribution
- HTTP/2 or HTTP/3
- Keep-alive connections
- Minimize API calls
---
3. Security
Definition: Protection of system and data from unauthorized access, attacks, and breaches.
Assessment Criteria:
Authentication
- Strong authentication mechanism?
- Multi-factor authentication supported?
- Password policies enforced?
- Session management secure?
- Token expiration configured?
Authorization
- Access control model defined (RBAC, ABAC)?
- Least privilege principle applied?
- Authorization checked consistently?
- Privilege escalation prevented?
Data Protection
- Encryption at rest for sensitive data?
- Encryption in transit (TLS 1.2+)?
- Key management strategy?
- Secrets management (Vault, KMS)?
- Data masking for non-production?
Application Security
- Input validation comprehensive?
- SQL injection prevented?
- XSS prevention implemented?
- CSRF tokens used?
- Security headers configured?
- Dependency vulnerabilities scanned?
Assessment Questions:
1. What are security requirements? 2. What compliance standards apply (GDPR, HIPAA, PCI-DSS)? 3. How is sensitive data protected? 4. What authentication/authorization is used? 5. Have security audits been performed? 6. Is OWASP Top 10 addressed?
Evaluation Metrics:
- Authentication failure rate
- Authorization denial rate
- Vulnerability scan results
- Penetration test findings
- Compliance audit results
- Security incident count
Red Flags:
- No authentication for APIs
- Weak password policies
- No encryption for sensitive data
- SQL injection vulnerabilities
- Secrets in source code
- No input validation
- Admin access not protected by MFA
- No security testing planned
Security Controls:
Preventive Controls:
- Authentication and authorization
- Input validation
- Output encoding
- Encryption
- Network security (firewalls, security groups)
- Secrets management
Detective Controls:
- Logging and monitoring
- Intrusion detection
- Security scanning (SAST, DAST)
- Audit trails
Corrective Controls:
- Incident response plan
- Patch management
- Backup and recovery
---
4. Reliability
Definition: Ability to function correctly and consistently under stated conditions.
Assessment Criteria:
Fault Tolerance
- Single points of failure identified and mitigated?
- Redundancy for critical components?
- Graceful degradation designed?
- Circuit breakers implemented?
- Retry logic with exponential backoff?
Error Handling
- Comprehensive error handling?
- Transient failures handled?
- Error logging appropriate?
- User-friendly error messages?
Data Integrity
- ACID transactions where needed?
- Data validation at boundaries?
- Referential integrity enforced?
- Idempotency for operations?
- Data corruption prevention?
Assessment Questions:
1. What's the acceptable error rate? 2. How are failures detected and handled? 3. What's the mean time between failures (MTBF)? 4. What's the mean time to recovery (MTTR)? 5. Are there single points of failure?
Evaluation Metrics:
- Uptime percentage
- Error rate
- Mean time between failures (MTBF)
- Mean time to recovery (MTTR)
- Failed transaction rate
Red Flags:
- Single points of failure
- No redundancy for critical components
- No error handling strategy
- No health checks
- No automated recovery
- No testing for failure scenarios
Reliability Patterns:
- Circuit Breaker: Prevent cascading failures
- Retry: Handle transient failures
- Timeout: Prevent hanging operations
- Bulkhead: Isolate failures
- Health Check: Detect failures early
- Graceful Degradation: Maintain partial functionality
---
5. Availability
Definition: Proportion of time system is operational and accessible.
Assessment Criteria:
High Availability Design
- Multi-AZ or multi-region deployment?
- Load balancing configured?
- Health checks implemented?
- Automatic failover setup?
- Database replication configured?
- Zero-downtime deployment capability?
Disaster Recovery
- Backup strategy defined?
- RTO (Recovery Time Objective) defined?
- RPO (Recovery Point Objective) defined?
- DR testing scheduled?
- Runbooks for recovery scenarios?
Assessment Questions:
1. What's the availability target (99.9%, 99.99%)? 2. What's the planned vs unplanned downtime? 3. What's the disaster recovery strategy? 4. What's the RTO and RPO? 5. How is high availability achieved?
Availability Targets:
- 99% = 3.65 days downtime/year
- 99.9% (3 nines) = 8.76 hours downtime/year
- 99.99% (4 nines) = 52.56 minutes downtime/year
- 99.999% (5 nines) = 5.26 minutes downtime/year
Evaluation Metrics:
- Uptime percentage
- Scheduled downtime
- Unscheduled downtime
- Time to failover
- RTO and RPO actual vs target
Red Flags:
- Single data center deployment
- No load balancing
- No automated failover
- No DR plan
- No backup testing
- Long deployment downtime
High Availability Strategies:
Active-Passive: Primary with standby failover
- Cost: Moderate
- Complexity: Low
- RTO: Minutes to hours
- Use: Cost-sensitive, acceptable downtime
Active-Active: Multiple active instances
- Cost: Higher
- Complexity: Medium
- RTO: Seconds to minutes
- Use: High availability requirements
Multi-Region: Geographically distributed
- Cost: Highest
- Complexity: High
- RTO: Minimal
- Use: Global applications, disaster recovery
---
6. Maintainability
Definition: Ease with which system can be modified to fix defects, improve performance, or adapt.
Assessment Criteria:
Code Quality
- Clean code principles followed?
- Design patterns used appropriately?
- Code duplication minimized?
- Complexity manageable?
- Technical debt tracked?
Modularity
- Separation of concerns applied?
- Low coupling between modules?
- High cohesion within modules?
- Clear interfaces?
- Dependency injection used?
Documentation
- Architecture documentation complete?
- API documentation available?
- Code comments for complex logic?
- README files comprehensive?
- Runbooks for operations?
Testability
- Unit test coverage adequate?
- Integration tests defined?
- Mocking/stubbing possible?
- Test data management?
Assessment Questions:
1. How long does it take to onboard new developers? 2. How easy is it to add new features? 3. How easy is it to fix bugs? 4. What's the test coverage? 5. Is technical debt tracked?
Evaluation Metrics:
- Code complexity (cyclomatic complexity)
- Code duplication percentage
- Test coverage percentage
- Documentation completeness
- Time to implement changes
- Bug fix time
Red Flags:
- God classes/services
- High coupling
- No tests
- Poor documentation
- Complex code with no comments
- Frequent regression bugs
Maintainability Practices:
- SOLID principles
- Clean Architecture
- Comprehensive testing
- Continuous refactoring
- Code reviews
- Documentation as code
- Technical debt management
---
7. Testability
Definition: Ease with which system can be tested to validate correctness.
Assessment Criteria:
Test Strategy
- Testing pyramid defined (unit, integration, E2E)?
- Test automation planned?
- Test data strategy?
- Mocking strategy?
Test Coverage
- Unit test coverage target?
- Integration test coverage?
- E2E test coverage?
- Critical paths tested?
Test Infrastructure
- CI/CD with automated tests?
- Test environments available?
- Test data generation?
- Performance testing tools?
Assessment Questions:
1. What's the testing strategy? 2. What's the test coverage target? 3. Are tests automated? 4. How long do tests take to run? 5. Are tests reliable (not flaky)?
Evaluation Metrics:
- Code coverage percentage
- Test execution time
- Test failure rate
- Flaky test percentage
- Defect escape rate
Testing Levels:
Unit Tests (70% of tests)
- Fast (<1ms each)
- Isolated (mocked dependencies)
- High coverage of business logic
- Run on every commit
Integration Tests (20% of tests)
- Test component interactions
- Use real database/services where possible
- Slower (<100ms each)
- Run on every commit
E2E Tests (10% of tests)
- Test critical user journeys
- Use production-like environment
- Slowest (<10 seconds each)
- Run before deployment
---
8. Observability
Definition: Ability to understand system internal state from external outputs.
Assessment Criteria:
Logging
- Structured logging implemented?
- Log levels used appropriately?
- Sensitive data not logged?
- Centralized logging (ELK, Splunk)?
- Log retention policy defined?
Metrics
- Key metrics identified?
- Metrics collection automated?
- Dashboards for visualization?
- Alerting configured?
- SLI/SLO defined?
Tracing
- Distributed tracing implemented?
- Correlation IDs used?
- Request path visible?
- Performance profiling available?
Assessment Questions:
1. How do you detect issues? 2. How do you debug problems? 3. What metrics are tracked? 4. Are logs centralized? 5. Is distributed tracing implemented?
Evaluation Metrics:
- Mean time to detect (MTTD)
- Mean time to resolve (MTTR)
- Alert noise ratio
- Dashboard coverage
- Trace sampling rate
Three Pillars of Observability:
Logs: What happened?
- Structured logging (JSON)
- Log levels (ERROR, WARN, INFO, DEBUG)
- Correlation IDs
- Centralized aggregation
Metrics: How much/many?
- RED: Rate, Errors, Duration
- USE: Utilization, Saturation, Errors
- Business metrics
- Infrastructure metrics
Traces: Where is time spent?
- Request flow visualization
- Performance bottleneck identification
- Dependency mapping
- Error propagation tracking
---
Quality Attribute Trade-offs
Architecture is about making trade-offs between quality attributes:
Performance vs Security
- Encryption adds overhead
- Authentication checks add latency
- Balance: Cache authenticated results, optimize encryption
Scalability vs Consistency
- Distributed systems: eventual consistency
- Strong consistency limits scalability
- Balance: CQRS, eventual consistency where acceptable
Availability vs Consistency (CAP Theorem)
- Can't have both under partition
- Choose based on requirements
- Balance: Multi-master replication with conflict resolution
Performance vs Maintainability
- Optimization can add complexity
- Premature optimization technical debt
- Balance: Measure first, optimize bottlenecks
Flexibility vs Simplicity
- Over-engineering for future needs
- YAGNI principle
- Balance: Simple design, extensibility points
---
Assessment Matrix
| Quality Attribute | Current State | Target State | Gap | Priority | Effort |
|---|---|---|---|---|---|
| Scalability | 1K users | 100K users | High | Critical | High |
| Performance | 500ms p95 | 200ms p95 | Medium | High | Medium |
| Security | Basic auth | OAuth + MFA | High | Critical | Medium |
| Reliability | 99% uptime | 99.9% uptime | Low | High | Low |
| Availability | Single AZ | Multi-AZ | Medium | High | Medium |
| Maintainability | Low test coverage | 80% coverage | High | Medium | High |
| Testability | Manual tests | Automated | High | High | High |
| Observability | Basic logging | Full telemetry | High | High | Medium |
---
Recommendations Template
# Quality Attributes Recommendations
## Critical Issues
### Issue: [Title]
- **Current State**: [Description]
- **Target State**: [Description]
- **Gap**: [Analysis]
- **Impact**: [Business/technical impact]
- **Recommendation**: [Detailed recommendation]
- **Effort**: [Time/resource estimate]
- **Priority**: Critical
- **Timeline**: Immediate
## High Priority Improvements
### Improvement: [Title]
- **Current State**: [Description]
- **Recommendation**: [Recommendation]
- **Benefit**: [Expected improvement]
- **Effort**: [Estimate]
- **Timeline**: Within 3 months
## Medium Priority Enhancements
[List medium priority items]
## Long-term Considerations
[List nice-to-have improvements]This guide provides a comprehensive framework for assessing quality attributes in software architecture, ensuring systems meet both functional and non-functional requirements.
Architecture Review Checklists
Comprehensive checklists for reviewing different aspects of software architecture.
Table of Contents
1. General Architecture Review 2. Microservices Review 3. Cloud Architecture Review 4. Security Architecture Review 5. Data Architecture Review 6. Performance Review 7. API Design Review
---
General Architecture Review
Architecture Documentation
- [ ] System context diagram available (C4 Level 1)
- [ ] Container diagram showing components (C4 Level 2)
- [ ] Component diagrams for complex containers (C4 Level 3)
- [ ] Sequence diagrams for key scenarios
- [ ] Deployment diagram with infrastructure
- [ ] Data flow diagrams
- [ ] Architecture Decision Records (ADRs) maintained
- [ ] Technical specifications documented
- [ ] API contracts defined (OpenAPI/Swagger)
- [ ] README files comprehensive
Requirements Alignment
- [ ] Functional requirements addressed
- [ ] Non-functional requirements defined
- [ ] Performance requirements specified (response time, throughput)
- [ ] Scalability requirements documented (concurrent users, data volume)
- [ ] Availability targets defined (SLA, uptime)
- [ ] Security requirements identified
- [ ] Compliance requirements listed
- [ ] Budget constraints considered
- [ ] Timeline constraints factored in
- [ ] Team skills assessed
Architecture Style & Patterns
- [ ] Architecture style clearly identified (monolithic, microservices, serverless, etc.)
- [ ] Architecture pattern appropriate for requirements
- [ ] Pattern advantages leveraged
- [ ] Pattern trade-offs acknowledged
- [ ] Alternative patterns evaluated
- [ ] Hybrid patterns justified if used
- [ ] Anti-patterns avoided
- [ ] Design patterns documented
System Decomposition
- [ ] Components organized logically
- [ ] Component boundaries clear
- [ ] Component responsibilities defined
- [ ] Component size appropriate
- [ ] Component coupling minimized
- [ ] Component cohesion maximized
- [ ] Reusability considered
- [ ] Dependency direction appropriate
Design Principles
- [ ] SOLID principles followed
- [ ] Separation of concerns applied
- [ ] DRY principle maintained
- [ ] KISS principle followed
- [ ] YAGNI principle applied
- [ ] Fail-fast approach used
- [ ] Defensive programming practiced
- [ ] Single point of failure avoided
Technology Stack
- [ ] Technology choices justified
- [ ] Technology maturity assessed
- [ ] Team expertise considered
- [ ] Community support available
- [ ] Long-term viability evaluated
- [ ] Licensing issues reviewed
- [ ] Vendor lock-in risks assessed
- [ ] Migration path considered
Integration & Communication
- [ ] Integration patterns defined
- [ ] Communication protocols specified
- [ ] Synchronous vs asynchronous justified
- [ ] API contracts documented
- [ ] Error handling standardized
- [ ] Retry logic defined
- [ ] Circuit breakers implemented
- [ ] Timeouts configured
Data Management
- [ ] Data ownership clear
- [ ] Data models documented
- [ ] Database selection justified
- [ ] Data consistency model defined
- [ ] Caching strategy specified
- [ ] Data migration planned
- [ ] Backup strategy defined
- [ ] Data retention policies set
Quality Attributes
- [ ] Scalability addressed
- [ ] Performance optimized
- [ ] Security designed in
- [ ] Reliability ensured
- [ ] Availability planned
- [ ] Maintainability considered
- [ ] Testability designed
- [ ] Observability included
Deployment & Operations
- [ ] Deployment strategy defined
- [ ] CI/CD pipeline configured
- [ ] Infrastructure as Code used
- [ ] Monitoring implemented
- [ ] Logging centralized
- [ ] Alerting configured
- [ ] Disaster recovery planned
- [ ] Runbooks created
---
Microservices Review
Service Design
- [ ] Services aligned with business domains (DDD)
- [ ] Services independently deployable
- [ ] Services independently scalable
- [ ] Service size appropriate (not too large/small)
- [ ] Service responsibilities clear
- [ ] Service boundaries well-defined
- [ ] Shared libraries minimized
- [ ] Service versioning strategy defined
Service Communication
- [ ] API Gateway implemented
- [ ] Service discovery mechanism configured
- [ ] Load balancing setup
- [ ] Communication patterns defined (sync/async)
- [ ] Inter-service authentication secured
- [ ] Circuit breakers implemented
- [ ] Retry policies defined
- [ ] Timeout strategies configured
- [ ] Bulkhead pattern for isolation
Data Management
- [ ] Database per service enforced
- [ ] No shared database tables
- [ ] Data consistency strategy defined (eventual vs strong)
- [ ] Saga pattern for distributed transactions
- [ ] Event sourcing considered
- [ ] CQRS applied where appropriate
- [ ] Data duplication justified
- [ ] Data synchronization strategy
Service Dependencies
- [ ] Service dependencies minimized
- [ ] Circular dependencies avoided
- [ ] Dependency graph documented
- [ ] Cascading failures prevented
- [ ] Service mesh considered (Istio, Linkerd)
- [ ] Backward compatibility maintained
- [ ] API versioning strategy
Resilience Patterns
- [ ] Circuit breaker for external calls
- [ ] Retry with exponential backoff
- [ ] Fallback mechanisms defined
- [ ] Bulkhead for resource isolation
- [ ] Health checks implemented
- [ ] Graceful degradation designed
- [ ] Chaos engineering considered
Observability
- [ ] Distributed tracing (Jaeger, Zipkin)
- [ ] Centralized logging (ELK, Splunk)
- [ ] Metrics collection (Prometheus, Grafana)
- [ ] Correlation IDs for requests
- [ ] Service mesh telemetry
- [ ] APM tools integrated
- [ ] Alerting rules defined
Deployment
- [ ] Container images optimized
- [ ] Kubernetes/orchestration configured
- [ ] Service deployment independent
- [ ] Blue-green or canary deployments
- [ ] Rollback procedures defined
- [ ] Configuration externalized
- [ ] Secrets management (Vault, KMS)
Testing Strategy
- [ ] Unit tests for each service
- [ ] Integration tests defined
- [ ] Contract testing between services
- [ ] End-to-end tests automated
- [ ] Performance testing planned
- [ ] Chaos testing considered
---
Cloud Architecture Review
Cloud Provider Selection
- [ ] Cloud provider choice justified (AWS, Azure, GCP)
- [ ] Multi-cloud strategy considered
- [ ] Vendor lock-in risks assessed
- [ ] Exit strategy defined
- [ ] Cost analysis performed
- [ ] Regional presence adequate
- [ ] Compliance requirements met
Compute Resources
- [ ] Compute type appropriate (VMs, containers, serverless)
- [ ] Auto-scaling configured
- [ ] Right-sizing performed
- [ ] Reserved instances considered
- [ ] Spot instances where appropriate
- [ ] Resource limits defined
- [ ] Cost optimization strategies
Networking
- [ ] VPC/VNet architecture designed
- [ ] Subnet segmentation appropriate
- [ ] Network security groups configured
- [ ] Private vs public subnets defined
- [ ] NAT gateway for private resources
- [ ] VPN or Direct Connect for on-premise
- [ ] Load balancer configured
- [ ] CDN for static content
Storage
- [ ] Storage type appropriate (block, file, object)
- [ ] Storage class optimized (hot, cool, archive)
- [ ] Backup strategy automated
- [ ] Replication configured
- [ ] Encryption at rest enabled
- [ ] Lifecycle policies defined
- [ ] Cost optimization applied
Managed Services
- [ ] Managed databases vs self-hosted justified
- [ ] Managed Kubernetes vs self-managed
- [ ] Managed message queues used
- [ ] Managed caching services
- [ ] Managed monitoring services
- [ ] Build vs buy decisions documented
High Availability
- [ ] Multi-AZ deployment
- [ ] Multi-region considered for critical workloads
- [ ] Availability zones utilized
- [ ] Health checks configured
- [ ] Automatic failover setup
- [ ] Load balancing across zones
Disaster Recovery
- [ ] DR strategy defined (backup, pilot light, warm standby, hot site)
- [ ] RTO (Recovery Time Objective) defined
- [ ] RPO (Recovery Point Objective) defined
- [ ] Backup frequency appropriate
- [ ] Cross-region backup replication
- [ ] DR testing scheduled
- [ ] Runbooks for DR scenarios
Security
- [ ] IAM roles and policies defined
- [ ] Least privilege principle applied
- [ ] MFA enabled for admin access
- [ ] Security groups restrictive
- [ ] Encryption in transit (TLS)
- [ ] Encryption at rest enabled
- [ ] Secrets management (AWS Secrets Manager, Azure Key Vault)
- [ ] Compliance standards met (SOC 2, ISO 27001)
Cost Optimization
- [ ] Resource tagging for cost allocation
- [ ] Cost monitoring and alerts
- [ ] Unused resources identified
- [ ] Right-sizing recommendations
- [ ] Reserved instances for predictable workloads
- [ ] Spot instances for fault-tolerant workloads
- [ ] Cost anomaly detection
- [ ] Budget tracking
Infrastructure as Code
- [ ] IaC tool selected (Terraform, CloudFormation, Pulumi)
- [ ] All infrastructure codified
- [ ] Version controlled
- [ ] Modular and reusable
- [ ] Environment parity (dev/staging/prod)
- [ ] State management secure
- [ ] CI/CD for infrastructure changes
---
Security Architecture Review
Authentication
- [ ] Authentication mechanism appropriate (OAuth 2.0, SAML, OpenID Connect)
- [ ] Multi-factor authentication (MFA) supported
- [ ] Password policies enforced
- [ ] Password hashing strong (bcrypt, Argon2)
- [ ] Account lockout policies
- [ ] Session management secure
- [ ] Token expiration configured
- [ ] Remember me functionality secure
Authorization
- [ ] Authorization model defined (RBAC, ABAC, policy-based)
- [ ] Least privilege principle applied
- [ ] Role hierarchy designed
- [ ] Permission granularity appropriate
- [ ] Authorization checked on every request
- [ ] Horizontal privilege escalation prevented
- [ ] Vertical privilege escalation prevented
Data Protection
- [ ] Sensitive data identified (PII, PHI, payment info)
- [ ] Data classification defined
- [ ] Encryption at rest for sensitive data
- [ ] Encryption in transit (TLS 1.2+)
- [ ] Key management strategy (KMS, HSM, Vault)
- [ ] Key rotation policies
- [ ] Data masking for logs and non-prod
- [ ] Secure data disposal procedures
API Security
- [ ] Authentication required for APIs
- [ ] API keys managed securely
- [ ] OAuth 2.0 for third-party access
- [ ] Rate limiting implemented
- [ ] Input validation on all inputs
- [ ] Output encoding for XSS prevention
- [ ] SQL injection prevention (parameterized queries)
- [ ] API security testing (OWASP API Top 10)
Network Security
- [ ] Network segmentation (VPC, DMZ)
- [ ] Firewall rules restrictive
- [ ] Security groups least privilege
- [ ] DDoS protection (CloudFlare, AWS Shield)
- [ ] Web Application Firewall (WAF)
- [ ] Intrusion Detection System (IDS)
- [ ] Intrusion Prevention System (IPS)
- [ ] VPN for remote access
Application Security
- [ ] Input validation comprehensive
- [ ] Output encoding applied
- [ ] CSRF tokens for state-changing operations
- [ ] XSS prevention (Content Security Policy)
- [ ] SQL injection prevention
- [ ] Command injection prevention
- [ ] Path traversal prevention
- [ ] Insecure deserialization prevented
- [ ] OWASP Top 10 addressed
Secrets Management
- [ ] No secrets in source code
- [ ] No secrets in environment variables
- [ ] Secrets in dedicated vault (HashiCorp Vault, AWS Secrets Manager)
- [ ] Secrets encrypted at rest
- [ ] Access to secrets audited
- [ ] Secret rotation policies
- [ ] Least privilege access to secrets
Logging & Monitoring
- [ ] Security events logged
- [ ] Authentication attempts logged
- [ ] Authorization failures logged
- [ ] Admin actions logged
- [ ] Logs tamper-proof
- [ ] Log retention policy defined
- [ ] SIEM integration considered
- [ ] Alerting for security events
Compliance
- [ ] GDPR compliance (if applicable)
- [ ] HIPAA compliance (if applicable)
- [ ] PCI DSS compliance (if applicable)
- [ ] SOC 2 requirements
- [ ] ISO 27001 alignment
- [ ] Data residency requirements met
- [ ] Right to be forgotten implemented
- [ ] Consent management
Vulnerability Management
- [ ] Dependency scanning automated
- [ ] Container image scanning
- [ ] SAST (Static Application Security Testing)
- [ ] DAST (Dynamic Application Security Testing)
- [ ] Penetration testing scheduled
- [ ] Vulnerability disclosure policy
- [ ] Patch management process
Incident Response
- [ ] Incident response plan documented
- [ ] Incident classification defined
- [ ] Escalation procedures clear
- [ ] Forensics capabilities
- [ ] Communication plan (internal/external)
- [ ] Post-mortem process
- [ ] Lessons learned captured
---
Data Architecture Review
Data Modeling
- [ ] Conceptual data model defined
- [ ] Logical data model documented
- [ ] Physical data model optimized
- [ ] Entity relationships clear
- [ ] Normalization level appropriate
- [ ] Denormalization justified
- [ ] Constraints defined (primary key, foreign key, unique, check)
- [ ] Indexes planned strategically
Database Selection
- [ ] Relational vs NoSQL justified
- [ ] Database type appropriate (document, key-value, column, graph)
- [ ] ACID vs BASE requirements defined
- [ ] Consistency requirements met
- [ ] Query patterns supported
- [ ] Scalability characteristics adequate
- [ ] Licensing and cost reviewed
Data Consistency
- [ ] Consistency model defined (strong, eventual, causal)
- [ ] Transaction boundaries clear
- [ ] Isolation levels appropriate
- [ ] Distributed transaction handling (Saga, 2PC)
- [ ] Conflict resolution strategy
- [ ] Data synchronization approach
- [ ] Idempotency for operations
Data Access Patterns
- [ ] Read/write ratio analyzed
- [ ] Query patterns identified
- [ ] Access patterns optimized
- [ ] CQRS considered for read-heavy
- [ ] Database per service (microservices)
- [ ] Data duplication justified
- [ ] Cache-aside pattern
Schema Management
- [ ] Schema versioning strategy
- [ ] Schema evolution approach
- [ ] Backward compatibility ensured
- [ ] Forward compatibility considered
- [ ] Migration scripts automated
- [ ] Rollback procedures defined
Data Migration
- [ ] Migration strategy defined (big bang, trickle, parallel run)
- [ ] Data validation procedures
- [ ] Data cleansing planned
- [ ] Data transformation documented
- [ ] Downtime requirements
- [ ] Rollback plan
- [ ] Post-migration verification
Data Retention & Archival
- [ ] Data retention policies defined
- [ ] Archival strategy specified
- [ ] Hot vs cold storage
- [ ] Data purging procedures
- [ ] Legal hold capabilities
- [ ] Compliance requirements met
- [ ] Cost optimization
Data Quality
- [ ] Data validation at entry points
- [ ] Data quality rules defined
- [ ] Data profiling performed
- [ ] Duplicate detection
- [ ] Data cleansing processes
- [ ] Data quality metrics tracked
- [ ] Data governance policies
Backup & Recovery
- [ ] Backup frequency appropriate
- [ ] Backup retention policy
- [ ] Full vs incremental backups
- [ ] Backup testing scheduled
- [ ] Point-in-time recovery capability
- [ ] Cross-region backup replication
- [ ] Backup encryption
- [ ] RTO and RPO targets met
Data Security & Privacy
- [ ] Sensitive data identified
- [ ] Data classification defined
- [ ] Encryption at rest
- [ ] Encryption in transit
- [ ] Field-level encryption for sensitive data
- [ ] Data masking for non-prod
- [ ] Anonymization techniques
- [ ] Access controls granular
- [ ] Audit logging for data access
- [ ] GDPR compliance (right to erasure, portability)
---
Performance Review
Performance Requirements
- [ ] Response time targets defined (p50, p95, p99)
- [ ] Throughput requirements specified (requests/sec)
- [ ] Concurrent user load defined
- [ ] Data volume projections
- [ ] Growth projections documented
- [ ] Peak load scenarios identified
- [ ] Performance SLAs defined
Application Performance
- [ ] Database query optimization
- [ ] N+1 query problem avoided
- [ ] Indexes used effectively
- [ ] Connection pooling configured
- [ ] Asynchronous processing for long operations
- [ ] Batch operations where appropriate
- [ ] Lazy loading vs eager loading optimized
- [ ] Pagination for large datasets
Caching Strategy
- [ ] Cache layers identified (browser, CDN, application, database)
- [ ] Cache-aside pattern used
- [ ] Write-through vs write-behind defined
- [ ] Cache invalidation strategy
- [ ] Cache eviction policies (LRU, LFU)
- [ ] Cache warming strategy
- [ ] Distributed caching for stateless
- [ ] Cache hit ratio monitored
Database Performance
- [ ] Indexes created on frequently queried columns
- [ ] Composite indexes for multi-column queries
- [ ] Index maintenance scheduled
- [ ] Query execution plans analyzed
- [ ] Slow query logging enabled
- [ ] Database connection pooling
- [ ] Read replicas for read-heavy workloads
- [ ] Database sharding considered for scale
- [ ] Query timeout configured
API Performance
- [ ] Response size optimized
- [ ] Pagination implemented
- [ ] Field filtering/sparse fieldsets supported (GraphQL)
- [ ] Compression enabled (gzip, brotli)
- [ ] Keep-alive connections
- [ ] HTTP/2 or HTTP/3 considered
- [ ] API response caching
- [ ] Rate limiting to prevent abuse
Frontend Performance
- [ ] Code splitting and lazy loading
- [ ] Image optimization
- [ ] Minification and bundling
- [ ] CDN for static assets
- [ ] Browser caching headers
- [ ] Service workers for offline
- [ ] Critical CSS inline
- [ ] Font loading optimized
- [ ] Third-party script impact minimized
Network Performance
- [ ] CDN for global distribution
- [ ] Load balancing configured
- [ ] Keep-alive connections
- [ ] Connection pooling
- [ ] Compression enabled
- [ ] Latency optimized (regional deployment)
- [ ] Network bandwidth adequate
Monitoring & Profiling
- [ ] APM tool integrated (New Relic, DataDog, Dynatrace)
- [ ] Performance metrics collected (response time, throughput, error rate)
- [ ] Real User Monitoring (RUM)
- [ ] Synthetic monitoring
- [ ] Profiling for bottlenecks
- [ ] Performance regression testing
- [ ] Alerting for performance degradation
Load Testing
- [ ] Load testing tools selected (JMeter, Gatling, k6)
- [ ] Realistic load scenarios defined
- [ ] Ramp-up testing
- [ ] Soak/endurance testing
- [ ] Spike testing
- [ ] Stress testing for breaking point
- [ ] Load testing in CI/CD
---
API Design Review
RESTful Design
- [ ] Resource-based URLs
- [ ] Proper HTTP verbs (GET, POST, PUT, DELETE, PATCH)
- [ ] HTTP status codes appropriate
- [ ] Idempotency for PUT and DELETE
- [ ] Stateless design
- [ ] HATEOAS considered
- [ ] Versioning strategy (URL, header, content negotiation)
- [ ] Consistent naming conventions
API Documentation
- [ ] OpenAPI/Swagger specification
- [ ] Auto-generated from code
- [ ] Request/response examples
- [ ] Error responses documented
- [ ] Authentication documented
- [ ] Rate limiting documented
- [ ] Changelog maintained
- [ ] Interactive documentation (Swagger UI)
Request/Response Design
- [ ] Request payload validation
- [ ] Response format consistent (JSON, XML)
- [ ] Pagination for collections (limit/offset or cursor)
- [ ] Filtering supported
- [ ] Sorting supported
- [ ] Field selection (sparse fieldsets)
- [ ] Nested resources appropriately
- [ ] Date/time in ISO 8601 format
Error Handling
- [ ] Standard error response format
- [ ] Error codes meaningful
- [ ] Error messages clear
- [ ] Detailed errors for 4xx (client errors)
- [ ] Generic errors for 5xx (server errors)
- [ ] Validation errors detailed
- [ ] Correlation ID in responses
- [ ] Stack traces not exposed in production
Security
- [ ] Authentication required
- [ ] OAuth 2.0 for third-party access
- [ ] API keys for simple use cases
- [ ] Input validation comprehensive
- [ ] SQL injection prevention
- [ ] Rate limiting per user/API key
- [ ] CORS configured properly
- [ ] HTTPS enforced
Versioning
- [ ] Versioning strategy defined
- [ ] Version in URL (v1, v2) or header
- [ ] Backward compatibility maintained
- [ ] Deprecation policy defined
- [ ] Sunset header for deprecated APIs
- [ ] Migration guide for breaking changes
Performance
- [ ] Response time acceptable (<200ms for simple queries)
- [ ] Caching headers appropriate
- [ ] Compression enabled
- [ ] Pagination for large collections
- [ ] Asynchronous for long operations (webhooks, polling)
- [ ] Rate limiting to prevent abuse
- [ ] Bulk operations supported
GraphQL Specific
- [ ] Schema well-designed
- [ ] Query complexity limits
- [ ] Depth limits to prevent abuse
- [ ] N+1 problem solved (DataLoader)
- [ ] Field-level authorization
- [ ] Introspection disabled in production
- [ ] Persisted queries for security
gRPC Specific
- [ ] Protobuf schemas well-defined
- [ ] Backward compatibility with schema changes
- [ ] Streaming for appropriate use cases
- [ ] Error handling with status codes
- [ ] Metadata for cross-cutting concerns
- [ ] Load balancing configured
This comprehensive set of checklists provides a structured approach to reviewing all aspects of software architecture, ensuring nothing critical is overlooked.
Review Report Template
# Architecture Design Review Report
Review Severity Levels
Critical (🔴)
- Security vulnerabilities
- Single points of failure without mitigation
- Data loss risks
- Compliance violations
- Architecture decisions that prevent meeting requirements
High (🟠)
- Significant scalability limitations
- Performance bottlenecks
- Operational complexity
- Technology choices with major drawbacks
- Missing critical non-functional requirements
Medium (🟡)
- Sub-optimal patterns
- Missing best practices
- Documentation gaps
- Technical debt
- Cost inefficiencies
Low (🟢)
- Style improvements
- Future enhancements
- Nice-to-have features
- Minor optimizations
Risk Assessment
Critical Risks
| Risk | Impact | Likelihood | Mitigation |
|---|---|---|---|
| [Risk 1] | High | High | [Mitigation] |
High Priority Risks
| Risk | Impact | Likelihood | Mitigation |
|---|---|---|---|
| [Risk 2] | High | Medium | [Mitigation] |
Medium Priority Risks
[List medium priority risks]
---
Service Boundaries (Microservices)
☐ Services align with business domains ☐ Services can be developed independently ☐ Services can be deployed independently ☐ Services can be scaled independently ☐ Service dependencies minimized ☐ Circular dependencies avoided
Testing Strategy
☐ Unit testing approach defined ☐ Integration testing planned ☐ E2E testing strategy ☐ Performance testing planned ☐ Security testing included ☐ Test coverage targets set
Related skills
FAQ
What inputs does the review expect?
C4 diagrams, ADRs, specs, data models, APIs, and deployment diagrams.
Does it check for anti-patterns?
Yes; it flags issues like distributed monoliths, god services, and chatty communication.
What is the main output?
A structured report with findings, recommendations, and documented risks.