| Web API with distinct features | Vertical Slice Architecture | Each feature is self-contained |
| Complex read vs write models | VSA + CQRS variant | Separates command and query paths within a slice |
| Large API, team-per-feature | VSA workspace layout | Compile-time boundaries, independent deps |
| Terminal UI with interactive views | TUI component-based (Ratatui) | Each component owns state, rendering, input |
| TUI app with business logic / data layers | TUI components + vertical slices | Feature slices own their components, services, and models |
| Feature needs data from another | Cross-slice communication | Pick the lightest strategy that works |
| Custom request validation | Axum extractor (FromRequestParts) | Compile-time enforced, reusable across handlers |
| Per-request context (user, tenant, correlation ID) | RequestContext extractor | Single struct, extracted once, threaded through layers |
| Simple middleware (logging, auth) | axum::middleware::from_fn | Minimal boilerplate, async-friendly |
| Middleware ordering | outermost = first executed | CORS and tracing before auth, auth before handlers |
| Shared state (DB pool, config) | State<AppState> with FromRef | Compile-time checked, no runtime downcasting |
| Route-specific auth | .route_layer(middleware::from_fn(require_auth)) | Protects only routes in that group |
| Request/response transformation | Tower Layer implementation | Full control over Service wrapping |
| Project has < 10 source files | Don't architect — flat structure | See rust-quality → Quick Decisions |