[СММ-2024] Неумелое лидерство и поиски официанта

Мышление письмом по попыткам задействовать лидерство::метод в сторону коллеги::разработчика::роль.

Ситуация характерная для меня “сложно пройти мимо косяка”. Косяк дверной, проём между комнатами разработчиков и девопсов плохо работает. Постоянно кто-то головой ударяется - связанные работы плохо проходят.

У нас бекендерская задача проходит свои состояния “создана”, “взята в работу”. Бывает, что внутри работы над задачей возникает “запрос на работы от команды девопс”::потребность. Что в этот момент надо сделать? Разработчик::роль идёт в трекер задач и на доске девопсов создаёт свою задачу-запрос. Её надо правильно “определить”, привязать к нашему проекту, а не к чужому. Описать нормально свою потребность. И ещё связать эту новую задачу со своей задачей, для которой она нужна. Там связь часто “моя задача” blocked_by “задача на опсов”. Если действительно ничего делать дальше не можешь. Моя задача становится “hold”. Дальше начинается туман войны. Девопсы это отдельная сервисная команда. Она одна обслуживает все продуктовые команды. Т.е. там постоянно на голову сыпется новый поток входящих. Назначать ответственных на работы мы (разработчики) не можем. Точнее можем, но это как будто не рационально. Я же не вижу загрузки коллеги. Значит назначает на работы тимлид девопсов::распределительная шляпа::менеджер. Он выставил ответственного. Когда задача будет взята в работу мы не знаем. Можно как-то её протолкнуть? Можно поставить приоритет повыше. Но желательно при этом не скатываться в “все задачи важные и срочные”.

Яма тут. Я создавала свою задачу на девопсов, зацепилась взглядом за соседскую (но из нашей команды созданную). Иду смотреть, она закрыта. А к ней связанная задача бекендерская всё ещё в hold. Причём готова задача девопса была где-то неделю назад (переведена в состояние review). Как это для меня выглядит? Один (девопс) сделал свой кусок, передвинул статус и забыл про задачу (“дальше не моё дело”). Второй (разработчик) забыл после того, как создал задачу на опса и не следит за статусом его задачи. Почему он не следит? Думает, что ему опс в личку придёт “ваш заказ готов, забирать будете”? Опс не придёт, он не официант, он работник кухни. Отписала комментарий в задаче разработчика “уже не блокируется” пару дней назад. Ничего не поменялось. Вчера разработчик просит в нашем чате у лида себе очередную задачу. Я ему “кажется у тебя завалялась задачка, ждёт тебя”. Наверно это так себе “уговоры” встать в роль. Или хотя бы публично это не надо делать.

Дальше в личке выясняли “кто официант”. Я пояснила почему девопс плохо подходит. Мне подходяшками накинули: скрам-мастера, менеджеры, лид девопсов. Скрам-мастера плохо подходят, они следят за задачами продуктовой команды на доске. Если у тебя пачка задач в hold, каждый раз никто не будет спрашивать, а что с ними. “Менеджеры” это какая-то абстракция, магические сущности, все их знают, никто не видел. Лид опсов тоже не будет ходить к разрабам в другую команду и говорить “вот ваш заказ”. Вроде объяснила.

Оказалось, что у разработчика другие проблемы. Он следит за своими задачами, но когда пожар, не следит. Т.е. он просто упустил момент движения статусов связанной задачи. Претензия к кухне: свою задачу закрыли, никто не проверил, что она работает (сделано то, что просили). Я тут задаю вопрос: а кто это должен проверить? Тестировщик ставится только на задачи разработчиков, у опсов даже статуса такого нет (ready for test). Я понимаю, что статус приёмки у опсов это review (посмотри я сделал). Но тебе его тоже никто на тарелочке не приносит. Я сама слежу, в трекере есть колокольчик с уведомлениями об изменении задач, на которые ты подписан. И задача, которую ты создал на опсов туда точно попадёт. Дальше надо просто надеть на себя шапку тестировщика и пойти проверить. Если не работает, пойти на кухню вернуть плохо приготовленное блюдо. Пытаться накинуть лиду опсов, мол не закрывай задачи просто так, иди спрашивай “что изменилось в реальности” кажется сомнительной идеей. Надо чинить коммуникацию.

