Escolhi Prefect 3 para orquestrar uma plataforma privada de dados de mercado e estratégias. O workload mistura agendas fixas, backfills parametrizados, child flows, cálculos longos e operações manuais. A implementação é majoritariamente Python, e muitos workflows precisam ser acionados por outras ferramentas, além de executados como deployments ou funções comuns em testes.

Por que Prefect se encaixa

Prefect mantém a orquestração próxima de Python normal. Isso importa quando as mesmas funções de domínio atendem uma ingestão diária, um backfill histórico limitado e uma correção ad hoc. Parâmetros, ramificações e composição permanecem diretos, sem forçar tudo para o formato de um DAG estático.

Desenvolvimento rápido: funções Python ganham tarefas, retentativas e observabilidade sem uma reescrita completa.
Execução dinâmica: o workflow deriva símbolos, datas e child deployments em tempo de execução.
Integração com ferramentas: APIs e deployments permitem que aplicações e workflows assistidos por IA acionem exatamente o flow necessário.
Agenda e ad hoc: o mesmo flow roda agendado ou com parâmetros explícitos.
Custo e footprint: nesta escala, a plataforma opera com menos infraestrutura e recursos dedicados.

Por que não escolher Airflow automaticamente?

Airflow é excelente quando a organização precisa de um ecossistema maduro, muitos operadores, ownership visível de DAGs e um padrão conhecido por várias equipes. Seu modelo centrado no scheduler é uma força para grandes conjuntos de dependências batch regulares.

Essas não eram as restrições dominantes. Esta plataforma é mantida como um produto Python, possui muitos workflows parametrizados e disparados externamente, e evolui rapidamente entre ingestão, analytics e estratégias. Prefect ofereceu desenvolvimento mais rápido, maior flexibilidade de execução e menor carga de infraestrutura.

Os trade-offs são reais

Escolher Prefect não elimina trabalho operacional. O control plane exige ajuste de recursos. Catch-up do scheduler e concorrência precisam de limites deliberados. Airflow continua com ecossistema e mercado de talentos maiores.

Se a plataforma crescesse para centenas de equipes compartilhando milhares de DAGs batch majoritariamente estáticos, ou dependesse muito de operadores e governança já padronizados em Airflow, eu reavaliaria. Decisões arquiteturais devem expirar quando suas premissas expirarem.

O orquestrador não fornece confiabilidade sozinho

Dados de mercado são imperfeitos: provedores atrasam, instrumentos são ilíquidos, calendários diferem e históricos são republicados. A plataforma adiciona políticas explícitas:

Flow resiliente simplificado
@flow(timeout_seconds=politica.limite)
def ingerir_dados(data_alvo=None):
    data = resolver_dia_util(data_alvo)
    simbolos = executar(buscar_simbolos, politica.busca)
    precos = executar_em_paralelo(buscar_precos, simbolos)
    cobertura = validar(precos, data)
    if not cobertura.aceitavel:
        raise DadosIncompletos(cobertura)
    finalizar_atomicamente(data, precos, procedencia=True)

A decisão em uma frase

Prefect se encaixa porque acelera o desenvolvimento de uma aplicação Python dinâmica, integra-se às outras ferramentas operacionais e atende o workload com uma infraestrutura menor.

Airflow continua sendo uma alternativa forte. A decisão sênior não é lealdade a uma ferramenta; é compreender o workload o suficiente para explicar o encaixe, o custo e a condição que levaria a uma mudança.