Learn by making mistakes
One way to make the hard-to-reverse decisions is to do research really well.
A way I like better is to build a simplified version with a specific goal in mind to maximize learning.
Let’s say you’re building a space rocket out of stainless steel and with a new engine that hasn’t flown before.
The first version is not supposed to go to space. You do a static fire first on the ground.
Then you try to have it take off the ground, hover for a while, and land back on the pad.

It looks like a flying barn; it was built under a tent, but hey, you got hands-on experience with welding steel, throttling the engines, and controls.
You take a gradual approach, focused on learning.
Sure, a few experiments may end up like this:

But if you’ve learned something, a big fiery mess is still a fantastic outcome.
Eventually, though, your design evolves over many fast iterations, and you end up with something that works.

The same process can be used in a software project. To maximize learning, focus on building targeted prototypes that help you learn about a scaling issue, a tech stack, or uncover a bottleneck.
Stress test the prototype. Make it explode and learn how to build it a bit better next time.
The fastest way to make it right is to make all the mistakes as cheaply and quickly as possible.
Yours,
Taj
P.S. This was a rocket-heavy post, so if you’re not into that kind of thing, here are a few kittens to relax your eyes:
