«У бизнеса нет идей для AI» — нет, это он просто плюнул на вас

Если вам кажется, что у бизнеса мало идей, — у меня плохие новости. Он просто перестал вам их приносить.

Расхожий тезис про AI в разработке — что скорость разработки не нужна, потому что у бизнеса нет столько новых идей.

Если ты сидишь на уровне среднего тимлида, девопса или QA, и тебе кажется, что у бизнеса мало идей, — это может означать другое. Это не идей мало. Бизнес так задрала твоя низкая производительность, вечно проёбанные сроки и регулярные возвраты задач в багфиксинг с рефакторингом, что он плюнул на тебя и вбрасывает только неизбежные критичные задачи. Иначе невыносимо наблюдать, как ты медленно копошишься со своей архитектурой и паттернами — и всё равно на выходе косяки и переделки.

Continue reading “«У бизнеса нет идей для AI» — нет, это он просто плюнул на вас”

Иерархия — это договор, не угнетение

Почему люди тянутся к сильным лидерам, зачем менеджеры избегают строить иерархию и что происходит с командой, когда формальной структуры нет.

Если вы когда-нибудь видели, как в команде «без иерархии» кто-то один всё равно заправляет всем — поздравляю: вы наблюдали закон природы. Формальной иерархии нет. Неформальная уже здесь. И вторая — всегда хуже.

Continue reading “Иерархия — это договор, не угнетение”

Особенности профессионального найма

Процесс найма похож на брачные танцы: работодателя можно представить в роли невинной белоснежки, которой снится популярность Саши Грей, а соискатель изображает принца на белом коне, хотя конь взят в кредит на остатки после ипотеки. Чем раньше обе стороны перестанут валять дурака и раскроют карты, тем более конструктивный разговор у них получится.

К сожалению, не все готовы признать реальное положение вещей. Личный комплекс “власти”, неискренность по характеру, эгоцентричность и другие штуки – приводят к тому, что работодатель начинает рассуждать в контексте “я нанимаю”. Я нанимаю – значит я имею право, а “он” прав не имеет. Жестокая реальность потом больно бьёт по голове, когда приходит осознание что кандидат (да и сотрудник) тоже выбирает вас как долгосрочного партнёра. Иногда это осознание приходит только с уходом ключевых людей, которых конкуренты перекупают как горячие пирожки. Continue reading “Особенности профессионального найма”

О руководителях военного и мирного времени

Этот пост – отклик на провокационную статью о так называемых руководителях мирного и военного времени, опубликованной на слоне.

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

Короче говоря, это очередной взгляд на борьбу сил Добра и Зла, Процесса и Результата, – моя любимая тема, которую я не мог оставить без внимания. Как всегда, где есть два противоборствующих лагеря, скорее всего не правы ни те, ни другие. Давайте разберёмся. Continue reading “О руководителях военного и мирного времени”

Три стратегии принудительной реорганизации проектов и команд

Мотивами поста послужили недавние события, произошедшие с проектом Lenta.ru. Если кто не в курсе, то перечислю: уволен главный редактор, генеральный директор, а так же уволились 39 сотрудников “Ленты”. Ссылки на первоисточники вы легко найдёте в гугле.

Но если оставить за рамками поста политику и бизнес, то удивление вызывает сама реакция как сотрудников “Ленты”, так и читателей – простых и непростых обывателей нашей с вами страны. Словно они наблюдают подобную ситуацию в первый раз, не понимают что происходит, выдвигают множество версий и высказывают множество эмоций.

Автор этих строк, сменив более 6 мест работы в крупных компаниях, неоднократно сталкивался с корпоративными политическими играми, и поэтому позволит себе провести трезвый анализ ситуаций подобных этой. Continue reading “Три стратегии принудительной реорганизации проектов и команд”

Когда записывать, и когда не записывать задачи в таск-менеджер

Тут Мегаплан постепенно приобретает человеческое лицо, и начинает понимать что нельзя “с наскока” внедрить процесс постановки задач, как лампочку Ильича, в каждую избу на деревне. Выскажу и я своё скромное мнение.

Существует две крайности относительно постановки задач: одна из них – полное отсутствие таск-менеджера вообще, передача задач устно, по аське, по е-майлу, на стикерах к монитору. Вторая – запись всего-всего-всего в таск-менеджер, и обсуждение всех подробностей и шагов решения задачи там же в комментариях, даже между людьми сидящими за соседними столами.

