Комментарии 22
Красиво) Видимо команда слаженная, и нету выгоревших людей, разной степени токсиков и социопатов, дизбаланса в уровне навыков, и ревностного отношения к собственному коду :D К сожалению, я видел только другой мир — кровавые кранчи в комманде гениев, где каждый человек — целый отдельный домен/отдел в больших компаниях, и такими правилами можно, разве-что, извините, "подтереться". Работу нужно делать, не пере-ссориться, спасали только тим-билдинги :)
спасали только тим-билдинги :)
А спасали раз и навсегда, либо только на какой-то время?
может стоило сократить до 7 заповедей?
У нас в Альфа-Банке мы это назваем "стандарты разработки" и формируются они по RFC https://www.ietf.org/rfc/rfc2119.txt
А внутри команд пользуемся Agile манифестом и лично я при code review использую подходы Гугла https://google.github.io/eng-practices/review/ хотя у нас тоже есть правила code review
Эти "правила" работают только с правильным настроем и будут работать неправильно, если их читать с другим.
- "Мы не делаем ничего зря" — прекрасное правило для того, чтобы все начали отрицать потраченное зря время и сделанные ошибки.
- "У нас есть список обязательных знаний" — вообще прекрасное правило, если твое трактование одного из указанных принципов не совпадает с консенсусом команды, тебя могут объявить неучем и попросить самовыпилиться?
- "Мы не переписываем проекты с нуля" — неоднократно попадал в ситуацию, когда легче переписать небольшой компонент с нуля и постепенно перетащить на него всех клиентов старого. Одновременно с "мы следуем принципам и не спорим" — вообще волшебно.
- "Мы не стремимся к 100% coverage кода, но у тестируемых методов обеспечиваем 100% coverage" — никакие проценты statement coverage не говорят о качестве этого покрытия. Даже если это coverage одного метода. У меня даже картинка есть на это.
- "и не удаляем строки с мыслью “кажется, это не нужно" — порой, это единственный способ узнать, что это действительно не нужно.
- "Читаемость важнее скорости и краткости" — только до тех пор, пока скорость не важнее читаемости и краткости.
Ну и в целом какая-то мешанина принципов для разработчиков и для непонятно кого:
- "Мы не аутсорсим разработку биллинга" — счастливый заказчик попросит, и будете аутсорсить.
- "Мы не меняем приоритеты спонтанно" — счастливый заказчик попросит, и будете 10 раз в неделю менять.
В целом мысли интересные, но относиться к этому стоит как к очередной "истории успеха": вреда такое очередной команде может потенциально принести больше, чем пользы. Особенно, в долгосрочной перспективе.
Ну и в целом какая-то мешанина принципов для разработчиков и для непонятно кого
Насколько я понял из статьи — это мешанина принципов для одной конкретной команды. Отсюда специфика типа "не аутсорсим биллинг". Это команда по разработке биллинга в продуктовой конторе — откуда там возьмется "счатстивый заказчик"?
Основой посыл статьи — не трансляция принципов, которые сильно специфичны (они, кстати, под катом — я туда в первом прочтении статьи даже не смотрел). А в подходе, который таки универсален.
Выжимка из статьи: "Собираем все негласные договоренности и принципы в команде — и записываем в документ, на который можно сослаться".
Слепо копировать опыт, конечно, не стоит) Часть практик (например, про не переписывание с нуля) стала, по сути, договоренностью и передачей опыта старичкам новичкам — ну потому что как-то пробовали, но оказалось, что всем проще и выгоднее договариваться с бизнесом на выделенное время для закрытия техдолга в спринтах.
Одновременно с «мы следуем принципам и не спорим» — вообще волшебно.
Как и любой принцип в списке, его можно поменять, вынеся свою версию на голосование и собрав 100% за. В комментариях ниже привели отличный аналог из авиации: ты не выпячиваешь свое эго, но и не обязан молчать. Если что-то не ок, не критикуешь, а предлагаешь — и если команда согласна, то вы вносите поправку. В истории этого репозитория были такие случаи.
Ни одни правила не замещают с собой коммуникацию,
Это — с одной стороны, не лишает людей гибкости в реальных ситуациях, и дает понимание, что стандарт — не удавка, а лучшая практика. С другой стороны — заставляет давать обратную связь о ситуациях, когда стандарт оказался неприменим. И дальше можно решать — то ли это разовая ситуация, ради которой менять стандарт нет смысла (если в стандарте описать все что только можно — он будет незапоминаем, нечитаем и неприменим) — то ли ситуация частая/опасная/whatever — и ее надо пихать в стандарт, чтобы в следующий раз не экспериментировать наживую.
Вообще, жутко полезно хотя бы по-диагонали посмотреть номативку атомщиков и летчиков. Они там по краю ходят — в том смысле, что можно одной простой ошибкой угробить сразу много народа. Поэтому жизнь их заставляет придумывать всякие интересные штуки для предотвращения неприятных ситуаций. Напрямую в разработку это, конечно, не перенести — иначе разработка упадет под гнетом предотвращения рисков и стоить будет о-го-го сколько! Но отдельные элементы — это прямо вот что доктор прописал. Особенно, для ответственных приложений и сервисов…
Вообще, жутко полезно хотя бы по-диагонали посмотреть номативку атомщиков и летчиков.
Спасибо за интересную наводку. А можете поделиться хорошими, на ваш взгляд, примерами, если не сложно?
Из авиации же — «принцип черной кабины»: нормально работающая система не должна привлекать к себе внимание или требовать постоянных проверок. Однако, любые отказы и аномалии должны быть явно и однозначно обозначены персоналу.
У атомщиков я с удовольствием стащил понятие «максимальной проектной аварии (МПА)», и принцип построения системы защиты так, чтобы в случае МПА все были живы и здоровы. Оттуда же — аварийные действия персонала по приведению системы в безопасное состояние не должны требовать сложных решений и рассудочных действий. В идеале — нажал кнопку аварийной защиты — и оно само, уже тебя ни о чем не спрашивая — сбросит, заглушит, расхолодит, и т.д. Потом в спокойной обстановке будете разбираться, что к чему было…
Моя адаптация этого принципа в работу была примерно в 2004 году — инструкция по переводу довольно большой ИТ-системы на работу в резервном режиме (другой сервер, резервная серверная примерно в 20 км). Эта инструкция содержала два пункта: первый — зайти пользователем таким-то, пароль такой-то на сервер IP такой-то. Второй — выполнить команду такую-то, переход системы в резервный режим произойдет в течение 3-5 минут автоматически. И мне было не важно, кто будет это делать — программист, администратор, или хотя бы слесарь КиП: чье тело найдут по телефону, тот и будет делать! Не важно, хочет ли он спать, пил он вчера или нет, знает ли особенности системы, и т.д. — если команда прошла, остальное от него не зависит.
P.S. Реальный переход в резервный режим был один раз примерно за 6 лет работы.
В списке правил есть конфиденциальная информация? Хочется прочесть все 43 пункта в репозитории. Планируете ли сделать репозиторий с правилами публичным?
Хочется прочесть все 43 пункта в репозитории
Наверное, не до конца мы четко написали — в общем, исходно было 43 пункта, но в процессе обсуждений, приоритизации, голосований и этого всего какие-то пункты укрупнялись, какие-то отвергались. И список похудел до 27.
Планируете ли сделать репозиторий с правилами публичным?
Тк команда им пользуется, в ней и в правилах периодически происходят изменения — даже не знаем… Но если вопрос в том, как с кем-то поделиться без обвязки остальной историей, то Лёша Катаев выкладывал на hackmd для своего доклада копию.
Да, верно, не совсем очевидно стало, что было 43, а осталось 27, и все эти 27 представлены в статье. Спасибо за уточнение.
Спросил про публичность репозитория именно из-за того, что думал, что есть еще что-то в списке. Если же нет, то вопрос отпадет. Не знаю как другим читателям, но мне достаточно статьи и этой ссылки на hackmd. Спасибо
Лучше всего работают технические регламенты-инструкции вроде того, как что настроить, чтобы работало.
Крайне частая ошибка — это пытаться документом изменить практику разработки. Докладываю — практика документами не меняется! Даже, блин, в армии — начальство пишет документы про одно, в низах делается другое (хотя субординация, и «служи — по уставу!»). Очень советую почитать что-нибудь про change management: нужно, чтобы сначала появилась потребность в определенном правиле, чтобы эта потребность стала осознанной, чтобы были ресурсы для выполнения правила — и только потом можно писать правило в документ.
Обязательно проверяйте — если выполняя ваши правила можно устроить «итальянскую забастовку», значит — правила плохие (не жизненные, работать не нарушая их — невозможно) и их следует переделывать.
«Конституция» для разработчиков: как страничка на GitHub помогает нам не ругаться уже год