Проектирование системы сильно отличается от написания алгоритма. Для алгоритма требования обычно ясны, есть понятный критерий правильности. Для системы же требования размыты и меняются, нет единственно правильного решения и легко построить что-то чрезмерно сложное. Поэтому цель архитектора не найти идеальный дизайн, а избежать ужасных решений и чётко разделить ответственность между компонентами. Проектирование больших компьютерных систем слишком сложно для строгой науки. Поэтому приходится опираться на опыт.
В далеком 1983, когда компьютерами занимались академики, Батлер Лэмпсон написал Hints for Computer System Design. Он описал принципы, которые следует учитывать при проектировании систем - "делай хорошо, плохо само получится".
Как и многие труды того времени, актуальности этот документ не потерял и сегодня. Крайне рекомендую почитать оригинал. Я для себя записал эти принципы и примеры из современного мира, можете ознакомиться