[{"data":1,"prerenderedAt":104},["ShallowReactive",2],{"post-Geolokatsiia_chaty_masshtabirovanie_biznes_prilozhenie_na_Kotlin_Multiplatform":3,"next-post-Prokachali_instrumenty_analitiki_dlia_SOKOLOV_krupneishego_v_Rossii_iuvelirnogo_proizvoditelia":66},{"id":4,"tags":5,"key_words":6,"main_image":7,"preview":9,"images":11,"videos":12,"category":13,"technology":14,"url":39,"links":40,"text":41,"links_post":42,"author_image":43,"logo":44,"next_post":45,"color":46,"slug":52,"type_main_image":53,"name":54,"title_ceo":54,"short_description":55,"type":56,"status":53,"author":57,"company":43,"job_title":43,"company_link":43,"customer_data":58,"allow_auto_publish":59,"date_created":60,"post_time":61,"date_published":62,"date_change":63,"date_stop":43,"anons":43,"text_author":43,"sort_type":64,"sort_main":43,"link_url":55,"changed_by":65},193,[],[],{"image":8},"https://softorium.pro/admin-area/media/images/i_saw_you_cover.png",{"image":10},"https://softorium.pro/admin-area/media/images/preview_i_saw_you_cover.png",[],[],[],[15,17,19,21,23,25,27,29,31,33,35,37],{"name":16},"Kotlin Multiplatform",{"name":18},"Websocket",{"name":20},"Docker",{"name":22},"Elasticsearch",{"name":24},"PostgreSQL",{"name":26},"MongoDB",{"name":28},"Ktor",{"name":30},"SwiftUI",{"name":32},"RabbitMQ",{"name":34},"Kubernetes",{"name":36},"grpc",{"name":38},"Jetpack Compose",{},[],"\u003Cp>\u003Cspan style=\"font-weight: 400;\">К нам обратился владелец компании из сферы \u003C/span>\u003Cspan style=\"font-weight: 400;\">Fashion Retail\u003C/span>\u003Cstrong> \u003C/strong>\u003Cspan style=\"font-weight: 400;\">и активный участник отраслевых мероприятий c идеей стартапа. \u003C/span>\u003Cspan style=\"font-weight: 400;\">Так родился проект \u003C/span>\u003Cspan style=\"font-weight: 400;\">I Saw you\u003C/span>\u003Cspan style=\"font-weight: 400;\"> — мобильное приложение, которое автоматически фиксирует ваши встречи на конференциях или выставках и помогает выстраивать нетворкинг без дополнительных действий.\u003C/span>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Цель была амбициозной: создать удобную альтернативу LinkedIn и TenChat, но с фокусом на \u003C/span>\u003Cspan style=\"font-weight: 400;\">реальные офлайн-взаимодействия\u003C/span>\u003Cspan style=\"font-weight: 400;\">. Без новостных лент, лайков и лишнего шума — только полезные связи, сохраненные в один клик.\u003C/span>\u003C/p>\n\u003Ch3>Как это работает\u003C/h3>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Пользователь устанавливает приложение и заполняет профиль: фото, город, возраст, интересы, навыки и цели — кто ему интересен и чем он может быть полезен. Механика напоминает дейтинг-приложения, но цель — не свидания, а деловые контакты.\u003C/span>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Система использует \u003C/span>\u003Cspan style=\"font-weight: 400;\">геолокацию (до 50 метров)\u003C/span>\u003Cspan style=\"font-weight: 400;\"> и автоматически фиксирует пересечения с другими участниками. Если вы были рядом — вы попадаете друг другу в список «Виделись».\u003C/span>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">\u003Cimg alt=\"\" height=\"500\" src=\"/admin-area/media/images/isawyou.jpg\" width=\"700\"/>\u003C/span>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">После мероприятия можно:\u003C/span>\u003C/p>\n\u003Cul>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">просмотреть всех, с кем пересекались;\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">открыть профили;\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">написать сообщение через встроенный чат.\u003C/span>\u003C/li>\n\u003C/ul>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Даже если вы не успели познакомиться — приложение «помнит» за вас.\u003C/span>\u003C/p>\n\u003Ch3>Масштабируемый продукт для ивент-индустрии\u003C/h3>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">По настоянию заказчика в архитектуру приложения была сразу заложена возможность масштабирования. При разработке серверной части была реализована микросервисная архитектура на платформе .NET.\u003C/span>\u003C/p>\n\u003Cp>\u003Cstrong>Почему Kotlin Multiplatform?\u003C/strong>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Перед запуском стоял выбор: нативная разработка под iOS и Android, кроссплатформенные фреймворки (Flutter, React Native) или \u003C/span>\u003Cspan style=\"font-weight: 400;\">Kotlin Multiplatform (KMP)\u003C/span>\u003Cspan style=\"font-weight: 400;\">.\u003C/span>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Мы выбрали KMP — и вот почему:\u003C/span>\u003C/p>\n\u003Col>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">Общая бизнес-логика, нативный UI.\u003C/span>\u003Cspan style=\"font-weight: 400;\">\u003Cbr/>\u003C/span>\u003Cspan style=\"font-weight: 400;\">Бэкенд, сеть, навигация, логика хранения — все пишется один раз. А интерфейс остается нативным: Jetpack Compose для Android, SwiftUI для iOS. Это дает и экономию времени, и привычный UX.\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">Быстрый выход на рынок.\u003C/span>\u003Cspan style=\"font-weight: 400;\">\u003Cbr/>\u003C/span>\u003Cspan style=\"font-weight: 400;\">Заказчику нужен был рабочий MVP для демонстрации на мероприятиях. KMP позволил собрать обе версии параллельно без дублирования кода.\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">Готовность к масштабированию.\u003C/span>\u003Cspan style=\"font-weight: 400;\">\u003Cbr/>\u003C/span>\u003Cspan style=\"font-weight: 400;\">В перспективе — web и desktop. Благодаря Compose Multiplatform расширение станет возможным без переписывания с нуля.\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">Сила команды.\u003C/span>\u003Cspan style=\"font-weight: 400;\">\u003Cbr/>\u003C/span>\u003Cspan style=\"font-weight: 400;\">У нас глубокая экспертиза по Kotlin. Мы понимали, на что идем, и были готовы решать сложные задачи там, где нет готовых решений.\u003C/span>\u003C/li>\n\u003C/ol>\n\u003Ch3>Сложности, которых не видно в интерфейсе\u003C/h3>\n\u003Cp>\u003Cstrong>Геолокация: не все так просто, как кажется\u003C/strong>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Центральная функция — определение близости участников — оказалась одной из самых нестабильных. Разные устройства (особенно Samsung и Xiaomi) по-разному обрабатывают GPS-сигналы: с задержками, неточностями, требуют нескольких разрешений в строгой последовательности.\u003C/span>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Мы даже рассматривали альтернативы:\u003C/span>\u003C/p>\n\u003Cul>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">сканирование QR-кодов;\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">сравнение фоновых шумов (через микрофон) для подтверждения близости.\u003C/span>\u003C/li>\n\u003C/ul>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">К счастью, доработка алгоритмов геолокации позволила обойтись без костылей.\u003C/span>\u003Cspan style=\"font-weight: 400;\"> \u003C/span>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">\u003Cimg alt=\"\" src=\"/admin-area/media/images/%D0%A7%D0%B0%D1%82%D1%8B_%D0%BD%D0%B0_KMP.jpg\" width=\"700\"/>\u003C/span>\u003C/p>\n\u003Cp>\u003Cstrong>Чат с нуля на Kotlin Multiplatform\u003C/strong>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">На момент старта проекта \u003C/span>\u003Cspan style=\"font-weight: 400;\">не существовало готовых решений для чатов на KMP\u003C/span>\u003Cspan style=\"font-weight: 400;\">. Ни библиотек, ни стабильных гайдов — только теория и эксперименты.\u003C/span>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Мы реализовали полноценный \u003C/span>\u003Cspan style=\"font-weight: 400;\">real-time-мессенджер\u003C/span>\u003Cspan style=\"font-weight: 400;\"> с нуля:\u003C/span>\u003C/p>\n\u003Cul>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">WebSocket-соединения с автоматическим переподключением;\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">push-уведомления, даже когда приложение в фоне;\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">статусы online/offline, прочтение, реакции;\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">очередь сообщений при потере связи — без потерь и с соблюдением порядка;\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">пагинация, навигация по чатам, открытие диалога по push;\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">поддержка edge-кейсов: переключение между Wi-Fi и мобильным интернетом, сворачивание приложения, блокировка экрана.\u003C/span>\u003C/li>\n\u003C/ul>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Каждый элемент пришлось проектировать, тестировать и адаптировать под особенности iOS и Android. Например, навигация в Jetpack Compose оказалась нестабильной, а работа с фоновыми сокетами — разной на платформах.\u003C/span>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Сегодня это одно из наших \u003C/span>\u003Cspan style=\"font-weight: 400;\">ключевых внутренних решений\u003C/span>\u003Cspan style=\"font-weight: 400;\">. Наш проджект-менеджер даже написала статью на «Хабр» с разбором архитектуры чата на KMP.\u003C/span>\u003C/p>\n\u003Cp>\u003Cstrong>Архитектура «на вырост»\u003C/strong>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Мы изначально проектировали систему с расчетом на рост. Если приложение станет популярным — оно не должно «упасть» под нагрузкой.\u003C/span>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Выбрали \u003C/span>\u003Cspan style=\"font-weight: 400;\">микросервисную архитектуру\u003C/span>\u003Cspan style=\"font-weight: 400;\">:\u003C/span>\u003C/p>\n\u003Cul>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">авторизация,\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">поиск,\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">чаты,\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">профили,\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">геолокационные события.\u003C/span>\u003C/li>\n\u003C/ul>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Каждый сервис масштабируется независимо. Если всплеск активности в чатах — поднимаем только их, не трогая остальное.\u003C/span>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Для поиска внедрили \u003C/span>\u003Cspan style=\"font-weight: 400;\">ElasticSearch\u003C/span>\u003Cspan style=\"font-weight: 400;\"> — быстрый поиск по имени, хештегам, отраслям, городам.\u003C/span>\u003C/p>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Заложили отказоустойчивость, очереди (Kafka), горизонтальное масштабирование — чтобы приложение работало стабильно в любой точке мира, при любом интернете и любом количестве пользователей.\u003C/span>\u003C/p>\n\u003Ch3>Что мы получили в итоге\u003C/h3>\n\u003Cul>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">приложение \u003C/span>\u003Cspan style=\"font-weight: 400;\">I saw you\u003C/span>\u003Cspan style=\"font-weight: 400;\"> — уже в RuStore;\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">готовая архитектура для масштабирования;\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">один из первых в России устойчивых чатов на Kotlin Multiplatform;\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">план по запуску в Google Play и App Store;\u003C/span>\u003C/li>\n\u003Cli aria-level=\"1\" style=\"font-weight: 400;\">\u003Cspan style=\"font-weight: 400;\">готовность к тестированию на реальных конференциях.\u003C/span>\u003C/li>\n\u003C/ul>\n\u003Cp>\u003Cspan style=\"font-weight: 400;\">Проект еще в развитии, аудитория формируется — но уже сейчас ясно: \u003C/span>\u003Cspan style=\"font-weight: 400;\">ниша есть\u003C/span>\u003Cspan style=\"font-weight: 400;\">. Люди хотят простой и удобный способ сохранять деловые контакты.\u003C/span>\u003C/p>\n\u003Cp>\u003Cstrong>Пишите нам — обсудим вашу идею, покажем похожие кейсы и соберем то, что действительно нужно. Подписывайтесь на наш \u003Ca href=\"https://t.me/softoriumpro\">канал\u003C/a>, чтобы не потерять из виду.\u003C/strong>\u003C/p>",[],null,"https://softorium.pro/admin-area/media/images/Saw_U_Main_Logo_1.png","Prokachali_instrumenty_analitiki_dlia_SOKOLOV_krupneishego_v_Rossii_iuvelirnogo_proizvoditelia",{"id":47,"name":48,"color_background":49,"color_text":50,"color_background_tag":51},7,"White_and_gray","#FFFFFF","#000000","hsla(0, 0.00%, 0.00%, 0.05)","Geolokatsiia_chaty_masshtabirovanie_biznes_prilozhenie_na_Kotlin_Multiplatform",2,"Геолокация, чаты, масштабирование — бизнес-приложение на Kotlin Multiplatform","",0,"admin@softorium.pro",{},false,"2025-09-15T09:02:32.260029","2025-01-15T09:02:24","2025-01-15T09:02:22","2025-10-09T11:39:07.395485",11,1,{"id":67,"tags":68,"key_words":69,"main_image":70,"preview":72,"images":74,"videos":75,"category":76,"technology":77,"url":84,"links":85,"text":86,"links_post":87,"author_image":43,"logo":88,"next_post":89,"color":90,"slug":45,"type_main_image":53,"name":96,"title_ceo":97,"short_description":98,"type":56,"status":53,"author":57,"company":43,"job_title":43,"company_link":43,"customer_data":99,"allow_auto_publish":59,"date_created":100,"post_time":101,"date_published":102,"date_change":103,"date_stop":43,"anons":43,"text_author":43,"sort_type":65,"sort_main":65,"link_url":55,"changed_by":65},113,[],[],{"image":71},"https://softorium.pro/admin-area/media/images/66777e3098f648ffabaaeadf_preview1_small.png",{"image":73},"https://softorium.pro/admin-area/media/images/preview_66777e3098f648ffabaaeadf_preview1_small.png",[],[],[],[78,80,82],{"name":79},"JavaScript",{"name":81},"ReactJS",{"name":83},"YouTrack API",{},[],"\u003Cp>Рассказываем, как за 2 недели сделать виджеты на 200 000 задач, опираясь на свой опыт и наитие.\u003C/p>\n\u003Cfigure class=\"w-richtext-align-center w-richtext-figure-type-image\">\n\u003Cdiv>\u003Cimg alt=\"\" height=\"500\" src=\"/admin-area/media/images/66a99ed65c37cd3e4894c91c_668df281bfc94707f290ea91_120-20D09ED0B1D0BBD0BED0B6D0BAD0B0.png\" width=\"700\"/>\u003C/div>\n\u003C/figure>\n\u003Ch3>Мы — Софториум, и для нас нет ничего невозможного\u003C/h3>\n\u003Cp>Даже если речь про доработку такого популярного инструмента, как YouTrack — ведь любой софт можно подогнать под задачи своего бизнеса. Только где-то достаточно открыть «Настройки» и задать новые параметры, а где-то (например, в YouTrack) приходится зарываться в код.\u003C/p>\n\u003Cp>Понятно, что пользователям сервиса не до этого. Им нужен кто-то, кто быстро придёт на помощь, услышит, чего они хотят, и сделает всё по красоте. Например, мы — суровые сибирские разрабы и эксперты в легаси-коде. Мы упрощаем жизнь нашим клиентам с 2021 года и превращаем их «хочу» в «вау, как это круто работает!» Мы уже помогли аптечным сетям «Столички» и «Неофарм», а теперь расскажем, что делали для SOKOLOV.\u003C/p>\n\u003Ch3>ИТ-отдел ведущего ювелирного магазина страны не успевал отслеживать задачи в реальном времени\u003C/h3>\n\u003Cp>SOKOLOV — \u003Ca href=\"https://top20brands.ru/ru/rating_category/cat69.html?screen_referer=no_data&amp;screen_referer_id=75070865&amp;screen_referer=no_data&amp;screen_referer_id=75070865\" rel=\"noopener\" target=\"_blank\">любимый\u003C/a> ювелирный бренд россиян, производящий украшения с 1993 года. В 2020 SOKOLOV разработал мобильное приложение, а в 2021 первым в России \u003Ca href=\"https://sokolov.ru/blog/company-news/press-release-19-08-2021/\" rel=\"noopener\" target=\"_blank\">запустил\u003C/a> виртуальную примерку.\u003C/p>\n\u003Cp>У компании большой ИТ-отдел и сотни тысяч задач, которые команда контролировала через YouTrack. Этот сервис их в принципе устраивал, но кое-где его функционала не хватало.\u003C/p>\n\u003Cblockquote>Для отслеживания прогресса по задачам компания нуждалась в инструменте, который хорошо визуализирует данные. Чтобы было так: взглянул — увидел проблему — решил. YouTrack не давал клиенту такой возможности. Точнее давал, но в сильно меньшем объёме.\u003C/blockquote>\n\u003Ch3>Клиенту нужно было визуализировать 200 000 задач\u003C/h3>\n\u003Cp>YouTrack наглядно отображает историю задач, если в работе их несколько сотен. На графике ниже — 147 задач. Мы можем просматривать, как менялись их статусы в разные периоды времени — всё наглядно.\u003C/p>\n\u003Cfigure class=\"w-richtext-align-center w-richtext-figure-type-image\">\n\u003Cdiv>\u003Cimg alt=\"\" height=\"500\" src=\"/admin-area/media/images/111_JfEiGzb.png\" width=\"700\"/>\u003C/div>\n\u003Cfigcaption>\u003Cem>Это накопительная потоковая диаграмма — тип графиков, который придумали, чтобы оценивать прогресс проекта. Пока всё понятно!\u003C/em>\u003C/figcaption>\n\u003C/figure>\n\u003Cp>Но в огромном айти-отделе SOKOLOV количество задач росло с каждым днём. И вот когда перед нами не 124 задачи, а 1268, график выглядит уже не так репрезентативно, правда?\u003C/p>\n\u003Cfigure class=\"w-richtext-align-center w-richtext-figure-type-image\">\n\u003Cdiv>\u003Cimg alt=\"\" height=\"500\" src=\"/admin-area/media/images/1442242.png\" width=\"700\"/>\u003C/div>\n\u003Cfigcaption>\u003Cem>А вот на этом графике оценить состояние проекта уже невозможно — всё слилось воедино!\u003C/em>\u003C/figcaption>\n\u003C/figure>\n\u003Cp>Чтобы увидеть цифры за конкретный день, нужно навести курсор мыши на узел — место пересечения даты и количества задач. Флоу не прибавляет диаграмме наглядности, а клиенту нужно было: \u003C/p>\n\u003Cul role=\"list\">\n\u003Cli>видеть, сколько времени задача находится в статусе;\u003C/li>\n\u003Cli>фильтровать задачи по разным параметрам;\u003C/li>\n\u003Cli>регулировать количество просматриваемых задач.\u003C/li>\n\u003C/ul>\n\u003Cp>Вывод один — графику требовалась доработка.\u003C/p>\n\u003Cfigure class=\"w-richtext-align-center w-richtext-figure-type-image\">\n\u003Cdiv>\u003Cimg alt=\"\" height=\"500\" src=\"/admin-area/media/images/66a99ed65c37cd3e4894c932_668e3f1f1611905c3bc3ce34_520-20D0BAD0BED180D0BED0B1D0BAD0B8.png\" width=\"700\"/>\u003C/div>\n\u003C/figure>\n\u003Cblockquote>Диаграммы в YouTrack нельзя настроить под себя без вмешательства в код. Виджет, который отображал бы всю необходимую SOKOLOV информацию, нужно было писать с нуля\u003C/blockquote>\n\u003Ch3>За основу будущей диаграммы взяли референс клиента\u003C/h3>\n\u003Cp>Клиент принес референс и показал, как должно выглядеть будущее решение. Это такая же потоковая диаграмма, только с её помощью уже можно и задачи по разным параметрам отфильтровать, и статусы посмотреть.\u003C/p>\n\u003Cfigure class=\"w-richtext-align-center w-richtext-figure-type-image\">\n\u003Cdiv>\u003Cimg alt=\"\" height=\"500\" src=\"/admin-area/media/images/66566.png\" width=\"700\"/>\u003C/div>\n\u003Cfigcaption>\u003Cem>Клиент показал нам пример и попросил реализовать такую же диаграмму в YouTrack\u003C/em>\u003C/figcaption>\n\u003C/figure>\n\u003Ch3>Поняли, что лезть руками в код 100% придётся\u003C/h3>\n\u003Cp>На всякий случай мы ещё раз сами проверили, что можно сделать в YouTrack без кодирования. По нашей задаче — ничего. Инструмент не настраивался кастомно. К тому же, данные о задачах нужно было доставать из системы вручную.\u003C/p>\n\u003Cblockquote>По сути, YouTrack — это такая большая база данных с информацией о задачах. Часть функциональности сервиса эти данные собирает и хранит, а часть — отображает в интерфейсе. При этом далеко не все данные, которые собирает YouTrack, выводятся на экран.\u003C/blockquote>\n\u003Ch3>Выгрузили из YouTrack гигабайты информации о задачах\u003C/h3>\n\u003Cp>Чтобы что-то показать пользователю, нужно сначала это что-то получить. Нам нужно было знать, сколько времени задача находилась в том или ином статусе. Для этого нам предстояло достать из базы даты входов и даты выходов по всем задачам. Сделать это можно, но сложно — всё упирается в объём.\u003C/p>\n\u003Cp>Прикинем: если умножить количество задач (200 000+) на количество статусов (8), то мы получим гигабайты данных. И все их нужно загрузить локально на компьютер клиента, чтобы дальше использовать для анализа. И это при браузерном ограничении в 2 Гб для одной переменной. Сказать, что мы замучились грузить их вручную — ничего не сказать. Но таков путь (другого у нас просто не было).\u003C/p>\n\u003Ch3>Сделали для задач понятную фильтрацию\u003C/h3>\n\u003Cp>Теоретически фильтры для YouTrack можно настроить. Но практически — для этого тоже нужно лезть в код и через него создавать списки фильтрации. Клиент объяснил, по какой логике ему нужно группировать задачи, и мы сделали это возможным в новом виджете.\u003C/p>\n\u003Cfigure class=\"w-richtext-align-center w-richtext-figure-type-image\">\n\u003Cdiv>\u003Cimg alt=\"\" height=\"500\" src=\"/admin-area/media/images/5575857_1.png\" width=\"700\"/>\u003C/div>\n\u003C/figure>\n\u003Cp>Теперь задачи в YouTrack фильтруются по нескольким параметрам: статус, тип работ, иерархия, направление. Дополнительно прикрутили функции учёта только рабочих дней и возможность вычитать дни, когда задача находилась в других статусах.\u003C/p>\n\u003Ch3>Научили систему отображать 200 000+ задач в реальном времени\u003C/h3>\n\u003Cp>Теперь графики наглядно показывают состояние задач на проекте. Посмотрите, как изменилась диаграмма!\u003C/p>\n\u003Cfigure class=\"w-richtext-align-center w-richtext-figure-type-image\">\n\u003Cdiv>\u003Cimg alt=\"\" height=\"500\" src=\"/admin-area/media/images/66a99ed65c37cd3e4894c94d_668df923b846db28c018ff2c_1120-20D09DD0B0D183D187D0B8D0BB_rKxdAet.png\" width=\"700\"/>\u003C/div>\n\u003Cfigcaption>Вспомните наше «до»:\u003C/figcaption>\n\u003C/figure>\n\u003Cfigure class=\"w-richtext-align-center w-richtext-figure-type-image\">\n\u003Cdiv>\u003Cimg alt=\"\" height=\"500\" src=\"/admin-area/media/images/66a99ed65c37cd3e4894c947_668df95f8f64593ae9f2502c_1220-20D09DD0B0D183D187D0B8D0BB_QKFn65G.png\" width=\"700\"/>\u003C/div>\n\u003Cfigcaption>И вот наше «после»:\u003C/figcaption>\n\u003C/figure>\n\u003Cfigure class=\"w-richtext-align-center w-richtext-figure-type-image\">\n\u003Cdiv>\u003Cimg alt=\"\" height=\"500\" src=\"/admin-area/media/images/66a99ed65c37cd3e4894c938_668df9c45549a41cb90ce349_1320-20D09DD0B0D183D187D0B8D0BB_F4FVDt4.png\" width=\"700\"/>\u003C/div>\n\u003C/figure>\n\u003Cp>На ней появились возможности: \u003C/p>\n\u003Cul role=\"list\">\n\u003Cli>просмотра статуса задач за определенный период;\u003C/li>\n\u003Cli>регулировки количества задач для читабельности графика;\u003C/li>\n\u003Cli>фильтрации задач по необходимым параметрам.\u003C/li>\n\u003C/ul>\n\u003Cp>Дополнительно к этому доработали ниспадающую диаграмму — ещё один тип виджета, полезный для контроля проектов. \u003C/p>\n\u003Cfigure class=\"w-richtext-align-center w-richtext-figure-type-image\">\n\u003Cdiv>\u003Cimg alt=\"\" height=\"500\" src=\"/admin-area/media/images/66a99ed65c37cd3e4894c9ac_668df9e0987dc29e362be09a_1420-20D09DD0B0D183D187D0B8D0BB_zXYPdb5.png\" width=\"700\"/>\u003C/div>\n\u003Cfigcaption>В\u003Cem> светлой теме\u003C/em>\u003C/figcaption>\n\u003C/figure>\n\u003Cfigure class=\"w-richtext-align-center w-richtext-figure-type-image\">\n\u003Cdiv>\u003Cimg alt=\"\" height=\"500\" src=\"/admin-area/media/images/66a99ed65c37cd3e4894c9a9_668dfa284e5f5186bb52b24f_1520-20D09DD0B0D183D187D0B8D0BB_ZHR55s1.png\" width=\"700\"/>\u003C/div>\n\u003Cfigcaption>В темной теме\u003C/figcaption>\n\u003C/figure>\n\u003Cp>Графики стали более информативными и живыми. Теперь они отображают реальное положение дел на проекте и помогают менеджерам управлять огромным количеством задач.\u003C/p>\n\u003Ch3>Зафиналили проект без достаточной технической документации\u003C/h3>\n\u003Cp>Техническая документация — подспорье для разработчиков. Она объясняет, как устроен инструмент, и помогает доделывать его не вслепую. Но документация есть не на всех проектах. Это усложняет работу с ними — вместо того, чтобы чётко следовать инструкции, приходится двигаться наугад. \u003C/p>\n\u003Cp>С YouTrack нам повезло только наполовину. В общих чертах создание виджетов было описано в документации. А в тонкостях — какие данные, какими методами и куда передавать — нам пришлось разбираться самостоятельно. Поэтому доработка сервиса заняла 2 недели, хотя могла занять несколько дней. Но даже в таких условиях мы сделали конфетку. \u003C/p>\n\u003Ch3>Передаём клиенту результаты работы\u003C/h3>\n\u003Cp>В процессе создания виджета мы использовали тестовые данные — проекты клиента под NDA. Поэтому при внедрении реальной информации в новые графики могли возникнуть ошибки. Мы предупредили об этом клиента и сказали, что в первое время будем на связи с ним, чтобы оперативно исправлять баги.\u003C/p>\n\u003Cfigure class=\"w-richtext-align-center w-richtext-figure-type-image\">\n\u003Cdiv>\u003Cimg alt=\"\" height=\"500\" src=\"/admin-area/media/images/66a99ed65c37cd3e4894c94a_668e3eff84f67db695e877e9_220-20SOKOLOV20D0BCD0BED0B6D0BD_xe9XOUB.png\" width=\"700\"/>\u003C/div>\n\u003Cfigcaption>\u003Cem>результаты в цифрах\u003C/em>\u003C/figcaption>\n\u003C/figure>\n\u003Cp>На этом всё, друзья! Знакомьтесь с другими нашими проектами и подписывайтесь на наш \u003Ca href=\"https://t.me/softoriumpro\" rel=\"noopener\" target=\"_blank\">телеграм-канал\u003C/a>. Там мы делимся новостями, рассказываем о том, что происходит в компании, и общаемся так, как если бы встретились с вами на кофе-брейке. Добавляйтесь — будем рады.\u003C/p>\n\u003Cfigure class=\"w-richtext-align-center w-richtext-figure-type-image\">\n\u003Cdiv>\u003Cimg alt=\"\" height=\"500\" src=\"/admin-area/media/images/66a99ed65c37cd3e4894c92f_668dfb9c84f67db695bd0df0_1620-20D097D0B0D0B2D0B5D180D188_Lp8wGpj.png\" width=\"700\"/>\u003C/div>\n\u003C/figure>",[],"https://softorium.pro/admin-area/media/images/sokolov_4MNZCyb.png","SwiftUI_i_UIKit_kak_my_pererabotali_korzinu_federalnoi_aptechnoi_seti",{"id":91,"name":92,"color_background":93,"color_text":94,"color_background_tag":95},4,"LiteBlue_and_black","hsl(200, 83%, 86%)","hsl(0, 0%, 0%)","hsla(0, 0.00%, 100.00%, 0.30)","Прокачали инструменты аналитики для SOKOLOV — крупнейшего в России ювелирного производителя","Для ювелирного гиганта SOKOLOV мы сделали кастомную разработку виджетов в YouTrack, чтобы визуализировать более 200 000 задач. Как за две недели превратили «хочу» в рабочее решение — читайте в нашем кейсе.","Даже если речь про доработку такого популярного инструмента, как YouTrack — ведь любой софт можно подогнать под задачи своего бизнеса. Только где-то достаточно открыть «Настройки» и задать новые параметры, а где-то (например, в YouTrack) приходится зарываться в код.\r\n\r\nПонятно, что пользователям сервиса не до этого. Им нужен кто-то, кто быстро придёт на помощь, услышит, чего они хотят, и сделает всё по красоте. Например, мы — суровые сибирские разрабы и эксперты в легаси-коде.",{},"2024-12-24T17:49:14.454269","2025-01-22T15:20:52","2025-01-22T15:20:48","2025-09-30T09:42:02.426498",1780294693214]