Оффтоп Вадим Скворцов
6 620

Минский разработчик — о создании системы управления проектами, которой пользуются в Amazon и NASA

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

В закладки

Материал издания об информационных технологиях в Беларуси и в мире dev.by.

Минский разработчик Дмитрий Дудин предпочитает создавать свои стартапы внутри белорусской аутсорс-компании, которая охотно поддерживает его идеи. За восемь лет в XB Software у него было много проектов, но самыми успешными Дмитрий считает сервис для управления соцсетями Kuku.io и приложение для управления проектами GanttPro. Среди клиентов GanttPro есть такие гиганты, как Amazon, Sony, Salesforce и NASA.

dev.by узнал у главы отдела по разработке GanttPro, каково это — создавать стартапы внутри компании.

Делаем не кусок кода для заказчика, а сервис, за который платят

Дмитрий рассказывает, что увлёкся стартап-культурой, когда это ещё не было мейнстримом — в 2011 году. В то время ему довелось поработать со стартапами из Швейцарии и Швеции в качестве сотрудника аутсорс-компании XB Software.

«Я подумал, почему бы не попробовать развивать собственные идеи в рамках компании, если она готова поддержать мои начинания. Здесь вопрос в рисках, — говорит Дмитрий. — Если начинаешь свой проект в "гараже", есть большая вероятность провести несколько лет в поисках денег на развитие. При этом стартап может не выстрелить, и ты останешься совсем без денег, но снова с множеством идей. Кому-то так нравится, мне — нет. Внутри компании проще в плане финансирования, базы разработчиков, накопленных знаний».

В XB Software есть ещё один автономный продукт: Webix — библиотека компонентов для разработчиков. По словам собеседника, это политика компании — выделять команды в отдельные проекты, когда они достигли определённой зрелости. Дмитрий считает, что это здравое решение, потому что так компания «диверсифицирует риски между аутсорсингом и продуктом».

У команды, с которой работает Дмитрий, было много идей: онлайн-конструктор для CSS EnjoyCSS, футбольный менеджер, криптохранилище файлов, менеджер для игры в кикер и своя CRM.

«Большинство из них зафейлилось, но некоторые выстрелили. Лучше всего у нас получилось с Kuku.io и GanttPro. Последний — это сервис для управления проектами на основе диаграммы Ганта. Мы заметили, что в этой нише есть спрос. Тут мы и подумали: а почему бы нам не сделать своё приложение для планирования и управления проектами? Так началась работа над GanttPro».

GanttPro — онлайн-приложение для планирования и управления проектами на основе динамической диаграммы Ганта. Ежедневно системой управления проектами пользуется до 1700 пользователей со всего мира, преимущественно в США, странах Европы, Австралии и Канаде.

Количество зарегистрированных пользователей уже достигло 350 тысяч. Основные сферы применения GanttPro — строительство, стратегическое планирование в ИT, организация мероприятий, маркетинг, консалтинг.

справка dev.by

«С момента запуска проекта прошло уже три года, и мы понимаем, что этот продукт нужен, нас покупают, рекомендуют. Все средства от продаж мы направляем на рост и развитие GanttPro. Когда-то на проекте было два человека, а сейчас — 14. Когда мы перестали помещаться в два кабинета в офисе XB Software, пришлось переехать в отдельное здание. Сейчас мы уже на том уровне, когда можем существовать как самостоятельная команда.

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

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

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

Просто, как «Google Документы»

«Почему вообще люди начинают искать инструменты для планирования? На мой взгляд, они к этому приходят, когда у них начинается полнейший бардак с имеющимся стеком инструментов. Они видят, что планы срываются, сроки горят, и первое, что приходит в голову — что-то не так. Но не со мной, а с тем инструментарием, который я использую».

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

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

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

Одна из основных наших метрик — как быстро мы научим пользователя работать с GanttPro.

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

В нашем случае ещё очень важно делать инструмент настраиваемым, а не сугубо заточенным под бизнес-процессы одного из клиентов. Для сравнения, можно сказать, что мы даём пользователю молоток — бери и стучи. Молоток один и тот же, но с его помощью можно строить разные дома».

