# ADR Triggers Reference

## When to Create an Architectural Decision Record

### Technology Stack Decisions
- **Framework Selection**: Choosing React vs Vue vs Angular
- **Database Technology**: SQL vs NoSQL, specific database vendors
- **Programming Language**: Primary language for services
- **Infrastructure Platform**: AWS vs Azure vs GCP vs On-premise
- **Container Orchestration**: Kubernetes vs Docker Swarm vs ECS

### Architectural Patterns
- **Architecture Style**: Microservices vs Monolith vs Modular Monolith
- **API Design**: REST vs GraphQL vs gRPC
- **Event Architecture**: Event Sourcing vs Traditional State
- **Communication Patterns**: Synchronous vs Asynchronous
- **Data Patterns**: CQRS, Event Sourcing, Shared Database

### Integration Decisions
- **Authentication Method**: OAuth vs JWT vs Session-based
- **Service Communication**: Direct API vs Message Queue vs Event Bus
- **Third-party Services**: Build vs Buy decisions
- **API Gateway**: Whether to use and which one
- **External System Integration**: How to connect with legacy systems

### Data Architecture
- **Data Storage Strategy**: Centralized vs Distributed
- **Caching Strategy**: Redis vs Memcached vs In-memory
- **Data Partitioning**: Sharding strategy
- **Backup and Recovery**: Approach and tools
- **Data Privacy**: Encryption at rest/transit decisions

### Performance & Scalability
- **Scaling Strategy**: Horizontal vs Vertical
- **Load Balancing**: Algorithm and implementation
- **Performance Optimization**: Specific techniques adopted
- **Resource Limits**: Rate limiting, throttling decisions
- **CDN Strategy**: Whether to use and implementation

### Security Architecture
- **Security Framework**: Zero Trust vs Perimeter-based
- **Secrets Management**: Vault vs Cloud Provider vs Custom
- **Encryption Standards**: Which algorithms and key management
- **Access Control**: RBAC vs ABAC vs Custom
- **Compliance Requirements**: How to meet specific regulations

### Development Process
- **CI/CD Pipeline**: Tools and deployment strategy
- **Testing Strategy**: Unit vs Integration vs E2E balance
- **Code Organization**: Monorepo vs Polyrepo
- **Branching Strategy**: GitFlow vs GitHub Flow vs Trunk-based
- **Documentation Standards**: What and how to document

### Operational Decisions
- **Monitoring Strategy**: Tools and what to monitor
- **Logging Architecture**: Centralized vs Distributed
- **Alerting Strategy**: What to alert on and how
- **Disaster Recovery**: RTO/RPO decisions
- **Deployment Strategy**: Blue-Green vs Canary vs Rolling

### Cross-Cutting Concerns
- **Error Handling**: Global strategy and patterns
- **Internationalization**: Support strategy
- **Multi-tenancy**: Isolation approach
- **Feature Flags**: Implementation approach
- **Backward Compatibility**: Version strategy

## Red Flags - Always Create an ADR When:

1. **Multiple Valid Options Exist**: The team is debating between approaches
2. **Significant Cost Implications**: The decision impacts budget substantially
3. **Hard to Reverse**: Changing later would be expensive or difficult
4. **Cross-Team Impact**: Decision affects multiple teams or systems
5. **External Commitments**: Decision creates obligations to customers/partners
6. **Compliance/Regulatory**: Decision has legal or compliance implications
7. **Performance Critical**: Decision significantly impacts system performance
8. **Security Implications**: Decision affects system security posture

## When NOT to Create an ADR:

1. **Implementation Details**: How to name a variable or structure a small module
2. **Temporary Solutions**: Quick fixes that will be replaced soon
3. **Team Conventions**: Simple coding standards or naming conventions
4. **Tool Configuration**: Minor tool settings that are easily changeable
5. **Obvious Choices**: When there's only one reasonable option

## Remember:
> "If someone might ask 'Why did we do it this way?' in 6 months, you need an ADR."