воскресенье, 21 декабря 2008 г.

Странная политика Russian Podcasting

Материалы встреч стади-групп сообщества выкладываются на первом подкасте. Я просил их перевести нас в сообщество, чтобы каждый мог публиковаться из наших. На что получил забавный ответ:

1. Права на чтение книги - на support@rpod.ru плиз
и да - сообществ нам и так хватает...


1. Я не понял, зачем на обсуждение книги нужно право? :(
2. И сервис у них не для участников сайта, а ради, чтобы хватало...

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

... добавлено через 4 часа ...
Нашёл выход, просто завёл фэйковый адрес и подписался на все подкасты в качестве ленты друзей. Получилось: http://u19376.rpod.ru/friends. Вроде неплохо. Остаюсь на первом :)

О целях использования Study-Group

Кратенько выскажусь о сути явления :)
Вопрос был поднят в стади-групп обсуждениях.

Неправильно говорить, что практики стади-групп являются определенного рода привычками. Привычка и эффективный навык совершенно разные вещи. Привычка формируется стихийно и порой не очень полезна. К тому же обладает "прилипляющейся" способности, от которой сложно отказаться. Навык - это инструмент, который выращивается и закрепляется через определённую систему повторов и стимуляции. А потом когда мозг изменился мы сами решаем использовать этот инструмент или нет. Навык не обладает навязчивой способностью, в отличии от привычек.

Study-group - всего лишь определённый инструмент добывания теоретических знаний (даже если это опыт участников), объединяющий структурный (фильтр восприятия) и системный (обсуждения) анализ. Это способ изменения мышления на системный. Когда мы критериально оцениваем информацию. Возможно развитие этой практики в стороную формирования целостного восприятия. Кстати, подготовка, встреча, резюме по главе, резюме по книги формирует цепь закрепляющей обратной связи и глубокого освоения материала.

Касательно целей. Думаю, у инструментов врядли есть цели. Цели есть у желающего пользоваться этим инструментом (например для персонального использования я повышаю свой теоретический уровнь, а если используешь в команде - синхронизация и выравнивание командного инженерного видения на подходы, принципы и способы решения проектных задач). Цели нужны для мотивации объединения вокруг общей задачи. У нас такой задачи нету, каждый сам решает свои цели в стади-групп. Я усматриваю другого рода мотивацию - плановость и предсказуемость. А сама стади-групп состоя из двух этапов: подготовки и встречи. Отражает разные варианты мотивации. Например, неменуемость встречи и желания плодотворно в ней поучаствовать толкает нас к нахождению времени на подготовку. Без стади-групп это бы носило несистемный характер, к тому же нужна была бы сила воли. Встреча смещает акцент в область взаимоотношений. И связана с самореализацией и самоидентификацией каждого участника.

В общем я к чему. Не стоит смотреть на данное явление через призму известных вещей. Принцип аналогии сковывает наше развитие, формируя однобокий способ мышления в рамках, и может отвести в сторону. Нужно оставлять самобытность и самоопределяющуюся суть такой формы обучения. Инструментарий "видение-цели-принципы" в одной области деятельности нужны, но это такой же инструментарий, который приследует определеённые цели и должен быть использован сообразно. В стади-групп я не усматриваю пока таких вещей, к которым инструмент "видение-цели-принципы" нужны. Достаточно определиться принципами и паттернами проведения.

В общем, заметки - определённый фильтр восприятия, который отмечает важное и позволяет осознать посыл автора, плюс ещё хитрым способом определяет область непонимаемого, незнаемого и даже неосознаваемого. И за счёт коллективного подхода (встречи), о чем раньше бы и не помыслил во время чтения, мы начинаем не только осознавать, но и включать в свою область понимания новое и полезное.

То же самое в цифрах.
1. Читая один книгу я получу пусть 80% информации от автора.
2. Работая в стади-групп я потенцильно могу получить 80% из п.1 + 20% между строк через обсуждения и доосмысления авторской информации+ 100% (и более) информации из группы и её опыта.

А для максимизации п.2 система заметок должна спровоцировать появления 20% и 100%. Система заметок как ключ для подключения и аккумулации этих процентов.

Цифры взяты с потолка. Опять же важная сейчас не количественная составляющая, а качественная.

Сопротивляемость изменениям или про тюрьму опыта

Просто приведу цитату, которая просто вызывает благоговенный лепет в моей душе:

Идея о тюрьме впервые была исследована Платоном в «Республике» в знаменитой аллегории пещеры, где Сократ рассуждает о связи видимости, реальности и знания. Перед входом в подземную пещеру пылает костер. В пещере находятся люди, закованные цепями и лишенные возможности двигаться. Они видят только ту стену пещеры, что прямо перед ними. Она освещена пламенем, и тени людей и предметов видны на ней. Обитатели пещеры думают, что тени - реальность, дают им имена, говорят о них и даже связывают звуки, доносящиеся снаружи, с движением теней на стене. Истина и реальность для пленников заключаются в этом мире теней, поскольку они не знают другого.
Однако, считает Сократ, если бы одному из жителей пещеры позволили покинуть пещеру, он понял бы, что тени - всего лишь отражение более сложной реальности, а знания и восприятия его товарищей неверны и искажены. Если бы он вернулся потом в пещеру, он никогда уже не смог бы жить по-старому, поскольку для него мир был бы уже другим. Несомненно, ему трудно было бы смириться со своим затворничеством и стало бы жалко других пленников. Однако если бы он попытался поделиться с ними своим новым знанием, его, вероятно, осмеяли бы. Для пленников знакомые образы пещеры имели бы гораздо большую значимость, чем тот мир, который они никогда не видели. Более того, поскольку человек, получивший новое знание, больше уже не сможет функционировать с прежней убежденностью относительно теней на стене, его сотоварищи, скорее всего, посчитают внешний мир опасным. Это происшествие приведет к тому, что они станут жестче придерживаться знакомого образа мыслей.

Герет Морган. Образы Организации. с.235

И в продолжение к сравнению не-Agile подхода и Agile подхода: многие пытаются устранить неопределённость и защититься от неё через предварительное проектирвоание, детальное изучение требований и анализ. Agile же состоит в том, чтобы учиться на неопределнности и лавировать в её условиях. Аналогичную метафору можно проследить в западном подходе производства (предотвращения через накопление и буфферизацию на складах) и японской модели (от куда, кстати пошли многие Agile практики) производства.

Теперь я полностью понимаю своих не-Agile оппонентов, видать им в пещере уютней :)

суббота, 20 декабря 2008 г.

Story Points vs Ideal Hours

Для многих возникает неоднозначность и недопонимание, зачему вводить такую характеристику, как Story Point. А так же в продолжение предыдущего поста.
Объяснения очень просты. В Agile используется и то и другое. Но для разных уровней декомпозиции требований и реализации.

Я выделяю следующую пирамиду требований к разрабатываему продукту. От верхнеуровневой бизнес идеи до задач для разработчиков. В этой пирамиде требования к продукту (1-3) постепенно разбиваются до требований разработчика к коду (4-5) :)

1. Метафора продукта
2. Фичи продукта
3. User Story
4. Task
5. Task List

Каждый нижний пункт является декомпозицией верхнего. Мерить п.1 и п.2 очень сложно. Так как это очень высоко и тяжело оценить хоть как-то. п.5 (декомозиция задачи на мелкие шаги; Test List - шаги по задаче) слишком мелкий для оценки и нецелесообразен для оценок.

Рассмотрим п.3 и п.4
3. User Story оцениваем в Story Points с использование Planning Poker.
4. Tasks оцениваем в Ideal Days/Hours используя одну из схем: индивидуально (старый подход) или коллективно (новый с 2004 года).

В переводе на русский
3. Функциональные требования оцениваются в единицах трудоёмкости
4. Задачи оценивают в идеальных часах задачи (до 2 дней)

Продолжительность Ideal Hour адаптивно выбирается. В классике отталкиваются от 6 часов. Остальное адаптируется по ситуации.
Во время планирования на выходе мы получаем
1. Плановую суммарную Story Points
2. Плановое суммарное Ideal Days/Hours

Управление скоростью разработки легче вести с более высокоуровнего пункта. А так как у нас оценке подлежит только п.3 и п.4 - выбор очевиден. К тому же Story Points непосредственно связаны с функциональными требованиями и бизнес ориентированы. В тоже время под Ideal Hours может подпасть много не входящее в User Story, и носят инженерный оттенок реализации. Далее вводится фокус-фактор, но об этом смотрите в предыдущем посте.

Это классическая схема работы. Опыт показывает, что изобретать альтернативы не имеет смысла. Но это не должно останавливать.

Дополнительные ссылки:
1. Об agile по-русски: User Stories
2. Planning Poker

Мотивация в три шага

По эволюции развития существует три шага:

Шаг 1. Принуждение
Шаг 2. Стимулирование
Шаг 3. Прямая мотивация

Принуждение - моральное, экономическое (премии, бонусы, штрафы и т.п.) и физическое принуждение. В общем смотрим на наши команды в ИТ и понимаем. Мы здесь! Здраствуй принуждение :)

Кстати, яркий пример шага 1 это командно-административная, карьерная и бюракратическая машина. Если в вашей организации есть карьерная лестница, бонусы и т.п. - вы на шаге 1.

Нас всю жизнь учат этому способу работы. Паутина подчинения проявляется во всём: учёба, семья, институт и т.п. создают и культивируют в нас "подчинение". И потом удивляемся, почему бывшие рабы становясь начальниками используют этот вариант с большим усердием.

Кстати, В.И.Ленин знал только такой способ мотивации работников: записка В. И. Ленина: «…а Ильина… и весь фабком этого завода… и весь состав комячейки… объявляем виновниками… и объявляем строгий выговор и общественное порицание, с предупреждением, что только на первый раз так мягко караем, а впредь будем сажать за это профсоюзную и коммунистическую сволочь (суд, пожалуй, помягче выразится) в тюрьму беспощадно» (Ленин В. И. Полн. собр. соч. Т. 54.)

