Abstraction and Concreteness

Recently, I have been working on a web crawler tool for an image website, and I have gained deep insights. I quickly implemented the prototype, and then wanted to give it broader universality—that is, abstraction—but I found myself constantly refactoring. Constantly starting over and spending a huge amount of time, the software seems to be improving, but the functionality hasn’t increased, which is somewhat frustrating.

If I had defined the optimal coding approach from the beginning, perhaps I could have taken fewer detours, but continuing to abstract endlessly has no end and it is easy to fall into the trap of over-design—that is, writing for half a month without even being able to produce a prototype with basic functionality. In today’s world where immediate results are pursued, this is truly a major taboo.

The adaptability and functionality of software should evolve together gradually; Rome wasn’t built in a day. With a small goal every day, slowly, eventually a sturdy tree will grow.