Существует очень простой и практичный подход к этому, который работает для широкого спектра малых и средних проектов. Даже при том, что это вероятно не будет хорошо работать для Исследователей Марса.
Сначала определите, что вы хотите, чтобы система делала, и запишите все отдельные функции. Это может быть как изощренная доска объявлений, так и несколько простых пунктов, набросанных на листе бумаги перед вами. Но важно, чтобы вы знали, чего вы хотите от этого.
На основании этого составьте общую структуру системы. Опять же, это очень часто просто быстрая отрисовка различных классов / модулей и того, как они связаны друг с другом, но может быть такой же сложной, как и весь документ. Важно то, что у вас есть какое-то представление о том, как вы собираетесь внедрить систему. Но, вероятно, это будет уточняться по мере того, как вы будете над этим работать, поэтому не пытайтесь переходить к сложному и подробному.
Из всех этих функций определите, что является ключевым для программы - основные функции.
Затем реализуйте их один за другим. Теперь ключевым моментом здесь является то, чтобы действительно убедиться, что после того, как вы реализовали функцию, она сделана и полностью работает - в идеале это сопровождается модульным тестом, который гарантирует, что она продолжает работать. Я обычно полагаю, что буду настолько занят, что у меня никогда не будет времени вернуться к функции и исправить ее.
Как только основные функции реализованы, я обычно стараюсь использовать систему как можно ближе к производственной среде. Это дает вам a) любые ошибки, которые вы, возможно, пропустили ранее, и b) вы получите хорошее представление о приоритете следующих функций.
Затем вы можете продолжить реализацию оставшихся функций по мере необходимости.
Качество кода и особенности
Имея в виду вышеизложенное, я склонен жертвовать функциями ради качества кода, если мне нужно сделать крайний срок. Просто потому, что, по крайней мере, в моей работе, когда я что-то заканчиваю, мое руководство предполагает, что это сделано. И что они могут дать мне следующую задачу. У меня не так много времени, чтобы сделать код приятнее после свершившегося факта.
А как насчет обработки исключений?
Если вы не хотите реализовывать это с нуля, вы можете просто указать это как другую функцию в списке. И когда вы доберетесь до этого, вы сможете это реализовать. Но, скорее всего, в вашем случае, вероятно, есть много других вещей, которые в первую очередь важнее.
Однако существует минимальное требование для исключений: убедитесь, что пользователь уведомлен, если что-то пойдет не так - независимо от того, насколько уродливым может быть вывод. Не глотайте исключения где-нибудь.