За многие годы написания прикладного софта у меня выработался следующий стиль разработки:
1) сначала пишу пользоваельский интерфейс, вылизываю его чтобы вырисовалась концепция всей программы — т.е. окна, кнопки, таблицы, списки, и даже документация;
2) потом начинаю реализовывать функционал — один пункт меню заработал, другой, третий и т.д. попутно дорабатываю интерфейс, если где-то придумал улучшение;
3) и только в третью очередь я начинаю «причесывать» код, растаскивать его по модулям, оптимизировать скорость, потребление памяти, читаемость объектов и их методов.