Use when structuring a system with several stages, inputs, or outputs (compilers, transpilers, ETL, ingest-analyze-report), when logic is leaking into thin wrappers, or when the same types are declared in more than one place.