Use for deeper DDD decisions: strategic modeling, subdomains, bounded contexts, and integration risk.
Use when complexity is spreading and you need a simpler model, clearer abstractions, and lower cognitive load.
Use for boundary design, dependency direction, and keeping business policy separate from technical detail.
Use for readability, naming, small functions, and readable behavior-preserving implementations.
Use for disciplined implementation decisions, defensive coding, and maintainable construction choices in real code.
Use when moving from model intent into concrete tactical patterns, events, and distributed integration choices.
Use when selecting enterprise architecture patterns and avoiding accidental anti-patterns in complex business systems.
Use for practical smell-to-refactoring choices and explicit safety planning in difficult code paths.