Memento mori

Страницы:  1

Ответить
 

Professor Seleznov


Философия статья начинается с удивления. В данном случае я отметил для себя то, как по-разному начинающие разработчики реагируют на сложности, с которыми сталкиваются. Например, когда надо сделать выбор - какое решение взять, чтобы избежать ошибок? Кажется, все сталкиваются с такими неудобными вопросами. Давайте попробуем разобраться.
Итак, как же реагируют разработчики?
Вариант первый - все будет хорошо. Гонки, побочные эффекты, утечки памяти - если и слышал, то это все какие-то прохладные истории из скучных книжек. Где-то у кого-то когда-то было. Таймауты на запросы добавлять не буду, да и код ответа можно не проверять, работает же.
Вариант второй - все будет хорошо, надо только учесть все потенциальные проблемы. Возьмем лучшие паттерны. Перехватим все исключения, Сделаем идеально, тогда уж точно заживем. Словами классика - “но чтобы это была такая бумажка, при наличности которой ни Швондер, ни кто-либо иной не мог бы даже подойти к дверям моей квартиры”. Проблема в том, что нет такой бумажки.
Я немного приврал в начале, что речь пойдет только о начинающих разработчиках. В книге “Мифический человеко-месяц” Фредерик Брукс описывает эффект второй системы на примере весьма опытной команды. Он рассказывает о последствиях желания учесть все проблемы, с которыми они столкнулись на прошлых проектах. На мой взгляд, это самый проблемный вариант. Ведь чтобы с него переключиться, необходимо признать свою слабость, ограниченность и относительность. Это сложно.
Вариант третий - уныние. Как ни сделай, все будет плохо, ведь ошибок не избежать. Не жили богато — нечего и начинать.
Суть проблемы
Если немного обобщить, то это не про баги, а про неопределенность.
Будущее нам не известно, а прошлое нельзя изменить. Поэтому возникает страх, что неверное решение, принятое сейчас, доставит кучу проблем в будущем. И как ответ на этот страх - игнорирование, перестраховка или уныние. Но причина страха - неопределенность, от этого не исчезает.
Вопрос не в том, как избежать неопределенности, а как с ней жить
Я не вижу тут большой разницы, где мы сталкиваемся с неопределенностью - в технических вопросах или организационных. Наоборот, можно увидеть схожее и попробовать применить решения из одной области к другой.
Что применяется для проектов с большой неопределенностью? Гибкие методологии. Что они предлагают?
  • Итеративность. Начинаем итерацию с формулирования гипотез, заканчиваем их проверкой
  • Бережливость. Делаем и планируем столько, сколько нужно и когда нужно. Не раньше, не позже, не больше, не меньше
  • Реализм. Не делаем идеально, а делаем достаточно хорошо
То есть дейлики, доска, ретро, и т.д. - это просто вариант реализации. Суть же в том, как сделать работу в условиях неопределенности возможной.
Как это применить в разработке? Закладывайте метрики и логи на этапе проработки фичи. Формулируйте гипотезы и наиболее дешевые варинты проверки - прототипы. Закладывайте failure modes - что может пойти не так, как вы об этом узнате, и что будете делать дальше.
Вопрос не в том, произойдет ошибка или нет. Вопрос в том, будет ли у вас достаточно информации, чтобы найти причины.
И последнее - решение не может быть одинаково хорошим или плохим во всех ситуациях - где-то это лекарство, где-то - яд. Все зависит от контекста.
Подводя итоги
Есть вещи, которые необходимо принять, чтобы двигаться дальше. В коде, который вы пишите сегодня, обязательно будут ошибки. Причина - наше знание ограничено. Скорее всего вы чего-то не учли и ваше решение окажется неоптимальным.
Чтобы с этим справиться, закладывайте возможность ошибки. Относитесь к планированию и разработке, как набору гипотез, которые могут подтвердиться или не подтвердиться. Добавляйте метрики, дробите на итерации, проверяйте гипотезы в конце итераций.
Не живите так, будто вы бессмертны. Не пишите код, будто в нем нет багов.-Источник
 
Loading...
Error