Pull to refresh

Неэффективная эффективность

Reading time4 min
Views8.4K
Original author: Kent Beck


Вы делаете утренний кофе. Хотите приготовить 2 чашки. Вы:


  • Начнёте кипятить воду на 1 чашку, чтобы вода вскипела пораньше, и одна чашка была готова как можно раньше
  • Начнёте кипятить воду на 2 чашки, чтобы приготовить их одновременно и наиболее эффективно?

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


Раз такой намёк не был понят, попробую написать прямо:


  • Мы ежедневно делаем выбор между временем отклика и производительностью
  • Мы предвзяты в сторону производительности (я виню в этом Тейлоризм)
  • Высокая цена задержки, высокие шансы получения новой информации и большая скорость изменения обстоятельств — всё это говорит, что выбирать, наоборот, нужно быстрый отклик

История с кофе — лишь один из примеров явления.


В оригинале используются термины «Latency» и «Throughput». Я решил, что наиболее подходящими переводами в контексте будут «Время отклика» и «Производительность» соответсвенно — прим. перев.


Время отклика vs. Производительность


Время отклика это “интервал между причиной и следствием”. Скажем, я решил поехать в центр города. Сколько времени пройдёт до того, как я окажусь там? Отклик измеряется временем.


Производительность это “скорость достижения желаемого результата”. Люди хотят добираться до центра. Как много людей там оказывается каждый час? Производительность измеряется в количестве за время.


Иногда время отклика и производительность конфликтуют. Автобусы могут перевозить больше людей в час, чем автомобили (то есть более производительны), но лично мне понадобится больше времени, чтобы добраться до центра, потому что я должен идти к автобусной остановке и ждать автобус (то есть время отклика выше).


Зависимость между временем отклика и производительностью не всегда однозначна. Если из-за большого количества людей, пересевших на автомобили, трафик ухудшается, то страдают и время отклика, и производительность. Если же достаточно людей начинает использовать автобус, то вслед за трафиком и время отклика, и производительность улучшаются.


Кофе


Вернёмся к примеру с кофе. Вот схема последовательного приготовления чашек:



А вот «одновременное» приготовление чашек:



HEAT — нагревание воды
POUR — заливание воды в фильтр
DRIP — просачивание воды через фильтр
прим. перев.

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


  • Оптимизируйте время отклика, когда один из заказчиков изнемогает без кофе, а другой — нет (например, ещё спит). Цена задержки для первого заказчика высока.
  • Оптимизируйте время отклика, когда человек готовящий кофе может чему-нибудь научиться на своих ошибках. Лучше получить 1 чашку с невкусным кофе и 1 чашку со вкусным, чем получить как можно раньше 2 чашки с невкусным кофе.
  • Оптимизируйте время отклика, когда обстоятельства могут поменяться. Если кто-нибудь из заказчиков может передумать, захотев чай вместо кофе, лучше закончить один кофе и начать делать чай, чем выбросить «эффективно» приготовленную вторую чашку кофе.

Аналогия


При разработке программного обеспечения мы сталкиваемся с эквивалентом «одна чашка за раз или две параллельно» каждый день:


  • Мы тщательно планируем все предполагаемые улучшения архитектуры заранее или же начинаем работу с одного очевидного?
  • Мы тщательно составляем план разработки с учётом всех требований сразу или же реализуем одно самое важное и только после этого думаем дальше?
  • Мы тщательно перебираем гору резюме, чтобы найти самого лучшего кандидата или быстро нанимаем первого подходящего, чтобы заменить его, если не сработаемся?

Правильный ответ на каждый из вопросов — «зависит от ситуации». Три важных аспекта здесь это:


  • Как дорого стоит промедление?
  • Насколько вероятно, что мы узнаем в процессе работы что-то, что заставит нас изменить первоначальный подход?
  • Какова вероятность, что поставленная задача изменится из-за внешних обстоятельств?

Высокая оценка в каждом (или в нескольких) из показателей выше должны подсказать, что стоит предпочесть небольшое время отклика высокой производительности.


Внимательный читатель может заметить, что во всех примерах выше используется слово «тщательно». Но даже у самого тщательного планирования есть свои пределы. С определённого момента планирование перестаёт работать вообще и только работа с последующим разбором полётов приводит к результату. Я думаю, что илюзия способности подумать абсолютно обо всём заранее делает нас предвзятыми в пользу производительности.


Интуиция


Выбор в пользу низкого времени отклика даже ценой (возможного) снижения производительности — один из уроков, которые моё поколение выучило на своих ошибках. О другом таком уроке я писал, рассуждая о корзине вариантов. Похоже, что оба этих урока сегодня подзабыты.


Выбор вопреки срочности, обучению на ошибках и непредсказуемости обстоятельств — исключение, не правило. Надеюсь, вы поймёте это быстрее, чем в своё время я.


Неэффективная эффективность


Заголовок этой статьи — игра слов. Производительность, вполне очевидно кажущаяся эффективной, часто оказывается неэффективной. На ум приходит цитата Питера Друкера: «Нет ничего бесполезней, чем эффективно делать то, чего не следует делать вообще».


Но заголовок можно прочитать и иначе. Акцентируясь на времени отклика, мы получаем обратную связь раньше. Обучение и адаптация к изменениям приводит к меньшим трудозатратам и, следовательно, к большей эффективности. Каждая отдельная часть работы неэффективна (по сравнению с неким теоретическим максимумом), но работа в целом эффективна.


В моем мире время отклика доминирует. Чаще всего. Но не всегда.

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+13
Comments16

Articles