Опыт участия в Rails Rumble

в 17:40, , рубрики: railsrumble, ruby, ruby on rails, оценка сроков, планирование, Программирование, управление проектами, метки: , , , ,

В прошедшие выходные (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

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js