· 1 min de leitura

Paradoxo da Simplicidade


“Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better.”

― Edsger Wybe Dijkstra

Ultimamente tenho refletido muito sobre o que é simplicidade, por exemplo, o que é um software simples?

Você pode considerar que esse código aqui é simples de construir:


app.get('/user/:id', async (c) => {
  const id = c.req.param('id')
  const response = c.userDb.findOne(id);
  return response;
})

Mas não necessariamente é simples de evoluir, se eu precisar buscar o usuario em outro endpoint, vou chamar direto o banco de dados? Sempre? Então quem conhece o usuário?

Então vamos criar uma Service para isso

Aí você pode fazer algo assim:

import { getUser, deleteUser } from `user.service.js`

app.get('/user/:id', async (c) => {
  const id = c.req.param('id')
  const response = getUser(id)
  return response;
})

app.delete('/user/:id', async (c) => {
  const id = c.req.param('id')
  const userExist = getUser(id)
  if(userExist) {
	return deleteUser(id)
  }
  return response;
})

Agora temos mais uma camada, amarramos nosso projeto a um padrão, agora todo e qualquer novo recurso, precisa explicitamente de uma service é a regra! Abrimos mão da simplicidade de construir um recurso novo, para a capacidade de evoluir o produto mais rápido.

E com o tempo, começam a surgir cada vez mais Services, algumas são usadas em um lugar só, pra fazer apenas uma busca no banco, agora parece que ta dificil evoluir tambem, afinal, cada consulta é um metodo na service.

E eu nem vou entrar em Repository, Interfaces, Injeção de dependencia pra não ficar denso.

Por isso, simplicidade deveria ser um exercício constante: abstrair aquilo que realmente precisa ser abstraído, sem esquecer aquilo que ainda não precisa. Entender que software não é escrito em pedra e que uma decisão tomada para resolver um problema específico não deveria, sem necessidade, comprometer todo o projeto.

Mudar faz parte. E talvez um software simples seja justamente aquele que nos permite mudar de ideia sem precisar lutar contra as decisões que tomamos ontem.

recomendações