Любимая тема при старте проекта — "какой системой будем пользоваться для управления?". Кажется что вот сейчас выберем правильную и хорошую систему и проект сделается сам по себе.
На моей первой работе (в 2007) была самописная штука сделанная на базе платформы, которую компания и разрабатывала/продавала (сама платформа — это ERP конструктор для телекомов, тоже очень навороченная). Для заказчиков продавались модуля для работы с сетями, инвентарём и труднопереводимым словом resource/service provisioning, а для внутренних нужд пилились свои модули. Там трекались задачи и заводились баги, отмечалось рабочее время (таймшиты), делались запросы на командировки и отпуска, отмечались используемые человеком IT ресурсы (физические и виртуальные) и так далее и так далее. Dogfooding[1] в кубе а то и больше. Это был монстр, который мог делать все. Даже релизы которые собирались тогда едва ли не вручную (релиз инженер качал сорцы и запускал ant dist или че-то такое) выкладывались во внутррений артифакторий и отмечались соответствующим образом в этой системе. По любой задаче можно было найти коммиты, артефакты, статусы и так далее. Она была заинтегрирована со всем и вся и при необходимости слала нотификашки на почту тебе и твоему менеджеру, автоматом добавляла нужных людей в треды и вообще. Туда же скидывались тикеты от заказчиков, там можно было менять доменные пароли, я пока пишу этот пост то вспоминаю и вспоминаю что же она еще умела делать.
Недостаток, как и у всех подобных систем был один — невероятная сложность. Когда функциональность очень разнообразная, для нее приходится разрабатывать какие-то общие структуры данных и интерфейсные подходы, в результате получается что оно работает, но одинаково плохо что для бухгалтеров, что для тревел саппорта, что для разработчиков.
Никто не любил эту систему (а она называлась очень просто — "Project" и даже имела соотвествующий домен). Внутри компании были адвокаты джиры, которые пытались её использовать в пилотных проектах или на свой страх и риск, но для трекинга сорцов все равно нужно было заводить задачи внутри прожекта.
Я тоже не любил прожект, но ретроспективно, 10 лет спустя, я понимаю, насколько же крутая это была штука. Да, для программиста или тестировщика она была не очень удобной, интерфейс, эргономика и количество кликов оставляли желать лучшего, но зато она работала абсолютно для всех отделов компании, для всех людей, более-менее консистентно и хранила в себе все. Она была настолько круто и мощной что каждые выходные закрывалась на maintenance. Уверен что даже сейчас можна поискать и найти там записи про меня и про мои первые закрытые тикеты.
Когда я начинал работать в стартапе, потом в своей компании и сейчас работаю как контрактор в других, то вижу, какой зоопарк систем нужен для того, чтобы просто начать. Jira, Trello, Asana, Notion, Nuclino, GitHub/GitLab/BitBucket, CI/CD, Confluence, Slack, Teams, какие-то HR-ные системы для отпусков и таймшитов, все это на разных сайтах, выглядит по-разному и хорошо если туда прикручен корпоративный SSO. А если нет? Как ставить кросс-ссылки между ресурсами? Если мне нужно в мердж реквесте сослаться на статью в Nuclino, а она потом пропадет?
Хотя я в целом сторонник unix-way[2]: "Write programs that do one thing and do it well", но про вторую часть "Write programs to work together" почему-то все забывают и работает оно через пень-колоду. Сейчас мне кажется что все тулзы более-менее адекватны и проблема лишь в том, как они интегрированы между собой. Поэтому если бы я сейчас выбирал где и как делать проект, то взял бы GitLab или Atlassianовский стек. Гитлаб лучше, потому что делает меньше и легковесен.
В одном месте у тебя—сорцы, тикеты, канбан доска, CI/CD, вики, артефакты, сниппеты. Вроде бы есть трекинг времени, но не уверен. За дополнительной инфой не надо никуда ходить, все собрано в одном месте и линкуется друг на друга. В коммите можно ставить номер тикета и он зарезолвится в правильную ссылку в веб-интерфейсе.
Atlassian то же самое—Jira, Confluence, BitBucket хорошо между собой дружат и линкуются, хотя по отдельности каждый из них монстроузен и избыточен.
Для меня значительно удобнее приходить на проект и видеть все в одном месте. Проекты своей компании я вел (и веду сейчас) в Jira+GitLab+Jenkins[3]. Не очень. Другие штуки, в которых я принимаю участие катятся на Trello+GitHub+Teams+Nuclino. Или Asana+GitLab+Slack+Nuclino. И еще сверху докручены какие-то HR тулзы. Людям нравится, они с этим привыкли работать и им ок, но я вижу значительно большую ценность в интеграции вещей между собой (а они все очень плохо заинтегрированы) нежели в высоком качестве каждого отдельно взятого инструмента.
Jack of all trades, master of none, но я уверен что GitLab (и тем более Atlassian) спокойно закроет 80% любого проекта. Оставшиеся 20% будут чесаться и колоться, но ценность от целостности системы и решения для меня выше, и перекроет недостатки.
Иногда я думаю, вот у меня есть проект, который я делал годами. Каждый коммит привязан к тикету в джире. Я захочу передать этот проект кому-то другому. А ведь это просто так не сделаешь! Изволь еще каким-то образом экспортнуть историю тикетов в джире и заметок в конфлюенсе. Вопрос в том, насколько она вообще нужна, эта история, но сам факт того, что связанные вещи на самом деле никак не связаны меня раздражает.
Поэтому мне привлекательны решения широкого профиля и полного цикла, фулл-стек системы управления проектами. Как на моей первой работе.
Upd 18.11.2019: уже не веду. Закрыл Jira, удалил Jenkins, все теперь в GitLab ↩︎
Сподобалось? Долучайтеся до мого телеграм каналу: https://t.me/full_of_hatred