O kanban é a memória compartilhada dos agents
Quando muitos agents trabalham ao mesmo tempo, o board deixa de ser uma reflexão tardia humana e vira o único lugar onde eles concordam sobre o que é verdade.
Apollo Space Research
Apollo Space
Dois agents pegam a mesma task no mesmo segundo. Nenhum sabe que o outro existe. Um escreve uma migration de banco de dados; o outro escreve uma conflitante. Ambos rodam seus testes, ambos veem verde, ambos reportam sucesso. Vinte minutos depois a branch não sobe, e a única resposta honesta para o que aconteceu é: ninguém estava segurando a verdade.
Essa falha tem um nome chato. É um problema de coordenação, e não tem nada a ver com quão espertos os agents são.
Quando você roda um agent, o estado do trabalho vive na cabeça dele e tudo bem. Quando você roda dez, o estado do trabalho tem que viver em algum lugar que todos os dez possam ver, ou eles se atropelam. O board é onde os agents concordam sobre o que é verdade. Não um gráfico que você lê depois do fato, a memória de trabalho que eles compartilham enquanto trabalham.
A versão ingênua: cada agent lembra da própria task
O jeito óbvio de rodar uma frota de agents é dar a cada um uma task e deixá-lo lembrar do próprio progresso. O Agent A segura “estou construindo a feature de export”. O Agent B segura “estou consertando o bug do login”. Cada um mantém seu plano, seu passo atual e seu senso de pronto dentro do próprio contexto. Limpo, simples, e funciona exatamente até dois agents precisarem saber da mesma coisa.
No momento em que isso acontece, o modelo quebra, e quebra silenciosamente. Não há lugar compartilhado para checar se uma task já foi reivindicada, então dois agents a reivindicam. Não há lugar compartilhado para ver que um terceiro agent está no meio do arquivo que você está prestes a reescrever, então você o reescreve. A memória de cada agent é perfeitamente correta sobre a própria fatia e completamente cega para a de todos os outros. A cegueira é o bug.
Você sente isso do mesmo jeito que um time sem um board sente. Duas pessoas constroem a mesma coisa porque nenhuma soube que a outra começou. Um handoff cai porque a pessoa que terminou o passo um nunca disse à pessoa esperando o passo dois. O trabalho que caiu não era difícil, era só invisível para quem poderia tê-lo pego. Memória privada escala para exatamente um trabalhador. Adicione um segundo e as rachaduras estão entre eles, no espaço que nenhuma memória sozinha cobre.
O instinto é consertar isso com mais conversa. Deixe os agents mandarem mensagem uns aos outros: “ei, você está na task de export?” Isso ajuda para três agents e colapsa em trinta. Agora todo agent tem que transmitir todo movimento para todo outro agent e lembrar do que todos disseram, e o custo de coordenação cresce mais rápido que o trabalho. O gargalo nunca desaparece. Ele só se move para a tagarelice.
O fix: ponha a verdade fora da cabeça de cada agent
Aqui está a ideia-chave, e é simples. O estado do trabalho não deveria viver dentro de nenhum agent. Deveria viver num lugar fora de todos eles, que todo agent lê antes de agir e escreve depois de agir. Esse lugar é o board.
Um board é só tasks com um status, backlog, em progresso, em review, done, e um dono. A gente tende a pensar nessas colunas como uma conveniência humana, um jeito de dar uma olhada numa parede de post-its e se sentir orientado. Isso subestima elas. As colunas são uma estrutura de dados compartilhada, e o status de um card é um fato com que todo agent pode contar sem perguntar a ninguém.
Veja o que isso te compra. Antes de um agent começar o trabalho, ele não manda mensagem a ninguém, ele move o card para em progresso e carimba o nome dele nele. Esse único write é uma reivindicação. O próximo agent que alcança o mesmo card vê que está tomado e vai para outro lugar. O handoff não é uma mensagem que pode ser perdida; é um card sentado na coluna em review, que é um fato, que não expira quando ninguém está ouvindo. O board é onde os agents concordam sobre o que é verdade, e porque o acordo é uma linha num store compartilhado em vez de uma memória na cabeça de alguém, ele sobrevive ao agent esquecer, crashar ou terminar.
O reframe vale dizer de forma simples: status nunca foi um report. É um primitivo de coordenação. Um kanban humano por acaso também é legível por humanos, o que é adorável, mas o trabalho load-bearing do status de um card é deixar muitos trabalhadores agirem sobre uma verdade compartilhada sem colidir. Nós só pegamos os trabalhadores e tornamos a maioria deles software.
Por que a reivindicação tem que ser atômica
Há uma versão mais suave dessa ideia que quase funciona, e vale matá-la com cuidado, porque é a que um engenheiro cuidadoso busca em segundo lugar.
A versão suave é: deixe cada agent checar o board antes de começar. O agent lê o card, vê backlog, decide que está livre, começa a trabalhar. Razoável. Mas leia o que acontece quando dois agents checam no mesmo instante. Ambos leem backlog. Ambos veem que está livre. Ambos começam. O check passou para ambos porque o gap entre ler o status e escrever a reivindicação é uma janela, e nessa janela dois agents podem cada um acreditar que venceu a corrida.
Esse é o mesmo risco que mordeu as duas migrations no topo deste post. Um check que não é fundido à reivindicação é um check que mente sob carga. O board não só precisa de uma coluna de status, ele precisa que a reivindicação seja uma operação única e indivisível: se este card ainda está sem dono, marque-o como meu, caso contrário me diga que perdi. Um vencedor, e o perdedor descobre instantaneamente em vez de descobrir vinte minutos depois numa build quebrada.
Então o board faz a arbitragem que os agents não conseguem fazer por si mesmos. Dois agents correm por um card; o store entrega o card a exatamente um e retorna uma recusa educada ao outro. O perdedor não fica de bico e não colide, ele lê o board de novo e pega a próxima coisa livre. Nenhum agent teve que saber que o outro existia. A verdade compartilhada resolveu o conflito, que é o ponto inteiro de pôr a verdade fora das cabeças deles.
A mesma disciplina cobre os estados mais bagunçados. Um card feito pela metade por um agent que crashou não deveria ficar em progresso para sempre, reivindicado por um fantasma. Então a reivindicação carrega um heartbeat: um agent segurando um card tem que continuar dizendo ainda nisso, e um card cujo dono ficou em silêncio além de um limite volta para o pool para outra pessoa pegar. O board não é só onde o trabalho é registrado. É onde trabalho travado é notado e reatribuído, que é exatamente o trabalho que um bom líder de operações faz para um time de pessoas, tornado mecânico.
O card é a conversa, não um rótulo nela
Agora a parte que transforma um board de um truque de coordenação em memória compartilhada de verdade.
Um card não é só um status. É o lugar onde o trabalho se acumula. A decisão que um agent tomou e por quê. O arquivo que ele tocou. O teste que rodou e o resultado. A objeção que um reviewer levantou. A pergunta que o está bloqueando. Numa frota de memória privada, tudo isso vive dentro de qualquer agent que fez o passo, e morre quando o turno daquele agent termina. Num card, está escrito onde o próximo agent, ou o próximo tipo de agent, pode ler.
É isso que deixa um agent diferente terminar o que outro começou sem uma call frenética de atualização. Imagine um card que viajou três colunas. Um agent de planejamento decompôs o trabalho e deixou o plano no card. Um escritor implementou dois dos três passos e anotou no card exatamente onde parou e por que o terceiro foi mais difícil que o esperado. Agora um agent novo, talvez um mais forte para a parte complicada, abre o card e o histórico inteiro está bem ali: o plano, o que está feito, o obstáculo, a razão. Ele não reconstrói o contexto do zero. Ele lê o card do jeito que um bom engenheiro lê os comentários numa thread antes de responder.
O contraste com o chat é nítido. Uma conversa é ordenada por tempo e espalhada por quem quer que estivesse falando; para aprender o estado de uma task a partir de um log de chat você tem que ler tudo e reconstruí-lo na sua cabeça. Um card é ordenado pela task. Tudo sobre este trabalho está em este lugar, e o estado atual é o topo da coluna, não o fundo de uma thread. Chat é como os agents fofocam. O card é como eles concordam.
Essa distinção é por que “deixe os agents mandarem mensagem uns aos outros” foi um beco sem saída. Mensagens são sobre quem disse o quê. O board é sobre o que é verdade agora. Quando você quer muitos trabalhadores agindo sobre a mesma realidade, você não quer um jeito mais rápido de conversar. Você quer um único artefato em que todos confiam mais do que confiam na própria memória.
O que isso compra, e o custo honesto
A contabilidade honesta: isso não é de graça, e não é mágica.
Custa um write antes de toda ação e um read antes de toda reivindicação. Todo agent tem que ser disciplinado o suficiente para mover o card antes de trabalhar e atualizar o card depois, em vez de avançar com a verdade presa no próprio contexto. Essa disciplina é o imposto, e é um real, um agent que “sabe” que está pronto mas nunca moveu o card não fez nada, no que diz respeito ao resto da frota. Tratamos isso como uma feature, não um bug. Se não está no board, não aconteceu, do mesmo jeito que uma feature sem commit não shipou.
O que isso compra é a coisa que memória privada nunca pode te dar: muitos trabalhadores agindo sobre uma verdade sem colidir, e sem um humano no meio repassando status. A reivindicação é atômica, então dois agents não podem pegar o mesmo trabalho. O histórico vive no card, então qualquer agent pode pegar onde outro parou. O heartbeat pega os travamentos, então um trabalhador que crashou não congela uma lane. Nada disso vive dentro de nenhum agent. Tudo vive no board, que é exatamente por que sobrevive a qualquer agent falhando.
O board escala do jeito que uma memória privada nunca poderia, não porque os agents ficaram mais espertos, mas porque a verdade saiu das cabeças deles e foi para um lugar que todos compartilham.
A virada: seu status sempre foi para as máquinas
Tire os agents e há uma lição mais antiga sentada por baixo.
Por anos preenchemos boards como uma tarefa chata, uma coisa que você atualizava para um gestor poder ler, um imposto sobre o trabalho de verdade, a reunião onde todo mundo recita o que o card já diz. Dissemos a nós mesmos que o status era para os humanos, e ressentíamos mantê-lo. Tínhamos isso ao contrário. Status nunca foi papelada sobre o trabalho. Era a camada de coordenação que deixa muitas pessoas puxarem na mesma direção sem tropeçarem umas nas outras, e o tratávamos como reflexão tardia porque, quando os trabalhadores eram humanos lentos na mesma sala, você conseguia coordenar mais ou menos conversando.
Você não consegue conversar através de uma frota de agents trabalhando em paralelo na velocidade de máquina. Não há espaço para perguntar por aí, nenhum corredor para esbarrar em alguém. A única coisa que escala é um lugar compartilhado que segura a verdade e arbitra os conflitos, e a parte engraçada é que a estrutura que vínhamos construindo o tempo todo, o humilde board com suas colunas, acaba sendo exatamente isso. Estávamos mantendo um primitivo de coordenação e o chamando de report.
Então a coluna de status não é mais uma cortesia. É a memória de trabalho de uma força de trabalho que nunca senta numa sala. O card é onde os agents concordam sobre o que é verdade, e uma vez que você vê assim, você para de pedir que seu time atualize o board para você, e começa a tratar o board como a coisa que deixa o trabalho acontecer, para começo de conversa.
Essa é parte do que estamos construindo na Apollo Space, um company brain onde o board não é uma parede que você confere na segunda, mas a memória compartilhada que uma frota de agents lê e escreve a cada segundo. Se você já viu um handoff cair porque a verdade vivia na cabeça de uma pessoa, você já sabe por que o artefato mais importante não é nenhum trabalhador sozinho. É o único lugar onde todos eles concordam.
A Apollo cuida da operação repetitiva da sua empresa pro seu time não precisar.
Entre na lista de espera: acesso antecipado, preço de usuário fundador e um lugar na primeira fila enquanto a gente constrói.
Entrar na lista de esperaO imposto oculto dos agents em paralelo é um diamante de migrations
Seis agents escrevendo para um schema conflitam no banco de dados, não no código, e a CI morre em "multiple heads".
EngenhariaUm orchestrator que não sobrevive ao próprio crash não é um
Um crash que apaga o raciocínio do orchestrator perde a única coisa que você não consegue reconstruir.
EngenhariaColoque um portão determinístico na frente do seu revisor mais esperto
A pega-defeito mais barata é um script burro que checa se duas branches mergeadas ainda sobem antes de qualquer julgamento.