Executando verificação de segurança...
8

A stack que nos fez atingir R$ 100k de MRR em 9 meses

Há algumas semanas atingimos um marco importante no Tintim: R$ 100K de MRR em 9 meses de operação!

Para os que não estão familiarizados, MRR é a sigla para monthly recurring revenue, o termo em inglês para faturamento recorrente mensal. Esse é um dos grandes marcos do início da jornada de uma empresa de software como serviço.

Dado o contexto, eu resolvi comentar um pouco sobre a arquitetura de software por trás da nossa solução.

Bora?

Programador não sabe vender

Antes de falarmos da tecnologia do Tintim, eu preciso falar sobre a nossa capacidade de vendas, como programador. O resumo desse assunto é: essa capacidade não existe.

O programador é um executor, por natureza. Além do mais, o programador é uma pessoa pragmática. A natureza do seu trabalho é o foco na habilidade técnica e, especificamente, em transformar uma ideia em realidade.

Dado essa natureza, a mentalidade do programador é, quase sempre, orientada a solução. É justamente essa mentalidade que impede o programador de vender.

Calma, vou explicar…

O programador inexperiente acredita que a qualidade do seu produto está diretamente relacionada a sua capacidade técnica. Usou a melhor linguagem? Então o produto é bom. Usou o melhor banco de dados? Então o produto é bom. Os endpoints respondem a dezenas de milhares de requisições por segundo? Então o produto é bom.

Mas aí eu te pergunto, meu querido amigo programador: Melhor linguagem para o que? Melhor banco para qual situação? Por que o endpoint precisa responder a dezenas de milhares de requests?

Como eu nunca me canso de dizer, tecnologia é meio. A tecnologia é apenas uma ferramenta. O que dita a arquitetura de um software é, primariamente, a natureza do problema que esse software se propõe a resolver.

Sob o ponto de vista de negócio, a qualidade de um software está diretamente relacionada a sua capacidade de resolver o problema. Essa deve ser a única métrica que importa. O software está resolvendo o problema? Então ele é bom, independente de ser um monolito ou um microsserviço.

Ter um software que resolve bem um problema é uma premissa não só para a área de tecnologia mas, principalmente, para a área de vendas. Para vender bem, o produto tem que resolver uma dor que dói bastante. Isso é geração de valor. Por isso, para vender bem, você precisa de uma mentalidade orientada a problema, e não a solução.

E qual o problema que o Tintim resolve?

No Brasil existem 170 milhões de brasileiros que usam o WhatsApp praticamente todo dia. Segundo pesquisas, mais de 5 milhões de empresas possuem contas ativas no WhatsApp Business, a versão do aplicativo voltada para pequenas e médias empresas. Faz sentido, afinal, 83% dos brasileiros já utilizam o WhatsApp para fazer compras.

Esses números foram catapultados pela inclusão digital que ocorreu, principalmente, nos últimos 3 anos. Outro grande fenômeno dessa inclusão digital foi a explosão dos social ads. É aí que o Tintim entra.

Quem trabalha com marketing digital sabe que uma das melhores formas de se vender pela internet é anunciando nas redes sociais. Devido a enorme quantidade de dados que essas redes coletam, as possibilidades de segmentação para o anunciante são praticamente infinitas. "Mas, dentre tantas opções, como saber o que pode dar certo para o meu negócio?"

A prática de quem trabalha com social ads é testar, incansavelmente, até encontrar a segmentação que traga maior retorno financeiro. O mercado do e-commerce, sabendo disso, desenvolveu centenas de formas de fazer essas medições. O mesmo aconteceu para produtos digitais, como livros, cursos e mentorias. Mas o pequeno negócio, que ainda concentra grande parte do seu atendimento comercial no WhatsApp?

Quem vende pelo WhatsApp simplesmente não consegue medir, de maneira simples e eficaz, a performance de suas campanhas. Sem essa medição, é impossível investir sua verba de mídia de forma estratégica. Foi para resolver essa dor que o Tintim nasceu.

