Criando um processador de carteiras em C++ - Dia 01: Benchmarking
Olá pessoal :D Recentemente decidi me aventurar num projetinho pessoal para ampliar meu portfolio de backend: criar um processador de carteiras em C++. Para documentar e compartilhar todo esse processo, vou todos os dias escrever um artigo curto relatando o que fiz e adicionando considerações importantes em cada etapa do processo.
O código do processador ficará aberto à todos através deste link. Quem quiser acompanhar mais de perto e quem sabe até colaborar com o projeto, pode ficar à vontade para dar follow, fork ou stars no repositório.
Benchmarking
Para dar um pontapé inicial ao projeto, achei importante começar por um teste de benchmark. Para nós que somos da engenharia, um teste de benchmark é o que utilizamos para medir a capacidade de processamento de um código e/ou máquina. Porém, quando falamos em business, benchmarking é o processo através do qual estudamos a concorrência.
Na hora de começar um negócio, estudar a concorrência é fundamental! Isso vai te trazer bons insights, te mostrar as boas práticas do mercado e para onde ele vem caminhando, te ajudar a reduzir custos com discovery de fluxos e processos e muito mais.
No nosso caso, o benchmarking vai servir essencialmente para descobrirmos as principais features disponíveis nos maiores aplicativos do mercado e a estrutura de dados que utilizam para tornar tudo possível. Abaixo segue uma descrição detalhada de como realizei esse teste e quais foram os resultados.
Resultados
Inicialmente, comecei fazendo uma lista dos principais aplicativos de carteira disponíveis no mercado. Esse passo foi bastante simples, apenas abri o Google Play e fui baixando os apps que tinham mais downloads e as melhores classificações.
Em seguida, listei as principais features disponíveis em cada um deles. O resultado foi o seguinte:
- Carteira
- Listagem de saldo
- Listagem total de receitas e despesas
- Listagem de saldo por conta
- Listagem de transações
- Cartão de Crédito
- Composição de faturas
- Gráficos
- Despesas por categoria
- Evolução das despesas
- Receitas vs Despesas
- Planejamento mensal
- Limites de Gasto
- Total economizado
- Metas Financeiras
Por fim, listei as estruturas de dados que consegui identificar em cada aplicativo.
- Carteira
- Saldo Atual (number)
- Saldo Inicial (number)
- Tipo de Conta (enum)
- Cor (enum)
- Nome (string)
- Transação Despesa
- Valor (number)
- Status [pago ou não] (boolean)
- Data (date)
- Descrição (string)
- Categoria
- Carteira
- Despesa Recorrente (boolean)
- Quantidade (number)
- Período (enum)
- Ignorar Despesa [não mostrar nas análises] (boolean)
- Transação Receita
- Valor (number)
- Status [recebido ou não] (boolean)
- Data (date)
- Descrição (string)
- Categoria
- Carteira
- Receita Recorrente (boolean)
- Quantidade (number)
- Período (enum)
- Ignorar Receita [não mostrar nas análises] (boolean)
Observação: Como esse é um processo meio demorado, optei por não me aprofundar em outros tipos de estruturas como Cartão de Crédito, Despesa Cartão, Receita Cartão, Planejamento e Meta. Eles serão estudados conforme o projeto for avançando.
Conclusão
Para o primeiro dia, acho que está bom :D Tenho uma boa base para começar a codar: uma boa ideia de qual será a estrutura do meu projeto (minhas classes, propriedades e funções), qual stack irei utilizar, qual será a estrutura dos meus dados e tudo mais.
Além disso, fiz um bom teste de benchmark, analisei a "concorrência" e também já criei o repositório onde o projeto será armazenado. Não menos importante, escrevi este artigo. Sei que me comprometer publicamente deve ajudar a me empenhar bastante e entregar um bom resultado no final.
Espero que tenham gostado :D
Dúvidas, sugestões e reclamações só deixar nos comentários hehe.
Até amanhã.