В реальности большинство компаний болтаются где-то между, что-то записывая в трекер, а что-то передавая исключительно на словах. Давайте разберёмся, что же там происходит и почему. Для начала – лирическое отступление и правда жизни:

Даже тщательное ведение таск-менеджера не приближает вас к успеху проекта.

Никакие инструменты не приближают вас к успеху проекта. Успех проекта не зависит от качества кода, применения автоматизированного тестирования и кодоанализаторов, процессов непрерывной интеграции, деплоя с миграциями и так далее. Никто в здравом уме не делает большой проект без этих инструментов, но они не являются залогом успеха.

Успех проекта зависит наполовину от того, насколько хорошо сработают люди, его создающие. А на вторую половину – от того, с какими эмоциями его будут использовать клиенты. Поэтому вы должны быть сосредоточены на том, чтобы набрать правильных людей, помочь им сработаться и убирать препятствия с их пути, и в том числе – поддерживать полезные инструменты и на%уй саботировать неполезные. А вот кто есть кто – зависит от вашего конкретного случая.

Вернёмся к теме:

Записывать в таск-менеджер (трекер) нужно:

Когда команда распределена. Если у вас команда и/или заказчики значительно разделены территориально и по рабочему времени, то очевидно рекомендуется записывать задачи и результаты, чтобы передавать их друг другу.

Когда задача – это на самом деле баг. Баг, как сущность, – это формализованно описанная проблема. Есть даже мантра тестировщиков, помощающая составить хорошее описание: что я делал, что я получил, что я ожидал получить. Говоря умными словами – шаги по воспроизведению, полученный результат, ожидаемый [по спецификации] результат. Однозначно записывать, иначе потеряется.

Когда задача ясна от начала до конца. Бывают такие задачи, над которыми не нужно думать, а нужно просто сделать. Добавить такие-то виртуальные хосты под такое-то число сервисов, вот список. От человека требуется взять и накатать рецепты в chef. Не нужно долго думать, достаточно сработать по известному алгоритму, и требуемый результат чётко понятен.

Когда задача содержит много формализованных значений. Например, увеличить максимальную длину логина с 8 до 16 символов, и допускать логины начинающиеся только с маленькой буквы из диапазона [a-z].

Когда исполнитель пьян. Ну, или не пьян, а с похмелья. Или не с похмелья, а всю ночь херачил над другими проектами, а утром вспомнил что нужно идти на работу. Или всю ночь укачивал капризничающего ребёнка. В общем, в тех случаях, когда над ним нужно сидеть и помогать нажимать пальцами на кнопки.

Записывать в таск-менеджер (трекер) НЕ нужно:

Когда задачу лучше сделать прямо сейчас. Как в GTD есть правило – если входящее письмо требует меньше двух минут на решение, то нужно решать сразу, не перекладывая в todo или later. Так и в разработке – если проще обсудить и тут же решить, то надо обсудить и тут же решить. Вспоминаем начало этого поста, если забыли.

Важно, чтобы это реально была задача класса “быстро решить”, а не бравада вашего разработчика в стиле “плавали-знаем”, которая выльется в полдня работы.

Когда задача требует исследования и/или проектирования. Педанты скажут, что надо делать две задачи – на исследование и на реализацию. Если вам так удобно – делайте. Но если вы сами работали программистом, то вы знаете, что в фазе исследования вы можете уже накодить так много пробных вариантов, что фаза реализации превратится по сути в рефакторинг уже сделанной работы. Как теперь отчитываться по двум задачам?

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

Автор этих строк пользуется простым методом, и вам рекомендует: берите свой айфон и фоткайте все эти листики. Или маркерные доски, если там нарисовано. Это и будет документацией, если она вдруг понадобится кому-то из коллег.

Когда задача очевидна. Говоря другими словами, когда мимо неё не пройти, не споткнувшись. Очевидно, что в проекте должен быть процесс деплоя (скрипты, выполняющие выгрузку новой версии в продакшен). Очевидно, что у проекта должны быть группы dev-, stage-, prod-серверов. Очевидно, что когда у интернет-магазина есть корзина, то должен быть и способ фиксации заказов.

Замечание: речь про собственные (внутренние) проекты. Это не подходит, если вы работаете по fix-price и фиксированному ТЗ с внешним заказчиком.