O Tintim é a única solução que identifica e rastreia as vendas feitas pelo WhatsApp de forma simples e automatizada. O que o Tintim faz, na prática, é identificar e atribuir de qual anúncio veio determinada conversa. Sabendo isso e sabendo também quais conversas viraram venda, conseguimos traçar a jornada de compras completa do cliente e fazer comparações, identificando quais são as campanhas, públicos e anúncios que trazem lucro e devem ser escaladas.

Resolvendo somente este simples (mas muito doído) problema, a gente conseguiu alcançar os R$ 100k de MRR.

A arquitetura do Tintim

Como eu disse: se você está esperando uma arquitetura super sofisticada, sinto te desapontar. A arquitetura do Tintim é super simples e muito parecida com a que eu usei durante todos os meus quase 15 anos de carreira como programador.

A linguagem principal é Python e o software foi construído todo em cima do framework Django. O Django tem absolutamente tudo o que eu preciso para construir um software como o Tintim. Ele me entrega muita coisa pronta e com qualidade. Além disso, ele é super simples de se usar mas, ao mesmo tempo, altamente customizável.

Não usamos nenhum tipo de mecanismo de client server rendering. Não tem React, não tem Vue, não tem frameworks javascript da moda. Por quê? Dois motivos. O principal é que não temos nenhuma pessoa no time especialista em frontend. Segundo, porque não precisamos desse tipo de complexidade. Aqui no Tintim, usamos a trinca que vem funcionando super bem há, pelo menos, 20 anos: HTML + CSS + Javascript (vanilla). Quando precisamos de algo um pouco mais elaborado, recorremos ao jQuery.

A infraestrutura é bem simples também. Desde a invenção das chamadas plataformas como serviço, eu fujo de montar servidores como o diabo foge da cruz (já já explico o porquê). Por isso, o Tintim está hospedado no Heroku desde o seu início.

No começo usávamos apenas uma máquina hobby e o banco mais básico deles. Era apenas um dyno (a nomenclatura que o Heroku usa para denominar seus contêineres) e tudo rodava nesse dyno. Para processamentos em background, usávamos o Heroku Scheduler. Usávamos também o Papertrail para logs, o Sentry para monitoramento de erros e o New Relic para observabilidade. Tudo no plano free.

Conforme fomos sentindo a necessidade, implementamos um segundo dyno para processar requisições assíncronas. Essa implementação foi feita utilizando o Celery para o processamento das tarefas e o SQS para gestão da fila. Muita gente, nesse caso, gosta de usar o RabbitMQ para a fila, pois o SQS traz uma série de limitações ao Celery. Ainda sim resolvemos ir de SQS porque essas limitações não interferem nos nossos casos de uso e, usando o SQS, a gente ganha uma grande vantagem: menos um servidor/serviço para cuidar.

Recentemente implementamos um terceiro dyno para separar e processar exclusivamente as mensagens de WhatsApp dos nossos usuários. Também aumentamos os dynos do plano hobby para o plano profissional. Aumentamos o banco também (até uns 6 meses de empresa rodávamos num banco de $9/mês).

Durante a operação, alguns gargalos começaram a surgir em partes específicas do sistema. Para resolver esses problemas, a gente isola essas implementações em pequenos microsserviços, utilizando Lambda + API Gateway, da AWS (tudo serverless, ou seja, menos um serviço para cuidar).

A única infraestrutura gerenciada internamente que tivemos que implementar foi para os serviços de WhatsApp. Começamos com uma máquina simples na Digital Ocean e depois fizemos uma segunda instância na AWS, porque ganhamos um crédito de $5k por lá (meu amigo Bruno Okamoto quem descolou). Infelizmente não deu pra fugir de fazer essa implementação. Inclusive, essa é, de longe, a parte que mais nos dá trabalho de manutenção hoje em dia.

