«Этот олень просто огромный!»
Той ночью я поздно возвращался домой. Когда я подъезжал к дому, в свет фар попал самый большой олень, которого я видел в жизни, он стоял прямо посередине дороги. Я живу в лесистой местности, и соседи говорили, что олени здесь гуляют свободно, но тогда я впервые увидел одного из них. Это животное выросло таким большим точно не благодаря своим инстинктам: когда его осветили фары, Бэмби рванулся… прямиком на дорожку к моему дому!
Возвращайся!
Я погнался за ним, надеясь ещё на пару секунд продлить это импровизированное сафари, успев только увидеть, как белый хвост исчезает в кустах.
Этого было слишком мало, мне нужно было увидеть Бэмби снова!
Я редко вижу животных рядом с домом, но они точно здесь живут. Мы слышим воющих по ночам койотов и нас предупредили о блуждающей в наших краях рыси. Однако они знают, как не попадаться на глаза, и мне почти никогда не удаётся увидеть их вживую.
Хм… можно ли как-то исправить ситуацию?
Может, поставить камеру наблюдать за зверями, чтобы она уведомляла меня, когда они проходят рядом? Я бы видел их каждый день! (Не буду отрицать, меня довольно сильно вдохновила полоса препятствий ниндзя-белки).
Пора приступать к мозговому штурму по разработке моего изобретения:
- Трансляция видео, направленного на лес.
- Запись видео, когда мимо проходит животное. Буду сохранять его в облако!
- Мне понадобится приложение для iPhone, уведомляющее меня, когда рядом будет животное.
- О, и я ведь могу организовать стриминг видеотрансляции в приложение.
- Нужен искусственный интеллект! Буду использовать распознавание изображений для определения вида проходящего животного, чтобы приложение уведомляло меня о самых уникальных зверях (простите, еноты).
- И, наконец, логгинг для фиксации времени суток, когда появляется каждое из животных. Добавим немного науки.
Всё это вполне реализуемо. Я уже представлял, как однажды получу на телефон уведомление: «Скорей, на улице олень!»
Но где-то в глубине сознания послышался ворчливый голос, шептавший: «Ты никогда не закончишь этот проект».
Видите ли, у меня есть длинный список сторонних проектов, которые я забросил в процессе реализации. «И этот ты забросишь», — продолжал настаивать голос. «Даже начинать не стоит».
Я не хотел прислушиваться к этому голосу. Но он не лгал.
Что же делать?
Итак, он предупредил о реальном риске. И теперь я знаю об этом риске. Что теперь можно сделать, чтобы понизить его и увеличить мои шансы? Я вспомнил свои предыдущие проекты, пытаясь найти подсказку, способную помочь мне успешно завершить начатое.
Я обнаружил один признак.
Звучит безумно, но вспомнив все свои старые работы, я осознал, что мёртвые проекты имеют они одну удивительную общую черту: я забрасывал их через две недели после начала. Почти каждый завершённый сторонний проект я доделывал меньше, чем за две недели. Похоже, две недели — это срок иссякания моей мотивации.
Хм, это было неожиданно.
Но это имело смысл. Все эти проекты на энтузиазме я начинал из интереса, без особой толкающей их вперёд мотивации. Да, я завершал крупные сторонние проекты, требовавшие нескольких месяцев работы, но все они решали какую-то необходимую мне задачу. А что же было с теми, которые я начинал из интереса? Они оказывались забытыми после того, как иссякал энтузиазм.
Наблюдение за оленями совершенно точно относилось к категории проектов «ради интереса». Это значило, что у меня есть дедлайн, и он отнюдь не искусственный. В невидимых часах начал течь песок, и с каждой проходящей секундой моя мотивация угасала.
Мне нужно было бежать наперегонки со временем.
Как это сделать? Я ни за что не успею за две недели реализовать такое количество функций.
Настало время сделать то же, чем я занимался на работе: безжалостно урезать объём работы.
Если я не смогу завершить проект за две недели, то и пробовать бы не стоило. Как бы ни очаровывало меня предвкушение, мне нужно было смотреть на весь проект сквозь эту призму. Что же попадёт под топор?
Сначала мне нужно было чётко сформулировать реальную задачу, которую я хочу решить.
Я хотел видеть животных, когда они проходят рядом. Для этого необходимо ПО, замечающее, когда они появляются. И что-то, что сможет мгновенно меня об этом уведомлять. Вот и всё. Всё остальное было свистелками.
Нужно уничтожить все свистелки.
Было бы здорово сохранять видеозапись с оленем, но нет. Прощай, запись в облако.
Трансляция видео в телефон? Забудем об этом.
Логгинг? Только в конце, если останется время.
Я пытался урезать объём даже оставшихся функций. В каждой части проекта я задавался вопросом: мне действительно это нужно? Есть ли более простой способ достижения той же цели?
Действительно ли мне нужно было создавать собственное приложение, сообщающее о животном? С этим справится Телеграм-бот. Отлично, не нужно учиться тому, как собирать приложения для iPhone.
Критически важно ограничить количество новых инструментов, которые придётся изучать. На изучение одного нового инструмента может потребоваться долгое время, которое отъест часть нашего двухнедельного окна. Изучение двух новых инструментов — это гарантированный провал.
Наверно, это неподходящее время для изучения новой библиотеки машинного обучения, вместо неё я использую алгоритм распознавания движений. Когда приложение распознает движение, то будет делать снимок и отсылать его мне. Я возьму на себя роль ИИ и сам буду решать, интересен ли он.
Иногда урезание объёмов оказывается менее заметным. Некоторые этапы, которые на работе могут считаться best practices, дома будут ненужной обузой. Чтобы разобраться, что из них что, сначала задумайтесь, почему нечто вообще считается best practice.
Нужно ли писать тесты для кода распознавания движения? Я понятия не имею, как его тестировать. Чёрт возьми, да через две недели я даже не буду поддерживать этот код. Вырезаем. Как насчёт чёткого и обобщённого способа отправки уведомлений пользователям? Здесь я — единственный получатель, поэтому просто пропишу себя в Телеграм-бот.
Но от стремления добавлять «полезные» функции не избавиться. У него даже есть название: scope creep («расползание границ»).
Это настойчивое желание добавить ещё одну вещь. «Нужно упростить способ кодирования этой функции». «Что если я сделаю это при помощи другого инструмента?»
Расползание границ возникает естественным образом, и если я не буду с ним бороться, время на таймере истечёт.
Настало время марафона кодинга. Я нашёл подходящую камеру на Amazon. Покупаем. Написал код распознавания движений, связал его с камерой. Готово. Написал Телеграм-бота. Отлично! Соединил их вместе. Круто!
Я переступил отметку в две недели, но энтузиазм не иссякал. Я закончу этот проект! Калибровка датчика движения для того, чтобы он работал на открытом воздухе, оказалась сложнее, чем я ожидал, но работа двигалась… а потом в часах упала последняя песчинка.
Несмотря на все мои усилия, пару дней я не мог работать над проектом, после чего мой таймер мотивации обнулился. Внезапно подталкивание его к завершению стало казаться непосильным трудом. Я не хотел продолжать.
Нет! Я же почти его закончил! Проект был готов на 95%, для завершения оставался всего один толчок.
Но он просто больше не казался мне интересным.
Его никогда не двигало вперёд серьёзное видение, я начал его под влиянием момента. А мотивация, как и момент, прошли.
Часть меня пыталась это отрицать. Я продолжал думать: «Закончу завтра». Пятью «завтрами» позже мне пришлось признать правду. Настало время двигаться дальше и избавиться от этой умственной нагрузки. Это был проект на энтузиазме, и когда энтузиазм иссяк, он просто больше не стоил дальнейших трудов.
Но не всё было потеряно. Когда я начинал проект, я тщательно спланировал его так, чтобы на самом деле это были три отдельных проекта, замаскированные под один: алгоритм распознавания движения, Телеграм-бот и проект интеграции для соединения этих двух частей. Первые два проекта я завершил! Этого бы не произошло без безжалостного урезания объёмов.
И каждый проект был полезен. Я спроектировал датчик движения и Телеграм-бота так, чтобы они были независимы от приложения, которое я разрабатывал. Теперь в любом из своих будущих проектов я смогу при необходимости повторно использовать эти компоненты, что сэкономит мне несколько дней работы и позволит за тот же двухнедельный период завершить более амбициозный проект. А ещё в моём инструментарии появились новые инструменты. Это всё равно победа!
Пытаясь сделать меньше, мне удалось сделать больше.
Поэтому я двинулся дальше. Но когда в голове снова послышится тот ворчливый голос, я буду готов.
И если я снова увижу Бэмби, то просто сделаю снимок.
SergoBabich
Скажу без лукавства и преукрасов. Статья интересная и в какой-то степени заставила задуматься над своими «внутренними» дедлайнами.
В этой фразе, к сожалению, увидел себя:( Только в моём случае это касается изучения чего-то нового, нежели разработки конкретных проектов.