На самом деле нет списка «каждой программе нужен этот», потому что нет абсолютно ничего, что нужно каждой программе.
Хотя некоторые советы: не «заставляйте это работать», затем «добавляйте отказоустойчивость». Защитное программирование и учет ошибок должны быть непрерывной частью разработки. Гораздо проще (и обычно более эффективно), если вы учитываете ошибки и неожиданный ввод , когда вы пишете кусок кода, а не после того, как это сделано.
Что касается того, стоит ли сначала создавать графический интерфейс, ответьте на этот вопрос: является ли самый важный аспект программы в том, что он делает или , как он выглядит ? Это серьезный вопрос, который, честно говоря, может варьироваться от приложения к приложению (хотя обычно важнее первый).
Если функциональность важнее, смоделируйте свою информацию в коде и получите некоторую базовую «бизнес-логику» (термин искусства, представляющий невизуальную логику в приложении, которая выполняет правила и операции, которые являются фундаментальными для этой цели программы), затем создайте графический интерфейс, который хорошо взаимодействует с ним.
Если графический интерфейс действительно важнее, сначала создайте его и смоделируйте объекты данных и бизнес-логику вокруг графического интерфейса.
Я бы посоветовал вам просмотреть эту статью в Википедии . Он довольно опрометчив (как и большинство технических статей в Википедии), но он предоставляет несколько хороших ссылок и дает вам приблизительное представление о том, как продвигается разработка и сопровождение программного обеспечения в «реальном мире».