Сходила к лиду девопс. Оказывается кухня обслуживает от 15 проектов. В личку с оповещениями точно никто ходить не будет. Выяснилась интересная штука “перевод статуса порождает письмо автору задачи”. Не видела ни разу таких писем. Пообщались про настройку уведомлений в трекере задач.

У меня получается такой алгоритм:

  1. Разработчик создаёт задачу на девопс
  2. Прикрепляёт её к своему проекту
  3. Связывает её со своей задачей
  4. Проверяет, что он подписан на обновления по задаче (watcher)
  5. Проверяет свои настройки уведомлений в трекере задач
  6. Ждёт перевода статуса задачи в review (уведомление надо смотреть либо в колокольчике в трекере, либо в письмах в почте)
  7. Задача перешла в review, её нужно пойти и проверить разработчику
  8. Вернуть, если не ок. Если ок, закрыть.

Осталось всего ничего: рассказать команде о тяжёлой жизни сервисных команд (про сотни задач в неделю я не знала) и про алгоритм.

6 лайков

А если рассмотреть как системы? Как соотносятся системы, которые создает разраб и девопс? Я вот пытался это моделировать, но так и не догнал. По идее девопсер создает какую-то среду/окружение, в котором может крутиться бекэенд, создаваемый разрабом, то есть бекэнд входит в эту среду. У вас также? =)

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

Девопсы это разработчики платформы. И делают они одновременно две штуки в нашем графе создания. Они делают/собирают (и поддерживают) саму платформу, где ведётся разработка: хранилище кода, CI (валидация и работа над фичами), тестовые стенды (приёмка фичей), etc. Непосредственно окружение для работающих приложений: CD (доставка упакованного кода до продуктовых стендов), сами продуктовые стенды, системы сбора логов и метрик, дежурные по инцидентам.

Цепочка: разработка → проверка → поставка → эксплуатация.

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

3 лайка

Мимо любого, или из числа тех, что ваших интересов коснуться? Мне выглядит что второе)

Есть две дороги, как внести в работу команде чек лист: а) «продать» его команде, б) «продать» его вашему лиду

(с соседними командами первое время сложнее будет)

С лидом, это - кроме прямого рассказа о существовании проблемы решения и выгоды решения, еще, например, внести в ваши созвоны, где про задачи рассказываете, что то про контроль таких задач «сколько то штук с hold вернулось в работу, _в день_готовности у сторонней команды». то есть, обращать на это внимание на созвоне. Пусть, первое время, только на ваши забранные в работу быстро внимание обращают

3 лайка

Есть, конечно, вопросики к названию, почему девопс::должность, а не девопс::методолгия, но это из вечного.

Получается печально, никому не интересно. Никого это не работа. Люди не продукт создают, а на участке конвейера сидят.

Алгоритм конечно пофиксит эту конкретную проблему. Но не бегать же за всеми постоянно как за детьми малыми? Или бегать?

Мы больше не спорим о терминах) “инженер платформы”::роль из системной инженерии, надо хотя бы у себя в голове уложить техно-эволюцию devops

Я обычно в этот месте тоже начинаю “грустно смотреть на закат с бокалом вина”.

Но тут есть человеческая часть, которую нужно не забывать. Я зашла к опсам из своей картины мира “вот мы тут разрабатываем фичи! это же важно”, а ещё у меня была мысль прихваченная от некоторых коллег из команды “вот плохие соседи, не могут за собой работу проверить, чо это я должен за ним проверять”. А когда опс пояснил, как для них это выглядит “мы сидим вам (всем вам, куче народу!) поставляем максимально быстро инкременты под ваши запросы, уведомления приходят, мы не можем знать всех авторов задач, помнить кто из какой команды, ещё и ходи за вами ваши запросы закрывай”. По-человечески всё стало понятно.