Стимулирование - когда мы обеспечиваем достаточный уровень мат.потребностей, создаём независимость работников от эконом. характеристик его бытия. Некоторые продвинутые команды разработчиков, да и вообще в России робко говорят и смотрят в эту область мотивации. Жаль, что многие менеджеры, тим лиды (специально не обученные) и бывшие программисты только используют шаг 1. И просто не понимают, как передвинуться к шагу 2.

Для меня этот уровень тяжело пока определить. В переходе между шагом 2 и шагом 3 появляются Формулировка миссии организации, видения (образа ее будущего), декларации ценностей, кредо, этические кодексы, использование корпоративных историй и мифов, разработка идеологии социально-ответственного маркетинга и управления т. п., призваны наполнить смыслом деятельность людей в организации.

Прямая мотивация - удовлетворенность содержанием, процессом и смыслом, значимостью труда (Р. Шпренгеру). Когда создаётся вовлечение участников разработки в процесс, в коллективное творчество.
Этот шаг и создаётся Agile-коучером.

К чему, я это написал. Да убеждаю себя купить книгу.

Dependency Inversion Principle, Dependency Injection и Inversion of Control

Кратко напишу так
Dependency inversion principle (DIP) - разрыв ЗАВИСИМОСТЕЙ через абстракцию
То есть, когда мы выводим интерфейс IA и скармлеваем потребителю B, мы отрываемся от зависимости, когда потребитель зависит от изменений конкретного класса A. А рассуждая далее, получаем, что логичней переименовать IA и IB, то есть клиент B определяет, что ему нужно от А:

B использует IB
A реализует IB

Dependency injection - механизм использующий DIP, DIP создает возможность использования DI

Inversion of control (IoC) - Don't call us, we'll call you (Hollywood principle) - принцип, когда основной поток управления (алгоритм) определён, и мы кастомизируем части. Частный случай, когда поток управления скрыт в базовом одном классе - паттерн Template Method. Более сложный вариант - модель Framework и частичная передача управления выполнения нашему приложению.

Очень жаль, что такие понятия путаются. А особенно это замечено в русской википедии. Ну и даже Роберт Мартин в своей книге попутал. Привязав голливудскую фразу к DIP. И вообще в его английском и русском варианте много неточностей, которые мы обнаружили коллективным разумом стади-групп.

Ссылки по теме:
- http://igor.quatrocode.com/2008/09/solid-top-5.html

Образы организации


Случайно зашёл в книжный, а там случайно открыл случайную страницу этой книги - прочитал. Автор дельные мысли написал. Купил. Читаю... Расстраиваюсь.

Я говорю о книге "Образы организации". Как себя позиционирует автор и издательство позиционирует "Стогольмскую школу экономики", можно было ожидать шедевра. На практике оказалась книга об простой идее - рассмотреть организацию через метафору.

Конечно, тем людям, которые любят строгую иерарихию, планы, распределение обязанностей и т.п. в разработке ПО. Книга будет полезна. Её объём достаточный, что потихой убедить этих людей в их ограниченном восприятии. Книга покажет им все многообразие смыслов и восприятий. Глубина и важность человеческого фактора выварачивается вдоль и вширь :)

С точки зрения Agile там мало чего полезного. Если вы практикуете Agile вы сами будете думать ещё похлеще автора. Отличие автора от вас лишь в его научном описании, то что вы знаете и так :)

Очень порадовали библиографические заметки. Единственно насыщенная информацией часть книги :)

Для Agile-истов: не рекомендую
Для не-Agile-истов: обязательная к прочтению.

пятница, 19 декабря 2008 г.

Проектирование Static Verbs английского языка

Лог переписки English Grammar Study Group. Использованы все принципы проектирования :)

[23:11:49] Ilya говорит: Нашел - эти слова, которые не употребляются в continious по научному называются статические, нединамические (stative verbs). Вот список http://www.perfect-english-grammar.com/stative-verbs.html
[23:12:41] Ilya говорит: Т.е. нельзя сказать I hating или I wishing
[23:21:35] Кирилл говорит: прям не полиморфные глаголы, статика :) Избегаем её всеми силами и несилами :)))
[23:21:47] Ilya говорит: :)
[23:45:22] Denis говорит: sealed к тому же :)
[23:45:46] Denis говорит: хотя нет, need есть наследник - needed ;)
[23:47:08] Кирилл говорит: а может "ed" - это агрегируемая часть класса need :) Neet.ToString() = "Needed"
[23:47:10] Кирилл говорит: )
[23:47:33] Denis говорит: не это врапер
[23:48:06] Кирилл говорит: не, просто булево поле IsInPast = false, и поэтому ToString по-другому работает))
[23:48:26] Denis говорит: class Needed
{
Need need;
ToString() { MakeItInPast() }
}
[23:48:50] Denis говорит: хотя чё-то не так
[23:48:54] Denis говорит: но смысл понятен
[23:49:00] Denis говорит: :)
[23:49:11] Кирилл говорит: class Need
{
bool IsInPast;

}
[23:49:21] Denis говорит: Неее
[23:49:22] Кирилл говорит: override string ToString()
[
[23:49:39] Кирилл говорит: return IsInPast? "Needed" : "Need"
[23:51:02] Denis говорит: фуууу
[23:51:05] Denis говорит: :)
[23:51:08] Кирилл говорит: Я понимаю, но всё же :)
[23:51:45] Denis говорит: понял!

Verb
virtual PresentContinousForm()
{
return "to be" + name + "ing";
}

Need : Verb, IStaticVerb
{
override PresentContinousForm()
{
return PresentSimple();
}
}
[23:52:25] Denis говорит: а нет гоню
[23:52:42] Denis говорит: StaticVerb : Verb

Need: StaticVerb
[23:53:01] Кирилл говорит: мм... IPresentContiniousable, IPresentSimpleable, ... :)))
[23:53:05] Denis говорит: даже ещё хуже!
[23:53:13] Denis говорит: Need - как класс нужен ли?
[23:53:36] Кирилл говорит: таак... Надо подумать. Так как слова - это тоже абстракции, которые что-то означают, то.... да)
[23:53:39] Denis говорит: конструктор - Verb(string name)

и пораждаем need:

need = new StaticVerb("need");
[23:54:12] Кирилл говорит: Ну это смотря что нужно от приложения. Если ИИ строить, то нужны классы на каждое слово)
[23:54:30] Denis говорит: Другой вопрос, будет мина:

fly = new StaticVerb("fly");
[23:54:36] Denis говорит: вроде код корректен, а неверный
[23:54:43] Denis говорит: поэтому нужно где-то словарь заложить
[23:54:49] Denis говорит: а!!!!
[23:54:54] Denis говорит: исопльзуем flyweight! ^)
[23:54:58] Кирилл говорит: Словам нужно атрибуты сделать, либо абстрагировать атрибуты до состояний
[23:55:41] Denis говорит: можно конечно все спрятать в StaticVerbFactory
[23:55:58] Denis говорит: с сылкой на http://www.perfect-english-grammar.com/stative-verbs.html
[23:56:07] Denis говорит: сорри, в VerbFactory
[23:56:16] Кирилл говорит: )))
[23:56:50] Кирилл говорит: А как синонимами управлять... Каждый объект слова должен хранить списки синонимых, антонимых и тд
[23:57:17] Denis говорит: ну это другая юзер стори :)
[23:57:22] Кирилл говорит: :)

понедельник, 8 декабря 2008 г.

Коммитмент и ответственности в разработке

Я не держу слово. Да такая фигня случается. Я не держу слово перед командой, когда обещаю сделать работу за 6 часов, а выполняю за 12. Я не держу слово родными, когда обещаю купить хлеб, но забываю. Я не держу слово перед самим собой, когда обещаю встать в 9 утра и дрыхну без задних ног. Я часть системы. Системы, которую создаю я. В этой системе таких как я рать. Мы придумываем кучу оправданий, почему это не вышло, почему я не смог или не успел. Мы переносим ответственность на других, делегируем им нашу ответственность за себя. А потом удивляемся миру, который образовался вокруг нас.

Вопрос становится - почему я так поступаю? Почему я принимаю решения и возлагаю ответственность на себя и не выполняю её. Будет ли чувство доверия, чувство, что можно положиться на меня и планировать уже свои активности. Нет!

Мне это сходит с рук. Может быть везёт. Но если не я один такой? Если ты тоже так поступаешь. Если поступает сосед, коллега, партнёр. То какой мы мир строим?

Другой вопрос - какие решения важны, а какие нет. Насколько важно давать обещание самому себе встать в 9 утра и дать обещание сделать задачу за 6 часов? Что из них важнее и критичней. Попробуем воспользоваться 3-ей точкой зрения (см. пост ). Перед метафоричным образом "смерти" любое наше решение является самым главным. Пусть это покупка хлеба, или заключение миллиардного контракта. Конечно можно выбрать другую стратегию, например преуменьшения данных обязательств (ведь всё равно все там будем) - но будет ли от этого мир лучше? Наверное нет.
Поэтому я выбираю равенства даваемых обещаний и каждое из них бесценно.

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

Петр 1 говорил: Кто хочет у него тыща возможностей, кто не хочет тыща оправданий.

PS. Но не забываем адаптивность никто не отменял, но мы должны стремиться к идеалу.

Study Group Community: Нас слушают!

Созданное недавно сообщество постепенно расширяется. Первый месяц (дата регистрации домена - 20.10.2008, а первой встречи - 28.10.2008) работы сообщества уже дал приятный фидбэк: знания растут, сеть знакомств увеличивается и главное нас слушают! И появляется неутомимая жаждая создавать новые группы.


График скачивания подкастов сообщества: http://study-group.rpod.ru

А что ждёт нас впереди? Уже через месяц работы участники сообщества решили сделать проект Study Group Portal, который покроет нужды сообщества для организации комфортных встреч, работы и просто социальной сети профессионалов.

Даже страшно загадывать, что нас ждёт впереди! :)

воскресенье, 7 декабря 2008 г.

Как тестировать приватные функции класса?

