Как понять и выполнить поставленную задачу

Каждый разработчик сталкивается с задачей, которую не понимал.
Не важно проработали вы 10 лет или несколько месяцев – непонятную задачу может встретить любой разработчик.
В этой статье я хочу внести ясность как разобраться в любой задаче и разбор буду делать с позиции именно разработчика, показывая его взгляд на вещи.

Как же быть когда прилетает совершенно непонятная задача? Просто начать делать веря, что по ходу дела все станет яснее? Или немедленно сообщить начальнику, что вы не понимаете, что от вас хотят? Ни то, ни другое.

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

Требования к постановке и самой задаче

У каждой компании или даже проекта могут быть свои требования к задачам. Они могут быть как тщательно прописанными, так и отсутствовать вовсе или существовать “для галочки”. Важно помнить одну простую вещь – как разработчик вы должны решать полученную задачу. Каким способом – не важно. А для того чтобы решить задачу ее нужно прежде всего понять.

Существует довольно простая методика которая помогает понять практически любую задачу. Она состоит из трех шагов, но не обязательно все из них должны быть выполнены. Почему? В реально мире ничего не идет по плану. Вполне вероятно, что разъяснения некоторых моментов придется искать у коллег, аналитиков, руководителей, заказчика. (клиента). Такой процесс сбора данных из различных источников является нормальным и помогает добиться лучшего результат.

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

Шаг первый: Анализ задачи

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

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

Классификация задачи

В начале неплохо определить тип работы, которую необходимо сделать. Это может быть:

  • правка ошибок
  • внедрение нового функционала
  • разработка нового приложения
  • исследование проблематики
  • оптимизация работы приложения

Это не все возможные типы, но так хотя бы вам станет понятнее, что необходимо сделать.

Основная цель данного этапа – определить вид работ. Этот шаг важен, так как он определяет ваши дальнейшие действия.

Особую важность этот шаг имеет когда нет точного и четкого описания требований. Если не удается самостоятельно понять, что скрывается за полученными требованиями, то стоит попросить разъяснить, что именно требуется сделать.

Переформулируйте задачу парой фраз

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

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

Этот шаг помогает правильно организовать рабочий процесс и верно понимать чем именно занят исполнитель задачи.

Выделите основные части

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

Полученный список – это будет вашим план работ.

Определите проблему, которую пытаетесь решить

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

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

Более глубокое понимание проблемы и цели упрощает решение и его реализацию.

Шаг второй: Разбор и оценка требований

Мы уже определили что и зачем необходимо сделать. Теперь нам необходимо понять каким способом это делать и почему.

Уточните термины связанные с задачей

Чем больше у вас опыта тем меньше вероятность встретить незнакомый термин. Но если все-таки встретили, то стоит его уточнить. Стоит понимать, что под терминами имеются ввиду бизнес-термины: продукты, клиенты, понятия разработки, названия приложений, инструментов и т.п.

Если у вас есть непонимание термина в поставленной задаче – нужно его уточнить чтобы понять общий смысл задачи и не пострадала реализация.

Определите как нужно выполнить задачу

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

Если вы получили инструкции – ознакомьтесь с ними и оцените их сложность.

Определите решены ли проблемы

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

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

Шаг третий: Критическое мышление

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

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

Сформулируем несколько правил работы с разногласиями:

1. Когда не соглашаться

  • Не возражайте если полностью не понимаете. Если вы хорошо понимаете с чем именно вы не согласны – тогда вперед, если же вам не хватает для этого данных – необходимо вернуться к предыдущим шагам.
  • Сосредоточьтесь на реальных проблемах, а не субъективных. Спорить имеет смысл о конкретных, объективных проблемах. “Мне не нравится” – субъективная проблема. “Мне не нравится, что значение приходит в поле с типом строка” – объективная проблема.
  • Аргументируйте свое несогласие. Если вы не можете объяснить почему что-то неправильно, значит у вас нет уверенности, что это неправильно.

Прежде чем выражать свое несогласие внимательно выслушайте своих коллег и их аргументы. Возможно вы что-то упустили из виду.

2. Как не соглашаться

Чтобы несогласие выглядело объективным, необходимо чтобы оно демонстрировало, что принятое решение:

  • основано на неполной информации и не учитывает всех существующих данных и условий
  • основано на неверной или даже ложной информации
  • нелогично или ломает существующий функционал
  • нелогична сама проблема, которую необходимо решить
  • не решает проблему полностью

Итог

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

Напоследок вот список шагов в виде шпаргалки:

Шаг 1. Анализ

  • Классификация задачи
  • Резюме задачи в пару предложений
  • Выделение основных частей
  • Определение проблем

Шаг 2. Разбор и оценка

  • Уточнение терминов
  • Составление плана реализации
  • Проверка, решает ли это проблему

Шаг 3. Критическое мышление

  • Знайте когда не соглашаться
  • Знайте как не соглашаться

Вот собственно и все.