For the past 10-13 days, I have been building a project of mine. My goal was to complete the first version by today. Although what I’ve built is functional, it doesn’t quite satisfy me. People often say that you need to validate your project as soon as possible. Well man, if it doesn’t reflect the my core ideas and doesn’t seem better than the product it aims to be successor of, then it surely requires more time.
At first, I was quite productive, making me to assume an early completion. But I was mistaken. Initially, things are simpler, your path is clear, but as the project evolves, environment changes things get messy with a lot of loose ends which somehow need to connect at the end. These complexity makes a man procrastinate, getting into deep rabbit hole and losing sight of the actual goal. I encountered problems with the REST API, abstraction, and implementation and I found myself brainstorming ideas to improve the API, exploring GraphQL and even try to fix it, searching for the perfect abstraction that met all my criteria, spending days on it. The irony is, I was trying to solve problems before fully understanding them, addressing issues that wouldn’t have arisen. When I finally grasped the real problems, their solutions were straightforward and didn’t require building a new set of tools.
As a beginner developer, I remember spending copious amounts of time determining the perfect setup for ESLint, TypeScript, Prettier, the most suitable architecture, the project’s folder structure, searching for fonts, selecting colors, and constructing an entire design system. Setting up a monorepo and adding various tools, which, in retrospect, were unnecessary. With this project, I vowed to avoid these pitfalls, but I still found myself making these mistakes, albeit to a lesser extent. So, in this project, I’m not adhering to a consistent naming commit convention hence not spending half an hour on message name which reflect the changes perfectly, I am not merging, squashing, or editing history to have a beautify git log. I haven’t built my design system from scratch; instead, I’ve utilized Tailwind CSS, haven’t even written my UI component library.
One more lesson I want to remind myself of: steer clear of the allure of perfection, consistency, symmetry, or the compulsion to align everything in a geometric or poetic manner. Avoid confining everything within a predefined framework of yours. Consistency is valuable, but not when it contradicts its own use case. Also, distance yourself from excessive development dogmas. Keep questioning your goals. All the principles are hypothesis, if they don’t seem to stand up on the experiment remove it.