Abstrato e Concreto

Recentemente, desenvolvi uma ferramenta de crawler para um site de imagens e tive uma profunda reflexão. Implementei o protótipo rapidamente, mas depois quis torná-lo mais amplamente aplicável, ou seja, abstrato, só que descobri que estava refatorando incessantemente. Descartando e recomeçando repetidamente, gastando uma grande quantidade de tempo, o software parece evoluir, mas as funcionalidades não aumentaram, o que me causa certa angústia.

Se a melhor forma de implementação fosse clara desde o início, talvez pudéssemos evitar alguns desvios, mas continuar abstraindo sem fim leva a lugar nenhum, sendo fácil cair na armadilha do excesso de design, onde se escreve por quinze dias e ainda não se consegue produzir um protótipo com funcionalidades básicas. Em uma época que busca resultados imediatos, isso é um grande erro.

A adaptabilidade e a funcionalidade do software devem evoluir gradualmente em conjunto; Roma não foi construída em um dia. Uma pequena meta por dia, e lentamente, no fim, haverá uma árvore vigorosa.