Как только освоил `asyncio.gather`, захотелось всё «параллелить». Наткнулся на чужой запрос к API и поймал себя: один результат помогает формировать следующий. Наивное «запустить всё сразу» тут не сработает, а понимание о зависимостях добавило ещё один верный кусок в голову.

Нейтрально: если задача B требует результата A, её нельзя пустить «вместе». Тогда либо обрабатываешь последовательно, либо сначала выполняешь общих предков, а затем B параллельно.

import asyncio

async def load_user(token): ...
async def load_posts(user_id): ...

async def main(token):
    user = await load_user(token)          # нужен сначала
    return await load_posts(user["id"])    # зависит от результата

Это «открытие» звучит умно, но на деле — обычная последовательность с паузами. Приятно видеть, как понятие ожидания и зависимостей укладывается плотнее: меньше магического «гоню всё в gather» без смысла.