В идеале - продумать идею до мелочей, описать все возможные use cases, нарисовать прототипы экранов, продумать архитектуру и приступить к разработке.
Но что мы делаем идеально? Поэтому, можно просто начать делать приложение, и отнестись к этому как к разработке прототипа. В процессе всплывет очень много деталей и тонкостей, до которых просто умом дойти очень сложно. Потом, когда будет хоть что то работающее, можно выйти с этим на рынок, собрать фидбэк. И после того, как пользователи скажут, что это совсем не то, а надо так то и так то, можно более обстоятельно итеративно дорабатывать прототип до ума или просто начать все с нуля и сделать нормально.