**Избыточность в дизайне системы

Это очень частая проблема, причем не только в дизайне интерфейса, но и в дизайне самих протоколов, сервисов, общей солюшн архитектуры. Смотришь на спроектированное и думаешь "ну вот зачем тут столько лишнего, одно дублирует второе, третье вообще непонятно зачем"**. Я с этим сталкиваюсь всю жизнь.

Обычно есть два пути: - От общего к частному: это долго, дорого, когда в попытке объять своей мыслью и решение все, команда пытается сделать учитывающий все дизайн - От частного к общему: это быстро, когда решаешь конкретные проблемы. Но, потом смотришь на это "поделие" спустя пол года и понимаешь, что все надо переписать

А как тогда? Я сторонник от общего к частному (потому что быстро), но, с добавлением стадии "выхода на общее". Это как когда рисуешь натюрморт. - Набрасываешь объекты, отошел, посмотрел на общую композицию, как они сочетаются, ничего не заваливается? - Снова подошел к холсту, работаешь, детализируешь - Спустя 15 минут снова отошел, проверил композицию, сравнил с задумкой, убедился что рефлексы и светотень работает - Снова продолжаешь детализировать

И так далее. Надо фокусироваться на конкретной задаче, но думая о системе в целом. Как она будет развиваться, как мы это обеспечим потом, как сделать так, чтобы не потратить кучу сил на преждевременную оптимизацию, но заложить точки расширения? Такой подход позволяет идти быстро, итеративно, не теряя общей картины. И не требует больших расходов усилий.

Почему это важно? Все что плохо напроектировано повышает энтропию в проекте. Одна из ключевых мыслей дядюшки Боба гласит: "архитектура призвана снизить стоимость создания и поддержки программного обеспечения". Все что плохо спроектировано повышает стоимость. Каждая дерьмовая фича жрет ресурс. Поэтому надо думать, а можем ли мы обобщить контракт? А как не делать отдельную механику под специфичное требование? Может локализуем ответственность в одном модуле? Сделаем его расширяемым? Внедрим подстановку зависимостей? Выделим сложное за слой абстракции? Может мы можем это сделать простым? А мы можем найти и взять готовое? А как решить задачу без кода? А сколько стоит это автоматизировать и сколько это принесет на год? Раздутая фичами кодовая база это дорого и неэффективно. Самый дешевый и эффективный код — код, которого нет

repost

81

input message

напишите коммент

еще контент в этом сообществе

еще контент в этом соообществе

войдите, чтобы увидеть

и подписаться на интересных профи

в приложении больше возможностей

пока в веб-версии есть не всё — мы вовсю работаем над ней

сетка — cоциальная сеть для нетворкинга от hh.ru

пересекайтесь с теми, кто повлияет на ваш профессиональный путь