Criando meu primeiro Saas from scratch

Criando meu primeiro Saas from scratch
Photo by Zoha Gohar / Unsplash

Antes de inciar gostaria de dizer que esse não é o primeiro Saas que desenvolvo do zero, mas o primeiro que eu desenvolvo pra mim. O primeiro Saas que eu desenvolvi foi um sistema de formulários inteligentes, ele tem alguns pontos bem amadores ainda em aspectos de programação e de logística, entretanto ele serviu pra me ensinar sobre a qualidade que um sistema pode ter quando desenvolvido corretamente.

Um saas onde eu serei responsável pelo crescimento vai me ajudar a entender melhor os critérios que um sistema tem para crescer a nível técnico. Ainda não fiz as previsões logística, mas quando o fizer vou compartilhar tudo nesse blog também. A ideia desse artigo é apenas explicar algumas tomadas de deciões que eu tive pra começar a desenvolver, e um pouco sobre o plano geral que definem a qualidade de um software.

Sem nome


Por enquannto vamos chamá-lo de PulseFeed.

A ideia é desenvolver uma ferramenta de coleta de feedback. A ideia é ser uma white-label que permite que empresas incorporem facilmente widgets de feedback personalizáveis ​​(como avaliações, pesquisas ou avisos) em seus sites ou aplicativos. Assim, elas podem visualizar e analisar todas as respostas dos clientes em um único painel.

O principal motivo de eu iniciar esse projeto é a necessidade que eu to sentindo de um projeto para gerenciar em parelelo, tenho alguns amigos que estão comigo em momentos que eu nunca imaginei, inclusive consegui colocar vários deles no meu antigo trabalho para cuidar do Saas mencionado comigo. Agora a ideia é fazer com tenhamos nossa própria ferramenta, para nos auxiliar no aprendizado do mundo de software e negócios.

Como funciona


Eu vou oferecer aos meus clientes um sistema hospedado por mim onde eles podem personalizar com a identidade visual deles. Com isso, eles poderão compartilhar um link público ou incorporar no site deles um local onde os receberam seus feedbacks. A partir disso o meu sistema ficará responsável pelo armazenamento desses feedbacks em categorias, descrição e prioridade, onde eles poderão organiza-los a nível de crescimento profissional ou até mesmo como forma de exibição da qualidade do serviço.

A ideia é primeiro construir um MVP, então vou guardar algumas coisas pro próximo artigo a ser postado, que vai ser postado quando eu publicar a primeira versão estável do projeto, onde provavelmente eu já vou ter alguns clientes e vou poder trazer os seus feedback (adquiridos pelo próprio site hehe).

Técnologias

Essa é a parte mais legal para aqueles que gostam de software e um pouco pra matar a curiosidade daqueles que tem interesse em descobrir como um sistema dessas de fato para em pé né, o que tem por trás, etc.

Não vou entrar em detalhe de custos (pelo menos não agora), mas com as técnologias que vou apresentar aqui vai ser possível ter uma pequena noção pesquisando sobre e tal.

Frontend

Começando da cabeça pros pés, o frontend é a parte responsável por exibir o sistema aos usuários e nesse primeiro momento ainda estou indeciso se vou utilizar somente uma interface pra tudo ou mais de uma, mas o ideal seria ter 3, sendo elas:

  • Landing page (Página de vendas)
  • Área de gerenciamento de feedbacks
  • Apresentação/aquisição de feedbacks

Hoje eu vou fazer tudo em Nextjs, mas no futuro penso em fazer em Nextjs e AngularJs.

Backend

O backend é responsável por todo o funcionamento do sistema, ele vai ser responsável por todas as regras de negócio e funcionalidades do sistema. Quando o usuário clicar em um botão no frontend o backend vai ser acionado pra fazer todo o trabalho por trás.

Como o objetivo é explorar uma nova linguagem de programação o backend vai ser todo escrito em Golang, popularmente conhecida como go, a API vai ser exposta via HTTP no padrão Restful. Para isso to utilizando um framework de go que se chama go-chi. To no meu momento mais profundo dessa linguagem de programação então não sei dizer a qualidade desse framework ou se existem outros.

Quando escrevo isso o backend já ta todo configurado no formato de Monólito com o "Hello world" das apis que é uma rota de saúde. Agora vou começar as primeiras regras de negócio para que o sistema saia do papel. Um detalhe importante é que eu decidi não escolher um padrão de projeto e arquitetura muito robusta pra começar e quero deixar isso como dica pra vocês, pois se eu focasse em estruturar o projeto para algo como Abstract Factory com Clean Arch eu ia demorar bem mais tempo pra começar, portanto, vou iniciar o projeto seguindo o básico do básico, estruturando o sistema em 3 camadas principais, uma arquitetura baseada em Repository-Service-Controller.

Banco de dados

O banco de dados vai ser simples mesmo, a ideia é utilizar só um Postgres pra tudo, sem me preocupar com cache e eventos.

Servidores

Esta é a parte mais legal para quem gosta de DevOps, e algo que eu não costumo delegar no começo de um projeto, mas tudo depende do nível de conhecimento que eu tenho sobre o tabuleiro do jogo.

Atualmente o sistema tem apenas um servidor pra banco de dados e pro backend hospedado em uma VPS de 1 núcleo na Hostinger. Dito isto, o banco de dados está hospedado no próprio servidor e o backend vai estar em um container no Docker, utilizando o clássico docker-compose.

Pagamentos

Para pagamentos eu vou utilizar o stripe, ele não tem suporte para o Brasil então não vai aceitar algumas bandeiras de cartão, entretanto a facilidade de integração e consistencia de dados é algo que eu não quero abrir mão pra esse começo e também nem pro futuro talvez.

Próximos passos

A ideia é começar o desenvolvimento e ter um MVP em até 30 dias. Hoje a inteligencia artificial ajuda muito, mas eu passei essa semana inteira elaborando o sistema e visualizando ele. Ainda to pensando se vou atrás de um UI/UX, mas acho que não vai ser preciso.

De todo modo, a próxima atualização do meu Saas vai ser quando o MVP tiver pronto, ai vou conseguir apresentar algumas telas e explicar melhor alguns pontos que agora não estão claros nem pra mim. Muito obrigado e até a próxima!