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