Знакомый вопрос? И какие у нас есть решения
1. Использовать рефлекшн
2. Директивы компиляции #if DEBUG - ужас
3. friend и его альтернативы
4. Возможности встроенного xUnit фреймвока в IDE который делает чёрную магию (см VS.Net)
5. Ваше любимое :)

Если первое решение смерть всему поколению поддержки, а второе ужас на крыльях ночи, то стоит вопрос - а чего делать-то?

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

Почему многие бьются, но не находят решения? А потому как мы находимся в такой парадигме программирования, которые не предполагает решения. Там его просто нет. Спросите, а что не так с нашей парадигмой? Да всё просто - мы со своей теорией знания ООП лезем в бизнес-разработку. Теория ООП - это академически дисцеплина. А наш код - это бизнес-реальность.

Что говорит теория - инкапсулируй, скрывай и т.п.

А что говорит бизнес? Гони нам качественное и дешевое решений! А почему же теория делает нам решение не дешёвым? А все просто - нету тестов, запутанный код, неясная логика, неадекватные называния и огромная связанность даёт прибавки в стоимости нашего кода в части поддержки и развития. Мы платим огромные сумма за поддержку и развитие кода, нежели его создания. Пусть икает тот разработчик, который первый породил тот или инной класс. И получил свои 10$ за него. Теперь мы дни тратим понимая, почему он вызывает отъезжание в другом месте и днями на пролёт эксперементируем как к этому делу прикрутить чуть больше функций. И платим за это сотни, а может быть даже тысячи баксов.

То есть задача бизнес кода - получить дешевое решение. Которое легко развивать, сопровождать, читать, анализировать и оно обладает минимальной связанностью. Конечно же TestFirst, TDD, Refactoring, Patterns, Continuous Integration здесь наше спасение. Но вернёмся к приватам.

Парадигма "бизнес разработки" такова, что нужно посмотреть, кто является клиентами нашего кода. Кто использует продукт нашего творчества? Мы должны сделать все возможное и невозможное, нарушая теоретические полёты мысле теоретиков от ООП, с целью удешевления поддержки и развития.

А клиентами нашего кода являются: конечные пользователи и разработчики. Причем ещё не ясно, кто больше наш код использует. Пользователи тыкают конечно приложение. Но кто вас чаще вспоминать будет, если вы нагородили подлянок на каждом шагу, не проводили рефакторинги и вообще оставили тучу смеллов не покрытых тестами?

Итог. Клиенты кода - это заказчик + разработчики. Причем последний в большей мере. Так какого мы тресёмся за теоретическую инкапсуляцию и забиваем на тесты открывая нужные функции, делая их protected (шунтируя для теста класс, например) или даже public? Кончайте голову себе и другим пудрить! Делайте дело и используйте всё многообразие подходов, чтобы качество кода было 101% и его цена минимальна!

Я выделил 3 парадигмы разработки, который порождает рассматриваемый случай
1. "Теоретическая" (когда неуклонно следуем ООП и придумываем обходные манёвры о которых в ООП ничего не говорится и считаем их хорошими — см. п.1-п.5 выше). Максимальное количество private.
2. TDD — уже смещает парадигму мышления и на выходе получаем изолированные модули. Но и там проскакивает приват. Который приводит к одному из п.1-п.5
3. "Бизнес-программирование". Используем TDD + открываем (protected|public) методы для нужд тестирования. Так как я являюсь пользователем своего кода и мне важно его качество выраженное через 1) покрытие тестами, 2) простоте чтения.

Я работаю по методу 3.

Выбранный мною подход разработки делает мой код дешевле и качественнее.

Почему мы используем Story Points?

Ответ простой. Посмотрим на альтернативы.

А альтернатива - это идеальные часы, дни или что-то другое со вренем.

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

Story Points - это трудоёмкость оцениваемая командой во время планирования. Это не время, очень большая ошибка перейти на оценку в идеальных часах. Почему?

Расказываю.

Вариант 1. Идеальные дни.
Напомню, функциональные требования (User Stories) оцениваются в идеальных днях. А задачи, на которые разбиваются требования в идеальных часах.

Итак у нас команда из 5 разработчиков. Итерация 2 недели. Сколько мы наберём работы? Посчитаем - 5 разработчиков x 2 недели x 5 дней x 6 идеальных часа в день = 300 часов. Ну мы собственно и набираем задач. В конце итерации выясняется, что мы сделали работы на 200 часов.

Стоит вопрос - нужно переоценить требования? или укоротить идеальный час? или набирать теперь часов не 300, а на 200 в следующий раз? А что делать с новыми задачами? Их сразу домножать на коэфициент? или ввести термин "идеальная итерация" состоящая из 200 часов. Куча вопросов и у меня нет на них ответа. Потому что это не Agile ;) А заниматься классическими расчётами, как учат нас книги по менеджменту и придумывать теории производительности - крайне неэффективно.

Поэтому рассмотрим вариант 2.

Вариант 2 (по Agile). Меряем User Stories (функциональные требования) с помощью Story Points.

Во время обучения меня срашивают, что такое Story Points? А я отвечаю
1) это сипульки
2) прошу понаблюдать за игрой слов - User Stories -> Story Points
3) мера трудоёмкости
4) мера не времени, а бизнес-значимости, так как бесполезные вещи для бизнес не оцениваются в Story Points. график убывания (burndown) показывает как значимые вещи реализуются в коде.

А теперь вернёмся к нашей команде в 5 человек. После планирования они поняли, что трудоёмкость итерации 150 Story Points. Итерация. Результат - 100 сделали.
А теперь магия корректировки скорости.
фокус фактор = сделанные Story Points / ресурс в идеальных часах = 100 / 300 = 33%

Что значит 33%? Это соотношение стори-поинтов к идеальному времени. В следующий итерации один разработчик ушёл в отпуск. Как вы посчитаете сколько вы за итерацию осилите? берём идеальные часы (ресурс) - 240 часов и множим на 33% - получаем нужно набрать требований на 80 Story Points.

Причем заметьте:
1) нам не нужно адаптировать свои оценки сложности
2) мы не задумываемся о своей неверной оценке одного требования, как впрочем и целого набора
3) 1 проработанный час не всегда равен 1 выработанной Story Point. Банально много много времени бесполезно сидеть, а бизнес-выхлопа никакого. Если ежедневно считать, сколько осталось Story Points сделать до конца итерации. То можно заметить - время течёт, а бизнес стоит. Сразу можно оперативно реагировать.
4) если каждую итерацию мерить свою скорость в story point можете увидеть очень интересную картинку. особенно меня радует, когда команда занимается рефакторингом, тогда просест графика в ноль гарантирован :) хуже, когда график проседает в итерации, где добавляются полезные фичи.

А дальше обширное поле игры с фокус-фактором. Хотим время на стабилизацию - делаем цифирку поменьше. Хотим поработать по выходным - побольше :)

Продолжение: http://denismiller.blogspot.com/2009/02/story-points.html

суббота, 6 декабря 2008 г.

Планирование продукта в Agile

Agile - это хаос, никакого планирования и т.п.

Это ложь и происки демонов!

Для более менее серъёзного проекта планирование, сбор требований и т.п. имеет место быть. А если клиент впервые делает продукт или клиентов много, то чтобы конечный заказчик был доволен нам нужно провести предварительный сбор требований.

Как выглядят требования? Их можно представить в виде треугольника. Вершина самые высокоуровневые требования. Основание… предпред-последний слой это многочисленные документы, детальные требования, SRD, BRD, TRD. Предпоследний слой большое количество документации инженерной и самый нижней слой - код проекта. Код проекта тоже документация  Такую схему можно использовать это не запрещается, но мы ищем эффективные пусти.

Сделаем два предположения:
1. Документация делится на документированную и недокументированную
2. Участники проекта участвуют достаточно продолжительное время, чтобы их можно было считать носителями знания и не страдают амнизией :)

Теперь вспомним, что является средней частью. Большая стопка мукалатуры. Вязкая документация, наводящая Такие предположения позволяют более эффективно построить пирамиду требований вырезав среднюю часть (детальные требования и тонны архитектурной документации). Правда приятно сэкономить тонны времени на написания этой муккалатуры? А сколько времени сэкономили на поддержания её? :)

Но такой подход вызывает изменение процесса разработки
1. Все участники должны быть в курсе высокоуровневых требований
2. Код программы должен быть качественным.

"Все участники должны быть в курсе высокоуровневых требований" это означает, каждый должен въехать в видение продукта, видение релиза, итерации и понимать все требования, которые отражаются в кратких заметках-маркерах (User Story Index Card). Почему маркеры? Да потому, что они нужны лишь для игры в покер и должны служить напоминанием о той или иной хотелке клиента. А когда дойдём до планирования хотелки - у него и спросим :)

Про качественный код здесь говорить нечего. Код программы является самым низкоуровневым, детальным требованием. Поэтому он должен быть таким, что квалифицированный разработчик его будет читать как документ. В общем эффект самодокументированного кода здесь имеет место быть. Каждый Agile-разработчик должен обладать навыками TDD, Refactoring, шаблонами и т.п. Ну и конечно моей любимой альтернативой "конвенции наименования" - Implementation Patterns.

Теперь какова анатомия верхней части пирамиды. Тут вариантов туча. Очень хорошая практика из RUP. Но по мне главное в этом деле, чтобы клиенты, менеджеры и т.п. вне-командные личности смогли договориться в самых крупных своих ожиданиях, выраженном в видении продукта и релизов. И другой важный момент – видение является критериями выбора приоритетов клиентом первоочередных функциональных требований (User Stories). Видение становится картой, используя которую мы движемся в нулевой итерации сбора и анализа требований при составлении Product Backlog’a. И эти видения помогают понять, что нужно в самое ближайшее время. Во время подготовки достаточно понять видение на 2-3 релиза и это будет достаточно.
После того как мы договоримся о целях (видении) релизов. Нам уже легче отсортировать требования пользователей. Самый важный конечно же, это ближайший для разработки релиз. Там нужно быть очень внимательным. К остальным тоже внимательность не помешает. Но нужно участь, что после первого релиза может все изменится. Второй и третий нам интересен лишь для тенденций. О четвертом не имеет смысла вообще говорить. И его можно называть «всё остальное» 