Сейчас в GanttPro можно создавать задачи с датами начала и окончания проекта, управлять ими с помощью функции drag & drop, соединять зависимостями и назначать ответственных за их выполнение. Сервис наглядно визуализирует планы и даёт чёткое представление о статусе проекта, а также обеспечивает контроль над задачами, сроками их выполнения и ресурсами.

В проект можно пригласить людей и вместе с ними работать в программе в режиме реального времени. Можно использовать разные виды ресурсов (материальные и нематериальные), распределять их на задачи и других людей. И главное, что у нас есть, — можно посмотреть загрузку ресурсов (выставить рабочие часы, отпуска и прочее). Это всё автоматизировано и находится на одном листе.

Основные функции GanttPro:

  • автопланирование;
  • мгновенная синхронизация изменений при работе нескольких членов команды;
  • полная история изменений;
  • дедлайны;
  • бейзлайны;
  • доска задач (диаграмму Ганта можно просмотреть в виде канбан-доски);
  • уведомления;
  • назначение более одного ресурса на задачу;
  • расчёт стоимости в зависимости от вида ресурсов;
  • импорт и экспорт.

«Наш продукт прост в использовании, как "Google Документы", только для диаграмм и планирования. В дальнейшем планируем интеграцию с различными сервисами (календарями, файлообменниками и прочим), чтобы GanttPro было проще интегрировать в уже существующую рабочую среду клиентов».

Техническая реализация

«GanttPro написан на JavaScript как на клиенте, так и на серверной стороне. В качестве баз данных используем PostgreSQL.

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

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

Я считаю, что мы можем по праву гордиться своей подсистемой сохранения всех изменений в истории проекта. В ней реализована возможностью отката в любую точку во времени и создания базового плана с этой точки. Для этого мы использовали подход, очень схожий с работой систем контроля версий (Git, Subversion и тому подобных).

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

Также мы работаем над экспортом диаграмм в разных форматах — здесь нужно учитывать тонкости отображения, чтобы диаграмма вписалась в один лист.

В целом вся наша система работает отлично, но ещё не идеально. Мы накопили достаточно обратной связи от пользователей, чтобы сделать её лучше».

Не всем нужен Agile и Scrum

Дмитрий не скрывает, что команда работает по гибкой методологии, несмотря на то, что разрабатывает инструмент для традиционного управления проектами.

«Есть отрасли, где гибкая методология плохо работает. Agile и Scrum применимы там, где люди хотят работать. В строительстве, например, не хотят. Если строителей попросить: "А давайте накидаем несколько этажей в спринт и оценим вместе, через сколько мы их построим", то они будут строить одно здание вечно. И мы так и не узнаем, когда они закончат и сколько это будет стоить. В таких областях лучше всего работает диаграмма Ганта и каскадная модель.

GanttPro отлично вписывается в те области, где есть чёткие дедлайны, ограниченный бюджет и ресурсы. Сейчас основные сферы применения GanttPro — это строительство, стратегическое планирование в ИT, организация мероприятий, маркетинг, консалтинг. Но есть стартапы и студенты, которые планируют дипломные работы. Один наш пользователь, например, при помощи диаграммы Ганта планировал свою свадьбу.

Также часто своим клиентам в аутсорсинге мы отправляем оценку стоимости проекта в виде диаграммы Ганта. Это самый наглядный способ разбить всё на задачи, объяснить, сколько проект потребует ресурсов, когда закончится и сколько будет стоить.

Ежедневно GanttPro пользуется от 1500 до 1700 пользователей со всего мира, преимущественно в США, странах Европы, Австралии и Канаде. Из Беларуси один платный пользователь есть. Мы очень радовались, когда он появился. Всего у нас сейчас около 350 тысяч зарегистрированных пользователей.

Такие продукты, как наш, уже есть на рынке, основной — Microsoft Project. Это очень мощный, но при этом перегруженный функциями инструмент. И текущее поколение относится к нему как к динозавру — чему-то из прошлого. Людям нужен тул для планирования, который соответствует духу времени. И многие переходят к нам как к более простой, но эффективной альтернативе.

Раньше мы делали упор на скорость — нам нужно было догнать конкурентов, которые уже давно на рынке. Сейчас для нас главное — это надёжность, быстродействие».

dev.by — сайт об информационных технологиях в Беларуси и в мире.

