Традиционно на хакатон мы берем небольшой проект. Который имел бы практическую пользу. Вот так, с наскока, мы уже сделали:
  • Хуижн — сервис для демонстрации заказчикам макетов с хранилищем в Google Docs. Это было прикольно.
  • Planing Poker — старый, но все еще довольно посещаемый проект.
  • KeyRights — корпоративный парольник. Пожалуй, единственный проект с хакатона, который решили сделать платным.



В этот раз мы решили покуситься на святое — написать HelpDesk. Абсолютно бесплатный, опенсорсный, безумно простой, ставится на раз-два. Рисуем дизайн, верстаем. Все это за неделю до. Собираемся в воскресенье в 10 утра в офисе. Закупаемся энергетиками, и понеслась!

Стек технологий


Каждый хакатон мы применяем какие-то технологии, которые раньше не использовали на боевых проектах. Мало просто о них читать или слушать на конференциях. Нужно обязательно руками потрогать — прежде чем окончательно разочароваться. В прошлый раз это был Angular (от которого потом плевались еще 3 месяца).
В этот раз мы выбрали React.js. Его мы в итоге полюбили и продолжили использовать на некоторых клиентских проектах. Серверную часть уже по традиции сделали на Node.js и MongoDB.

Наши любимые грабли


Уже ставшие для нас традиционные грабли на хакатонах, которые мы (возможно) победим в следующий раз:
  • На момент старта ни у кого из разработчиков не настроено рабочее окружение. Настройка съела почти пару часов драгоценного хакатонского времени. Мораль: Node.js, MongDB и всякие gulp-ы лучше настраивать заранее.
  • Наше незнание ключевой технологии и ее ограничений. С одной стороны, мы много времени тратили на простые вещи в React.js. С другой — именно для того, чтобы попробовать технологию на практике, мы и проводим хакатоны. Здесь ничего менять не будем. Все шло сильно ровнее, чем с Angular.
  • Никакого ТЗ. Вернее, у нас был кратенький backlog со списком хотелок, написанный за 30 минут. Но большую часть того, что мы хотели сделать — придумывали чуть ли не на ходу.


Что умеет HelpDesk




В первую очередь мы писали HelpDesk для обслуживания наших проектов. Нам нужен был минимум функций: форма подачи тикета, список тикетов. Все настройки мы вынесли в файл конфигурации. Одна инсталляция HelpDesk может быть настроена на несколько доменов. Один домен — один проект. Доступ разделен на пользовательский и административный. Администратор видит все тикеты в закрепленных за ним проектах. Сами пользователи попадают в систему, просто создавая тикет (пароль приходит им сразу на электропочту).



На главной странице проекта можно прикрепить полезные документы и справочную информацию.
Мы предусмотрели работу HelpDesk не только через web-интерфейс, но и через email (можно отвечать на тикеты прямо из почты, получать уведомления и т.д.). Сделали загрузку файлов к тикетам (в том числе — из приложенных к почте). Список тикетов и сами тикеты обновляются через web-сокеты по push-ам.



Статусы, подкраска активности и просроченных тикетов, сортировка, ленивая подгрузка… Все работает очень шустро, выглядит няшно. По-моему, получилось очень неплохо, учитывая, что это за один присест.

А тем временем в офисе


  • Пицца. Роллы. Энергетики. Соки. Обязательный атрибут, да.
  • Хакатон заканчивается, когда ни у кого не хватает сил думать. Обычно часов в 12 ночи. Собираемся кучкой. Проводим короткую ретроспективу.
  • По итогам ретроспективы понимаем, что до релиза продукта недобито еще примерно 30% задач. Решаем, что делать: отодвинуть на неделю или отоспаться и добить все за день в рабочее время. Решили отоспаться и навалиться всей толпой в рабочее время. Это было правильное решение.



Тестовая эксплуатация


Сразу же запускаем HelpDesk для поддержки пользователей наших продуктов. Получаем живую обратную связь. Фиксим баги. Полируем. Заливаем на GitHub.


Где взять, как поставить


Сам скрипт живет в гитхабе https://github.com/SibirixScrum/HelpDesk.
Попробовать в действии можно здесь http://helpdeskdemo.sibirix.ru/ (только не все сразу и без фанатизма — сервер слабенький)!

Требования


mongodb 3.0
node.js


Установка


mkdir helpdesk
cd ./helpdesk
git clone https://github.com/SibirixScrum/HelpDesk.git ./
или
svn co https://github.com/SibirixScrum/HelpDesk/trunk/ ./
npm i


