Brag document — Filipe Miranda Pereira

Período: 2025-11-05 a 2026-05-05 (6 meses), encerramento do plano de desenvolvimento. Caso: promoção pleno → sênior. Email: filipe.pereira@agidesk.com.br | GitHub: fm1randa


Resumo executivo

308
PRs mesclados
~2,5 PRs/dia útil
100%*
do plano de 6 meses
12
entregas além do plano
7
melhorias não solicitadas
4
contribuições OSS

* considerando apenas as tarefas que dependiam da minha execução

Fui contratado como pleno com um plano de desenvolvimento de 6 meses. O cumprimento desse plano foi o gatilho acordado para a promoção a sênior.

Plano (4 iniciativas):

Volume (PRs mesclados, 2025-11-05 a 2026-05-05):

As três iniciativas que dependiam só da minha execução foram entregues no prazo. As pendências da quarta dependem da fila de prioridades do time. Há entregas adicionais que excedem o plano original (seção 2). Antes do plano começar formalmente, dediquei as primeiras 12 semanas à estabilização do Agitalks (próxima seção).


Fase prévia: estabilização do Agitalks (17/11/2025 a 28/02/2026)

Trabalho fora do plano original mas crítico para a operação. Atuei nos 5 repositórios Agitalks (backend, websocket, frontend, queue, mail), que são produtos separados do Agidesk principal. Cerca de 42 PRs mesclados entre minha entrada no time e o início efetivo do plano.

Diagnóstico inicial. Análise documentada cobrindo 36 tickets em janela de 90 dias, com causas-raiz identificadas em sincronização em tempo real (30,6%), gestão de conversação (21,1%), bots, campanhas e roteamento. O diagnóstico orientou as frentes de estabilização que seguem.

