TIL: asyncio.TaskGroup in Python 3.11+ gives you structured concurrency for free. Spin up multiple async tasks together - if one fails, the rest get cancelled automatically, and exceptions surface as a single ExceptionGroup instead of leaving orphaned tasks hanging around.
Cleaner than asyncio.gather() plus manual error juggling, especially when you're fanning out concurrent calls (DB query + external API, etc.) and want sane cancellation behavior.