Расскажу историю из далекого прошлого, когда писали в универе программки на Паскале, СИ, и каких-то неведомых ныне языках.
Зеленые бойцы придумывали кучу фич, с умным видом колбасили несколько экранов кода, радостно нажимали на кнопку «Компилировать» и… программа, конечно, не работала. Несчастные погружались в бесконечный процесс тестирования, который не всегда заканчивался успешно. Если программу таки удавалось запустить, то лучше было на нее не дышать и как можно быстрее сдать, пока ничего опять не сломалось (желательно не давая преподавателю нажимать на лишние кнопки).
Более опытные товарищи начинали с небольшого core-функционала и тестов. Выделяли логические куски в небольшие процедуры (да, раньше были процедуры), отлаживали их отдельно, собирали в библиотеки и строили логику основной программы уже на них. Получалось понятно, четко, прозрачно и быстро. Самое главное, что можно было добавлять фичи, менять поведение программы не опасаясь, что где-то что-то отвалится.
К чему это я? А к тому, что недавно мне задали вопрос – как продумать большую систему (веб-сервис) у которого должно быть много функционала, сложная навигация, куча контента… типа AirBnb или Pinterest. С чего начать и как все учесть чтобы ничего потом не переделывать. Так вот:
– Никак!
Вариант «один раз все придумать и потом ничего не переделывать» – не вариант. Для учебной задачки это еще приемлемо, но для боевого проекта – утопия.