А затем набрав первый релиз. Применяем ту же практику с выделением видения, но относительно итераций релиза. На этом уровне видение каждой итерации называется цель итерации. И мы опять же применяем хитрость практики «видение», чтобы клиенты договорились  Ну и нам разработке стало понятно чего же хотят. Как происходит планирование на этом уровне расскажу в другой раз. Итак получилось выше крыши 

Соберём всю пирамидку требований от видения до ежедневных задач:
1. Видение продукта - управляем метафорами
2. Планирование релизов - управляем features
3. Планирование итераций - управляем user stories
4. Планирование дня - управляем задачами

Extract Superdirectory (Configuration Refactoring)

Может так случиться, что для разных конфигураций сборки проекта может понадобиться разные файлы. Тогда сделать просто, раскидываем файлы по папкам:

build
- Release
- Debug

Но как всегда возникает проблема, что нужно копировать одни и теже файлы в обе папки. Это досадно и неприятно. Получается дублирование файлов. А это зло, так скажет любой нормальный Agile-разработчик.

Для этого рекомендую применить рефакторинг:
Extract Superdirectory
You have two directory with similar files.
Create a superdirectory and move the common files to the directory.

В результате получаем несоколько папок:
build
- Common
- Release
- Debug

Другой вопрос, если в файлах папки Common нужно кастомизировать часть файла исходя из типа сборки. Ну тут чуть сложнее, используем Configuration Adapter паттерн. Который в зависимости от сборки вырезает и заменяет секции файла исходя из типа сборки. Реализация совсем проста - это исполняемый файл, который натравливается на, например, конфигурационный файл, он ищет секции заключённые в нужные теги (@Release@, например), а остальные стерает (@Debug@).

пятница, 5 декабря 2008 г.

О конструировании социальной реальности

Что такое реальность? На этот вопрос никто из живущих на земле ответить не может. От реальностью мы отделены нашими органами. Мы испльзуем их, чтобы в голове отобразить. Лишь отобразить картину реальности. Это с одной стороны. С другой стороны мы выстраиваем внутреннюю реальность - убеждения, ценности, свои правоты и истины. Эта конструкция строится в нас с помощью улицы, двора, садика, школы, университета и даже работы. Из нас делают биороботов для работы. Нам прописывают как мы должны работать и кому подчиняться. Так было всегда.

Но разработка в ИТ сфере требует креативного подхода. Люди начинают ломать рамки, в которое их засунуло общество. Чтобы добиться успеха нам нужны эффективные команды. Но эффективность и мотивация возможна только в равной среде. Среде созданной на других принципах построения взаимоотношений.

Тут я отойду в другую сферу. Сферу не ИТ, а других реальностей. Других реальностей построенных людьми, которые небыли посажены на рельсы подготовки инженеров-программистов. Людей, которые были отделены от мира штамповки биороботов, своими недостатками. Я хотел бы рекомендовать вам интересную историю одной девочки - http://rodon.org/other/vmitssh/

Чтобы заинтересовать читающих блог приведу две цитаты девочки:
Наука – система знаний, основанных на сомнении (Соня, 10 лет)

Кто знаком с науками изнутри, удивится точности слов. Сомнение – один из методологических столпов науки (другой – вера. Речь, конечно, не о религиозной вере)

Что заставляет уходить в бессмертье
Мельчайшие частички бытия?
Их разделяют звезды и столетья,
И вместе с ними исчезаю я.

Но исчезая, во Вселенской книге
Я оставляю четкие черты.
И в каждом атоме, и в каждом миге
Меж мной и Вечностью наведены мосты

(Соня, 13 лет)

Мои выводы. У девочки хорошо поставлен слог. Она хорошо передаёт другой вкус... другой социальной реальности. Которая возможно ближе к той, реальной реальности. Она не проходила процесс штамповки граждан государства. Но судя по её творчеству она теряет свою исходную модель... Её "учат" нашей социальной реальности.

Другая жизнь – вторая Я

Другая жизнь, вторая Я.
Ваш мир мне видится иначе.
Вторая Я у вас своя,
А первая в нём горько плачет.
Мне вскоре радость надоела
От похвалы моих стихов.
Я жду не слов, мне нужно дело –
Молитвы дело и трудов.
Вторая я – как есть малышка,
Почти что девяти годов.
И в жизни, и во всяких книжках
Портрет её давно готов.
Другая жизнь работать заставляет
Не столько сердцем, сколько головой.
Вторая Я прекрасно это знает,
Но аутизм не даст быть деловой.
Мне дан талант слагать слова.
Зачем – я это понимаю.
Вторая Я обычно не права,
Когда меня другой быть призывает
.

Он чувствует, что её меняют. И она сопративляется этим измененям.
Но похоже она проигрывает игру. Её первоначальная картина мира изменяется мужами истинной реальности :)

Не верь, не гадай и не бойся
В крови уже есть ответ.
Чужие неясные свойства –
Откуда и чей привет?

Так странно смешалось и глупо –
Готовый взорваться вулкан.
Не кот на цепи у дуба –
Сошедший с ума ураган.

Но так уже прежде бывало
Рвалось полотно пелён
И я из себя прорастала
Сбегая из плена времен.


Видно, что она сопротивляется. И даже в последнем абзаце питает надежды на воссоединение с первоначальной картины мира. Но мы то понимает, что это уже сделать нельзя. Вирус нашего технократического общества коснулся её души.

К чему я это. К тому, что тот стиль работы, который мы ведём, часто ведёт к очень неээфективным методам работы. Он может ставить палки в колёса. Но пелена навязанных нам ценностей будет выдавать нам это как хорошие решения. Я призываю лишь освободиться от напряжения, от глупого принципа "правоты", субординации, начальственности. И жить проще. Нам дана всего лишь одна жизнь - и мы её должны прожить достойно! :)

Всегда ли прав клиент?

Часто звучит лозунг "клиент всегда прав!". Но насколько эффективен такой лозунг? Позволит этот лозунг писать качественный код и гордиться массовостью использования хорошего решения?

Давайте взглянем подробнее. Когда кто-то "прав", то кто-то значить "не-прав". Если прав клиент, то не права команда разработки. Но кто же создает продукт? Конечно же команда разработке. А в голове этой команды своя "правота", которая отличается от "правоты" клиета, а по сути является "не-правотой" клиента. Стаёт вопрос ребром - насколько я качественно сделаю продукт, если я считаю одно, а должен делать другое? Создаётся шизофреническая ситуация: думаю одно (истинное я), говорю второе (ну раз заказчик всегда прав - то буду говорить его же словами), а делаю третье. Что же такое третье? Симбиоз. Сибиоз, который готов взорваться. Некая субстанция, которая насильно скована контрактными обязательствами и деньгами. Проект может быть будет сделан. Но вы будете гордиться таким проектом? Будет ли каждый день работы приносить удовольствие от работы над ним? Я бы не стал так работать - жизнь одна, чтобы её портить на такую мелочную постановку задачи.

Но что же будет взамен "правоты". А взамен будет "партнёрство", в котором клиент и разработка суть партнёры. Партнёры, которые делают один проект, которые заинтересованы в его успехе. "Правота" вызывает механизм соподчинения я начальник - ты дурак. "Партнёрство" - это творчество равных. А если мы равны и мнение каждого важно, как своё. И мы руководствуемся продвижением продукта за счёт наших совместных усилий. То... Наступает сказка. Команда вовлекается в проект, клиент получает хороший продукт, пользователи летают на седьмом небе от счастья. Наступает мир и любовь! :)

Вывод: В общем для меня критерий "правоты" это неверный критерий. И вообще зло. И в этом я на 100% прав :)

среда, 3 декабря 2008 г.

Касательно верификации требований или немного о кризисе

Для оценки, что происходит вокруг нас есть несколько вариантов.

1. Я оцениваю с точки зрения своей точки зрения. Своей правоты.
К сожалению этот уровень очень подвержен влиянию внешних и внутренних факторов. Внешний - нам навязали те ценности, которые не являются важными и нужными. Например см. предудыщий пост касательно "штрафов". Когда я придумываю что-то, мне сложно отказаться от своего решения. Чувство важности (я же автор решения) не позволяет мне адекватно оценить ситуацию. Если работать по оценки на этом уровне мы получим много криков, обид и все будут расстроены. Только мудрецы могут изменять своё мнение и поскупиться авторством ради лучшего решения на этом уровне.

Что делать нам? простым разработчика?
2. Оценивать с точки зрения другого человека.
Представьте, что вы тот человек, которому вы хотите донести своё решение. Ну как?
Думаю у нас достаточно хорошо работает абстрактное мышление и все хорошо можем дебажить, чтобы продебажить свои ощущения к такой позиции №2.

Но есть ещё круче
3. Примените глобальную точку зрения. Глобальность подразумевает точку зрения: продукта, клиентов, коллектива, общества и самое мощное глазами собственной смерти :)
А смерть всегда говорит одно и тоже, не парься, получай удовольствия от жизни. Хуже меня ничего нет. И твои проблемы сегодня или религиозные войны в обуждениях по поводу стиля программирования или архитектуры лишь пустая трата времени и твоей энергии. А этой энергией питаются деструктивные личности твоей души. Тебе это нужно? Ну если нужно - то корми их :)

Цитата: "обращайтесь к смерти за советом, чтобы избавиться от бездарной мелочности, свойственной людям, которые живут так словно смерть их никогда не коснётся" (Your death will tell you that you’re wrong; that nothing really matters outside its touch. Your death will tell you, ‘I haven’t touched you yet’.)

Ты с другой стороны, чувствуешь, что ты бессмертен. А решения бессмертного человека могут быть изменены, или о них можно сожалеть или подвергать их сомнению. Время имеется только для того, чтобы делать решения. (“You, on the other hand, feel that you are immortal, and the decisions of an immortal man can be canceled or regretted or doubted. In a world where death is the hunter, my friend, there is no time for regrets or doubts. There is only time for decisions.”)

(С.Castaneda, Journey to Ixtlan)


Как связано с кризисом? Примените третью точку зрения к нему

