Here is the problem, an enthusiastic man wants to build an app, however he only knows roughly how the app should work. There are a lot of details he didn't know.
How does he design his app?
Do not design, but just code the most important first & test to see how it goes then modify gradually. After the highest priority function finished, he can move to the next priority function. Bottom-up Approach.
Keep thinking until he realized all the details then design a complete app before actually coding. Top-down Approach.
Combine of both option1 &2, ie he can design some basic function first then start coding even he didn't realise all detail then modify accordingly.
It's very hard to know all the details right at the beginning cos we are human & we can't predict the future.
So i vote for option1 or 3. But it's kind of painful if you has to change ur code if you're missing the details. A lot of things has to be changed. My instructor in university say he always prefers top-down approach cos he believed it better.
However, i think build a software just like u live a life, you never know in advanced what will happen in the future, so option1,3 could be the better one.
What is your solution?