А что же у нас инженерно? На самом деле то, что человек делает работу на своём этапе конвейера это хорошо и правильно. Нужно всего лишь правильно настроить этот конвейер)

Представим себе ледовую буровую платформу: Сотни тысяч тонн металла, бетона, пластмассы, компьютеров (самих по себе сложно устроенных) и оптоволокна, необходимых расходных материалов, обученная вахта должны собраться вместе далеко в море среди льда. В строго определённый момент эта огромная конструкция должна начать согласованно работать — и не просто работать, а приносить прибыль и обеспечивать безопасность в части загрязнения окружающей среды и здоровья находящейся на платформе вахты, а также в чётком согласовании со службами берегового обеспечения (нефтепереработка, провайдеры связи, метеорологические службы, государственные надзоры по самым разным линиям и т.д.). Какая инженерная/деятельностная/практическая/трудовая дисциплина должна учесть результаты работ всех других инженерных дисциплин, работающих на самых разных системных уровнях — собрать в единое целое данные ледовой обстановки, санитарных норм в помещениях для обслуживающего персонала, обеспечение электричеством попавших туда компьютерных серверов, необходимые характеристики этих серверов и программное обеспечение с нужными функциями и нужной надёжностью? Кто озаботится учётом в конструкции платформы изменений в длине металлоконструкций за счёт разницы суточных температур и одновременно установкой акустических датчиков на трубах, которые прослушивают шорох песка, чтобы по этому шороху нейросетевые алгоритмы определяли износ труб и предлагали редкий и нужный «ремонт по состоянию» вместо относительно частого и бесполезного «планового/профилактического ремонта»? Системная инженерия как раз и является той дисциплиной, которая ответственна за обеспечение целостности в инженерном проекте: именно системные инженеры в их разных ролях проектируют нефтяную платформу как изменяющее мир к лучшему или хотя бы просто успешное (безопасное, надёжное, прибыльное, ремонтопригодное и т.д. — разным внешним проектным ролям нужно от этой платформы разное) целое, потом раздают части работы «прикладным инженерам»/«инженерам по специальностям» (инженерам-строителям, машиностроителям, инженерам-электрикам, компьютерщикам/айтишникам и т.д.), а затем собирают результаты их работ так, чтобы получить работоспособную и надёжную систему. Агенты, исполняющие роли прикладных инженеров самых разных специализаций по факту владеют на каком-то (кругозорном) уровне и системной инженерией, чтобы понимать происходящее в проекте как в части его целевой системы, так и в части организации проектной работы. Это главный признак, отличающий системных инженеров «по роли» от всех других прикладных инженеров: они отвечают за целевую систему в целом, как в части деталей-частей (разные системные уровни требуют разных практик для работы с типовыми для них системами — с микросхемами работают не так, как с компьютерами, а с компьютерами не так, как с системами управления, в состав которых входят компьютеры), так и в части использования детальных знаний отдельных инженерных практик (разные свойства систем какого-то типа требуют знания разных практик: если вам нужно сделать корпус компьютера, то нужны и знания инженера-механика, чтобы корпус был прочным и лёгким, и знания инженера-теплотехника, чтобы компьютер не перегревался и корпус обеспечивал достаточную вентиляцию). Главная задача системного инженера — чтобы не было пропущено какой-нибудь мелочи, ведущей к провалу.

1 лайк

“вас много, а я одна” )

1 лайк

Два классических боттлнека почти любой софтверной фирмы: тестировщики и опсы.

1 лайк

Вот это очень близко. Прямо в сердечке почувствовалось :slight_smile:

Трекер со своими досками, статусами и уведомлениями весьма развесистая система и сложная.

Я для себя это упростил и свел к одному:
image

В нужный момент кликаю в нужный пункт. Чаще всего в “Что делать?”, в другие - по обстоятельствам.

1 лайк