вторник, 2 декабря 2008 г.

Позитив vs Негатив в User Story. Проверка качества продукта на социльную ценность.

Сейчас подготавливаются функциональные требования к новому продукту. Я там выступаю как product owner (и заодно коучером) и поэтому пытаюсь ценность нового продукта сделать как можно больше. Клиентом является команда разработки. Поэтому мы периодически играем в роле "клиент". В разговорах с "клиентами" показалось очень интересным одно обсуждение. Сегодня поговорили по поводу отрицательной мотивации как следствие работы нескольких фич продукта. Я отрицательное неприемлю на корню. И считаю, что осознанная личность выше этого. Может это называется позитивная психология. Так иногда озвучивают мою точку зрения знающие люди. Я не знаю. Я знаю одно эффективность и кайф от работы превыше всего 

4 юзер-стори и мои комментарии

Я как ведущий группы хочу иметь возможность отмечать пропуски участниками SG (например один пропуск - "шарик" пропуска в статус или его половинка) для того чтобы давить на сознательность

Денис: какая ценность пункта "для того чтобы"? зачем давить на сознательность? для чего это? мотивация от негатива - очень плохая мотивация.
зачем ведущему группы давить на участников? с какой целью?
Автор: ведущий только ведет статистику, сознательность у каждого своя.
Денис: зачем ведущему статистика?
Автор: чтобы я меньше хотел пропускать, когда ситуация может быть разрешена как в пользу участия, так и в пользу пропуска. "зачем - мне видеть возле своего ника в списке - 3 черных шара, когда у других их нет?"
Денис: зачем мне отрицательная мотивация?
Автор:- см. ниже
Денис: зачем тебе нужна отрицательная мотивация? она отпугнёт участника от ресурса или привлечёт?
Автор: для привлечения новых людей - она будет просто прикольной фичей. так что скорее положительный момент. для уже учавствующих - повод не пропускать, а то "чтот я забросил это дело, и етц...". тоже вроде нет вреда.
Денис: я бы перестал бы участвовать в сг, если на весь интернет будет известно, что я её пропускаю - и ещё бы в блоге написал бы за плохую систему привлечения.
Автор: :-) весь инет пошел бы посмотреть что же это за система и вот новые пользователи - каждый сам оценит что это такое и надо ли ему это.
Денис: очень сомневаюсь. тебе нравится, если бы о твоих не очень хороших качествах узнали бы все знакомые? как бы ты относился бы к такому ресурсы, который это делает?
Автор: мои знакомые меня знают :) чем не повод не пропускать, раз тебе это не нравится - выбор же есть.
Денис: знают все плохие твои качества?
Автор: скорее всего даже больше чем вижу я сам, со стороны виднее.
Денис: в общем я бизнес-ценности такого решения не вижу. хоть убей. делать сайт для подчёркивания плохих качеств участников с целью мотивирования посещения этого сайта. я бы за деньги бы на такой сайт не ходил бы. жуть :O
Автор: ок. нет так нет. я изложил свое видение.
Денис: я не говорю, что нет. но я хотел бы понять, почему тебе это так важно. этот проект в том числе коуч-сессия для лучшего понимания Agile... нужно искать что-то общее, что помогает работать эффективно в том числе и конечному пользователю с нашим продуктом

Я как участник группы хочу видеть свой статус по пропускам каждой конкретной SG (количество "шариков" пропуска) для того чтобы давить на сознательность

Денис: участник мазахист? :)
Автор: дело пользователя
Денис: зачем пользователю это?
Автор: а если у меня группа из одних злостных прогульщиков набирается - я должен это знать. предупрежден =вооружен.
Денис: а ты это разве не заметишь? И что тебе даст это знание? что ты с ним будешь делать? санкции?
Автор: например увеличу число участников для старта чтобы хоть с кем то работать
или заложу более длительный срок на работу группы, раз будут слайды.
Денис: люди приходят, когда ты не вводишь репрессии, а своим примером показываешь, что это интересно. для старта группы достаточно 1 человека. проверено. уже две группы начавшиеся в 1 человека - привлекли участников.

Я как пользователь портала хочу видеть количество пропусков у другого пользователя для того чтобы давить на сознательность

Денис: пользователь онанист? :)
Автор: дело пользователя

Я как пользователь портала хочу видеть список топ-прогульщиков портала для того чтобы давить на сознательность

Денис: цель топ рейтинга отрицательных качеств не понятна. происходит культивация культа "прогульщиков", вместо развития заинтересованности и вовлечения в полезное дело саморазвития
Автор: так а кто сказал что нельзя сделать механизм уничтожения этих шаров - вот и положительная мотивация.
Денис: зачем придумывать механизм уничтожения негатива, когда можно получить непосредственный позитив от участия? С какой целью я прихожу на сайты? За удовольствием или за негативом?
Автор: в SG есть определенные правила - например, обязательная подготовка одно из них. появление на встречах - думаю тоже. если ты для удовольствия прийдешь на SG неподготовленным или сорвешь встречу - это вред группе.
Денис: право поддерживать своё "обязательство" это право давшего обязателство - это раз. это же относится к неподготовшимся. А встречу можно провести и одному -- мы активны, позитивны и нам ничего не мешает самообучаться :) как ты думаешь - почему люди сейчас приходят и участвуют? боятся пропусков или есть другие мотивы? Почему не использовать другую систему мотивации - позитивную? причем, чтобы её реализовать ничего не нужно. просто поднять портал - а там сами потянутся.
Автор: мне нравится аналогия с SG=agile проект. Есть цель к которой стремимся, есть митинги, на которые все дали обещание появляться вовремя и вообще, есть опоздавшие/пропустившие, с которых взимается штраф.
Денис: штраф в Agile - никогда не взимается. Такой практики никогда не было. То что придумывают некоторые люди - это их дело. Штраф - это не Agile.
Автор: см. "Dealing with latecomers " Henrik_Kniberg_-_Scrum_And_Xp_From_The_Trencheson
Денис: я этот источник знаю. Вопрос в другом - если у тебя есть два вида мотивации: положительная и отрицательная? зачем ты хочешь развить отрицательную? а не приложишь усилия развить положительную? не понимаю
Автор: не вижу как можно развить положительную мотивацию в подобном ключе. если есть такая US - давайте ее развивать.
Денис: создать другие US - которые привносят положительную мотивацию посящения ресурса, нежеле отрицательную мотивацию... типа я пошёл на каторгу, иначе будут считать прогулы.
Автор: как автор US не могу придумать позитивную US подобной силы эффекта разве что IPODы раздавать.
Денис: как ты думаешь люди с радостью пойдут на сайт, где их отрицательно оценивают?
Автор: людей оценивают объективно, по прогулам :) сорри, аут оф тайм нау.
Денис: вопрос а зачем оценивать людей?
Автор: людей оценивают объективно, по прогулам :) сорри, аут оф тайм нау.
Денис: вопрос а зачем оценивать людей?
Автор: оценок людям никто не дает, отмечаются пропуски.
Денис: а это не оценка ли? было действие: участника не было. а вот интерпретация уже другого человка в виде оценки - количество пропусков. кстати, наличие пропусков вызывает другую оценку... допущу о надёжности этого человека. вот так много мыслей возникает на пустом месте. зачем?
Денис: повторю вопрос: ты с радостью пойдешь на сайт, где считаются твои прогулы и сообщается это всем? а ещё есть шанс, что тебя могут исключить?
Автор: я пойду. радости мне это не доставит, горя тоже. гугл собирает мои поисковые запросы, одноклассники знают что я учил. это всего лиш фича, не больше.
Денис: а если этой фичи бы небыло - уже удовольствия от посещения было бы больше? а может если оценивались бы твои активности - например плюсами твои цитаты и ты попадал бы в рейтинг самых-самых с присваиванием статуса гуру и рекомендаций коллегам как эксперта в области? (кстати щас запишу US)
Автор: нет. надо?
Денис: не понял. если бы не было этой фичи, ты бы больше удовольствия от сайта получал бы?
Автор: эээ, мне фичи сайтов удовольствия не приносят. я работаю с тем что есть. оно может быть удобным или нет. если неудобно - это досадно. если удобно - значит так и должно быть.
Денис: как ты понимаешь, что тебе что-то удобно или нет? когда тебе удобно тебе приятней? или приятней когда неудобно?
Денис: да, ещё один нюанс. юзер стори пишется от первого лица. то есть ты реально этого хочешь? это реальное пожелание или выдуманное, а может кому нужно? формируя список требований к системе мы являемся её пользователями - свойство нашего проекта. то есть ты реально хочешь этим пользоватся и тебе важно наличие такого функционала?
Автор: я ж придумал это исходя из вопроса - "что надо сделать чтобы я всегда старался учавствовать в группе или хотя бы предупреждал владельца вовремя"
Денис: ну так реальную потребность нужно писать :) а там уже решения сами прийдут :) И это правильно - когда мы осознаем, что же реально мы хотим - это очень эффективно.

Стирание личной истории с точки зрения Agile

В Карлос Кастанеда - Путешествие в Икстлан (1972) говориться, что практика стирания личной истории очень полезная штука. Суть её в том, что ожидания других людей по отношению к моим действиям и бездействия уже запрограммированы в их головах. А если так, что мне из раза в раз нужно объяснять то или иное мое поведение/решение. Чтобы программы в головах у людей синхронизировались и поддерживались up-to-date. Это стиль "почему?".

Другой стиль это "зачем?". Этот вариант у Кастанеды наступаен, когда он стирает историю и начинает в жизни оперировать принципами критериальности, приоритетности и целесообразности. Самое сложно стереть остаток своего образа в головах знакомых, стереть их ожидания относительно поего прошлого поведения.

Это классический пример показывает разницу работы в классическом стиле и в стиле Agile. В классической разработке мы планируем, строим ожидания, расстраиваемся, что мир меняется, и меняется неадекватно по отношению к нашим ожиданиям. Но если мы изменим модель мышления на стиль с "почеме?" на "зачем?". То всё срастётся и мы будем получать удовольствие, освободившись от энергозатратного предумывания и оправдения стиля "почему".