Когда конечный результат не определён. Мой любимый пример – система аутентификации, авторизации, и распределения прав. Не смотря на (казалось бы) универсальный стандарт ACL, я не встречал ни одного проекта, в котором система прав доступа была бы сделана так, чтобы удовлетворять всех от разработчиков до клиентов. Если у вас нет возможности воткнуть какой-то готовый модуль и успокоиться, то единственный вариант – принудить команду запилить конкретное относительно нормальное и легко расширяемое (в будущем) решение. Иначе холивар вырастет на месяц.

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

– привлечь профессиональное проектирование и запроектировать от начала до конца. В большинстве случаев означает бездарно потерять время [/деньги], потому что всё равно половина будет переделана, а вторая половина сразу не подойдёт.
– надавить авторитетом и сформулировать как что должно работать от начала до конца. Говно-вариант, потому что если ваша команда – не роботы, то они и сами смогут выдвинуть встречный десяток альтернативных идей, и будут демотивированы вашим давлением.
– выбрать исполнителя, соответствующего по квалификации, который сам (с небольшими подсказками) выберёт нормальный алгоритм и запилит хорошее расширяемое решение.

По какому варианту пойти – вам должно быть очевидно. И очевидно, что по такой задаче бесполезно записывать в трекер что-то большее чем заголовок “Внедрить подсистему разграничения прав доступа”.

Резюме:

Автор этих строк использует простое правило: если результат формализован и нельзя сделать прямо сейчас – записывать. В иных случаях – на%уй. Как действовать вам – зависит от вашего проекта и команды. Выберите способ, с которым команда будет наиболее продуктивна, и действуйте по нему.

Проектирование VS Прототипирование: холивар или реальное решение?

Холивар проектирования против прототипирования в больших проектах – это палка о двух концах. На одном из которых – консервативные приверженцы махрового энтерпрайза с каскадным (waterfall) подходом “Спроектируй-запланируй-отрисуй-закодируй-протестируй”, на другом – ярые фанаты Agile и всякого там “XP” с идеей “лучший прототип – это быстро сделанный и запущенный проект”. Continue reading “Проектирование VS Прототипирование: холивар или реальное решение?”

Сделать большой проект – это как проехать через весь город в незнакомой стране

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

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

Поэтому единственная возможность, которая у вас есть, чтобы достичь цели, – это сесть за руль и включить в навигаторе голосовые подсказки. Сесть и поехать, не удерживая в голове весь роутинг маршрута в целом, – но осознавать вашу конечную цель, трезво оценивать текущую обстановку и на каждом повороте прислушиваться к подсказкам на пару шагов вперёд.

Ну, или взять такси.

Отсеките всё лишнее: кто на самом деле является источником задач в Agile-проектах

– Как вам удаётся создавать такие великолепные статуи? – Я беру глыбу мрамора и отсекаю от нее все лишнее, – сказал Микеланджело Буонаротти в далёком 16-ом веке.

В прошлом посте я высказал несколько мыслей о том, почему не следует злоупотреблять уникальными технологиями и длительной фазой исследования в любом business-driven проекте. Не смотря на явно провокационный стиль статьи, я был удивлён тем сколько людей оскорбились до глубины души. “Беспрецедентный бред” – писали они, – “Я бы никогда не стал работать под вашим руководством”, – “Очередной менеджер-передаст пиарит сам себя”, – это если вырезать нецензурные комментарии.

Забавно, что все эти люди, после личного общения с каждым, меняли свою точку зрения на прямо противоположную. Где-то к 30-ому комментарию в фейсбуке они уже писали “да, я с удовольствием почитаю твой блог на досуге”, делились своим опытом и точками зрения. Как и следовало ожидать, люди просто накопили внутри себя обиду к менеджерам-дебилам, тупым задачам и скучным проектам, и увидели возможность выплеснуть всё это на автора.

Но мы отвлеклись. Так кто же реально ставит задачи в современных проектах? Кто определяет, что нужно делать, а что нет? Continue reading “Отсеките всё лишнее: кто на самом деле является источником задач в Agile-проектах”

Стоит ли вам остановиться в своём развитии?

“Иногда нужно бежать со всех ног, просто чтобы оставаться на месте” – цитирует нам слова классика современный IT-бизнес. “Лентяи нам не нужны, нам нужны работающие и развивающиеся!” – строчит ежедневные провокации известный Олег Т. “Молодой и динамично развивающийся коллектив” – звучит в каждой вакансии. Остановиться в своём развитии? Что за бред?

Однако, у саморазвития есть и оборотная сторона: Continue reading “Стоит ли вам остановиться в своём развитии?”