Created: 2022-08-25 Чт 01:31
Декомпозирование личностями для личностей
Person Concerned Work Decomposition (PСWD)
Alexander Petrov (a.k.a Lysenko)
Pragmatic Programmer | Sing, Play Sax & Guitar | #Emacs #Clojure #Datomic #DDD #TDD #CleanArchitecture
Старший разработчик Clojure Центра продуктов Дозор в Ростелеком Солар
2015 - 2022 Старший разработчик Ruby / Rails / Erlang в FunBox
2006 - 2014 Enterprise Java Developer / Trainer / Architect / Team Leader / Lecturer
Есть продукт по тарифицированию коммерческого СМС трафика
Компании шлют информационные и рекламные СМС
Чтобы СМС стоила дешевле компании регистрируют имена отправителей (короткие номера)
Для ещё меньшей цены заводят шаблоны текста на подобие: "Покупка, карта *{d4}. {d} RUB … и т.д."
Есть начитанный программист перфекционист (ПП)
10+ лет опыта и 3 года на проекте
Относится к проекту как к своему дому на всю жизнь
Это лучший проект, в котором он участвовал
Болезненно воспринимает срезание углов
Добивается высокого качества и ждёт того же от команды
Есть новый самоуверенный тимлидер оптимист (ТО)
Это самый крупный проект для него
Обязанностей так много, что нет возможности погружаться в код
Он недооценивает сложность доработок 2,5 раза в среднем
Сам декомпозирует, проектирует фичи и ставит сроки
E.g., в одну задачу кладёт создание модели, в другую её UI
ПП переделывает декомпозицию не щадя живота своего
Программисты следуют плану и долго борются с тех. долгом
Где у ПП "ВЫКЛ", у ТО - "ВКЛ" (c) Большая разница
ПП начитанный практик, фанат DDD, ТО - практик "от сохи" больше тяготеющий к SRE, чем к бизнес-логике
ПП перезакладывается, ТО недозакладывается
ПП хорошо знаком с проектом, ТО - поверхностно
ПП слишком радеет за качество, ТО - удивляет менеджмент низкими прогнозами и требует срезать углы
Между ПП и ТО - как будто несоответствие импеданса. ПП перегревается. (Аналогия: усилитель мощности и динамик)
Есть списки стоп-слов по тематикам для блокировки трафика
Нужно блокировать шаблоны для определённой тематики слов
Какая это тематика - коммерческая тайна, но это не важно
Если шаблон заблокирован, то он не участвует в тарификации
А значит цена за СМС получается выше, как за рекламу
ТО разделил решение задачи внутри алгоритма на двух человек
Каждый делает сервисный объект формирующий вспомогательные выборки данных по шаблонам и блокировкам (Деталей не помню и они не важны)
Один использует сервисные объекты для сборки алгоритма
Разработчики испытывают дискомфорт целую неделю, но уверены, что всё сделали правильно и в срок
Ручные тестировщики обнаруживают фатальный недостаток:
При появлении нового стоп-слова в тематике для шаблонов
соответствующие шаблоны блокируются
При удалении стоп-слова из тематики или из самого шаблона
соответствующие шаблоны не разблокируются хотя должны
10% функциональности реализовано
Все всё сделали как было спроектировано
Никто не видел общей картины и не мог предвидеть ошибку
ПП предчувствовал некорректность декомпозиции
Были жесткие сроки и было решено для эксперимента действовать по плану
ПП сверхурочно работает, чтобы успеть исправить алгоритм, до того, как ТО станет требовать объяснений почему нельзя исправить в рамках изначального дизайна и сохранить статус-кво
Нужна жёсткая аргументация в виде рабочего и наглядного решения
ПП делает сервисный объект который вычисляет и блокировки, и разблокировки
В этом сервисном объекте кешируется нужная информация и решение получается простым и оптимальным
Выводы из этой истории привели к экстрагированию мыслительного процесса ПП при проектировании и к формулировке советов по декомпозиции
Нельзя разделять фичу внутри границ алгоритма между исполнителями (9 женщин не родят ребёнка за месяц)
Вместо этого нужно отделять несущественные аспекты и давать их помощникам, чтобы разгрузить голову основного исполнителя по фиче
Подробнее об этом в разделе о стратегиях декомпозиции
Механизмы работы мозга
Быстрый, автоматический - не затратный, может подводить
Медленный, аналитический - высоко затратный, позволяет получать более взвешенные решения
Исключение - состояние потока
Результативность и концептуальная целостность (качество) результата в состоянии потока недостижимы без этого состояния
В состоянии потока открывается доступ к смётке
Смётка - (в специальном смысле) способность ментально представлять функционирование конкретного или абстрактного механизма и находить решения для его исправления или усовершенствования
Что истощает смётку?
Переключение контекста, суета, отсутствие автоматизации и навыков
Что восстанавливает?
Интерес, созерцание и уединение
#HammockMode #Рыбалка #Физкультура #ЗанятияМузыкой
Работа заполняет время, отпущенное на неё
1955 - Сирил Норткот Паркинсон. Сатирическая статья о бюрократии.
Менеджмент индустрии ПО ошибочно взял на вооружение этот неуместный для креативной деятельности "закон".
Веря в "закон" Паркинсона можно дойти до решения "проблем" с человеческой природой через #микротаскинг
Бесчеловечный подход, характерный для работы крупных капиталистических производств
Если понимать ценность потока и сметки то можно стараться каждую фичу делать целиком, не давая никаких оценок.
Предварительные оценки не нужны! Работа будет сделана тогда, когда будет достигнуто концептуально целостное решение. А случится это всё равно это быстрее, чем мы закончим оценивать.
No Estimates может не сработать, если хотя бы один пункт выполняется (расположены в порядке влияния и распространённости):
Кто нам "мешает", тот нам поможет! (с) Кавказская пленница
Слона нужно есть по частям (c) народная мудрость
Даже если кажется, что это Моська (c) добавил от себя
Декомпозировать работу полезно для фокусировки мыслительного процесса
Каждая задача удовлетворяет следующим критериям:
Вся совокупность задач должна соответствовать архитектурному принципу Loose Coupling / High Cohesion (Слабая зависимость / Сильная сплочённость), а именно:
Попытаться прийти к декомпозиции с такими свойствами можно постепенно, проверяя получившийся набор задач на каждой итерации.
С проверкой помогут контрольные вопросы к отдельным задачам и набору в целом.
Рассмотрим, какие стратегии помогут с небольшим количеством итераций приходить к человечной декомпозиции.
Декомпозиция - не должна быть бременем, она должна быть помощником
Обозримые фичи можно не делить на части и выполнять одним куском
На маленьком масштабе затраты на декомпозицию могут быть потерей ресурсов
// Поподробнее почему иногда неудачно делать декомопзицию самому тимлиду.
Тим лид не должен делать декомпозицию всех фич, спуская сверху конкретные задачи
Тим лид должен помогать своим разработчикам совершать декомпозицию
Нужно выбирать главного исполнителя на фичу
Он вникнет в требования и сделает декомпозицию на набор комфортных задач себе и коллегам - помощникам.
Фича - кусок мрамора
Отрезать куски по границам, которые проявляются на этапе предварительного проектирования
Отказываться детально проектировать
Ошибка преждевременного детального проектирования может парализовать исполнителя и сделать его несчастным
по сходному уровню сложности, неопределённости или риска
Большие фичи и связанные наборы фич не нужно декомпозировать наперёд целиком
Откладывайте решения до последнего момента, когда их совершенно необходимо принять
Так вы будете обладать максимально доступной информацией для принятия решения
И минимизируете ущерб от неудачных преждевременных решений
смысловое ядро и второстепенные механизмы
Метафора "Хирург и команда ассистентов" (c) Фред Брукс
Если после выделения смыслового ядра оно остаётся достаточно большим и неуправляемым по трудозатратам,
и не очевидно, как разделить его на подзадачи управляемого размера,
можно выделить несколько дней на прототипирование и остальное время оставить на реализацию продуктовой версии фичи
После прототипирования может возникнуть идея разделения на подзадачи
Может возникнуть понимание, какие части к смысловому ядру не относятся и их можно делегировать
По Фреду Бруксу вторая версия системы всегда лучше первой
Прототип это первая версия системы в миниатюре
Нас не парализует необходимость сделать всё сразу и не ниже уровня нашего внутреннего стандарта
Прототип идёт в корзину, но позволяет реализовать вторую версию как следует, ибо мозг потренировался в безопасном режиме
Отчуждение смысла от разработчика ->
Отсутствие концептуальной целостности ->
Вечно растущий технический долг (accidental complexity) ->
Дороговизна сопровождения ->
Посредственные результаты ->
Профессиональное выгорание
Свобода и комфорт разработчика ->
Состояние потока ->
Активизация смётки ->
Наличие концептуальной целостности ->
Низкая accidental complexity ->
Низкая совокупная стоимость владения ->
Выдающиеся результаты бизнеса ->
Низкая текучка кадров
Концептуальная целостность (низкая accidental complexity) роскошь?
Для аутсорсингового бизнеса, к сожалению, чаще непозволительная роскошь.
Для продуктовой компании это насущная необходимость для выживания в долгосрочной перспективе.
Успешной всем нам декомпозиции работы!
Человечная декомпозиция стала частью регламента разработки
ТО перестал за разработчиков делать декомпозицию
ТО стал заниматься стратегическими улучшениями архитектуры DataPipeline и инфраструктуры проекта
ТО смог разрабатывать фичи для поддержания формы
ПП стал добиваться высокого качества без ущерба здоровью
Стажёр стал миддлом не меняя работу благодаря ЧеДеР
Следующие 6 убеждений о человеческой природе не конструктивно класть в основу управления креативной деятельностью, в особенности созданием ПО
Подробнее тема раскрывается в моей статье на Хабре Человечная декомпозиция работы
ВОПРОСЫ?
ДОПОЛНЕНИЯ?
Created by Alexander Petrov (a.k.a Lysenko).