Кстати, для программиста желания обладать личной истории грозит психологическим заболеванием (или просто пофигистическим отношением к работе). Например программер набедокурил, что-то отъехало. Что мы делаем? Обвиняем - то есть используем историю. Лучший вариант разобраться в истинных причинах и самое главное выработать стратегию поведения, чтобы в следующий раз работать эффективней.

Кто что выбирает?

ЗЫ. На этот счёт есть русская пословица - "кто старое помянет, тому глаз долой".

вторник, 25 ноября 2008 г.

Две новые Study Group! Подключайся!

01

Дек

Две новые Study Group для профессионалов!
г. Москва Пн, 01 Декабря 2008
Livents.ru - Смотри. Участвуй. Живи.

Отзыв о Study-Group

И начну я с себя.

К этой форме повышения своего уровня я шёл давно. Чтобы быть на пике
современных вещей, я шёл в преподаватели. Учил студентов несколько
лет. Но на самом деле учился сам. Каждый раз готовясь к лекциям и
семинарам я обучался. С переездом в Москву стало мало времени и я
начал искать варианты самообучения в команде. Но это превращалось в
подобие семинаров с несколькими заинтересованными людьми и остальной
зевающей массой. Я стал задавать себе вопрос - что нужно сделать,
чтобы участие в семинарах было со 100% эффективностью каждого
участника. Постепенно переквалифицировался в тренера в области
инженерии программного обеспечения. Но год работы там не дали мне
ответы на мои вопросы. Вернулся в разработку. Я продолжал искать.
Прошёл год. Год работы в очень интересной команде. И в какой-то момент
времени моя идея, которую я пытался организовать в далёкие 90-е под
названием "пушкинских чтений" начала выресовываться. Начало появлятся
необходимость такого явления. И я предложил попробовать.

Первые попытки были в нашей команде. Где мы начали читать
последовательно главу за главой разбираться с классическими трудами. И
у нас получилось! Мы увлеклись такими встречами. Начал выресовываться
процесс. После осознания происходящего мне пришла мысль вынести за
рамки нашей команды. И эта практика начала свою жизнь. Результатом
работы появился сайт, группы, начало формироваться сообщество.
Сообщество людей, которые заинтересованные в своём развитии.

После долгих поисков эффективной системы самообучения. Понял, что
нашёл её. Используя книгу как путеводителя мы проникаем в коллективный
опыт группы. Обмениваясь знаниями, точками зрения, идеями, инсайтами и
просто опытом я понял, что лучшей системы придумать невозможно. Каждый
участник находя интересную информацию делится ей с коллегами, а в
замен получает ещё больше идей. Чем вовлеченней каждый, тем насыщеней
поток информации, знания и опыта. 100% вовлеченность каждого
участника. Чем больше отдаёшь, тем больше получаешь.

Спасибо всем участникам сообщества, что поддержали идею стади-групп! Я
очень надеюсь, что данная практика выйдет за границы сообщества.
И ставлю себе глобальную цель - создания самообучающегося мирового
общества, где каждый будет участвовать и создавать в группах по его
интересам, и являтся вкладом в участников групп и вкладом в свое
развитие!

Денис Миллер
Организатор SGC

понедельник, 24 ноября 2008 г.

Секрет успешной архитектуры в Agile

Обсуждая задачи управление проектами в рамках Scrum с ребятами из Agile Study Group я решил обобщить своё видение на проектирование и построение архитектуры в стиле Agile. И почему оно лучше, чем существующие альтернативы.

Записал подкаст в котором показываю, что классическая разработка (через детальный анализ и проработку архитектуры) и agile-подход (раскидывание релиза на верхнем уровне детализации и итеративная проработка детальных требований по мере проведения итераций) принципиально не отличаются в факторе реакции на изменчивость требованй. Тот и другой подход может дать сбой. И мы сможем получить требование, которое на корне подрубит архитектуру приложения .

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

суббота, 22 ноября 2008 г.

Самообучающееся общество Study Group Community

Study Group Community объединение профессионалов, желающих развивать свои познания в области разработки ПО (шаблонов проектирования, рефакторинга и других практик) и других областях (философия, психология, культура и искусство). Мы детально разбираем классические книги. Книга становится не просто источником знания и поводом встретиться в голосовой конференции, где мы обмениваемся точками зрения, идеями и собственным опытом. Получается очень интересно. Подключайтесь!

Самое главное в нашем комьюнити - живое общение. Для этого мы встречаемся в скайпе и вживую. Записи наших диалогов вы можете найта на rpod. А чтобы встречи стали продуктивными и интересными мы серъезно подготавливаемся, а для этого используем google-группу (пример подготовки).

Сайт сообщества: http://study-group.net
Гугл-группа: http://groups.google.com/group/study-groups?hl=ru



Простое объяснение работы
По-русски - это "пушкинские чтения"
1. Читаем каждый главу книги
2. Потом собираемся и обсуждаем в течении часа
Наши встречи похожи на тренировки в спортзале. Только мы прокачиваем другие мышцы Smile
Не страшно, если у вас нет опыта. главное желание учиться и обмениваться опытом.

Аудио и видео объяснения стади-групп:
* http://rutube.ru/tracks/1225529.html
* http://study-group.rpod.ru/86608.html

Аудио-записи прошедших встреч:
* http://study-group.rpod.ru/86685.html - Hello, World! по Agile через TDD, XP и т.п.
* http://study-group.rpod.ru/86680.html - обсуждаем Scrum

пятница, 31 октября 2008 г.

Подкаст для Study-Group


Создан подкаст сообщества самообучающихся профессионалов - http://study-group.rpod.ru

Присоединяйтесь к своему саморазвитию : http://study-group.net

Синхронизация работы, самые мощные заметки, ретроспектива на форуме.

Описание работы групп в вики.

Сейчас действует 4 группы: по шаблонам проектирования, архитектуре, agile и даже философии :)

четверг, 30 октября 2008 г.

Эрих Гамма в Москве (интервью)


Эрих Гамма (Erich Gamma) был в Москве несколько дней. В последние минуты пребывания в Москве мне удалось взять у него интервью.

Запись: http://agile.rpod.ru/83919.html

Эрих Гамма - один из авторов широкоизвестной книги "Шаблоны проектирования", является ведущим инженером Цюрихской лаборатории IBM Rational Software, где он осуществляет техническое руководство проектом Jazz. Эрих был первоначальным руководителем проекта Eclipse. Кроме этого, совместно с Кентом Беком Эрик стоял у истоков JUnit, ставшего сегодня стандартным инструментом тестирования Java-программ, и является соавтором книги об Eclipse.

Интервью:
- понимание Agile и его перспективы
- новая платформа разработки Jazz
- секреты шаблонов проектирования
- советы с чего начать изучение

Ссылки
http://en.wikipedia.org/wiki/Erich_Gamma
http://jazz.net/
http://en.wikipedia.org/wiki/Design_Patterns

вторник, 14 октября 2008 г.

Календарь StudyGroup



Календарь для действующих StudyGroup.

Подробности о StudyGroup:
http://agileconsulting.ru/wiki/Study_Group

На текущий момент объявлен набор в группу по изучению "Шаблонов проектирования".

среда, 1 октября 2008 г.

Зарабатываем деньги по Skype.

Интересный сервис открыл Skype. Теперь не нужно нанимать человека, звать его в гости. А просто взял - набрал номер и получил консультацию по интересующему вопросу. Теперь я знаю, где буду брать уроки репетитора английского языка. Интересно а будут профессиональные разработчики свои консультации давать? Я например нуждаюсь в советах профи в php, а то часами сижу над скриптом и не пойму чего делать. А так заутсорсил проблему человеку - он объяснил и я рад, и человеку приятно.

Каталог услуг:
http://directory.skype.com/ru/skypeprime


И меня тоже посчитали:
http://directory.skype.com/ru/skypeprime/listing/denis_miller

вторник, 30 сентября 2008 г.

Есть ли Agile?

Странно видеть на форумах воинствующих проповедников анти-Agile движения. Выкрики, скажем хором нет Agile вызывают только улыбку. Но напор анти-аджайлистов не убывает и со временем разрастается, подкрепившись страшными аббревиатурами PMI, PMBOK и другими. Но так ли Agile хорошо, чтобы такие вещи ему противопоставлять, а может быть Agile нету?

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

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

И взрыв произошёл. Takeuchi, Hirotaka; Nonaka, Ikujiro (January-February 1986). "The New New Product Development Game" обобщили понятие эффективной команды. Команда тогда эффективна, когда она самоорганизуется. А дальше и наука и практика показали, что эти догадки были верны...

Поэтому осталось дело за малым дать какое-то хорошее определение и уже плясать от него. Командой называют небольшое количество человек (чаще всего пять - семь, реже до 15-20), которые разделяют цели, ценности и общие подходы к реализации совместной деятельности, имеют взаимодополняющие навыки; принимают на себя ответственность за конечные результаты, способны изменять функционально-ролевую соотнесенность (исполнять любые внутригрупповые роли); имеют взаимоопределяющую принад-лежность свою и партнеров к данной общности (группе).

Вот и свойства эффективной командой (доказано формально и научно, а так же подтверждено практическими фактами):
* Неформальная и открытая атмосфера;
* Задача хорошо понята и принимается;
* Члены группы прислушиваются друг к другу;
* В обсуждении принципиальных вопросов участвуют все члены группы;
* В ходе обсуждения поощряется как высказывание идей, так и выражение чувств;
* Конфликты и разногласия между членами группы цен-трируются вокруг идей и методов, а не личностей;
* Группа осознает, что делает, решение основывается на согласии, а не на голосовании большинства

Вопрос к вам: насколько ваша команда эффективна?

Да, хочется добавить. Вернёмся чуток раньше. А ведь уже в 1968 году D.Cartwright и A.Zander говорили, что : "Группа – это объединение индивидов, поддерживающих взаимоотношения, которые делают их взаимозависимыми, и стремящихся к общей цели". Опять вокруг да около :)

