- PVSM.RU - https://www.pvsm.ru -
Друзья, добрый день!
Мы продолжаем серию публикаций «без купюр» о проектах, связанных с разработкой, часто с приставкой «веб». Сегодня поговорим о том, как наиболее правильно и быстро проводить оценки работ и планировать релизы программной системы. Скорее всего, начинающие менеджеры и энергичные и ищущие себя разработчики будут шокированы рекомендациями, но, поверьте — цель стоит одна и только одна: помочь и сделать из вас настоящего джедая, который и пользу компании приносит, и проекты двигает, да и людей развивает одновременно. Такого джедая, который искренне не заслуживает быть обнаруженным в виде мумии в темной серверной между стойками с веб-серверами и базами данных веб-проекта, летящего в будущее без душевно документированного кода, ТЗ — лишь на энергии чистого «ХЗ». Итак, поехали!
Важно, крайне важно, особенно ключевой проектной силе — разработчикам, отличным специалистам, ежедневно покачивающим скилы в современных IDE, понять, что отсутствие здравого смысла в оценке работы начинается еще прежде желания «зачать идею». Особенно часто это происходит в веб-разработке, где во время проведения тендера нужно взять и сделать вид, что политизированная проблема курицы и яйца имеет «строгое решение»:
Станет немного легче, если найти близкие аналогии странного вышеописанного перформанса в окружающей природе:

Понятно, что пока легче не стало, особенно если вспомнить, что в перформансе нередко участвуют «дипломированные психологи» с обеих сторон, умеющие выглядеть убедительно, решительно, говорящие «да, конечно, сделаем!» и не понимающие базовых принципов разработки программного обеспечения. А если вспомнить, что иногда «выглядящие уверенно» на обеих концах проекта пересекают линию фронта, братаются, объединяются вместе и начинают прямо искренне негодуя что-то требовать конкретное от инженеров, не предоставляя четких формализованных ответов на четко поставленные вопросы… — прямо хочется уехать в академический отпуск в Антарктиду и забыться, обняв пингвинов и холодноводных, но не менее красивых от этого, русалок :-)
Трезво и аналитически строго воспринимать вышеописанный перформанс инженерам довольно больно, до кровоточения из глаз, поэтому совершают несколько известных психологических шагов, приближающих конкретику и реальную работу:
А если говорить серьезно, то на данном этапе нужно очень четко всем членам проектной команды осознать:
Итого, в конце перформанса должен произойти уверенный толчок вперед в неизвестное будущее, причем в хорошем, бодром настроении и взаимном желании слушать и слышать друг друга.

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

Отрадно, но частенько попадаются и правильные старты проектов, которые можно выделить по следующим признакам. Придерживайтесь этого списка и старайтесь попасть в такие команды всеми правдами и неправдами:
Но имейте в виду — встреча с подобным подготовленным клиентом будет означать для инженерной команды спуск с IT-небес обетованных, пот, труд и кровь. Из вас вытрясут все знания шаблонов проектирования, научат писать простой код сразу без ошибок и желание вместо скриптика на PHP из 20 строк сделать фабрику классов вы будете отбрасывать как бесовское искушение. С утра, налив кофе, вы с удивлением обнаружите, что клиент, после (после!) вашего отдела тестирования, нашел и зарегистрировал в багтрекере еще 30-40 багов и рекомендует вам (вам!) еще тщательнее писать юнит-тесты и поменять тестировщикам… Но зато это хорошо прокачивает :-)
Буду говорить прямо. Разумные люди, в т.ч. инженеры, понимают, что оценить еще не придуманное, мягко говоря, нельзя… Можно только уверенно соврать. Но, как известно, формальная математическая логика работает не у всех, поэтому иногда, все же, вы будете встречать собеседников, утверждающих что 1 + 1 = 11, причем так убедительно, что на глазах даже слезы могут появиться.
Но выход — есть: аналогия. Не зря в современном Agile подходе именно аналогия используется как фундаментальный кирпичик оценки. Работающие примеры аналогий в веб-разработке:
Важно использовать подход с аналогией и к квалификации команды:
Как-то так. Да, вы можете возразить, а как же PMBoK, диаграмма Ганта, Velicity [5], карточки в Канбане, толстые книжечки по «Agile Estimation», ускорение команды, метрики, петрики? Скажу честно — не работает и проведу аналогию с «машинным обучением».
Вас будут 5 лет учить 50 видам математики в ВУЗе, потом еще полгода на дорогих курсах про DataScience и MachineLearning, а потом на практике вы внезапно узнаете, что… научного подхода в этой области нет, нужно перебирать все варианты гиперпараметров, только времени на это вам никто не даст (дни и месяцы) и остается божественный рандомный перебор и, самое важное, ИНТУИЦИЯ. И ничего не остается, как… возвращаться и начинать читать теорию на курсах. Так и с оценкой работы в программных проектах — теории много, а работают на практике лишь крупицы знаний, замешанные на глубокой интуиции и, что одно и то же, опыте.
Чтобы действительно научиться оценивать трудоемкость программирования, нужно уехать из городов, пожить с аборигенами, поесть сырого мяса, попить теплой пульсирующей кровушки — побыть ближе к природе=коду, багам, валящемуся продакшену, бородатым админам, поспать пару ночей в серверной и… научиться обходиться подорожником, вместо туалетной бумаги. Минимализм и желание делать просто и ясно — позволит команде попадать в оценки гораздо чаще, а клиенту — взлететь побыстрее. По сути, нужно как можно быстрее воспитать и внедрить в проект эту спасительную культуру.