Как и любая коллективная трудовая деятельность) “вы не любите кошек? вы просто не умеете их готовить”.

203 зависшие это действительно грустно…

Думаю, что бегать. Люди же тоже части системы. Их тоже можно фиксить в части мастерства, ну либо на крайний случай заменить :upside_down_face:

1 лайк
  • Мам, а кто мы?
  • Мы команда фиксиков!

Я тоже с такой позиции на всё смотрю “просто надо пофиксить и заапдейтить”)

1 лайк

Но никто не грустит. У меня “зависшие” определены как “задачи без обновлений” за последние 4 дня. 200 это на всех – мне нужна эта цифра лишь изредка только как аргумент для каких-то обсуждений на совещаниях.

Моих задач висит только 8: 5 ждут моего внимания, еще три отправлены в “анализ”.

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

Осталось всего ничего: рассказать команде о то, что и так можно.
Но, забегая, делать так они все равно не будут :slight_smile:

Тестировщики решаются переходом к автоматизированному тестированию и TDD (при этом оказывается, что качество независимого тестирования, автоматизированного тестирования, тестирования на тестах самого разработчика – похожее. Тут явно неустаканненность, множество решений самых разных, но со схожей эффективностью).

Опсы – да, проблема, но решается переходом к девопсам! И там была некоторая эволюция, и оказалось, что это инженеры внутренней платформы разработки, а разработчики – you build it, you run it (сами деплоят, сами деливерят, сами беседуют с клиентами. Но софт для “девопсинга” им настраивают специально обученные люди, инженеры внутрненей платформы разработки).

Куча литературы на эти темы, примерно с 2017-2018 годов, будет дана в курсе “Системная инженерия”.

1 лайк

Знаешь, что до меня только что дошло?!

Между командами нет контракта. Контракт/интерфейс не описан! Это проблема моделирования (онтологики и коммуникации). Вообще это максимально странно. Сколько в задачах всегда обсуждений контрактов между приложениями. И насколько это тут же рядом не замечается.

Получается “не думают” и “не записывают”. Восприятие, что команды это модули из которых собирается конвейер, позволяет думать инженерно. И опять же это снимает “но там же люди”. Да какая разница. Пока люди, потом будут не люди. Всё равно надо коннект через интерфейсы наладить)

3 лайка

Интерфейс - определён: у всех есть учётки в трекере, всем прилетают уведомления.

“Можно подвести осла к джире, но нельзя заставить осла проверить входящие!”

2 лайка

Скорее нет явного контракта. Но насколько он нужен? Прописывать людям каждое их действие в инструкции, а потом следить, чтобы эта инструкция сохраняла свою актуальность.
Наверное, если по-другому никак то надо. Проблема в том, что все ж “уникальные, умные, творческие личности” начинают обижаться когда ты к ним со своими инструкциями.
Пример1: “я ж не робот исполнять инструкции”
Пример2: “ты что думаешь я не понимаю, что генератор нужно запустить?” - оказалось забыл или может в том случае действительно не понял, бывает чё, но обиды потом на несколько дней )).

Сложна и нервно!))

Но ты пробуй обязательно и рассказывай как продвигается!!

Есть классная байка на эту тему SOA Manifesto · GitHub

2 лайка

Почему вы решили, что там - НЕ девопсы?

Автор их явно упоминает, как и технологию CI, например.

Это вопрос отношения к людям. “Жалеть и учить”.

“интерфейс определён” не равно “интуитивно понятно и удобно пользоваться”.

Буквально вчера искали ссылку на скачивание рабочей тетради в aisystant. Она вообще-то на главной странице, рядом с текущим курсом. Куда уж ближе к людям? Но вот беда, если начать шататься по соседним курсам, текущий курс поменяется. А мне например нужна ссылка на СМ. Дальше выбор починить интерфейс или доучить осла пользователя) хорошо бы и то, и другое

Тут, конечно, придирка к терминам. Но в описании не DevOps - Wikipedia там инженеры платформы. Это другое