Spark · easy · ~10 min
Two jobs, two opposite diseases. Job A aggregates a 2TB shuffle with the default 200 shuffle partitions — tasks average 10GB each, spill constantly, and some OOM. Job B processes 3GB of data with a hand-set 40,000 partitions — 75KB per task, and the runtime is dominated by scheduling overhead.
Fix both with one principle.