Привет, ГТ!
Меня зовут Денис Цыплаков, я — Solution Architect в DataArt.
В конце февраля этого года команда DataArt участвовала в travel-хакатоне THack 2015 Berlin и выиграла главный приз для больших команд. Проводил хакатон онлайн-журнал Tnooz.
Ниже расскажу, как это было. И почему мы выиграли.
Коротко о конкурсе.
Tnooz — один из крупнейших информационных ресурсов, посвященных технологиям в сфере туризма.
Он существует с 2009 года. Основная тематика издания — travel-технологии. Эксперты, пишущие для Tnooz о трендах и перспективах индустрии, живут по всему миру. Кевин Мэй, редактор и один из создателей ресурса, до этого около четырех лет был редактором в известном английском журнале Travolution.
Кроме онлайн-новостей и аналитики, Tnooz ведет серию успешных проектов: хакатоны THack, презентации TLabs, серия встреч Appy Hour и различные вебинары.
Наиболее заметный из этих проектов — это THack, хакатоны для разработчиков ресурсов и приложений, связанных с путешествиями. Tnooz провел уже девять таких мероприятий в шести странах. Среди победителей THack в разное время бывали и гиганты travel-индустрии, такие как Amadeus, и талантливые одиночки, работавшие без поддержки команды.
Все началось с новостной рассылки от Tnooz.com – нам пришла благая весть, что очередной THack пройдет недалеко – в Берлине. Мы быстренько побежали на Skyscanner и, вдохновившись низкими ценами, решили, что ехать надо по-любому.
Краткое объяснение, кто такие «мы». В DataArt есть понятие «индустриальные практики» — группы людей, работающие с какой-либо индустрией (например, финансы, онлайн-путешествия, здравоохранение). «Мы» в данном случае — инициативная группа Online travel-практики. Подробнее почитать, чем мы занимаемся и с кем работаем, можно тут.
До этого наша Online travel-практика уже участвовала в конкурсах, и это позволяло получить достаточно интересных клиентов. Но последнее время ситуация изменилась, и по новым правилам разработчики должны присутствовать на конкурсе локально. Вывезти команду на 24 часа в Сан-Франциско или Дели — не самая простая задача, и Берлин для нас был просто прекрасной возможностью.
Как водится, мы решили заранее заготовить рояль в кустах и примерно за две недели до начала конкурса придумали, что будем показывать, и начали работать над приложением. Идея была достаточно интересна и строилась вокруг bluetooth-маяков и автобусных туров. THack начинался 28 февраля, 26 у нас все было готово, оставалось отполировать UI и, может быть, подработать интеграции. Команда собрала вещи и приготовилась ехать.
Ехали мы следующим составом.
- Backend/.NET разработчик — Дмитрий Выростков.
- iOS-разработчик — Ярослав Воронцов.
- На всякий случай помочь, если что-то пойдет не так/может писать на Java — Денис Цыплаков.
Из Лос-Анджелеса нам на встречу ехал Рома Пескин, solution consultant, знающий travel-индустрию от и до, который должен был придать идее должный блеск и презентовать это все на сцене. При этом общее настроение сложилось следующее: «выиграть не обязательно, главное — засветиться».
Рано-рано утром воронежская часть делегации встретилась в аэропорту VOZ, и Дима, успевший утром почитать почту, обрадовал нас новостью, что Рома презентовать заготовку не хочет. Он хочет выиграть, и у него есть идея, как нам это сделать.
В 7 утра эта мысль, конечно, дошла до нашего мозга, но особого бурления там не вызвала. Через два часа банда команда высадилась в DME, и до нас стало доходить, что мы едем участвовать в хакатоне вообще не подготовленными. Т. е. у нас с собой, кроме
- Один iOS-разработчик.
- Один универсальный солдат с упором на .NET и JavaScript в лице Димы.
- Один Java-бэкенд-разработчик в лице Дениса.
- Обещание Ромы к вечеру представить нам детализованную идею — что именно будем делать.
Во-первых, мы сели в круг и спешно начали проверять, все ли необходимое для работы установлено на ноутбуках, хорошо ли себя чувствует сервер, поднятый в AWS EC2, и все ли могут достучаться до GitHub. По уму это надо делать дома, но, как я уже упоминал, ехали мы несколько расслабленные.
Во-вторых, пришло время садиться в самолет, и мы полетели в Берлин. Добравшись до гостиницы и поселившись, наконец-то нашли в ресторане отеля Рому и
Рома: «Ну, парни, готовы покодить?»
План был следующий:
- Выиграть THack.
- Для этого надо как можно полнее удовлетворить требованиям жюри.
Тут надо сказать, что в какой-то мере мы начали играть нечестно: Рома как человек очень плотно протусованный в индустрии онлайн-путешествий, неплохо знал, на что жюри смотрит. Его мысль была проста, как молоток. Наша домашняя заготовка хороша, но с ней мы не выиграем. Т. к.:
- Видно, что это заготовка, и в жюри — не дураки.
- Надо использовать как можно больше предоставленных API, а мы используем только один, да и то частично.
У Ромы была другая, достаточно неожиданная идея: сделать command line-интерфейс к комбинации нескольких тревельных систем для планирования поездок опытными путешественниками. Как сказал впоследствии один из членов жюри: «Это же чертов GDS через веб!»
На этой позитивной ноте мы вызвали такси и поехали ужинать в центр Берлина.
Где-то в центре Берлина.
Утром следующего дня мы добрались до места проведения конкурса. Поздоровались и обнялись с вышеупомянутым Кевином Мэем (обнимался Рома). Помещение представляло собой полуподвал с голыми стенами, столами, маленькой сценой и очень хорошим WiFi.
Подготовка сцены.
Захватив стол, мы целых 15 минут продумывали и рисовали на бумажке архитектуру будущей системы и бросились кодировать.
Тут надо заметить, что выбор технологий у нас во многом диктовался ассортиментом имеющихся разработчиков. И в целом, оглядываясь назад, наш опыт, неплохо доказывает: если у разработчиков прямые руки, технология не так важна.
Следующие 24 часа прошли в плотном клацанье клавиш с небольшими перерывами на еду и совсем небольшим — на сон.
Дима Выростков, Роман Пескин.
В воскресенье в середине дня мы медленно всплыли на поверхность, имея на руках более или менее работающую альфа-версию, которая интегрировалась с API:
- Lufthansa (2 разных API)
- Sabre GDS
- Foursquare
- Get Your Guide
- Google Maps
- Uber
- Weather API
При этом оно работало в браузере и в iOS-приложении и прозрачно умело переносить сессию туда/сюда.
Не забываем: это была-таки альфа-версия, сделанная за 24 часа, и там многое было сшито на живую нитку.
В 12 часов провели жеребьевку, и около 20 участников конкурса начали показ приложений. Мы же в это время нервничали, полировали ряд тонких мест в приложении и помогали Роме готовить 5-минутную презентацию.
Последний рывок, все бегают и суетятся.
Примерно за три часа мы отполировали презентацию и приложение до блеска. Попутно слушали презентации других команд. Интересный момент, что практически все проекты имели в основании следующую идею: «Надо, чтобы пользователь меньше думал и меньше выбирал. Не давайте ему выбора. Сразу что-нибудь ему продавайте. Если будет выбирать, покинет сайт». На этом фоне наше приложение с текстовыми командами и достаточно разветвленной системой подбора тура смотрелось, как пришелец из перпендикулярного мира.
Настал момент презентации. Собственно, про него я рассказать могу мало – это было ровно пять минут, ибо, как сказал Рома «презентации длиннее пяти минут на THack никогда не выигрывают». Презентация была бодрая, насыщенная, в тему, без воды. Мы готовились заранее: проектор показывал экран ноутбука, а затем, когда сессия перепрыгнула с браузера на iPhone – экран телефона.
Затем настало время объявления результатов, и — тыдыщь!!! — мы занимаем первое место в номинации для больших команд. И второе — в специальной номинации Lufthansa.
Почитать про итоги и посмотреть Ромину презентацию с результатами можно здесь http://www.tnooz.com/article/thack-berlin-winners-presentations-pictures/
Dimitry Vyrostkov, Denis Tsyplakov, Yaroslav Vorontsov, Roman Peskin and Gene.
Дальше было, в общем, не так интересно. Мы дослушали, собрались и отправились в бар подводить итоги.
На картинке ниже схематично изображена архитектура нашего приложения.
Участники
Имя | Роль | Tech stack |
Роман Пескин | капитан | Macbook, ручка, дубинка |
Дмитрий Выростков | тим/тех лид, фронтенд-разработчик | JavaScript, .NET |
Ярослав Воронцов | iOS-разработчик | iOS native |
Денис Цыплаков | бэкенд-разработчик | Java |
В заключение хочется сказать, что это был достаточно интересный опыт. THack проводился накануне знаковой в travel-мире выставки ITB 2015, и первое место в THack сильно прибавило нам очков и прокачало репутацию.
Один из главных уроков, которые я усвоил: если хочешь выиграть, ставь себе задачу выиграть, а не «поучаствовать и, может быть, выиграть». Как сказали конкуренты при разборе полетов в баре, DataArt выиграл нечестно: вместо юных стартаперов аутсорсерская компания привезла трех злых матерых экспертов во главе с хитрым лисом, знающим все ходы и выходы. Все, что я могу на это ответить, — мы хотели выиграть и старались, как могли.
pa3ot
PostgreSql только для хранения сессий и кэшей?
Semenych
Да сессия с параметрами того что пользователь ищет и кэш для цен которые при другом раскладе достаточно медленно из API получаются.
Все остальное stateless.