Настройка


cd ./config
cp ./config.example.js ./config.js
mcedit ./config.js


Основные опции


  • connectString: 'mongodb://localhost/helpdesk' — база в mongo. Будет создана при первом запуске, если еще не существует.
  • exports.projects — настройки проектов.
  • responsible: 'tester@example.com' почта администратора проекта. Аккаунт создается автоматически. Пароль отправляется на почту.
  • exports.socketIo: 'SECRETKEY' — секретный ключ для шифрования куков.
  • exports.session.secret: 'SECRETKEY' — секретный ключ для шифрования сессий.


Запуск


node app.js


Итоги и респекты


В действующих лицах:
  • Алексей. Нарисовал чОткий и удобный интерфейс, причем очень быстро.
  • Ваня, Дионисий, Дэн, Саша, Леха — сверстали и запрограммировали всю эту красоту.
  • Татьяна. Нашла все баги.
  • Елена. Эксплуатирует проект на боевую, поддерживая пользователей.
  • Катя. Успокаивала пользователей, которые хотели прислать нам баг, но не смогли этого сделать из-за бага в HelpDesk :)
  • Vladik. Был талисманом этого хакатона.

Нам понравился React.js, и мы решили применять его в некоторых коммерческих проектах.

Комментарии (13)


  1. RUQ
    23.11.2015 11:46
    +6

    Так должно быть в каждой компании. Прям круто.


    1. PerlPower
      23.11.2015 12:06

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


      1. RUQ
        23.11.2015 12:14
        +2

        Позволю себе не согласиться с вами. Оставим пока термин хипстер, который довольно «избит» и понимаем каждым по своему (как и «стартап»). И сосредоточимся на хакатоне.

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

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


  1. itserw
    23.11.2015 13:08
    +2

    Как практика — очень круто! В реальной работе — зачем изобретать велосипеды?

    А как мотивируете сотрудников участвовать в хакатоне?


    1. zevvssibirix
      23.11.2015 13:22
      +2

      Они сами рады)


  1. RinatMullayanov
    23.11.2015 15:13

    Почему не использовали Webpack для сборки вместо Gulp?


    1. zevvssibirix
      23.11.2015 15:45
      +2

      Почему пепси пили, а не колу? :)


      1. RinatMullayanov
        23.11.2015 15:55
        +1

        Я к тому что если уж хипстерить то наверное по полной.
        А вообще там где React, обычно и Webpack.


      1. dyadyaSerezha
        23.11.2015 17:00

        Ответ, думаю, очевиден: потому что именно пепси прилагалась к той пицце. ;)

        В догонку. Как знающий о хакатонах примерно столько же, сколько о подкустовых выползнях, интересуюсь:

        1. Начальная цель такого внутри-фирменного хакатона? И была ли она достигнута? Из текста это не особенно ясно.
        2. Длительность хакатона?
        3. Оплата именно такого, внутреннего хакатона (if any)?
        4. Мотивация участников? «Они сами рады» как-то не канает, должно быть что-то еще — хотя бы некая атмосфера в фирме. Например, если бы нам (работникам нашей группы в очень большой конторе) предложили поработать 1-2 суток в выходные, чтобы просто сделать нечто, что не суперсрочно требуется клиентом и не оплачивается соответственно, то мы бы совершенно точно послали подальше все такие предложения — и правильно бы сделали, мне кажется. Так почему же у вас «сами рады»? Может быть, хотя бы (около)студенческий возраст, когда «землю рыть копытом хочется»? )
        5. Безалкогольный — вот это совсем сюрприз. Типа, обычно бывают алкогольные? Удивлен. :)


        1. zevvssibirix
          23.11.2015 18:47

          1. Попробовать реакт; Сделать софт для нашей техподдержки, который бы был бесплатен, симпотичен и прост. Конечно достигли.
          2. с 10 утра до 12 вечера. Дальше просто силы кончились.
          3. Это не самое главное. Но имело место.
          4. Атмосфера — это важно. Поэтому у нас не «очень большая контора» :)
          5. Посмотрите фильм как Цукерберг фейсбук писал. Там в хакатоне несколько азиатов бухают и программируют на скорость.


  1. cissav
    23.11.2015 21:43

    Теперь хоть понятно, почему вы так активно изучали Омнидеск :)


  1. chopik
    25.11.2015 00:09

    А под mysql работать не будет?


    1. zevvssibirix
      26.11.2015 11:08

      Только MongoDB