Start now. Optimize Later. Imperfect starts can always be improved. Obsessing over a perfect plan will never take you anywhere on its own.
~ James Clear
I'm currently experimenting with a new way of working on side projects, where I give myself a month to work on it, and write a blog post about it, holding myself publicly accountable via twitter.
This experience has made me realise just how untenably high my standards are - and while this has its positives, the negative is that it often tends to stifle the act and art of building with concerns that are largely useless for learning-oriented projects.
For example, if I'm implementing a skiplist - coming from the perspective of someone who doesn't know what a skiplist is - it's much more important that I understand the core algorithms and data structures of the skiplist, than it is to carve out the perfect abstractions and object-oriented design for the nodes and the skiplist themselves.
Case in point - I ultimately decided to not have any private data members in the classes, and chose to leave out some bookkeeping, and didn't handle all my errors - but I can confidently say that this is the reason I now have a working project, and was able to learn how a skiplist works.
To do this is to sketch, like artists do. We can aggressively whittle down the idea to its very core functionality, and implement that - nothing more, nothing less. This lets us establish a foundation, a feedback loop, upon which we can then "paint in the finer details" - refactor to meet our standards - in an iterative fashion.
In doing so, we choose a project that is imperfect but exists today, as opposed to a project that does not exist yet, but is eventually consistent with some ideal of perfection.
... Kids just plunge in and build their treehouse without worrying about whether they're wasting their time, or how it compares to other treehouses. And frankly we could learn a lot from kids here. The high standards most grownups have for "real" work do not always serve us well.
... The most important phase in a project of one's own is at the beginning: when you go from thinking it might be cool to do x to actually doing x. And at that point high standards are not merely useless but positively harmful.
~ A Project of One's Own - Paul Graham
At this scale, It is much easier and cheaper to go from imperfect to perfect than it is to go from non-existent to perfect. Projects that do not exist cannot be improved or learnt from.