Теперь уже понятно. Решение наших проблем найдено. Но как сделать эту команду? Определение есть, признаки эффективной команды тоже написаны. Но крайне не понятно чего делать то? Как организовываться так, чтобы всё заработало. Можно поступить просто отдать на откуп команде. И пусть команда сама изобретёт те практики, которые приведут её к эффективности. Но постойте, команда будет изобретать то, что уже давно изобретено. А давайте всего лишь обратимся к мировому опыту. К мировым коллекциям лучших практик, которые уже проверены тысячами команд и не одним десятилетием. Просто обратимся к Agile...

В Agile дисциплина лучше, чем в Waterfall

Будьте внимательны, когда говорите, что waterfall дисциплинирует. Вотерфол прост и структурирует, но не дисциплинирует. Конечно там «дисциплина» воспринимается как следованию некоторым заранее определённым шагам, но не «дисциплине» в творчестве. А второй вариант «дисциплины» наиболее важен для нас.


Разработка в стиле Agile предполагает, что вы работаете профессионально, дисциплинируете себя в малом, и делаете это из-за дня в день. В вотерфоле нам сказали: в какое время и что делать (подготовка требований, разработка, тестирования) и как и кому передавать результаты своей деятельности. А на вопрос как это делать отнесли к компетенции работника. Agile, здесь я говорю больше об XP, плотно отвечает на вопрос как делать: как писать качественный код (TDD, Simple Design, YAGNI, парное программирование, постоянная сборка), как работать с требованиями (user stories, планирование итераций, приёмочные тесты FIT) и что делать с тестами. Я не хожу часто на левые совещания, я редко обновляю документацию, которую никто не читает (а если нужно, то это делается таской), но всё же моя работа более дисциплинирована чем в прошлой вотерфольной жизни.
Вотерфол демонстрирует «внешнюю» дисциплину – поставка чего-нить или какая-нить процессная церемония. Agile дисциплинирует участников проекта через их поведение и ежедневные активности. Лучше или хуже, но Agile оказывает большее внимание на стиль разработки и личную дисциплину.

Agile становиться Agile’ом, когда мы честно отказываемся от процессных церемоний, которые малоэффективны или не имеют значения, и концентрируем своё внимание на тех вещах, которые помогут повысить качество и продуктивность в нашем проекте.

За основу взят пост: link

пятница, 26 сентября 2008 г.

Хотите знать архитектуру современных сервисов?

Сегодня обнаружил афигенный блог Ивана: http://www.insight-it.ru/highload/

На этом блоге опубликована целая серия статей об архитектуре высоконагруженных систем на примере крупнейших интернет-проектов:

Архитектура Google
Архитектура Flickr
Архитектура Amazon
Архитектура YouTube
Архитектура Friends for Sale
Архитектура Wikimedia
Архитектура Digg
Архитектура LiveJournal
Архитектура Twitter
Архитектура Google Talk
Архитектура 37signals
Архитектура Mailinator
Архитектура LinkedIn

четверг, 25 сентября 2008 г.

Видео отчёт AgileSummer 2008



Видео отчёт о событиях недельной давности в Минске.

http://www.itv.by/search/search/agile#videocontentanchor

вторник, 23 сентября 2008 г.

Обзор литературы (сентябрь 2008)

Мини-обзор литературы, попавшейся мне на глаза и достойной нашего внимания

Growing Object-Oriented Software, Guided by Tests by Steve Freeman

Многообещающее название

The ThoughtWorks Anthology: Essays on Software Technology and Innovation by ThoughtWorks Inc.


Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin


Самая поздняя книга по качеству, смесь советов и smells, покрытых рядом рефакторингов. В общем ответ на моду выработки принципов кодирования уровня Code Style. Рекомендую как и остальные, но ставлю в конец моего списка :)

Самый последний список рекомендаций: http://agileconsulting.ru/wiki/Books

Гради Буч. Объектно-ориентированный анализ и проектирование с примерами приложений (3 издание)

Решил приобрести классику - почитать, полистать. Всё таки уже третье издание, всем советовал, а сам его и не читал не разу.

Выводы. Неплохая книга для начинающих. Солянка на типовые темы. Правда Agile там маловато (ни TDD, ни Refactoring, ни другие подходы не описываются), да и некоторые вещи явно уже устарели (с точки зрения процессов). Но общий подход к моделированию симпатизирует. В общем всё по верхам, но этого достаточно, чтобы начинающий разработчик понял что к чему в профессиональной (коммерческой) разработке.
Как всегда перевод Вильямся хромает.

По структуре книги:

* 200 страниц теории ООП в картинках (очень толковые определения)
* 100 страниц про UML
* 100 страниц по процессу (жизненный цикл, примеры XP & Scrum)
* 200 страниц примеры анализа и проектирования

Ссылка на все рекомендации: http://agileconsulting.ru/wiki/Books

четверг, 18 сентября 2008 г.

Agile wiki

По каким-то причинам не хочет открываться вики на AgileRussia, пришлось продублировать на своём сайте - http://agileconsulting.ru/wiki. Пока дублировал возникло неистовое желание туда чего-нить добавить. Поэтому ожидаю систематизацию существующей информации и пополнение вики новой :)

Подключайтесь :)

В ближайшее время добавлю информацию по командообразованию и ряду интересных практик (Agile Modeling, Emo-Cards, Квота идей и ещё чего-нить)

среда, 17 сентября 2008 г.

Кент Бек. Шаблоны реализации корпоративных приложений (Implementation Patterns)


Я решил, что несколько рассуждений, которые вырываются из моей души после прочтения этой книги, помогут вам избавиться от деревянных символов (рублей) и приобрести за бумажки что-то более важное. Читал я ещё английский вариант, поэтому рекомендую русский. Хотя ещё не ознакомился с качеством переводом.
Не секрет, что руководители и разработчики не против повышения качества кода. Например, руководители, чтобы уменьшить количество денег на дальнейшее развитие, а разработчики, чтобы просто гордиться результатами своей работы. Сколько бы мы не проектировали, не анализировали, не планировали, но последнюю жирную точку ставит разработчик. Он воплощает идеи многих людей в конечный код, конечный продукт. Крайне опрометчиво не замечать важности участия разработчика в процессе создания результата. А вы уверены, что жирная точка будет идеальной? А может быть это будет клякса? Я нет :)
Многие ведущие разработчики знают различные современные технологии, получают огромные зарплаты за свои знания (и это хорошо), но они создают такой код, в котором разобраться в здравом уме невозможно (а это плохо). Требуется погружать себя в медитативное состояние созерцания реализации мыслей творческого человека. Но не забывайте, каждая минута, час, сутки, которые я трачу на созерцание запутанного кода, выходит работодателю в огромные суммы. И простое исправление ошибочки становится грандиозным исследовательским трудом по лабиринтам спагетти кода и неограниченной фантазии автора исходного кода.
Почему мы вынуждены писать сложный код? Почему мы создаем код, цена которого увеличивается с каждой новой строчкой? Почему поддержка кода становится в порядки раз дороже его создания?
Ответ простой. Нас не учили писать качественный код. Мы прячемся за качественные собранные требования или детально проработанную архитектуру. А как же код? Это пустяк и не требует профессионального к себе отношения. Но были попытки многих авторов давать советы в области написания кода. Были попытки сделать уравниловку, предлагая оградить разработчика самопальной или скопированной с прошлого места работы "Конвенцией по наименованию".
Сообщество Agile-разработчиков стремилось решить эту диллему качественного кода. Ведущие эксперты максимально заостряли внимания на лучших практиках в мире программной инженерии. Они первые внедрили и продвигали идеи "Шаблонов проектирования", "Рефакторинга", TDD и др.. Постепенно гуру Agile мира приближались к тому, кто больше всего времени проводит над конечным продуктом. Конечного и настоящего создателя ПО - разработчика.
Книга "Шаблоны реализации корпоративных приложений" (Implementation Patterns) от Кента Бека заполняет самую важную нишу создания программного обеспечения. Теперь Agile покрывает весь цикл разработки и даёт отточенные мировым опытом самые современные практики. Эти практики начинаются с наименования переменной, до управления проектами разработки корпоративных приложений. Замечу, это не серебреная пуля, а всего лишь набор успешных практик и шаблонов, использование которых повышает ваш шанс на успех.
Я считаю, что книга "Шаблоны реализации" произведёт революцию в качестве кодирования. Она должна вытеснить неуклюжих бегемотов под названием "Coding and Naming Convention" (конвенции по наименованию и кодированию). Конечно, бегемотики не исчезнут полностью, но изменят масштабы, превратившись в настольные сувениры. Важность "Шаблонов реализации" в том, что качество кода определяется общим пониманием каждого разработчика единых ценностей и принципов высокопрофессионального кодирования, а не сухими структурными правилами (конвенцией) любителей излишней формализации.
Самый главный секрет создания качественного кода и проекта - это писать программы не для компьютера, а для людей. Это прописная истина, которая около сорока лет не имела реализации. Шаблоны реализации говорят как реализовать эту истину. Эта реализация состоит из трёх уровней: уровня ценностей качественного кода, уровня принципов и уровня паттернов.

Ценности качественного кода, которым мы должны следовать это:
- Коммуникация (communication) - разрабатываемый код должен явно отражать намерение создателя. Этот принцип подчёркивается и в рефакторинге.
- Простота (simplicity) - выбираются самые простые решения и алгоритмы. Не забывайте, мы пишем коммерческий код, где от нас зависит получение прибыли клиентам. И чем быстрее мы будем давать решения, тем довольней будет заказчик. И я гарантирую, что следующий проект он захочет реализовать снова с вашей командой.
- Гибкость (flexibility) - ценность, которая диктует нам выбор такого решения, которое будет самым простым, но в случае его развития наше решение с легкостью эволюционирует в нужную форму.

Эта книга будет достойным пополнением в коллекцию изданий для профессиональных разработчиков. Если вы хотите, чтобы каждый разработчик писал качественный код, то эта книга должна быть куплена из средств выделяемых на развитие персонала. Я работал в крупных компаниях, там всегда обещают, что компания гарантирует профессиональный рост своим работникам, но редко когда компании реализовывали свои обещания. Купив эту книгу каждому разработчику, вы сможете выполнить обещанное, а в отместку разработчики смогут улучшить архитектуру проекта, микродизайна и самое главное качество кода улучшится в порядки.
Материалы книги послужили мне хорошим источником для тренингов по качественному кодированию и сформировали багаж знаний, которым я делюсь во время проведения коуч-сессий.

