Aight, so I have a friend who tried building a platform. In terms of engineering, not a lot of complex stuff but some auth here and some DB queries there and you should be good to go.
But the project never saw the light of day. Now, out of all the bottlenecks in the world (time, money, talent and everything else), the one thing that stopped the project was over-engineering.
"Over-Engineering?" you may ask
That's right. You can over-engineer stuff. Now, how's that a bad thing?
Sit down... I got some explaining to do here.
So, take a brand new product or a service that you want to build. How many users are you targeting initially?
If you answered more than 10, that's where the mistake lies. Unless of course, you know for sure.
Now, when you start building this product you think about scale, costs, pricing, architecture, performance and all the fancy stuff. I know this stuff feels good. I've been there in the never-ending tunnel of discussions about which tech stack to use and where are we deploying our application.
Now that rabbit hole of trying to achieve engineering perfection is over-engineering.
None of that matters to your first user.
What they want is an answer to the question, "What are you doing to solve my problem(s)?"
Does the user say the application is slow? Aight, fix it.
Does the user say they don't like the colours? Fine, fix it now.
Does the user say there are too many buttons? Hmm... see what can be removed.
You see where I am going with this right?
Perfection is a perceived trait.
- Sampath Balivada (That's me :P)
Is it truly perfect?
What might be perfect for you might not be the same for someone else. And in the context of a product, oh boy the user's perception of perfection is way more important that any other stakeholders. (Of course, there may be exceptions here)
So... wait until the user tells you what their definition of perfection is and then act on it.
Imagine you engineer a perfect(?) solution that can scale to lakhs of users and can generate millions of rupees in revenue with enough users.
Ahhh... with enough users.
You got no users right now. Build a solution, get users, ask them how they like it and then try to achieve perfection.
Perfection from the perspective of the user. Not the engineer.
How do you stop chasing perfection then?
Easy (although it isn't). Build what's barely necessary using whatever tools you have available at hand and deploy it on whichever platform you have access to.
The user doesn't care about this stuff anyways. All they need is a solution to their problem.
You might frown upon this but yeah, build something that sticks, share it with the world and then sit down to make it better. That's the only way to avoid the rabbit hole or should I say the curse of perfection for all your products and features.