Статьи по теме:

  • Топ-50 белорусских ИТ-компаний: EPAM наняла 1600 технарей, Wargaming — 100, быстро рос геймдев.
  • «Брайан, тебя приглашают на Лубянку». Пионер MP3-технологий, американский бизнесмен приехал в Минск «по безвизу» и задержался.
{ "author_name": "Вадим Скворцов", "author_type": "editor", "tags": [], "comments": 13, "likes": 32, "favorites": 32, "is_advertisement": false, "subsite_label": "flood", "id": 44480, "is_wide": false }
00
дни
00
часы
00
мин
00
сек
(function(){ var banner = document.querySelector('.teaserSberbank'); var isAdsDisabled = document.querySelector('noad'); if (!isAdsDisabled){ var countdownTimer = null; var timerItem = document.querySelectorAll('[data-sber-timer]'); var seconds = parseInt('15395' + '50799') - now(); function now(){ return Math.round(new Date().getTime()/1000.0); } function timer() { var days = Math.floor(seconds / 24 / 60 / 60); var hoursLeft = Math.floor((seconds) - (days * 86400)); var hours = Math.floor(hoursLeft / 3600); var minutesLeft = Math.floor((hoursLeft) - (hours * 3600)); var minutes = Math.floor(minutesLeft / 60); var remainingSeconds = seconds % 60; if (days < 10) days = '0' + days; if (hours < 10) hours = '0' + hours; if (minutes < 10) minutes = '0' + minutes; if (remainingSeconds < 10) remainingSeconds = '0' + remainingSeconds; if (seconds <= 0) { clearInterval(countdownTimer); } else { timerItem[0].textContent = days; timerItem[1].textContent = hours; timerItem[2].textContent = minutes; timerItem[3].textContent = remainingSeconds; seconds -= 1; } } timer(); countdownTimer = setInterval(timer, 1000); } else { banner.style.display = 'none'; } })();
{ "id": 44480, "author_id": 120027, "diff_limit": 1000, "urls": {"diff":"\/comments\/44480\/get","add":"\/comments\/44480\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/44480"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199791 }

13 комментариев 13 комм.

Популярные

По порядку

Написать комментарий...
10

1. Нет информации о финансовом профите Дмитрия во всей этой мегадвижухе (к примеру, есть ли доля в этих стартапах)
2. Я бы скорее почитал о владельце(ах) XB Software, об их принципах, как они делятся с сотрудниками, как мотивируют, как пришли к такой концепции, как делают маркетинг своих продуктов, как маневрируют между стартапами и аутсорсом. Надо будет на досуге покопать эту информацию.

Ответить
6

Божечки, это что? Нормально работающий, юзерфрендли, не допотопный MS Project? Где там моя триальная версия на 2 месяца!?

Ответить
2

"Agile и Scrum применимы там, где люди хотят работать" - неполный тезис, я бы к нему добавил ещё "там, где люди хотят работать и там, где им не мешают это делать". Одного хотенья мало для ажаля.

Ответить
0

Интересно классно, но 15 баксов это 1000₽ в месяц и не известно пойдет ли она для меня :(
Вот этим и не люблю продукты по подписке.

Ответить
1

Нет почему же. Вот вы как подбираете программные продукты. Ставите пробуете удобно не удобно. Вы же не постоянно ею занимаетесь чтобы за 2 недели все попробовать и тп. 2 недели маловато для тестового периода и жаль что нет оффлайн версии. Тк не везде (или запрещено :) ) пользоваться интернетом

Ответить
5

Всем привет. Для читателей VC.ru обязательно сделаем расширенный триал на 2 мес и скидку. Напишите в чат поддержки, что вы с VC.ru будем очень рады сделать демо или пригласить на вебинар.

Ответить
0

Недурно, 2 месяца=)

Ответить
0

Аналогично. Ненавижу подписку, проще купить после месяца триала.
У меня этих подписок уже столько было, включая облака, музыки, видео, и т.д., что бюджет напрягся)
Сделал пересмотр, убрал процентов 70 подписных программ.
Из всех подписок самой полезной для себя считаю MS Office.

Ответить
0

Такое ощущение, что это не рассказ разработчика о своих идеях, а реклама Ганттпро.

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Нейронная сеть научилась читать стихи
голосом Пастернака и смотреть в окно на осень
Подписаться на push-уведомления