O Tintim começou da forma mais simples possível. Não tinha microsserviços, não tinha processamento assíncrono, não tinha infraestrutura gerenciada no software principal. Não tinha porque não precisava. Agora, o que sempre teve foi qualidade.

Desde o começo o código foi desenvolvido seguindo boas práticas. Sempre tivemos a preocupação em separar responsabilidades. Sempre tivemos a preocupação em escrever código simples e padronizado. Sempre tivemos, principalmente, a preocupação em escrever testes para TODAS as implementações. A simplicidade não tem relação nenhuma com (falta de) qualidade.

Sempre nos preocupamos também em manter um bom fluxo de trabalho. A partir do momento que mais de uma pessoa começou a escrever código, implementamos uma boa organização de branches. Também começamos a implementar novo código somente via pull requests.

Sempre nos preocupamos, também, em deixar o processo de deployment o mais automatizado possível. Ele nunca foi 100% automático (e nem sei se um dia será), mas sempre foi super simples de fazer. Apenas um comando e o novo código está entregue em produção (caso os testes tenham passado, óbvio). Mais importante que desenvolver rápido é entregar código rápido na mão do usuário.

Importante ressaltar que grande parte dessa agilidade se dá pelo fato de usarmos uma plataforma como o Heroku. A gente não cuida de banco, não cuida de log, não cuida de backup, não cuida de máquina, não cuida de disponibilidade. Tudo isso é terceirizado.

"Ah, mas o Heroku é muito mais caro do que montar uma máquina na Digital Ocean". Caro mesmo é o custo de oportunidade de não entregar valor para o seu usuário porque você está desperdiçando tempo tendo que dar manutenção em servidor. Enquanto você não tem um DevOps bom no time, esquece esse papo de montar máquina.

O Tintim é um software "simples", tecnicamente falando. O maior desafio dos próximos meses será o aumento de acessos e, consequentemente, de processamento. Esses são os desafios padrão de qualquer software e já existe muita literatura e ferramentas para lidar. Se o desafio é simples, não há porque implementar um codebase complexo.

Esse codebase nos trás problemas? Sem dúvidas, afinal, software em produção é sinônimo de software dando problema. Mas, o mais importante, é que essa é uma stack que o nosso time possui experiência e maturidade para lidar. Existem outras stacks tão eficientes quanto essa para o nosso contexto. Mesmo assim, decidimos seguir pelo o que a gente já conhecia. Lembre-se: a melhor linguagem de programação é aquela que o time domina.

Se houvesse a demanda, sem dúvidas recorreríamos a uma solução mais sofisticada. Se a nossa interface fosse mais complexa e demandasse uma ferramenta que lide bem com reatividade, implementaríamos um framework estilo React sem pestanejar. Não fizemos isso porque não precisa. Simples assim.

Somos uma empresa bootstrapped (ou seja, que não recebeu aporte financeiro de fundos de investimento). Devido a essa limitação de recursos, precisamos escolher muito bem nossas batalhas. Para você ter uma ideia, a gente ainda não tem integração com o gateway de pagamento. Assim que o cliente faz o pagamento, pinga um alerta no nosso Discord e o time de atendimento entra em contato para fazer os trâmites e liberar o acesso na ferramenta. É a forma mais efetiva? Obviamente não. Mas existem diversas demandas mais importantes do que automatizar esse fluxo, nesse momento.

Por sermos bootstrapped, nossa fonte de financiamento é o dinheiro do cliente. Para conseguir o dinheiro do cliente, é preciso resolver o seu problema e deixá-lo satisfeito. Se eu consigo resolver o problema do cliente usando uma planilha, ao invés de um banco de dados, por exemplo, eu vou usar a planilha. No fim das contas, a tecnologia é meio, e não fim.

O objetivo desse texto é justamente esse: te mostrar que tecnologia é meio, e não fim. Desculpe te desapontar, caso você esperava uma arquitetura super complexa (para mim já está complexo demais rs). O que eu quero te mostrar é que construir software de qualidade está ficando cada vez mais simples e barato.

