Blog
Build in Public
1 de abril de 20269 min

38 commits, zero funcionalidades: o sprint que conta

38 commits em 10 dias. Zero novas funcionalidades. E, no entanto, esta é provavelmente a semana mais importante desde o início do projeto.

É o paradoxo do desenvolvimento de produtos: as semanas que mais importam são aquelas em que "nada" de visível acontece. Nenhuma nova funcionalidade para anunciar, nenhum screenshot espetacular. Apenas código que torna o existente melhor, mais sólido, mais profissional. No mundo do "build in public", esses sprints silenciosos não geram likes. Mas eles fazem a diferença entre um aplicativo que "funciona para mim" e um aplicativo pronto para usuários reais.

Pontos chave
  • 38 commits focados na estabilidade, não em funcionalidades, com uma agenda web que passou de 1 para 4 visualizações para paridade completa mobile/desktop.
  • Crashlytics (frontend) + Sentry (backend) implantados antes da produção, de acordo com as recomendações do Firebase para monitoramento pré-lançamento.
  • A IA de voz detecta teus padrões de nomenclatura existentes e os reproduz automaticamente para novas pastas.
  • Rastreamento UTM em todos os links compartilhados para atribuição de marketing confiável desde o primeiro dia.
Desenvolvedor solo trabalhando à noite em frente a vários monitores exibindo código e dashboards, ilustrando o trabalho invisível de um sprint de estabilização

Por que um sprint sem funcionalidades é o mais importante?

De acordo com um estudo da Stripe (2018), os desenvolvedores gastam em média 42% do seu tempo gerenciando dívida técnica e manutenção. Isso não é tempo perdido: é tempo investido. Um sprint "zero funcionalidade" consiste em parar voluntariamente de adicionar coisas novas para consolidar o que já existe.

Concretamente, o que isso significa para o TAMSIV? 10 dias para corrigir micro-bugs, suavizar transições, alinhar a web com o mobile, adicionar monitoramento. Nada chamativo. Mas ao final desses 10 dias, a qualidade percebida do aplicativo mudou de dimensão.

Eu havia falado sobre isso no artigo sobre o sprint final zero funcionalidade: o reflexo natural de um desenvolvedor é adicionar. Sempre adicionar. É preciso uma verdadeira disciplina para dizer "não, esta semana vamos consolidar". Essa é a filosofia que continuo a aplicar. Isso compensa? Os 12 testadores alfa não relataram nenhum crash nesse período. Zero. A primeira vez desde o início do projeto.

Como a agenda web passou de 1 para 4 visualizações?

Tela de desktop e tablet exibindo a mesma interface de calendário colorida com blocos de eventos sincronizados entre dispositivos

A agenda do dashboard web tinha apenas uma visualização: a semana. Suficiente para uma demonstração, insuficiente para uso diário. Adicionei três visualizações adicionais (dia, mês, ano) para alcançar a paridade com a agenda mobile, que detalhei aqui.

O objetivo técnico é claro: que a transição entre o telefone e o computador seja invisível. Tu crias uma tarefa vocalmente no teu telefone pela manhã, tu a encontras na tela do teu computador ao meio-dia com exatamente a mesma apresentação. Clicar em um evento abre seus detalhes. Clicar em uma tarefa, o mesmo.

As páginas de detalhes de tarefas e memorandos foram completamente redesenhadas para corresponder à experiência mobile. Miniaturas de imagens, navegação fluida, mesma estrutura visual. É um trabalho ingrato, mas essencial: cada inconsistência entre mobile e web cria atrito cognitivo para o usuário. E o atrito é o inimigo número 1 da retenção.

Por que adicionar Crashlytics e Sentry antes da produção?

Centro de controle com monitoramento em tempo real exibindo gráficos, indicadores de status e alertas em uma tela ultrawide em um ambiente azul escuro

Quando teu aplicativo é usado por ti e por 12 testadores, tu podes te dar ao luxo de depurar via logs do Supabase e o "funciona para mim". Quando tu estás prestes a entrar em produção pública, isso não é mais uma opção. De acordo com a documentação do Firebase Crashlytics, aplicativos que configuram o monitoramento antes do lançamento detectam crashes críticos 10 vezes mais rápido do que aqueles que reagem após as primeiras reclamações dos usuários.

Implementei dois sistemas complementares:

Firebase Crashlytics no frontend React Native

O Crashlytics captura três tipos de problemas no mobile. Primeiro, os crashes (o aplicativo que fecha abruptamente), depois os ANR, Application Not Responding, aqueles momentos em que o aplicativo congela por mais de 5 segundos, e finalmente os erros JavaScript não capturados. Para cada incidente, obtemos o stack trace completo, o modelo do telefone, a versão do Android e o que o usuário estava fazendo logo antes. Eu já havia descrito o pipeline de áudio no artigo STT nativo vs Deepgram, é exatamente o tipo de cadeia complexa onde um crash silencioso pode passar despercebido sem monitoramento dedicado.

Sentry no backend Node.js/Express

No lado do servidor, o Sentry captura erros de API, timeouts de WebSocket, exceções não tratadas. O que faz a diferença são os breadcrumbs: o Sentry registra uma linha do tempo dos eventos que levaram ao erro. Se uma chamada OpenRouter expira após uma chamada Supabase lenta, tu vês toda a cadeia. Além do monitoramento de desempenho que mede os tempos de resposta de cada endpoint.

A ideia é simples: quando um bug ocorre em produção, nós sabemos antes que o usuário reclame. É a diferença entre "temos um problema" e "resolvemos o problema antes que tu percebesses".