Memória e GC. Configuração de limite de heap e rastreamento de GC nos scripts de inicialização (agitalks-backend PRs #85, #86); heapdump sob demanda via SIGUSR2 para inspeção em produção (agitalks-websocket PR #9). Rollout coordenado DEV → STAGING → PRODUCTION. Removi os logs de GC depois que a coisa estabilizou, para reduzir overhead.

Confiabilidade de socket e payload. Correção emergencial em produção (agitalks-backend PR #87, 08/12). PAT-762854: otimização do payload do SocketGateway. O payload passa a ser computado uma vez por mensagem e reusado para todos os destinatários. Reduz pressão de GC sob alta vazão (agitalks-websocket PR #13, 16/12).

Queries DocumentDB. PAT-763034: 9 índices compostos distribuídos entre agitalks-backend (5 índices, PR #99) e agitalks-queue (3 índices, PR #8). Endereça inefiências COLLSCAN → IXSCAN apontadas pela Ilegra. Migrations idempotentes para backfill por tenant. Investiguei sozinho as recomendações da Ilegra, incluindo a limitação do MongoDB para índices em múltiplos arrays (#dev-tech, 26/12).

Infraestrutura de desenvolvimento. TRF-762174: página de setup que provisiona tenant + admin via UI (agitalks-backend PR #77, agitalks-frontend PR #54); Docker Compose multi-serviço para desenvolvimento local (PR #74); refactor de README e CLAUDE.md, mais script de update de senha (PR #75); fix de symlinks em postinstall.js no primeiro dia (agitalks-frontend PR #47, 17/11).

Continuidade Jan-Fev 2026. Fix de timeout de conexão MongoDB no startup (agitalks-queue PR #12, 08/01); PAT-763095 (Datadog apenas em produção, agitalks-queue PR #14 e agitalks-websocket PR #24); releases coordenadas develop → staging → main em 12/01.

Sinais de senioridade já presentes nessa fase:


1. Cumprimento do plano de desenvolvimento

1.1 Adoção de IA no ciclo de desenvolvimento (100%)

Implementei a infraestrutura de IA para o time:

Estudei a fundo o uso prático do Claude no ciclo de dev (Opus 4.7 1M context, compaction, sessions, MCP servers, skills) e virei a referência interna do time. Postei explicações no #dev-tech sobre Claude, Datadog MCP e a habilitação do Claude Code Remote Control.

1.2 Solução técnica para integração React no frontend PHP (100%)

A decisão arquitetural foi minha: introduzir o React Bridge (PR #602) em vez de continuar evoluindo o projeto agidesk-frontend em Next.js, que estava virando um wrapper artificial em volta do Agidesk + Agitalks. Optei por embedar Agitalks diretamente no Agidesk e migrar o frontend de forma incremental no mesmo repositório PHP.

Entregas associadas:

1.3 Separação do código frontend e backend do PHP (80%)

Pendência: apenas o deploy em produção, condicionado à priorização do time.

1.4 Integração do módulo Agitalks no Agidesk (40%)

Arquitetura entre os sistemas: 100%. Decisão técnica de embedar o agitalks-frontend como módulo nativo dentro do Agidesk (em vez de manter um wrapper separado), com loop SSO, mensageria em tempo real e isolamento de estilos. Aprovada em D&P em 02/03.

APIs/webhooks: 100%. PR #991 embeda o agitalks-frontend como módulo nativo no Agidesk (talks/frontend/), com loop SSO, mensageria em tempo real e isolamento de estilos. PRs #1075, #1073, #1340, #1017 cobrem rotas, navegação por contexto e tratamento de erros quando o backend Agitalks está indisponível.

Status real: o código está pronto para deploy. Pendente apenas staging e validação. A pendência depende da priorização do time, não da minha execução.


2. Execução técnica além do plano

2.1 API Platform: NDP-765399 (segurança)

Implementei o namespace /api/platform/* com tokens curtos (15 min) e rotação de refresh-token HttpOnly, separando os escopos externo (/api/v1/*) e interno (web/mobile). Validei o invariante de segurança contra 6 cenários de replay entre namespaces. Coordenei o rollout em 3 repositórios: agidesk (PR #1662), agicli (PR #82) e agidesk-mobile (PR #11), com a ordem de merge documentada publicamente no #dev-tech. Código pronto para deploy em staging e validação.

2.2 Performance: Vite 8 + Rolldown

Upgrade que tornou os builds embed do Agitalks 10x mais rápidos (PR #1326).

2.3 Segurança e robustez multi-tenant

2.4 agicli: ferramenta interna criada do zero

Bootstrap de uma CLI multi-repo em TypeScript/Bun, inicialmente em ~/Workspace/agitalks/agicli, depois extraída para o repositório próprio agidesk/agicli. Cobre rebase concorrente em múltiplos repos, criação idempotente de branches snapshot, deploy view com watch, integração com tasks/boards do Agidesk e o comando setup-agidesk com progresso ao vivo. Hoje é usada pelo time (skill using-agicli documentada em .claude/skills/). Mesclei 80 PRs no repositório entre janeiro e abril de 2026.

2.5 Correções e refatorações pontuais


3. Sinais de senioridade

3.1 Decisões arquiteturais que conduzi

3.2 Reconhecimento público

3.3 Trabalho em equipe

Ofereci apoio aos colegas de time de forma recorrente ao longo do período, tanto em canais públicos quanto em DMs.

3.4 Melhorias de processo sem solicitação

3.5 Trabalho entre times

Com infra (Zilli): behaviors de CloudFront para /api/platform, source-maps e o monorepo agidesk-development. Fui incluído pelo Zilli na análise de viabilidade serverless para substituir o agitalks-websocket.

Com PM (Juliano e Sabrina): triagem e criação de cards de bug a partir de relatórios de teste em HML, sendo o responsável pela resolução.

3.6 Aprendizado técnico do período

3.7 Comunicação

3.8 Contribuição em Softwares Open Source


4. Contexto de escopo prévio (gestão Trojahn)

Antes da transição de liderança, atuei em atividades que hoje não fazem parte da minha rotina:

Tenho interesse em retomar essa contribuição na estrutura atual, se fizer sentido para o time.


5. Pedido formal

Com base no que está nas seções anteriores:

  1. As três iniciativas do plano com execução individual estão concluídas no prazo
  2. A quarta tem 40% de progresso pelo plano, com escopo arquitetural e de APIs entregues. O restante depende de priorização do time
  3. Há entregas adicionais que excedem o plano original (API Platform, Vite 8 + Rolldown, agicli, baselines PHPStan/Prettier, segurança multi-tenant)
  4. O reconhecimento da liderança e os sinais de senioridade da seção 3 mostram atuação no nível esperado

Estou pronto para a promoção a sênior, conforme acordado na minha contratação. Solicito que conduzamos formalmente esse passo.


Documento gerado em 05/05/2026 com base em 6 meses de evidências objetivas (commits, PRs, threads do Slack).