← Усі дописи

Complicated vs. Complex

Найбільша проблема, яка, з мого досвіду, вбиває системи – це нерозуміння/ігнорування різниці між complex і complicated.

Обидва терміни зазвичай перекладаються як «складний», але це зовсім різні речі.

Complex система – коли складною є сама предметна область: білінг, банкінг, платіжні системи, логістика, медицина. У таких системах багато сутностей, залежностей, винятків, взаємодій та сертифікацій. Складність є невід’ємною частиною проблеми, її не можна просто прибрати. Спробуй зробити власний query planner для PostgreSQL або реалізувати спеку ZooKeeper, щоб зрозуміти про що я)

Complicated рішення – коли ми самі створюємо складність, часто на рівному місці. Наприклад:

Таку складність можна і треба прибирати.

Будь-яка система з часом деградує, і ви з цим нічого не зробите. Команда людей вирівнюється до середнього рівня. Система стає складнішою навіть попри ваші спроби цьому запобігти. Складність накопичується природно:

Хороше інженерне рішення – це не боротьба зі складністю домену, це боротьба з надмірною складністю, яку ми самі й створюємо.

Складна система не виправдовує складне рішення. Навпаки, чим складніше система, тим важливіше робити її реалізацію простою.

Cognitive load is how much a developer needs to think in order to complete a task.

Головне питання до будь-якого рішення: чи зменшує воно когнітивне навантаження? Не наскільки воно «красиве», елегантне або абстрактне. А наскільки швидко нова людина агент зрозуміє:

Complexity – те, що зазвичай надає конкурентну перевагу бізнесу, бо це складно повторити іншим. Але лише коли ця складність походить від потреб бізнесу та предметної області, а не від вашої архітектурної фантазії.

Хороший інженер не придумує складне рішення. Він бере складну проблему і може зробити її настільки простою, наскільки це можливо (але не простіше за це).

Простота – це не відсутність складності. Простота – це коли складність знаходиться тільки там, де вона справді необхідна. Робіть просто.

Почитати


Уперше опубліковано в моєму Telegram-каналі.