Hoje, mais do que nunca, ganha o jogo quem sabe vender melhor. O principal fundamento que vai te fazer vender bem não é a tecnologia, mas sim a capacidade de gerar valor. Aprenda a resolver o problema do seu cliente, independente de qual será a tecnologia utilizada. Vende melhor quem resolve o problema do cliente.


✉️ Esta foi mais uma edição da minha newsletter.

💪🏻 O meu objetivo com essa newsletter é ajudar programadores que desejam desenvolver uma visão mais estratégica.

Além disso, pretendo também compartilhar outras coisas, como um pouco dos bastidores da construção de um negócio SaaS, as minhas opiniões e meus aprendizados. A ideia geral é ser uma documentação pública e estruturada dos meus pensamentos e aprendizados ao longo dos anos.

Portanto, se você se interessa por soft-skill, desenvolvimento pessoal, empreendedorismo e opiniões relativamente polêmicas, sugiro que você se inscreva para receber as próximas edições. ⬇️

Toque aqui para se inscrever

Carregando publicação patrocinada...
1

Que postagem maravilhosa! É realmente uma reflexão importante que muitos programadores e profissionais da área de tecnologia precisam fazer ao longo de suas carreiras. Vale ressaltar que o cenário se aplica também para quem busca a carreira como um gestor modelo CLT, afinal tudo é venda.

É comum que nos concentremos muito na parte técnica, na escolha das melhores tecnologias e na otimização de desempenho, esquecendo, por vezes, o problema real que estamos resolvendo.

Como você mencionou, o sucesso no mundo da programação e em qualquer área relacionada à tecnologia muitas vezes não está apenas na habilidade técnica, mas também nas soft skills e na mentalidade orientada para o negócio. É importante entender o contexto, identificar as necessidades dos usuários e focar na entrega de soluções que realmente agreguem valor.

Parabéns pela postagem e por compartilhar sua visão e experiência valiosas com a comunidade. Certamente, essa perspectiva é valiosa para todos os programadores e profissionais de tecnologia que desejam ser bem-sucedidos em seus empreendimentos e carreira.

1

o sucesso no mundo da programação e em qualquer área relacionada à tecnologia muitas vezes não está apenas na habilidade técnica, mas também nas soft skills e na mentalidade orientada para o negócio. É importante entender o contexto, identificar as necessidades dos usuários e focar na entrega de soluções que realmente agreguem valor.

É isso!

Parabéns pela postagem e por compartilhar sua visão e experiência valiosas com a comunidade. Certamente, essa perspectiva é valiosa para todos os programadores e profissionais de tecnologia que desejam ser bem-sucedidos em seus empreendimentos e carreira.

Tmj!!!

1

Que legal a trajetória de vocês!! Parabéns, você está absolutamente correto sobre o seu ponto de vista de que a tecnologia é apenas um meio para resolver problemas.. Tem um vídeo recente do Fabio Akita, em que ele pega diferentes tecnologias e faz todas elas conseguirem atingir os memos valores em número de performance, e o problema nunca foi aplicação ou stack, e sim mudanças na infraestrutura (máquina) a qual a tecnologia estava rodando!

1
1

Uma dúvida que fiquei em relação a vocês conseguirem atingir esses números! Como fizeram? Marketing, ou foi de forma orgânica?

2

Marketing e vendas. 80% do meu tempo foi dedicado, nesses últimos 6 meses, a criar e dar manutenção na nossa máquina de vendas.

1

ola moacir! ótimo relato, nós programadores precisamos aprender a vender.

uma pergunta, o marketing de vcês foi inteiramente pago ?
vocês fizeram cold calls ?
dispararam cold mails ?
tinha algum modelo de recomendação bonificada ?
vocês contrataram alguém para isso ou foi somente você que fez a parte de marketing e vendas ?

pergunto essas coisas pois atualmente tenho um sass mas o MRR é bem baixo. Atualmente tenho dedicado a maior parte do tempo em divulgação através das redes sociais e um pouco de tráfego pago

