Мне, как разработчику сайтов, такие задачи попадаются. Сроки на эти задачи устанавливаются исходя из требований бизнеса. Поделюсь опытом — как в условиях узких сроков с успехом удавалось реализовывать требования бизнеса.
Привожу советы, которыми руководствуюсь сам и которые меня ни раз выручали. Каждое утверждение требует обсуждения, осмысления и критики.
Тон статьи кажется категоричным. Сразу же извиняюсь за это. Для краткости опустил фразы “я думаю”, “я полагаю” и проч.
Поделюсь опытом на основе примера. Придумаем же следующую задачу. Цифры и сроки условные.
Разрабатываем сайт e-commerce, который продает детские игрушки. Оплата только наличными. Реализовываем оплату безналичными с помощью:
- PayPal;
- Yandex.Money;
- QIWI Wallet;
Менеджер установил срок — неделя.
Вы покопались в готовом коде, изучили архитектуру, пораздумывали над этими требованиями. Вспомнили, что на нас висит еще 5 задач, которые никто не отменял. И осознали, что в установленные сроки вам не справиться.
Вы подошли к менеджеру, объяснили ситуацию. Менеджер ответил так:
- Задачи срочные, успейте сделать
- Ок, я приостановлю 2 задачи. Остальные 3 задачи выполняйте параллельно
- Ок, я продлю срок этой задачи на 1,5 недели
Эти варианты вас не устраивают. Времени не хватит. Вы оказались в тупике и задумались о таких решениях:
- придти на работу пораньше.
- задержаться на работе подольше.
- Вы и так постоянно задерживаетесь, задерживаться придется в 2 раза дольше.
Как же быть?
Тут поможет книга Стивена Р. Кови «7 навыков высокоэффективных людей»
- Будьте проактивными
- Начиная, представляйте конечную цель
- Сначала делайте то, что нужно делать сначала
- Думайте в духе выиграл — выиграл
Будьте проактивными — предложите решение возникшей проблемы. У некоторых менеджеров на двери даже висит соответствующая табличка “без предложений не входить”.
Начиная, представляйте конечную цель — конечная цель тут не решить задачу, а удовлетворить текущие потребности бизнеса.
Сначала делайте то, что нужно делать сначала — вот оно решение возникшей проблемы. Самостоятельно узнаем приоритеты и разобъем задачу на этапы!
Думайте в духе выиграл — выиграл — этапность позволит выпустить готовую функцию даже раньше установленного срока. Менеджер охотнее примет предложение об этапах, если пораньше получит нужную функцию.
Припомним также определение Scrum-методологии — это набор принципов позволяющий в жёстко фиксированные и небольшие по времени итерации предоставлять конечному пользователю работающее ПО с новыми возможностями, для которых определён наибольший приоритет.
Действия такие:
- Разбиваем задачу на подзадачи — проактивный подход. Не спрашиваем менеджера, делаем самостоятельно.
- Выясняем приоритеты каждой подзадачи.
- Разбиваем задачу на этапы.
- Совместно с менеджером корректируем сроки.
- Поэтапно решаем большую поставленную задачу.
Подзадачи получились такие:
- реализовать paypal,
- реализовать yandex деньги,
- реализовать QIWI wallet
Менеджер корректирует список подзадач. Приоритеты установили на основе процента клиентов, которые хотели бы пользоваться платежными системами. Получили такие этапы:
- Yandex.Money 60% пользователей
- QIWI Wallet 30% пользователей
- PayPal — 10% пользователей.
Совместно с менеджером установили такие сроки:
- Yandex.Money — 3 дня
- QIWI Wallet — 4 дня
- PayPal — 2 дня.
Результаты:
Получилось, что мы не упеваем решить задачу за неделю, однако намного раньше релизим полезную функцию для клиентов.
Разбиение на этапы я показал на простой задаче. На практике задачи намного труднее, этапов больше, менеджеры не соглашаются с предложенным. Для обоснования используем UML диаграммы.
Диаграммы наглядно показывают, что задача составная, каждый элемент содержит в себе множество деталей и особенностей. Опираясь на такое наглядное описание, вы обосновываете, почему не получается реализовать задачу в установленные сроки.
Сроки выполнения отдельных элементов оцениваются точнее сроков выполнения большой задачи.
Выводы:
- Вместо оправданий и жалоб на неадекватные сроки вы предложили конструктивное решение — разбить задачу на этапы.
- С помощью диаграмм вы доказали сложность задачи и обосновали, что эту задача разбивается на этапы.
- Менеджер доволен — первый релиз (этап 1) состоялся раньше установленных сроков, появилась полезная документация.
- Вы улучшили навыки общения с менеджментом, избежали неадекватных сроков и больших переработок.
- Вы улучшили навыки проектирования и документирования за счет того, что предоставили некое готовое решение, которое улучших опытный коллега.
- Работа стала интереснее — вы узнали дополнительную информацию о проекте (приоритеты пользователей)
Выводы в виде советов:
- Приходите с готовым решением. Вы получите дополнительный бонус — ошибки корректируют.
- Не тратьте много времени на разбиение задачи на подзадачи. Смысл — подготовить черновик для обсуждения.
- Не приступайте к кодированию. Даже если менеджер спроектировал и нарисовал схемы до вас. Набросайте собственную интерпретацию задачи. Это позволит уточнить неясные моменты и сэкономит вам массу времени.
- Пробуйте расставлять приоритеты самостоятельно.
- Проектируйте сами и не рассчитывайте на то, что менеджер или тим лид вами всецело управляют и корректируют шаги. У них нет на это времени.
Ссылки:
- книга Стивена Р. Кови «7 навыков высокоэффективных людей»
- Scrum-методология
- Стив Макконнелл — Совершенный код. Мастер-класс — о пользе проектирования и псевдокодинга.
- Разработка через страдание
- Проектирование, декомпозиция, использование UML (Крэг Ларман). (спасибо, AlexanderG)
P.S.
- Жду ваших ссылок и полезных советов в тему — добавлю в статью
- Если тема интересна — напишу статью, где на сложном примере разберу процесс проектирования и разбиения задачи на этапы.
Комментарии (11)
HotFire
11.08.2015 08:47В статье представлен крайний случай, чтобы не рассусоливать «вы понимаете, что точно в сроки успеть не сможете и будет задержка в 2 дня». Это бы увеличило публикацию в 1,5 раза. В принципе, такая манера изложения была выбрана на пробу. Какие есть комментарии по этому поводу?
eugzol
11.08.2015 15:10+1Стиль нормальный. На мой взгляд, без конкретных методик «разбиения задачи на подзадачи» (а это отнюдь не интуитивно понятный процесс) не очень содержательно получилось. В целом, стараться выполнить работу, вместо того, чтобы качать права – верный путь к совершенству :)
AlexanderG
13.08.2015 08:11+1Проектирование, декомпозицию и роль UML во всем этом разврате, на мой взгляд, очень доходчиво и на конкретных примерах описывает Крэг Ларман.
HotFire
13.08.2015 08:28Книга 2004 года. Все еще актуальна?
AlexanderG
13.08.2015 12:16Вполне. Сам язык не так сильно изменился, чтобы это как-то мешало (всё равно им серьезно никто не пользуется), а изложенные в ней принципы (agile-scrum, проектирование в целом) известны минимум лет 25 уже. Но модными стали только не так давно.
dkukushkin
Избавиться от рабской психологии, перестать быть мальчиком, об которого все ноги вытерают и найти нормальную работу.
HotFire
Рассмотрена простая задача и крайний случай, для упрощения изложения. Можно было бы конечно добавить «менеджер с вами согласился, но не полностью, ситуация вас до сих пор не устраивает». И подобное по каждому пункту. На мой взгляд это вода, которая и так всем понятна.
dkukushkin
Вы не в том ракурсе ситуацию рассматриваете. Вы как бы говорите себе «ты начальник, я дурак».
Два варианта:
1. Сроки вычисляете вы (нужны навыки, среднестатистический девелопер этого не умеет).
2. Сроки вычисляет менеджер.
Если менеджер некомпетентен, как в вашем случае, то работать с таким человеком и тем более что то ему доказывать — себя не уважать.
Вам не нужно чтобы менеджер соглашался. Он выполнил свою работу — назвал срок. Делаете в своем привычном темпе. Если результат не совпадает с его прогнозами — то либо вы ничего не делали, либо он не компетентен и не умеет прогнозировать сроки разработки. Проводите разбор полетов, если нужно, и находите в чем проблема (в вашем случае менеджерит левый чувак, который думает что государством/проектом может управлять и кухарка)
В вашем случае явно видно, что менеджер «ни в зуб ногой», сроки берет с потолка. В шею такого гнать. Стелиться и убеждать смысла нет.
HotFire
Рассматривается ситуация активного участия в проектировании. В некоторых небольших фирмах это допустимо. В фирмах масштаба Яндекс применимы принципы, о которых вы пишете в своих комментариях.
Вообще, точные сроки (день в день, час в час, не раньше ни позже) мало кто способен вычислить. От этого и необходимость проектировать и обсуждать.