Why am I unable to finish my projects?

17 July, 2024

Hey folks, it’s been a while since I came up with a project idea. No pun intended. I started a lot of projects and finished nothing. I do have some finished ones, but they are not that big or something I would call “achieved”. My project ideas range from building chess boards, 2D engine, website generator, component library, quiz apps, comment system, etc., None of these came to a conclusion. How bad was that? Terrible isn’t it? I mean I have the potential to build top-notch products, some of them can even make some money, but I’m not doing that.

That’s why I asked a lot of developers, read a bunch of blogs and watched a ton of videos to find out why I and other similar developers aren’t completing projects that they are starting. And I found out two common things,

  1. Perfectionism
  2. Ambitiousness

Let’s define what are they,

  1. Perfectionism - A motivation to do something perfect without any flaws.
  2. Ambitiousness - A trait of raising the bar and trying to do big things.

Oh, these two characteristics look positive right? A person with these two traits will definitely achieve something great in their life. I would cite Elon Musk here. He created perfect self-driving cars. He is so ambitious that he not only sends rockets to space, he gets them back to the earth safe and re-use them. Also he is building the Starship that will take people to Mars and come back.

I mean Elon Musk has these two characteristics, then I should not have any excuse right? Nope. Elon didn’t create a perfect car at the first time. It took him years to build a car that is self-driving. It took a lot of failures in rocket launches before he landed one back.

So, these two traits are important. But these traits should not stop us from moving forward. That’s where I fail most of the time. I’m so ambitious and focused on perfectionism that I stop everything if something doesn't go as planned. I’m not flexible. Situations like these break me off.

I can tell how I approached a project with a recent example,

This project idea started way back in early 2022. I designed the logo and UI for the app and every single part. And as usual, it went into my “designed but unfinished projects” bucket.

And I picked that up 9 months ago and put some serious work on building all the UI components from scratch, integrating StackOverflow authentication, learning Prisma, etc., But again the project went to a halt.

Check this unfinished masterpiece - https://github.com/Dev-Profile-Page/dev-profile-page-control-panel-frontend

The reason for the halt is that I was trying to create a project that is “Perfect”. Yeah, I was a perfectionist, I write reusable code - by over-engineering it, I committed files separately with “perfect” commit messages, I designed database schemas that can work for the next 10 years, I designed and built UI components from scratch, and did a lot of stupid stuff.

After watching a lot of Primeagen and other software engineering videos, I started understanding that “Perfectionism” is something that is preventing me from building things. Whenever I get the motivation of doing something, I waste all my energy to do “perfect” work. Even worse, I want to do perfect work at the first attempt.

When I tried to build the form that collects details for the website, I paused all the development work and started reading the entire documentation of react-hook-form, so that I can build the form in the right way. It’s good to read the entire documentation of a library that we are going to work on. But it should not stop the progress entirely. I could’ve read only the parts that I needed for this project first and the rest of them later. I paused all the development because I wanted to get this form right at the first attempt.

When I started integrating StackOverflow authentication, I over-engineered the auth part so much that I myself got confused in the code flow. I had to go through the code multiple times before making a change. Insanity at high.

There are three behaviours that prevent me doing things,

  1. Trying to know everything before I build something
  2. Over-engineering code and designs while building something
  3. Trying to get things perfect at the first attempt

These behaviours actually create friction. And frictions lead to procrastination. Procrastination leads to abandonment of the project. The thought of getting things done in “Perfect” way results in project abandonment or halt.

Illustrating how perfectionism leads to abandonment

So I’m currently picking up the project again. This time, not gonna learn all the libraries beforehand, not gonna build components from scratch, not gonna over-engineer code. I’ll pick an UI library like Antd or something, copy paste component code from docs and extend the code as I need.

I can write custom components when I need, I can add code to support multiple auth providers when I need, I can add more DB tables when I absolutely need.

My current understanding is that, “Perfect software can and should be built over time by improving the initial no-so-perfect software”.

And this is not only for software engineering. This applies to everything in life. We cannot get a perfect partner, we cannot learn something perfectly at the first attempt, etc., With this knowledge in my mind, I’ll pick up my old unfinished projects and try to finish them off one-by-one.

BTW, to minimise the cost required for hosting this specific product after developing, I came up with an interesting architecture. Saving it for the next article. See’ya’ll soon!