Привет, Хабр!
Наверняка большинство из вас знает, что такое "Интранет" (далее — "Интра"), а многие так и вовсе видели своими глазами и даже щупали курсором. Для тех, кто в танке все же не в курсе, уточню: это такой корпоративный портал, локальный сетевой ресурс для своих. Как соцсеть в миниатюре. Здесь сконцентрировано все самое важное для сотрудников, начиная от документации и заканчивая рабочими (и не только) чатиками — все зависит от потребностей конкретной компании.
И у нас, в "Рексофт", тоже есть своя "Интра", да не простая, а золотая крафтовая. Сегодня я хочу рассказать о том, как мы ее создавали, какими были первые версии и какой классной и полезной она стала в итоге. К слову, мои коллеги в скором времени дополнят этот мой рассказ еще более интересными подробностями в рамках отдельных статей. Из них вы узнаете о технических деталях и любопытных решениях, реализованных нашими разработчиками. А еще о том, что наша "Интра" — это не только корпоративный портал, но и настоящий полигон, на котором в условиях, приближенных к реальным, зеленые джуны превращаются в настоящих профи.
Как появилась первая версия "Интры"
Поначалу у нас был самый примитивный и малофункциональный внутренний портал ("Интра"), который был жутко неудобен и напоминал, скорее, архивный сайт из девяностых. Главная причина неудобств заключалась в старых технологиях, с возможностями которых было особо не разгуляться.
Попытки преобразить прабабушку нашей современной "Интры" предпринимались много раз. Лет восемь назад мы решили сделать портал на базе Microsoft SharePoint (NewIntra). У этой версии было много возможностей, но, как водится, присутствовала и ложка дегтя: из-за очень строгого enterprise-формата и номенклатурного вида такой "Интрой" пользоваться, мягко скажем, трудновато. А чтобы дорабатывать и поддерживать, нужно быть гуру в SharePoint (SP).
В 2019 году, после долгих обсуждений, мы решили начать поиски новой, более удобной платформы: изучали рынок, проводили анализ бесплатных и платных решений, встречались с вендорами, взывали к высшим силам, но все тщетно. Оказалось, что большинство портальных решений для внутренних коммуникаций на тот момент было сделано на основе SP, а мы, наоборот, изо всех сил стремились от него избавиться. Нам хотелось найти более гибкое решение, которое мы могли бы в будущем самостоятельно дорабатывать, используя наши ключевые технологии (Java, React). Ну и, конечно же, не тратить при всем при этом космические суммы на лицензирование.
И… мы ничего не нашли. Погоревали, конечно, но не сдались. В общем, решили построить свой лунапарк, в смысле портал. (Без блек-джека и остальных активностей, конечно, но получилось тоже недурно.) Итак, мы написали свою "Интру" сами.
Как это происходило? У нас был руководитель офиса, два руководителя практики, какое-то количество джунов, отвращение к текущему порталу и море энтузиазма. Сначала мы создали небольшую рабочую группу с руководителями практик, наметили план работ и собрали команду из "свободных" и, что важно, желающих разработчиков. Конечно, в первой версии нашей новой "Интры" был только базовый функционал, но он уже хотя бы отвечал современным требованиям. Ну а главное — у нас появился фундамент, на котором можно выстроить все, что нам нужно.
В "Интре", например, появилась функция поиска (да, раньше ее не было, не так-то это просто реализовать), полноценный список сотрудников, личные профили, новостная лента, календари, галереи, дни рождения, ссылки на документы и многое другое. А еще мы добавили упрощенный функционал CMS в левом меню, это позволило "набивать" информационные странички даже тем, кто ни разу не программист. К слову, параллельно мы начали разрабатывать свою собственную матрицу компетенций, и она, конечно же, тоже нашла свое место в нашей новой "Интре".
К концу 2020 года мы вышли в прод с полноценной первой версией современной "Интры". Конечно, не все было гладко. Что-то пришлось исправлять, что-то — дорабатывать. Чтобы точно ничего не упустить, мы попросили коллег оставлять отзывы и комментарии по поводу того, что, по их мнению, стоит допилить, а что прикрутить. И вот наша "Интра" стала удобным инструментом, который постепенно обрастает новыми фишечками.
Звучит просто и легко. Но!
На самом деле, все было далеко не так просто, как кажется. Во-первых, команда этого проекта была собрана из "свободных" разработчиков, то есть разработчиков без основного проекта. Это значит, что в любой момент, когда такой "бизнесовый" проект появится, сотрудник полностью уйдет в него, просто потому что business first. Поэтому мы решили отказаться от привычных всем спринтов и попробовать Kanban. В чистом виде он нам тоже не подошел, поэтому у нас, так сказать, Kanban "глубокий".
Сложности были во всех направлениях, кроме самой разработки: команда все-таки состоит из разработчиков, а разрабатывать мы умеем! (И от скромности не умрем, да.) Так вот, основная проблема была в том, чтобы придумать, что разрабатывать, а главное — как это тестировать. Но нам очень повезло: уже с самого начала у нас собралась сильная команда дизайнеров, которая, по сути, заменила нам бизнес-анализ. Все идеи мы накидывали из головы, дизайнеры их отрисовывали, а потом, в режиме брейншторма, мы сверялись и правили финальные макеты. Да, наша "Интра" не идеальна, она crafted. Сейчас вообще модно все крафтовое: крафтовая бумага, крафтовое пиво. У нас — крафтовая "Интра"
Документации у нас поначалу не было. Все сценарии, как это должно работать, были только в голове у тестировщика. Впоследствии мы расширили команду тестирования, все покрыли тест-кейсами и по ним уже определяли, что работает правильно, а что нет.
Новый функционал
Через полгода после выхода первой версии "Интры" мы решили встроить туда нашу доработанную матрицу компетенций. На это ушло около трех месяцев. Потом мы добавили индивидуальный план развития сотрудника, а также внедрили легкую и удобную систему бронирования для наших офисов (они работают в режиме коворкинга). Появились разные социальные "плюшки", например организация сборов на подарки к дням рождения. Фишка простая: на портале вводится имя, кого нужно поздравить, и всем (кроме самого поздравляемого) автоматически отправляется письмо, куда скидываться.
Из самых свежих доработок — форма для заполнения резюме сотрудников. А еще мы работаем над отчетами по матрице компетенций, но пока это пилотная версия. Они нужны, в первую очередь, для оценки компетенций: какие сильные, какие слабые, насколько они нам нужны (на основе анализа планов развития), надо ли вкладываться в обучение, чтобы восполнить пробелы, или лучше нанять сотрудников с уже имеющимися необходимыми нам способностями и так далее.
Технические детали
Изначально "Интра" представляла собой справочную систему по сотрудникам. Это было небольшое монолитное приложение, написанное с использованием Spring Framework и Java 8, которое работало на WildFly. Со временем мы пришли к сервис-ориентированной архитектуре и сейчас это набор независимых сервисов. В настоящий момент мы технически используем SpringBoot, перешли на Java 17, и все деплоится в Kubernetes кластер. Есть несколько кластеров для разработки и тестирования, а также отдельный прод и полноценный цикл CI/CD. Кроме того, мы обросли модулями для полнотекстового поиска, бронирования рабочих мест, мониторинга. Появилось полноценное версионирование сервисов. Фактически "Интра" выросла из справочной системы в Resource Management систему, где, помимо коммуникационного ландшафта, сосредоточен портал для всестороннего управления ресурсами (менеджер — сотрудник — HR).
Хотелось бы также отметить ряд интересных решений. Это, например, ролевая модель, построенная на списках пермишенов. Можно создавать группы с очень узким набором прав и выдавать их нужным пользователям. Как следствие — фронт достаточно гибко подстраивается под конкретные разрешения, рисуя или не рисуя элементы управления. Так сказать, наш фронт может копать, а может и не копать. А еще динамический роутинг. Ну а точнее — возможность создавать древовидные разделы с произвольной вложенностью без изменения фронт-части портала. Вроде бы достаточно несложная задача, но и совсем стандартной ее не назовешь. Ну и как вишенка на торте — механизм миграций пользовательских настроек. Как я уже говорил в самом начале, коллеги в своих статьях обязательно расскажут об этих и других технических особенностях.
Что дальше?
Если старая версия "Интры" была просто списком сотрудников и всем, что крутилось вокруг него, то наш сегодняшний портал с добавленной матрицей компетенций, системой отчетов и индивидуальным планом развития стал гораздо большим. Сейчас это единое окно для сотрудника по его месту в компании, взаимодействию с ней и профессиональному развитию. Помимо перечисленных функций, на портале, например, предусмотрен механизм для подачи заявления на отпуск, можно оставить и получить обратную связь (формат "вопрос-ответ"), пройти опрос и многое, многое другое. Но как бы там ни было, "Интра" не решает всех проблем и вопросов, потому что иногда все же проще воспользоваться иными способами: очно, либо по той же самой корпоративной почте.
В любом случае, всегда есть куда двигаться. Наш портал продолжает развиваться, в работе находится множество новых задач и идей. И мы постараемся рассказать вам о самых интересных из них в следующих статьях.
fekrado
Добрый вечер. Очень интересное решение. Хотелось бы узнать больше технических аспектов. + планируете ли Вы распространять ваше решение? Будет ли доступен проект на GitHub?
kazartsev Автор
Добрый день! Спасибо за вопрос!
Технические детали по frontend и backend раскроются в следующих статьях, их будет ещё 2 на эту тему.
Что касается распространения, то мысли продуктивизировать и выложить на GitHub решение были, но как обычно не хватило чуть-чуть времени. Всегда есть фичи, которые надо пилить. Может быть когда-нибудь руки и дойдут)