Como a IA detecta teus padrões de nomenclatura?

Mão segurando um smartphone com uma onda de voz na tela, cercado por ícones holográficos de arquivos e pastas que se organizam automaticamente

Apenas um commit, mas do tipo que muda a experiência diária. O assistente de voz do TAMSIV agora analisa os nomes das tuas pastas existentes para detectar padrões de nomenclatura recorrentes e reproduzi-los automaticamente.

Vamos pegar um exemplo concreto. Tu tens três pastas: "Compras Carrefour", "Compras Leclerc", "Compras Aldi". Tu dizes à IA "cria uma pasta de compras para o Lidl". Antes, ela teria criado "Lidl" ou "Compras" apenas. Agora, ela detecta o padrão [Categoria] + [Nome da loja] e cria automaticamente "Compras Lidl".

Outro exemplo: tuas pastas de projeto são nomeadas "Projeto Alpha - Q1", "Projeto Beta - Q2". A IA identifica o formato [Projeto] + [Nome] + [Trimestre]. Quando tu crias uma nova pasta de projeto, ela aplica a mesma convenção sem que tu precises especificar.

É o tipo de detalhe que nenhum usuário jamais pedirá, mas que todos notam quando está lá. Eu havia falado sobre isso no artigo sobre personalização vocal: a IA não faz apenas o que tu dizes. Ela entende como tu te organizas.

Quais otimizações de CRO para a landing page?

De acordo com o Google Web Vitals, um LCP (Largest Contentful Paint) superior a 2.5 segundos impacta diretamente a taxa de rejeição. A landing page tamsiv.com recebeu várias otimizações direcionadas para permanecer abaixo desse limite.

O brilho animado do herói usava um Canvas JavaScript que consumia muito CPU, especialmente em dispositivos móveis. Eu o substituí por CSS puro: o mesmo efeito visual, zero impacto na bateria. Este é tipicamente o tipo de dívida técnica invisível que só é corrigida durante um sprint de zero funcionalidade.

O subtítulo do herói foi reescrito para explicar claramente o que o TAMSIV faz em uma frase. Em CRO, a clareza da mensagem acima da dobra é o fator número 1 de conversão. Se o visitante não entender o que tu fazes em 3 segundos, ele vai embora.

Também melhorei o layout de preços: o rótulo anual agora está em sua própria linha para maior legibilidade. E o scroll spy do cabeçalho foi corrigido: o estado ativo não era limpo corretamente ao rolar para cima, um bug sutil, mas irritante.

Como o rastreamento UTM melhora a estratégia de marketing?

Saber de onde vêm teus visitantes é a base de qualquer estratégia de marketing. Sem rastreamento, tu publicas conteúdo às cegas. Com ele, tu sabes exatamente qual post do LinkedIn, qual mensagem do Discord, qual campanha gera tráfego real. De acordo com a documentação do Google Analytics, os parâmetros UTM são o padrão para atribuição de campanha.

Implementei três coisas. Primeiro, parâmetros UTM em cada link compartilhado: source, medium, campaign, content. Em seguida, uma captura de IP no lado do servidor para análises mais confiáveis do que o JavaScript do lado do cliente, que é bloqueado por adblockers. E, finalmente, um painel de administração enriquecido com seletor de período (7 dias, 30 dias, 90 dias, tudo) e uma configuração sincronizada entre mobile e web. Eu havia estabelecido as bases desse painel no artigo sobre o painel de administração, agora é uma ferramenta completa.

O resultado concreto? Na última sessão de marketing, pude ver que a i18n em 6 idiomas gerava 60% do tráfego de entrada. Sem UTM, eu nunca teria tido esses dados.

versionCode 32: qual é o próximo passo?

A build do Android está em sua 32ª versão. Mais de 740 commits no total. O aplicativo é enviado para a Play Store para revisão de produção. Enquanto aguardamos a validação do Google, continuamos a polir cada detalhe.

38 commits, zero funcionalidades, e um aplicativo que passou de "funciona" para "está pronto". É exatamente o tipo de sprint que não faz barulho, mas que faz a diferença no dia em que os usuários reais chegam.

Perguntas frequentes

O que é um sprint "zero funcionalidade"?

É um período de desenvolvimento voluntariamente dedicado à estabilidade, desempenho e dívida técnica, sem adicionar novas funcionalidades. O objetivo é consolidar o existente antes de um marco importante, como um lançamento em produção.

Por que usar Crashlytics E Sentry juntos?

O Crashlytics é especializado em monitoramento mobile (crashes, ANR, erros JS no React Native). O Sentry cobre o backend Node.js (erros de API, WebSocket, desempenho). Os dois combinados fornecem visibilidade completa sobre toda a cadeia, do telefone ao servidor.

Como funciona a detecção de padrões de nomenclatura pela IA?

O assistente de voz analisa os nomes de pastas existentes para identificar convenções recorrentes (prefixo comum, formato estruturado). Quando tu crias uma nova pasta, a IA aplica automaticamente o mesmo padrão sem que tu precises especificá-lo.

O que é o rastreamento UTM e por que é importante?

Os parâmetros UTM (source, medium, campaign) são adicionados às URLs compartilhadas para identificar precisamente de onde vem cada visitante. Sem esse rastreamento, é impossível saber qual canal de marketing realmente funciona, de acordo com a documentação do Google Analytics.

O TAMSIV está disponível na Play Store?

O aplicativo está atualmente em fase de teste alfa fechado com 12 testadores. A submissão para produção pública está em processo de validação pelo Google. Enquanto isso, tu podes descobrir o projeto em tamsiv.com.