В прошедшие выходные (13 и 14 октября) мы с aishek и еще двумя нашими коллегами участвовали в хакатоне Rails Rumble 2012. По условиям конкурса за 48 часов нужно задеплоить готовое Rails-приложение.
Надо сказать, что кроме выпитого ящика пива и прочего фана мы получили действительно хороший опыт.
Мы решили сделать приложение по сбору фидбека от пользователей, автоматической его классификации по типам (спам, идея, благодарность и т. п.), с возможностью последующего назначение сообщения другому пользователю системы для последующей обработки.
Исходя из такой постановки задачи, мы решили что в нашей системе будет:
- классификатор текстов;
- удобная система регистрации и входа с минимальным набором обязательных полей;
- отображение структура возможных назначений сообщений пользователям системы;
- гео-информация для каждого сообщения (для более точного назначения тем или иным пользователям);
- личные кабинеты компаний и пользователей;
- публичные страницы компаний;
- расширенная система статусов сообщений (решено, не решено, отклонено);
- поиск компаний и сообщений;
- внутренняя статистика подачи сообщений и активности для руководителей компаний;
К началу состязания нам удалось подготовить очень общие наброски дизайна и архитектуры нашего приложения.
Хроника событий
Суббота, 13 октября
04:00 Приступаем к работе. Разделяем обязанности по настройке сервера, написанию классификатора и верстке каркаса. Создаем новое Rails-приложение и начинаем пытаться его деплоить.
07:30 Первый деплой, на главной странице есть неработающие ссылки, поле поиска и какой-то текст. Начинаем делать авторизацию. Классификатор текста не готов.
10:00 Есть регистрация/авторизация пользователей, свёрстанные лейауты. Начали делать профиль компании. Классификатор всё еще не готов.
13:00 Готов классификатор текста, у пользователей есть компании. Завтрак, он же обед. Все слегка в шоке, и появляется первая усталость.
14:00 В классификаторе текста обнаруживаются проблемные места, дизайн уже свёрстанного приложения кажется отвратительным. Всё чаще слышны вопли «Что за де***о?». Ровным счётом не получается ничего.
16:00 Работа встала, решили пойти в магазин.
17:00 Пришли с магазина и легли спать. Это, как потом оказалось, было ключевым решением.
20:00 Снова подъём. За работу!
21:00 Классификатор починили. Начали делать систему подачи сообщений.
Воскресенье, 14 октября
00:00 Сообщения подаются, пользователи работают, компании создаются, по появляется стойкое ощущение, что всего задуманного не осилим. Интерфейс еще очень «сырой».
02:00 Переделываем дизайн, правим баги
04:00 Решили пойти спать. По итогам первого дня работы у нас была главная страница, профиль пользователя и компании, работала отправка и классификация сообщения. Не было публичной части компании. В целом, приложение работало, но до идеала было ещё очень далеко
10:00 Проспали. Поели и бегом за работу.
12:00 Есть авторизация через социальные сети. Один из коллег отсел подальше со словами «Меня не трогать!» – и занялся внешним видом приложения.
16:00 Готова половина функционала статистики, решено на этом остановиться. Приложение уже всем нравится (спасибо нашему коллеге) и только сейчас мы окончательно поняли, что и как у нас будет работать.
20:00 Появляются всякие мелкие задачи, которые начинают отнимать всё больше ценного времени: сделали комментарии к сообщениям, публичную часть компании. Производительность опять начинает падать.
23:00 Решили опять сходить в магазин, освежиться.
Понедельник, 15 октября
00:00 Готово назначение задач на пользователя. Начали делать статистику.
02:00 Готов функционал пометки комментариев, как правильных ответов на сообщения.
03:00 Начинается судорожный «фикс продакшена налету».
04:00 Приложение работает, конкурс закончен!
Выводы
Сделали примерно половину (не больше) из того, что задумывали. Очень много времени ушло на согласование интерфейсов и отлов ошибок. Между работающим приложением и работающим приложением, которым приятно пользоваться, лежит очень много работы (именно поэтому любую оценку нужно умножать на два). После 12 часов непрерывной работы производительность падает до нуля, не бойтесь отдыхать – в итоге сделаете больше! Успеть к намеченному сроку можно только одним способом – выкинув часть намеченной функциональности.
Покажите этот абзац менеджеру
Менеджерам очень полезно было бы участвовать в таких мероприятиях. Его роль я вижу так: это человек, который не дает программистам работать больше 4 часов подряд; он всегда знает приоритетность функционала, и понимает, от какой его части можно отказаться. Менеджер также должен руководить степенью «прожарки» приложения: за 48 часов (и не только) вы просто не успеете сделать весь проект идеально, но какие-то части должны быть доведены до блеска, оставьте эту задачу менеджеру.
Вот что получилось у нас: http://ideahq.r12.railsrumble.com
Участвуйте в хакатонах!
Автор: alexandrov