Estamos na segunda versão do sistema, que foi lançada no final de 2021.
A primeira versão rodou em testes e em sala de aula entre 2019 e início de 2020, quando foi descontinuada para dar lugar à versão atual, 2.0.
Desde então, nos dedicamos a lançar novos recursos e conteúdos, e experimentamos um crescimento exponencial de nossa comunidade, alcançando milhares de usuários.
Essa demanda concorrente entre tantos acessos pressionava os fluxos internos do produto, levando a cenários de sobrecarga, instabilidade e até episódios de curta indisponibilidade.
Difícil é fazer o simples
No início de maio de 2023, lançamos a versão 2.20.00, com recursos que turbinaram a velocidade e a estabilidade da plataforma.
Desenvolver uma aplicação que seja rápida, simples e acessível é um objetivo ambicioso, especialmente em um ambiente de intersecção entre mapas e bancos de dados.
Na Mapfry, enfrentamos esses desafios diariamente enquanto trabalhamos para criar soluções de Geomarketing eficientes.
A degradação inevitável do design
Softwares são complexos e tendem a ficar mais complexos com o tempo.
Cada modificação corre o risco de introduzir complexidades que dificultam futuras mudanças.
Chamamos isso de degradação, resultado das pequenas implementações que adicionam novas regras, filtros, condições, “se isso, então aquilo, mas com exceção disto”.
Na medida em que essas regras se somam dentro de um conjunto pouco coeso, temos uma pequena torre de babel onde até mesmo os desenvolvedores se perdem.
Complexidade sem limite
Em qualquer sistema, a complexidade tende a crescer indefinidamente.
Cada novo desenvolvedor traz suas próprias habilidades e preferências, cada componente pede uma abordagem específica, o que leva a uma base de código fragmentada e difícil de gerenciar.
Reconhecemos que a complexidade do software é uma realidade inevitável, mas acreditamos que com disciplina, comunicação e uma abordagem focada na simplicidade, podemos criar uma aplicação que seja, de verdade, rápida, simples e acessível.
O limite da complexidade
A fim de evitar esses cenários, de tempos em tempos, temos que voltar à prancheta e repensar o sistema todo e como ele vai evoluir.
Esse é um trabalho imenso que não gera novas receitas, as mudanças acontecem nos bastidores e, se tudo der certo, serão pouco percebidas.
É por isso que nos deparamos com empresas com grande sucesso financeiro rodando sistemas problemáticos, cheios de bugs e caminhos cruzados.
Nada mais natural que uma empresa tome decisões que levam a mais vendas em detrimento de manutenção em larga escala.
Alguém da diretoria poderá dizer:
Precisamos avançar para novas funcionalidades.
Não temos o luxo de olhar para trás.
As empresas existem para ganhar dinheiro.
Acontece que, com o tempo, esse problema se acumula, num processo chamado “débito técnico”.
Débito técnico é quando os desenvolvedores tomam a decisão de simplificar alguns componentes para entregar o produto mais cedo, mesmo que isso possa comprometer sua produtividade no futuro.
O interessante do “débito” da expressão é que ele cobra juros, quanto mais tempo passa sem ser resolvido, maiores as consequências, pois novas partes do sistema estão sendo adicionadas a um todo problemático.
Enquanto desenvolvedores e profissionais de produto odeiam conviver com tais consequências, a empresa como um todo não vê problemas em deixar as coisas assim.
Até que a soma de todos os débitos se apresenta como um problema maior e ameaça a própria existência da empresa.
Isso pode vir de algum bug crítico, da impossibilidade de atualizar alguma parte do código ou de uma solução concorrente mais atual, que nasce livre de débitos.
Nesse cenário, o limite da complexidade é extrapolado e todas as decisões tomadas em benefício dos resultados financeiros são reavaliadas.
Talvez seja tarde, talvez ainda haja esperança, mas mesmo nesse caso, a empresa terá que dedicar enormes esforços em fazer seu produto atual funcionar, perdendo velocidade evolutiva.
Empresas de Produto, como a Mapfry, entendem que cabe a elas definir um limite aceitável para a complexidade.
Por isso, trabalhamos continuamente para mitigar os efeitos da degradação, realizando revisões de código rigorosas e sempre prontas a encarar novas jornadas de reconstrução.
Manter o código limpo e modular é essencial para que possamos continuar a inovar sem comprometer os objetivos iniciais de rapidez, simplicidade e acessibilidade.
Arquitetura de sistema
Assim como os edifícios modernistas conjugam diversos propósitos, um bom sistema deve permitir o convívio harmônico de seus componentes.
A simplicidade nas interfaces é chave para atrair e encantar nossos usuários, por isso focamos na criação de APIs e módulos que sejam intuitivos e elegantes.