Денис Миллер
Независимый Agile тренер и коуч.
Microsoft Certified Trainer
http://www.AgileConsulting.ru

Agile - утопия для утомлённых менеджеров

Эффект ореола…и другие восемь иллюзий, вводящие менеджеров в заблуждение
Розенцвейг Ф.



Розенцвейг утверждает, что наиболее популярные идеи в бизнесе ни что иное, как успокоительные банальности, обещающие обеспокоенным менеджерам быстрый успех.
Эти "бизнес-иллюзии": общепринятые и глубоко укоренившиеся убеждения являются результатом "эффекта ореола", или, говоря иначе, нашей потребности приписывать исключительно положительные качества любой компании, достигшей успеха. Вера в эти иллюзии служит менеджерам успокоением, помогающим обосновать решения, а также позволяет значительно упрощать реальность и игнорировать постоянные требования меняющихся технологий, рынков, и потребителей. Книга также разрушает мифы об успехе, построенные на эмпирике, и говорит о вещах, о которых долгое время никто не решался говорить вслух. Автор обращается к здравому смыслу, и к статистике, чтобы критично взглянуть на многочисленные "пяти-" или "четырех-" ступенчатые мифы построения успешной компании. Книга доказывает на примерах, что a) секретного рецепта корпоративного успеха не существует и b) успех – вещь изменчивая.

Отзывы: http://markus.spb.ru/biblioteka/rozencveig.shtml

вторник, 16 сентября 2008 г.

Квота идей

Интересная практика для адаптации существующего процесса, да и просто интересная практика развития команды и проекта обнаружена у Джона Паттерсона, президента компании "Нэшнл кэш реджистер". Он всё время записывал :)

Каждый сотрудник его компании обязан был вести "дневник", куда следовало записывать повседневные события, свои мысли и т.п. - и безжалостно увольнял тех, кто по какой-либо причине этого не делал. Паттерсон так и умер, что-то помечая в записной книжке во время командировки.

Практика "Квота идей"
Установите квоту: в день столько-то новых идей, касающихся вашей работы или проекта, - например, по пять идей в день в течении одной недели.

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

Во время ретроспективы, или раньше, будет замечательный повод поговорить :)

Дополнительно:
1. Майкл Микалко. Игры для разума
2. Технологии шевеления мозгами
3. Советы по генерации идей

понедельник, 15 сентября 2008 г.

Agile English (как учить английский по Agile)

Мини-инструкция по изучению английского языка. Идея родилась вчера и уже мною заиспользована.

1. Слушаю текст, повторяя за диктором (лучше брать лингофонный курс, BBC News или др - там где есть тестовка)

2. Услышал новое слово - выписал на карточку (3x4 см)
- с одной стороны слово
- с другой стороны всё предложение, в котором это слово встретилось (вместо слова в предложении оставляю пробел)

3. Оцениваю в English Points сложность изучения этого слова (см. Story Points у Mike Cohn)

4. Переслушиваю абзац, в котором было обнаружено новое слово.

5. Повторяю над каждым незнакомым словом по тексту.

6. Повторно прослушиваю запись.

В результате на руках у меня будут карточки. В свободно время я их перебираю, вспоминаю слова, контекст рассказа. То что запомнилось откладываю. В конце дня подбиваю суммы выученных слов в English Points и радуюсь результатам рисуя диаграмму Velocity ;)

* Ничего не мешает по этому же принципу учить грамматику. Маркер правило на одной стороне карточки, пример правила на другой.

воскресенье, 7 сентября 2008 г.

Конференция AgileSummer, 19 сентября, Минск

 19-го сентября в Минске состоится знаковое событие в мире гибких методологий - пройдет мега-конференция Agile Summer 2008.

Программа конференции обещает быть интересной. Соберется практически весь гибкометодологичный бомонд :)

  • Agile: больше денег, меньше рисков Денис Петелин
  • Почему менеджеры любят Agile Александр Орлов
  • Почему я не верю в Agile Слава Панкратов
  • Design with agility Дмитрий Губа
  • Динамика развития Agile-команды Денис Миллер
  • Роль менеджера проекта в Agile команде Павел Афанасенко
  • Agile в больших проектах Асхат Уразбаев
  • Психология Agile проекта Юрий Шиляев
  • Использование User Stories в Agile проектах Павел Габриэль
  • Проектирование пользовательских интерфейсов в Agile Геннадий Драгун
  • Continuous Integration для 5000 человек Влад Жидков

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


пятница, 5 сентября 2008 г.

Проектирование по контракту

Интересный подход разработки - проектирование по контракту. Основы подхода заложил Бертрана Мейера. Чтобы быстро разобраться рекомендую классную статью:
http://habrahabr.ru/blogs/crazydev/38612/

Немного философии и сопряжения этой идеи с C#:
http://tagirovarthur.blogspot.com/2007/11/1.html
http://tagirovarthur.blogspot.com/2007/11/2.html

Ну и самого великого маэстро можно читать бесплатно здесь:
http://www.intuit.ru/department/se/oopbases/11/

четверг, 4 сентября 2008 г.

User Group: Изучение качественного кодирования!


Приглашаю на еженедельные встречи желающих укрепить свои знания и навыки в областях: шаблонов проектирования, рефакторинга и других инженерных практик.

Цель встреч: изучение и углубление знаний в области design patterns. Мы практикуемся и обмениваемся опытом в сфере качественного кодирования, шаблонов, рефакторинга и т.п. (см. выше).

Study Group – помогает осилить сложные книги и идеи, может помочь там, где другие проваливаются, и он поможет тогда, когда в вашем окружении нету тех, кто хочет учиться и расти.



Место встречи:
Кафе в центре Москвы,
Каждую среду в 19 часов
Контакты: syspo_mail.ru
ICQ: 20079282
skype: denis_miller
+7 917 518 68 12 (Денис)

среда, 3 сентября 2008 г.

Принцип проектирования: LSP

Фото с одного из наших обсуждений. По старому это называется - собрания по повышению квалификации :)

понедельник, 1 сентября 2008 г.

Как назначать задачи в Agile (Task Volunteering)

Вопрос по назначению задач не даёт спать. В ряде веток Agile задачи назначаются руководителем (см. FDD методологию). Но в основном принято задачи разбирать самими разработчиками. Остаётся вопрос - когда?

Вариант 1 (Tasks ownership). В начале итерации все расхватывают задачи, а потом уже помогают друг другу. Общий пул задач. Каждый, кто освободился, берет себе задачу с наивысшим приоритетом.
+ Ориентация на общее решение (приоритетность задач)
+ Выполняется максимально возможное количество самых приоритеных задач
+ Возрастает мотивация (я выбираю сам согласно приоритету, я являюсь вкладом в командный успех)
+ Командная ответственность
+ При появлении высокоприоритетных задач во время итеррации их легко отправить в разработку
+ Можно "вынашивать" решение: есть время подготовится к решению задачи в свободное от работы время (поразмышлять, почитать лит-ру), а потом поделиться размышлениями с коллегой, взявшим задачу
+ Общее владение кодом
+ Общий стиль программирования
+ Кросс-функционалность
+ Повышение коммуникации

Вариант 2 (Individual Commitments). Общий стэк задач на всю итерацию, и каждый отхватывает самую приоритетную.
+ Ориентация на личные предпочтения
+ Возрастает мотивация (я выбрал задачи сам)
+ Индивидуальная ответственность
+ Специализация разработчиков
+ Можно "вынашивать" решение: есть время подготовится к решению задачи в свободное от работы время (поразмышлять, почитать лит-ру)
- Разные стили программирования
- Незаменимость учатников
- Снижение коммуникации

Я работал в обоих вариантах. Есть свои плюсы и минусы в обоих. Предлагаю послушать эксперта в области оценки в Agile проектах:

Individual Commitments

When assessing the ability to commit to completing a set of new functionality,
some teams prefer to allocate each task to a specific person and
then assess whether each individual is able to commit to that amount of
work. This approach works well and I’ve recommended it in the past
(Cohn 2004). However, I’ve found that by not allocating tasks while planning
the iteration and not doing the personal math needed to make individual
commitments, the team benefits from the creation of a “we’re
all in this together” mindset.

If you do find a need to allocate tasks to individuals while planning an
iteration, the allocations should be considered temporary and subject to
complete change once the iteration is planned and underway.

src:
1. Mike Cohn Agile Extimating and planning
2. Беседа с Ильёй Сербисом :)

вторник, 12 августа 2008 г.

НЛП-Практик

Буквально несколько дней назад у меня завершился тренинг "НЛП-Практик", который я проходил под руководством тренеров из http://institutnlp.ru

Тренинг понравился. Оправдал все мои ожидания. А я ожидал тренировок, тренировок и ещё раз тренировок. Информация тренинга хорошо легла с тренингом "Личностного роста", о котором я писал ранее.

Воодушивишись полезностью этого дела я открыл пару сайтиков. Так что присоединяйтесь:
http://wikinlp.org
http://wikinlp.ru (http://ru.wikinlp.org)

четверг, 24 июля 2008 г.

Google Reader

Вчера я открыл для себя Google Reader. Я всегда мучался в выборе RSS-читалки, а мне тут показали ЭТО.

Что может:
- в созданном профиле на googl'e делаю коллекцию своих rss
- с любого компьютера, где есть браузер логинюсь к google и читаю свои rss
- ...
- Google Gear - оффлайн читалка
- САМОЕ ГЛАВНОЕ: расшаривать rss между друзьями (когда друг отмечает понравившуюся у себя статью и она попадает в rss ко мне - очень клёво!)

а вот так выглядит RSS-реадер от Гугл:



Приглашаю в друзья, чтобы обмениваться самыми лучшими rss статьями :)
http://www.google.ru/reader/shared/10092112600447100350