18 апреля 2014 г.

Пост про ФФФ

На посиделках Денис, рассказывая, про нашу компанию в качестве подрядчика на разных проектах, упомянул, что мы очень позитивно относимся к подходу ФФФ (он же fix time, fix budget, flex scope). Оказалось, что большинству присутствующих этот подход незнаком, в отличие от привычных fix all или либерального time & material. В первом случае договор фиксирует сроки, бюджет и функциональность, во втором - только функциональность.
ФФФ же закрепляет дедлайн и стоимость, но позволяет гибко управлять тем, что получится в результате, при этом будучи полезным как заказчику так и клиенту.

Пробуем исправить положение, вот подборка ссылок на про ФФФ:

P.S. ФФФ - это как экзамены в университете. Хорошая аналогия.

15 апреля 2014 г.

UserStory — держим логи клиентсайда в тепле, то есть в комментариях

Сегодня хочу рассказать про написанную мной библиотеку UserStory. Она преобразует комментарии в js-коде в вызовы консольного логгера. Разработчик сам решает, какие сообщения показывать в текущий момент прямо из консоли. У логов есть иерархические метки, что крайне полезно.

Как выглядит UserStory

Возможности и преимущества

Иерархия логгеров

Иерархия логов позволяет показывать их выборочно, для этого указывается соответствующая метка.

Например, рассмотрим группу меток: @news, @news.render, @news.render.getContext и @news.add. Вот как можно вывести все события по новостям, но исключить всё, что связано с их отрисовкой. Набираем в консоли:
UserStory.on('news');
UserStory.off('news.render');
Теперь в консоли будут появляться логи с метками news и news.add. Одному сообщению можно присвоить несколько меток. Состояние «предпочтений» сохраняется в localStorage.

Комменты и дебаг одновременно

Комментарий для UserStory служит двум целям: сказать, что сейчас произошло, при дебаге и своей обычной цели, пояснения кода. Он должен отвечать на вопрос «что вот тут происходит?».

Если вдруг появится задача починить баг на проекте, которым давно не занимался, я сначала выполню в консоли UserStory.on('*'), затем воспроизведу баг и, наконец, увижу в консоли, что происходит. Вероятно, это сэкономит время погружения в проект. Также это поможет и новым разработчикам.

Частая проблема разработки — наличие в коде ручных вызовов логгера, например, сonsole.log() или mySuperLog(), что мешает чтению кода. Комментарии же лежат на отдельном уровне восприятия, в IDE обычно отображаются ненавязчиво.

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


Как подключить


Во-первых, устанавливаем библиотеку:
npm install user-story
Чтобы UserStory заработал, надо перегнать js-файл через скрипт библиотеки:
cat input.js | ./node_modules/user-story/bin/us > output.js
Если используется django и django-compressor:
COMPRESS_PRECOMPILERS.append(
    ('text/javascript', 'node %s' % os.path.join(ROOT_PATH, '/node_modules/user-story/bin/us')),
)
Затем подключить клиентскую часть:
bower install UserStory
<script type="text/javascript" src="UserStory.js"></script>
Другой метод подключения — через адаптер к гранту grunt-user-story.

Гитхаб-репозиторий

PS. Библиотека находится в стадии прототипа, но уже активно нами применяется на наших проектах.

4 апреля 2014 г.

Про взаимодействие заказчиков с разработкой

Ребята из Greenfield Project любезно пригласили нас выступить на очерденой встрече стартаперской тусовки #poSEEDelki и мы не преминули воспользоваться из гостеприимством. Наш директор Денис Петрухин поведал о том:
  • Какой сценарий разработки лучше выбрать и когда;
  • Как поставить задачу программистам;
  • Как определить уровень команды-аутсорсера;
  • Как, собственно, вести весь проект. 

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

Вот слайды к выступлению (записи, к сожалению, нет):