2

uma pergunta, o marketing de vcês foi inteiramente pago ?

Praticamente sim. Arrisquei algumas parcerias e eventos, mas sem sucesso expressivo.

vocês fizeram cold calls ?

No começo testamos cold message, mas sem sucesso. Agora, mês passado, voltamos a fazer. Já saiu venda nesse modelo.

dispararam cold mails ?

Não

tinha algum modelo de recomendação bonificada ?

Tentamos algo assim, mas não deu certo.

vocês contrataram alguém para isso ou foi somente você que fez a parte de marketing e vendas ?

Eu sou responsável pelo marketing e fiz as primeiras vendas. Mas, desde cedo, já tinhamos um vendedor experiente que hoje está responsável pela estruturação da área de vendas.

De forma resumida: Marketing, ou seja, atração de leads, é responsabilidade do time de marketing, do qual eu sou o líder. Converter esse lead em cliente é responsabilidade do time de vendas.

pergunto essas coisas pois atualmente tenho um sass mas o MRR é bem baixo. Atualmente tenho dedicado a maior parte do tempo em divulgação através das redes sociais e um pouco de tráfego pago

Estude sobre como fazer uma boa oferta e, em seguida, como atrair leads qualificados.

O conteúdo do Alex Hormozi é de altíssima qualidade e está de graça. Faça o curso de como fazer uma boa oferta e faça o curso sobre como atrair leads qualificados.

0
1

Cara, que texto incrível, eu gostaria que tivesse uma área aqui no TabNews voltado apenas para SaaS e Micro-SaaS tipo Indie Hackers. Sou aspirante (ainda sem sucesso) a empreender com Micro-SaaS, e esse tipo de conteúdo me inspira e anima demais.

Eu gostaria de te falar que não apenas no mundo do Micro SaaS é assim, eu já trabalhei em uma empresa que tinha uma stack extremamente simples, no caso tinha um framework moderno, mas de resto nada muito complexo, nada de várias pipelines de CI/CD, nada de inúmeros bancos de dados, ambientes e instâncias de servidores e essa empresa vale bilhões de reais hoje, isso mesmo, BIlhões.

Após vários anos acreditando que tecnologia de ponta era essencial para um produto, hoje eu vejo que realmente não é. Não entenda mal, se vc sabe utilizar as tecnologias de ponta e isso não vai atrapalhar no seu tempo de entrega, mas ajudar, vai em frente e faça, mas não deixe que isso realmente se torne a razão de seu produto servir para algo.

Concordo 100% com o autor, temos que criar coisas que façam sentido para as pessoas, tecnologia é um meio e não o fim, o fim é seu produto.

Hoje, mais do que nunca, ganha o jogo quem sabe vender melhor.

Eu diria que não hoje, mas sempre foi assim e sempre será.

1

Cara, que texto incrível

Tmj!

eu gostaria que tivesse uma área aqui no TabNews voltado apenas para SaaS e Micro-SaaS tipo Indie Hackers. Sou aspirante (ainda sem sucesso) a empreender com Micro-SaaS, e esse tipo de conteúdo me inspira e anima demais.

Seria legal mesmo. Como ainda não tem, recomendo a comunidade do meu amigo Bruno Okamoto: https://comunidade.microsaas.com.br/

1

Muito bom o seu texto, parabéns!

A escolha da stack foi realmente interessante e é justamente essa stack que pretendo utilizar para meu projeto. Só precisava de um case de sucesso para me incentivar 😆.

Uma pergunta. Quais foram os casos em que você sentiu a necessidade de utilizar o JQuery ao invés do JavaScript puro?

1

Quais foram os casos em que você sentiu a necessidade de utilizar o JQuery ao invés do JavaScript puro?

Alguns efeitos de tela simples, por exemplo.

0

Sob o ponto de vista de negócio, a qualidade de um software está diretamente relacionada a sua capacidade de resolver o problema.

Digo mais: a capacidade de resolver problema com o menor custo possível.