Забавно, но иногда попадаются такие злоупотребления оценками, вызывающие у опытных инженеров лишь улыбку:
Если вы дочитали пост до этого момента, то, очевидно, вы не уже не относитесь к категории «чем больше бумаги, тем п.па чище», «вы задаете неправильный вопрос», «вы поставили задачу не математически», а действительно хотите сделать программный проект в адекватные сроки и за разумные деньги. Зафиксируем следующие, действительно работающие практики:
Надеюсь, стало ясно и очевидно, что даже если требования к программному проекту очень четкие и формализованные (такое бывает, правда редко), может возникнуть, по неопытности инженера или аналитика, столько внезапных сюрпризов, что… хорошо работает только интуиция и метод аналогий. Разберем примеры сюрпризов — врага нужно знать в лицо:
Учитывая вышеизложенные неустранимые риски, принято действовать иначе — методом системной бункерной войны (вспомним StarCraft) и тактики: использовать зарекомендовавшие себя инженерные практики и инструменты и верить, что придерживаясь данной тактики, мы достигнем стратегических целей. Скажу проще то же самое: если отжиматься, бегать, жать экспандер и делать планку по вечерам, то вероятность дойти до дома вечером гораздо выше. Если же планировать защиту от хулиганов в диаграмме Ганта, рассчитывая вероятность попадания на 2 или 3 человек в зависимости от пути домой и времени года — то будет и сложнее, и гораздо дольше и любые изменения вероятностей нужно будет каждый день учитывать :-) Мы друг друга, в общем, поняли.
Обложив проект правильными инструментами командных коммуникаций и приняв простую, но верную систему тактических ценностей и передав, по мере возможности, их клиенту — шансы вписываться в оценки и релизы значительно повышаются. А больше гарантий нам никто и не даст — это правда жизни.

Подведем итоги. Если кратко, то мы с разных сторон увидели, что умно-длинно-политизированные методики оценки программных проектов в зайчико-попугая-часах работают только на тестовых данных в идеальных условиях, но не на практике. Ситуация повторяет подходы и результаты в машинном обучении — можно много и долго учиться, чтобы понять, что работает только интуиция/опыт/аналогия. Все заранее детально разобрать на формальные кубики — чрезвычайно дорого и на это времени, как правило, нет. В реальных условиях для оценки лучше всего полагаться на метод аналогии, простые приоритезированные списки фич, без всяких иерархий и взаимо-зависимостей. Разработчикам — делать код самодокументируемым, не надеяться на сразу-протухающее ТЗ и писать автотесты к коду. Внедрение и следование ценностям максимально открытых коммуникаций, визуализации требований программного проекта, теплая и вдохновленная атмосфера, простые категорийные оценки — сделают для попадания в срок релиза гораздо больше, чем бесконечные сдвигания абстрактных палочек в диаграммах Ганта и иже с ним. В этом и только этом случае есть все шансы увидеть команду проекта с шампанским в руках, с улыбками, отмечающим завершенный релиз, совпавший с Новым Годом. А про мумию менеджера в серверной — вам просто показалось :-)
С наступающим праздником всех и хорошего настроения!
Автор: AlexSerbul
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/agile/303459
Ссылки в тексте:
[1] мозг: http://www.braintools.ru
[2] story-points: https://ru.scrum-time.com/infobase/story-points.php
[3] инфоблока со списком новостей: https://dev.1c-bitrix.ru/learning/course/index.php?CHAPTER_ID=04610&COURSE_ID=43
[4] тип: https://www.1c-bitrix.ru/products/cms/license.php
[5] Velicity: https://ru.scrum-time.com/infobase/velocity-scrum.php
[6] ресурс: http://www.ambysoft.com/
[7] алгоритмическую стоимость: https://tproger.ru/articles/computational-complexity-explained/
[8] коробочные решения: https://www.1c-bitrix.ru/products/cms/features/
[9] Источник: https://habr.com/post/434302/?utm_campaign=434302
Нажмите здесь для печати.