Every time you want to start something new, there is a deep urge to plan. But not to make general planning. Instead, we want to plan deep and complex stuff.
Sometimes, this ends well, especially if the feature or project isn’t too big or complex.
But how this ends when a feature is complex with many unknowns is a different thing. Even when you think that you know everything, you probably don’t. And even if you do, there is a much better and cleaner way to do it.
So there are actually two ways to go about this. Plan as long as you want but keep your mind open for changes or don’t plan too much.
Personally, I mostly like to plan for the sake of planning. Because when I plan in my head there aren’t unknowns. I can come up with the perfect solution.
Once I know what the perfect world seems like, I will try to make the real-world thing as similar as possible to my imagination.
But not everything is fun to plan, there are features that are complex as a result. They aren’t fun to plan.
In this case, I am diving directly in. I have a small picture of the thing that I want to build, and I start writing code.
Always taking the most naive road at first, until I overcame all the obstacles. Once the obstacles are gone, I have zero unknowns. At this point, I start to think, if that was the best way to accomplish this result.
In the end, I always refactor everything multiple times until I have a result that I am satisfied with.