Иногда, решая непростую задачу, я застреваю с ней. Я понимаю это, когда начинаю заниматься пустячными делами, раздавать советы другим людям, пить много кофе, постоянно искать что бы перекусить и работать над низкоприоритетными вещами. Время идет, а сделано мало.
Когда я обратил на это внимание, я серьезно призадумался, взывая к собственной совести, чувству долга и гордости человека, который никогда не подводит себя и свою команду.
Со временем я выработал способ, позволяющий вернуть мне продуктивность в такой ситуации и суметь закончить непростую задачу. Этим опытом я и хочу поделиться.
Предварительные условия
В статье я исхожу из того, что у вас есть четкое понимание стоящей перед вами задачи. Если такого понимания нет, нужно вернуться к своим записям, чертежной доске или пообщаться с заказчиком. Вы определенно не сможете быть продуктивным, если у вас нет четкого понимания поставленной задачи. Скорее всего вы просто впустую потратите свое время и деньги заказчика.
Итак, мы отталкиваемся от того, что вы знаете что делать, но интеллектуально подавлены задачей, не знаете как к ней подступиться и с чего начать.
Моя стратегия состоит из 3 последовательных шагов, позволяющих расправиться с трудной задачей:
- Троньтесь с места — начните движение, поверьте в свои силы;
- Получите контроль — окончательно поборите нерешительность, составьте карту пути;
- Ускорьтесь — обретя уверенность, увеличьте скорость до максимальной
Троньтесь с места
“Писать роман — это как вести машину ночью. Вы видите дорогу только на расстоянии включенных фар, но даже таким образом вы можете осилить весь путь” — Э.Л.Доктороу
25-минутный рывок
Первое, что нужно сделать, это физически сесть перед компьютером с готовностью писать код. Если вы еще не находитесь в этом положении — нужно применить все свои навыки переговорщика и переместить свое сопротивляющееся тело в рабочее положение. Это непросто спорить с самим собой, но вы всегда можете пообещать себе какое-нибудь небольшое вознаграждение взамен на эти 25 решительных минут. А затем, после небольшого перерыва, еще 25 минут. И еще. Попробуйте технику “Помидорка”
Срывайте фрукты, висящие ниже всего
Большая Сложная Задача будет пытаться выбросить вас из седла (стула) и обездвижить. Но чтобы добиться прогресса, необходимо твердо и уверенно двигаться вперед. Погрузитесь в программирование настолько, насколько сможете. Возьмите небольшую подзадачу, которую вы знаете как выполнять. Пусть не целиком, но хотя бы на несколько шагов вперед. Следующие шаги станут очевиднее в процессе работы над текущими. “Срывайте” один “фрукт” за другим, перемещайтесь от одной небольшой задачки к следующей, набирая таким образом обороты. Удерживая цепь из этих задач, упрямо продвигайтесь вреред через ветра и волны прокрастинации.
Copy & Paste
Копипаст — плохая практика. Однако, если перед вами большая деморализующая задача, копипаст может стать хорошей отправной точкой. Найдите похожий код в своих предыдущих проектах, поищите примеры в Google или на Stackoverflow. Используйте этот код, предварительно подредактировав его под текущую задачу. Ну и конечно не забудьте впоследствии почистить его и избавиться от негативных эффектов.
Разведка боем
Оцените территорию вашей задачи на наличие возможных путей решения и потенциальных преград. Не вступайте в открытый бой с задачей, пока вы еще не встали твердо на ноги. Приступайте к работе над подзадачей только в том случае, если она простая, в противном случае просто оцените ее степень сложности и запланируйте на потом. Чтобы лучше думалось, попробуйте:
- Поискать идеи реализации в интернете
- Пообщаться с кем-нибудь, кто может подсказать решение (неважно, на работе или в онлайне), на худой конец поговорите с Резиновой Уткой
- Загрузите информацию в мозг и забудьте на какое-то время о проблеме — позвольте подсознанию работать над задачей, озарение может придти в момент, когда вы будете заняты чем-то другим.
Важный вопрос: вы готовы к наступлению?
Вы должны уметь честно признаться, если вы не готовы в данный момент решить задачу. Обратитесь за помощью или возьмите перерыв и потратьте его на самообучение. Иначе вы можете попасть в сложную ситуацию, продолжив борьбу и в конце-концов завалив задачу. Это не честно по отношению к вашей команде, компании и заказчику.
Результаты фазы: вы вышли на дорогу и готовы отправиться в путь
Получите контроль
«Шанс благоприятствует подготовленному уму» — Луи Пастер
Менеджер проекта на пару с заказчиком стоят у вас над душой и нервно спрашивают: “Когда ты уже собираешься закончить это гребаное задание?”. Слишком долгая поездка в потемках небезопасна — вы можете опоздать или вообще заехать не туда. Как только ваше сознание прекратит сопротивляться и начнет сотрудничать, вы должны взять контроль в свои руки и сформировать более четкое представление о том, как именно решить задачу и какие именно усилия для этого нужны.
Тут может возникнуть вопрос: “А почему бы не взять контроль в свои руки с самого начала — спланировать все шаги наперед и дисциплинировано следовать плану?”. Я считаю, что для качественного планирования, необходимо сперва разведать территорию и подготовить свой ум к этому планированию. Кроме того требуется некоторое время, чтобы “покрутить задачу в руках”, согласовать мысли с коллегами, утвердиться с функциональными требованиями, технологиями, инструментами.
Вот почему “Троньтесь с места” является необходимым этапом для программистского ума, оробевшего перед Большой и Страшной Задачей.
Дробите задачу
Прежде всего, разбейте большую задачу на более мелкие, размечая тем самым свою дорогу к победе.
Стреляйте трассирующими пулями
Напишите небольшой, но рабочий прототип, затрагивающий все основные компоненты. Когда вы соедините их вместе и заставите работать — это будет отличным достижением на пути к решению. Прототип станет каркасом для последующего кода.
Избегайте преждевременных сражений: большого редизайна, рефакторинга или оптимизации
У вас будет искушение применить ваши выдающиеся способности архитектора и гуру экспертизы для улучшения дизайна системы, тотального рефакторинга кода и оптимизации потенциально медленных слоев. Будьте осторожны — эта деятельность часто приводит на дно глубокой ямы прямо перед финишем. Упражняйтесь в самообладании и прагматизме. Сфокусируйтесь на практическом решении проблемы заказчика, а не образе Идеальной Совершенной Системы.
Признаки того, что вы обрели контроль:
- Вы знаете все основные шаги, необходимые для завершения задачи
- Вы можете оценить время, усилия и риски этих шагов
- Есть понимание того, что именно вам неизвестно и понимание как с этим бороться
Результаты фазы: у вас есть план действий, необходимые оценки, а также каркас для на который будет наращиваться функционал.
Ускорьтесь
“Хороший план, реализованный сегодня — лучше чем великолепный план, реализованный в какой-нибудь неопределенный момент в будущем” — генерал Джордж Паттон
Когда вы обрели ясность ума и контроль, вы можете начать двигаться на максимальных оборотах. Нужно сохранять высокую мотивацию, не терять контроль и следить за качеством.
Маленькие чистые победы
Двигайтесь от одной маленькой победы к другой, оставляя за собой вещи, которые вам нравятся, отрефакторены и хорошо работают. Не оставляйте что-либо в полусыром состоянии и готовым развалиться, как только вы это отпустите.
Погружение
Войдите в состояние Потока — “психическое состояние, в котором человек полностью погружен в то, чем он занимается, полностью сосредоточен и нацелен на успех”
Условия для состояния потока:
- Четкие цели, задающие направление движения
- Задачи, адекватные навыкам — вы чувствуете способность решить задачу, пусть это и не легко
- Немедленная обратная связь — вы можете быстро корректировать свои действия, основываясь на результатах работы и изменяющихся условиях
Анти-перфекционизм
Не пускайтесь в бесконечное переосмысление проблемы и не тратьте слишком много времени на полировку того, что уже достаточно хорошо работает. Вместо этого стремитесь к простому дизайну, открытому для будущих расширений, когда у вас появится информация, полученная в ходе обратной связи. Знайте когда нужно остановиться и имейте решительность сказать что работа действительно сделана.
Результаты фазы: ваш поезд мчится к пункту назначения на полной скорости точно по расписанию и ничто не сможет вас остановить :)
Спасибо за ваш интерес к статье, с удовольствием выслушаю ваши стратегии по преодолению нерешительности перед сложной задачей.