Profiles: optional services
Some services should only start when needed: a DB GUI, a mail catcher, a debug dashboard. Tag them with a profile and Compose ignores them by default.
Override files: dev vs prod without two compose files
Compose auto-merges compose.yaml with compose.override.yaml if the override exists. Convention: base file is prod-shaped, override file is dev-tweaks (bind mounts, --reload, debug ports). Production uses -f compose.yaml -f compose.prod.yaml instead.