Как стать автором
Обновить

Оптимизация или почему прод в огне

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров7.8K

Порой наши попытки что-то оптимизировать и принести пользу бизнесу оборачиваются нам дополнительной работой, а бизнесу - убытками.

Что такое оптимизация?

Оптимизация - модификация системы для улучшения её эффективности.

Или

Оптимизация - приведение программы от состояния «не устраивает», в состояние «пойдёт», по параметрам производительности.

Следует помнить, что состояния «хорошо» мы никогда не добьемся. Так как клиент всегда будет не доволен. А вот состояния «пойдёт» - можно добиться почти всегда.

Производительность может измеряться как в количестве потребляемых ресурсов приложением, например сколько оно потребляет ОЗУ, насколько сильно напрягает CPU, или вообще, специфичной, для домена, метрике.
Например: максимальное количество выданных займов в одну единицу времени.
Или сколько мы можем обрабатывать заказов в пиковые праздничные дни.

Связанные понятия

Bottleneck или бутылочные горлышки

Это критическая часть кода, которая потребляет значительное количество ресурсов.
Будто временны́х или ресурсов самой машины, на которой запущено приложение.
Часто бывает и то и другое.

Обычно проблемы в рамках всего приложения создают именно bottleneck'и. Чтобы их отследить, необходимо использовать профилировщики и / или бенчмарки.

Отличными примерами bottleneck'ов являются любые http запросы и ожидания ответа от каких-то внешних (и внутренних порой!) сервисов. Работа с базой данных, например вызов хранимой процедуры или выполнение сложного запроса.

Если как-то на работу базы мы можем повлиять, то на ожидания ответа от другого сервиса - обычно не можем.

Tradeoff или компромиссы

Оптимизация - это далеко не про создание перфоманса из воздуха. Зачастую приходится выбирать из нескольких зол.

Например:
Добавить cache и не слать запросы в базу данных, тем самым избавляясь от бутылочного горлышка и разгружая базу.

Взамен получить ошибку переполнения кучи, если данных, которые мы закэшировали оказалось, неожиданно, слишком много.

Конечно, обычно можно настроить размер cache, но увеличенное потребление ОЗУ все-таки может стать проблемой.

Tradeoff - выбор самого оптимального, в рамках вашего контекста, решения.

Контекст может быть таким, что необходимо уменьшить потребление ОЗУ у сервиса, при этом про увеличение производительности может речи не идти.

Если требования по оптимизации неизвестны - необходимо их узнать.
Иначе уже на этапе анализа задачи вы совершите свою первую ошибку.

Когда следует заниматься оптимизацией

Желательно никогда.

Заниматься оптимизацией может заставить только бизнес и только когда уже есть корректно работающий функционал.

А если все-таки такой запрос от бизнеса пришёл - необходимо помнить следующее:

Заранее знай, к какому результату вы хотите придти

Я на это намекал, когда писал про tradeoff.

Оптимизировать можно бесконечно и что угодно.

Стоит ли оптимизировать несколько дней определённый участок кода ради прироста в несколько миллисекунд?
Ответ: да. Если этого требует ваш бизнес.
В остальных случаях не стоит.

Чтобы часто не задаваться вопросом: «А стоит ли этот код оптимизировать?».
Необходимо знать, что именно необходимо оптимизировать.
Возможно объект оптимизации находится в сервисе, которым занимается другой сотрудник. В таком случае, скорее всего, можно избежать работы полностью или частично.

«Лучший код тот, который не был написан»

Пользоваться данным откровением из книги «Чистый код" вы сможете только в том случае, если вы знаете, какой результат вы хотите достичь.

Преждевременная оптимизация - корень всех зол или бед

Проблема преждевременной оптимизации возникает тогда, когда вы хотите «сделать бизнесу хорошо», до того как он это попросил.

Когда вы это делаете - вы уже нарушаете принципы YAGNI и скорее всего KISS.
Следуя которому вы стараетесь писать максимально простой код.

А оптимизация это зачастую не про простой код.

Сложный код сложнее тестировать, поддерживать, а если этот код появился в результате попытки что-то преждевременно оптимизировать - то ещё и в разы дороже.

Если не знать чего хочет бизнес и при этом заниматься преждевременной оптимизацией - можно расстроить как бизнес, так и коллег, которые будут тратить свое время, чтобы понять, почему «прод в огне».

Бизнесу особенно обидно, потому что он хотел как лучше, а в итоге снова оказался недовольным.

Поэтому необходимо помнить, что:

Оптимизация - твой враг

Если не нужно оптимизировать - не делай этого.
Если делать то, чего тебя бизнес делать не просил - бизнес этого скорее всего не оценит.

И возможно, вы будете оптимизировать собственный код, который был написан при попытке «что-то преждевременно оптимизировать».

Если три правила активно нарушать, то рано или поздно случится следующее:

Как выглядят попытки программиста что-то оптимизировать
Как выглядят попытки программиста что-то оптимизировать

Теги:
Хабы:
Всего голосов 16: ↑6 и ↓10-1
Комментарии15

Публикации

Истории

Работа

.NET разработчик
70 вакансий

Ближайшие события

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область