По сути, я выясняю, какая функциональность должна быть первой. Я не имею дело с пользовательским интерфейсом, ни с тем, как он выглядит, ни с тем, как он должен вводиться, я имею дело с тем, что хочет сделать пользователь.
Затем я строю модель данных вокруг этого. Иногда это очень простая модель данных (особенно если это простое требование, например, «воспроизвести фильм»), в других случаях это очень сложно.
Только после того, как было решено, я пытаюсь разработать пользовательский интерфейс, который отражает как модель, так и то, как пользователь ожидает, что ввод будет работать.
Прими это как хочешь; это работает для меня довольно эффективно.