Unified Dev 0.12.0 entrega a junção, não as integrações
Linear e Jira chegaram na mesma release. Essa é a metade chata. A metade interessante é a decisão por baixo delas.
O Unified Dev 0.12.0 saiu hoje com 30 features, 35 correções, 8 refactors e 6 ganhos de performance. O título que vais ver é “integrações com Linear e Jira”. Não é o título que eu escreveria.
O movimento real desta release é que um tracker deixou de ser um fornecedor. Um tracker é um contrato. Linear e Jira são duas implementações do mesmo contrato. Se lançarmos Asana a seguir, a superfície do produto não muda.
Um contrato, todas as chamadas de listagem
Até à 0.12.0, a app carregava adaptadores por fornecedor. Cada novo tracker significava um módulo novo, uma camada de query nova, um passo de mapeamento novo e um conjunto de bugs novo para perseguir. O trio tinha custos reais: a UI tinha de aprender o vocabulário de cada fornecedor, o ciclo de sync tinha de tratar cada um como caso especial, e “muda de tracker” era uma linha de roadmap em que ninguém acreditava.
A 0.12.0 colapsa isso num único contrato de tracker com um conjunto de verbos: listar, criar, atualizar, fechar, comentar. Os drivers conhecem Linear e Jira. O resto da app não conhece. Listas de issues, colunas de kanban, filtros, mutações, sync e notificações leem todas a mesma forma, independentemente do fornecedor.
Os protocolos dos fornecedores saíram da codebase por completo. Vivem no omnitrack, uma crate open source que carrega GraphQL para o Linear e REST para o Jira. O Unified Dev importa-a e escreve drivers finos que traduzem os tipos do fornecedor para a nossa forma e de volta. Adicionar o próximo fornecedor é um driver, não um trimestre de trabalho.
A hierarquia é o produto
Um contrato sozinho não torna os trackers intercambiáveis. O modelo do produto tem de concordar.
A 0.12.0 remodelou a hierarquia. Uma organização tem projetos. Um projeto tem repos. Um repo tem sources. O source é o único sítio que sabe que veio de um fornecedor. Tudo acima dele é teu.
Essa última linha é o que torna uma troca gratuita. Liga um board do Jira e um repo do GitHub ao mesmo repo de projeto, e o Unified Dev trata-os como uma só superfície. Troca o board do Jira por uma equipa do Linear no mês seguinte e as tuas issues, histórico de PRs, registo de tempo e filtros não se mexem. O fornecedor mudou. O repo não.
O contra-argumento óbvio
“Porque não escrever uma app para Linear e lançá-la? O Jira tem um marketplace. O Linear tem um directório de apps. Escolhe uma via.”
O lock-in de fornecedor é uma feature para o fornecedor e um imposto para ti. Cada app por fornecedor que lanças duplica a superfície que tens de manter viva quando o fornecedor parte a API ou o cliente desaparece. O Unified Dev paga a junção uma vez. O próximo fornecedor custa um fim de semana, não um trimestre.
A linha para guardar
A 0.12.0 entrega 30 features e 35 correções. A que importa guardar é o contrato. Se o teu tracker é um contrato, a próxima integração é um fim de semana.