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

Otimização prematura e Dívida técnica na construção do meu negócio

Eu e mais um colega estávamos no processo da criação de um negócio. Eu, como programador, e ele, como a pessoa experiente na parte de negócio.

Com meus três poucos anos de experiência, pude ter contato com o famoso código legado, e com as más práticas de programação. Tendo em mente isso, pensei em todas as etapas, e o que seria necessário, tecnologicamente, para poder colocar nosso projeto no ar, e foi pensando nisso tudo, que percebi como uma péssima escolha poderia custar muito.

Planejando a aplicação

Sem longos detalhes, a aplicação web terá uma parte administrativa, e outra parte do cliente, onde ele poderá efetuar algumas operações. Pensando no futuro, e no trabalho que já tive em meus trabalhos anteriores, eis que pensei na seguinte organização para meu projeto:

  • SPA: Já trabalho com isso. Por que não usar algum lib para fazê-lo?
  • API projeto: SPA, front, e api no back.

Tenho um pouco mais de três anos de desenvolvimento, estou só no projeto, enquanto desenvolvedor, e só poderei realizar as tarefas em meu tempo livre. O que posso fazer?

Otimização prematura

Otimize hoje, para não precisar otimizar amanhã.
Agora vamos retomar tudo isso para meu contexto?

spa e api

Olhando para a imagem colocada acima, o que ela está dizendo para mim?

  • Tempo: Estou sozinho nessa, e ninguém vai dividir a carga de desenvolvimento. Apesar de já ter trabalhado com sistemas assim, não tenho experiência para desenvolver tudo. O resultado? Vou demorar muito tempo para realizar o desenvolvimento de ambas as partes, e pra piorar, sempre que precisar adicionar algo novo, também levarei mais tempo.

O tempo culminará em um terceiro e mais letal ponto negativo, que deixarei mais pra frente.

Dando uma analisada melhor, percebi que essa talvez não seja a melhor abordagem, então vamos passar ao próximo tópico, e mostrarei como farei minha aplicação, e o que terei de negativo posteriormente.

Divida técnica

Pense nela como um empréstimo. Você conseguirá o que precisa, mas precisará pagar juros depois.

Agora o que acha de eu deixar a aplicação seguindo o esquema abaixo?

aplicação

Séloko cachuera! Mas que arquitetura robusta :P.

Brincadeiras a parte, por mais simplória que possa ficar a aplicação, terei a seguinte vantagem:

  • Tempo: Reduzirei drasticamente o tempo de desenvolvimento em comparação ao modelo anterior, onde faria a construção de uma api e spa. Aqui, back e front se unem, dando mais velocidade no desenvolvimento.

Esquerda ou direita?

No primeiro caso, percebi que estava construindo uma aplicação que me proveria um melhor crescimento no futuro — mas não o ideal — , mas que dificultaria o desenvolvimento do produto. E no segundo caso?

Deixar a aplicação tudo junto e misturado realmente é uma baita ajuda inicialmente, mas o problema começará a surgir futuramente, quando a aplicação ficar maior, quando mais pessoas estiverem no projeto, quando mais clientes acessarem minha aplicação.

A dívida técnica, como o nome diz, é o que acontecerá por aceitar um mau design para minha aplicação. Com o tempo, ficará mais difícil dar manutenção e adicionar novas features. A partir dela, terei o mesmo problema que o primeiro caso: tempo. Gastarei mais tempo e dinheiro para manter, e melhorar o produto.

E o que essas duas abordagens tem em comum?

Time to market!

O tempo nos dois casos, vai acabar culminando em um problema com time to market.

Quanto mais tempo eu demorar para disponibilizar algo novo para meu cliente, mais tempo um concorrente tem para desenvolver algo melhor. Quando mais tempo eu demorar para corrigir algo, maior será a chance de meu cliente abandonar o serviço.

O modo como você escolhe desenvolver sua aplicação afeta sim o negócio, e muito!

Sabendo disso, qual é a abordagem correta?

Apesar de cair em qualquer um dos casos ser ruim, muito pior que criar uma dívida técnica, é abraçar um otimização desnecessária, que só vai dificultar o desenvolvimento inicial do produto. Ele ainda não existe, então por que dificultar sua existência?

A mensagem que deixo para o final disso tudo, é simples:

Abrace a dívida técnica para crescer, mas saiba deixá-la quando tiver crescido.

Esse texto foi feito com base em uma talk que fiz na Pagar.me. Para vê-la, clique aqui

Carregando publicação patrocinada...
3

Rapaz, que post legal! É legal ver como esse tipo de projeto pode nos desenvolver. Nos ensina a gerenciar as dificuldades à medida que vamos criando a aplicação. Acho que alguns dos tópicos do zen do phyton podem nos ajudar quando estivermos travados nesse processo.

  • Bonito é melhor que feio.
  • Explícito é melhor que implícito.
  • Simples é melhor que complexo.
  • Complexo é melhor que complicado.
  • Legibilidade faz diferença.
  • Diante da ambigüidade, recuse a tentação de adivinhar.
  • Agora é melhor que nunca.
  • Se a implementação é difícil de explicar, é uma má idéia.
2

Que postagem sensacional! Realmente, trabalhar numa aplicação sozinho e com tempo limitado é difícil, cada passo que você dá pode te levar pra frente ou pra trás do resultado final, por isso devemos pensar com cautela sobre como e o que fazer no projeto.

2

Tambem acho bom complementar com um video do fabio akita "RANT: Empreendendo com software do JEITO ERRADO", é video para abrir os olhos e não cair em ratoeiras no começo como otimização prematura, terceirizar tudo para outras pessoas e vários outras más decisoes que fazem a sua startup ir goela abaixo: https://www.youtube.com/watch?v=NuIOO5VWmXc
Varias coisas desse video tambem valem pra empresas que não são de software

2

faz todo sentido a parte de otimização prematura! é possivel deixar sua aplicacao minimamente future-proof fazendo boas escolhas nos padrões de desenvolvimento e arquitetura (pontos que vao facilitar mais para a frente) por outro lado tomar decisões que impactem demais o Time to Market e as vezes até usam tecnologias que vc nao domina no momento são muito arriscadas por agora!

1

Agora fiquei me perguntando se fazer sprints pequenas pode ajudar a resolver o problema.
Assim, poderia fazer o projeto com API e SPA. E você pode fazer apenas o core da aplicação em um primeiro momento e implementar outras funcionalidades depois.

Um bom exemplo é o próprio tabnews, que há alguns dias não tinha botão para deslogar.

Fazendo dessa forma, você garante que não está caminhando para ter um monolito e ainda sim tem resultados menores, e mais recorrentes.

Neste caso, você precisa planejar a API toda com cuidado, mas não precisa implementar ela toda antes da SPA.

1

Oi @felipe31, tudo bem?

Acredito que cada caso é um caso. O TabNews começou com o @filipedeschamps, mas tem toda uma comunidade ajudando. Pensando em um produto que você tem apenas 1 dev, todo tempo gasto é extremamente valioso, seja pq pode dificultar o desenvolvimento da aplicação, e como disse, você pode acabar perdendo o timing do mercado do que você deseja desenvolver. Você abdicando de qualidade, conseguirá validar seu MVP mais rápido.