<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8117773591826780213</id><updated>2011-08-26T12:17:40.568-07:00</updated><category term='философия разработки'/><category term='паттерны проектирования'/><category term='TDD'/><category term='continuous integration'/><category term='scrum'/><category term='методология'/><category term='автоматическая сборка'/><category term='BDD'/><category term='книги'/><category term='lean development'/><category term='собеседование'/><category term='стандарты и шаблоны'/><category term='kanban'/><category term='task board'/><category term='ликбез'/><category term='практика'/><category term='битва за agile'/><category term='DDD'/><category term='антипаттерны'/><category term='lesson learned'/><category term='xp'/><category term='паттерны поведения'/><title type='text'>Записки тимлида</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lean-lead.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lean-lead.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Евгений Воротников</name><uri>http://www.blogger.com/profile/16501223373557911622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://4.bp.blogspot.com/_V2vMA2n5UTI/SshLUf10vSI/AAAAAAAAAIs/nQ8V4jyEpnw/S220/lean-lead.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8117773591826780213.post-1442744676521241853</id><published>2010-11-28T11:27:00.000-08:00</published><updated>2010-11-28T12:40:19.075-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='битва за agile'/><category scheme='http://www.blogger.com/atom/ns#' term='kanban'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>3 правила Kanban</title><content type='html'>Перечитывая русскую версию &lt;a href="http://www.infoq.com/resource/news/2010/01/kanban-scrum-minibook/en/resources/KanbanAndScrum-Russian.pdf"&gt;«Kanban vs Scrum: выжимаем максимум»&lt;/a&gt; обратил внимание, что главное в Kanban’е — правильный ритм.&lt;br /&gt;&lt;br /&gt;И всего 3 правила:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Визуализируйте поток работ — с помощью &lt;a href="http://lean-lead.blogspot.com/2009/10/task-board.html"&gt;taskboard&lt;/a&gt;;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ограничьте количество начатых и незавершенных работ;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Измеряйте время выполнения задачи.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Потому что иногда:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ретроспектива отнимает слишком много времени и сил;&lt;/li&gt;&lt;li&gt;планирование бесполезно и бессмысленно;&lt;/li&gt;&lt;li&gt;на демонстрациях нового функционала смех перемешивается с храпом;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tim.com.ua/2009/06/scrum-na-prostom-yazyke/"&gt;sprint backlog&lt;/a&gt; устаревает в течение дня;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tim.com.ua/2009/06/scrum-na-prostom-yazyke/"&gt;product owner&lt;/a&gt;… хм… его просто нет. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;И вроде оставлено только самое необходимое, без остального можно обойтись. И для хорошей, самоорганизующейся команды профессионалов этого достаточно. И это действительно так. Для идеального мира. Однако большей части из нас приходится жить в реальном мире, где вполне реальные люди с реальными проблемами — невоспроизводимая ошибка, неожиданный сбой в работе сервера, нехватка ресурсов &lt;nobr&gt;и т. п.&lt;/nobr&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Скрам&lt;/span&gt;: у нас есть фокус-фактор, технические дни, ретроспективы...&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Канбан&lt;/span&gt;: стоп, достаточно расслабиться, &lt;span style="font-style: italic;"&gt;разобраться в ситуации и снова включиться в рабочий ритм.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;А что если заказчик хочет всего сразу и, пусть не завтра, а на следующей неделе? Плюс куча мелких недоработок и «&lt;a href="http://www.enter-agile.com/2010/02/agile-in-inequalities.html"&gt;технологических долгов&lt;/a&gt;», которые не успеваешь сделать, заваленный «текучкой». Уф…&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Канбан&lt;/span&gt;: &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Лучше строить, чем ломать&lt;/span&gt;&lt;/span&gt;. Нужна &lt;span style="font-style: italic;"&gt;ретроспектива — включите её в свой ритм&lt;/span&gt;. Например, раз в неделю в понедельник, когда команда приходит в себя после длинных выходных. Забывают, что делали на прошлой неделе? Не вопрос, попробуйте ретроспективу в пятницу. И закажите в офис пиццу. Экспериментируйте.&lt;br /&gt;&lt;br /&gt;Планируете регулярно? Супер, если планы выполняются. Не выполняются — попробуйте &lt;span style="font-style: italic;"&gt;планировать только при появлении новых работ&lt;/span&gt;. А может, дело не в частоте планирования, а в его качестве? Попробуйте увеличить оценку каждой задачи в 1,5 раза или &lt;span style="font-style: italic;"&gt;добавить время на тестирование и релиз для каждой задачи.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Экспериментируйте &lt;/span&gt;— один из главных принципов agile.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8117773591826780213-1442744676521241853?l=lean-lead.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lean-lead.blogspot.com/feeds/1442744676521241853/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://lean-lead.blogspot.com/2010/11/3-kanban.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/1442744676521241853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/1442744676521241853'/><link rel='alternate' type='text/html' href='http://lean-lead.blogspot.com/2010/11/3-kanban.html' title='3 правила Kanban'/><author><name>Евгений Воротников</name><uri>http://www.blogger.com/profile/16501223373557911622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://4.bp.blogspot.com/_V2vMA2n5UTI/SshLUf10vSI/AAAAAAAAAIs/nQ8V4jyEpnw/S220/lean-lead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8117773591826780213.post-7442725400589282326</id><published>2010-07-14T12:25:00.000-07:00</published><updated>2010-07-24T13:57:12.727-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='антипаттерны'/><category scheme='http://www.blogger.com/atom/ns#' term='битва за agile'/><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Почему не пишут юнит-тесты</title><content type='html'>Сейчас почти нет никого, кто не слышал про юнит-тесты. Многие знают, что TDD (test driven development) - это круто, потому что тесты позволяют:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;быстро находить ошибки;&lt;/li&gt;&lt;li&gt;лучше проектировать классы и интерфейсы;&lt;/li&gt;&lt;li&gt;легче вносить изменения;&lt;/li&gt;&lt;li&gt;документировать код в процессе его написания;&lt;/li&gt;&lt;li&gt;проще интегрировать разные слои и компоненты приложения.&lt;/li&gt;&lt;/ul&gt;Тем не менее тесты пишут не все.  А если и пишут, то редко запускают.  Бывает, что и часто запускают,  но небольшое &lt;a href="http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D0%B5_%D0%BA%D0%BE%D0%B4%D0%B0"&gt;покрытие кода.&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Анализ ситуации на примере нескольких проектов, показал, что есть несколько причин такого попустительства:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;лень;&lt;/li&gt;&lt;li&gt;незнание;&lt;/li&gt;&lt;li&gt;недоверие;&lt;/li&gt;&lt;li&gt;бесполезность существующих тестов;&lt;/li&gt;&lt;li&gt;тесты тяжело поддерживать;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;тесты долго выполняются.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Лень.&lt;/span&gt; Она же отсутствие свободного времени. Можно по-разному бороться с этим явлением. Например, одному талантливому, но жутко занятому программисту X повесили рядом с рабочим местом плакат: "X, когда уже напишешь юнит-тесты!". Удивительно, но через некоторое время это повысило покрытие кода с 0 до 20%. Но, как правило, лень скрывает другие, более глубокие причины.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Незнание.&lt;/span&gt; Казалось бы, самый простой способ - отправить человека на тренинг, где ему быстро все популярно объяснят. Увы,  у многих программистов  слово "тренинг" вызывает аллергию.  Действительно, ведь проще никуда не ходить и читать хабрахабр, нонейм и т.д. Однако чтение статей и книг по юнит-тестам может дать эффект, а может и не дать. По опыту, лучше всего TDD обучать на "живых" примерах в рабочей атмосфере. Пару дней (недель или часов, от инерции мышления) - и человек начинает мыслить иначе. Другой вариант - собрать короткую-совещание и провести презентацию (а то и не одну) разных аспектов TDD. &lt;span style="font-style: italic;"&gt;Кстати, этот пост написан материалам именно такой встречи.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Недоверие. &lt;/span&gt;Признаюсь, N лет назад, когда впервые услышал об автоматическом тестировании, я не поверил, что оно работает. И даже те, кто несколько лет пишут автотесты, не всегда верят в такую практику как Test First (вначале тесты, потом код). Другие искренне считают, что их код и так идеальный, и юнит-тесты - лишняя трата времени. Приходится убеждать и напоминать, что "Совершенный код" - всего лишь название книги.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Бесполезность существующих тестов.&lt;/span&gt; Одна из самых опасных вещей. Может быть вызвана тем, что вместо юнит-тестов пишут интеграционные тесты, которые трудно и нудно поддерживать, потому что они вызывают целую кучу непонятно как связанных классов. Напоминаю, что настоящие юнит-тест должен тестировать только один юнит - класс или модуль. Также может быть вызвана "замусоренной" архитектурой - когда невозможно эмулировать вызов зависимых классов и поэтому написать полноценные тесты.&lt;br /&gt;Но главная причинв бесполезности тестов - что их запускают непозволительно редко. И вручную. Тесты должны всегда запускаться автоматически. А если падают - вся команда должна получать оповещения.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Тесты тяжело поддерживать&lt;/span&gt;. Как правило, это связано с тем, что не придерживаются практики Test First, которая заключается и в том, что после появления ошибки вначале её нужно воспроизвести в тестах, а потом чинить. Либо опять же много интеграционных тестов. Может быть вызвано и тем, что не используются вспомогательные тестовые фреймворки (для .Net самые распространённые Rhino Mocks и Moq).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Долго выполняются&lt;/span&gt;.  А значит - редко запускаются. И в итоге запускаются не всеми. Что ведет к тому, что тесты становятся бесполезными. Долго - это больше минуты. Здесь обычно все просто. Юнит-тесты не должны обращаться к базе, файлам или другим сетевым ресурсам. Однако интеграцию тоже нужно тестировать. Хороший вариант известен давно: разнести автотесты на группы - интеграционные и юнит-тесты. Юнит-тесты запускать при коммите или при каждой &lt;a href="http://lean-lead.blogspot.com/2009/10/blog-post_22.html"&gt;автоматической сборке&lt;/a&gt;. Интеграционные - при ночном билде.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ну и в завершение - список &lt;a href="http://habrahabr.ru/blogs/development/43761/"&gt;анти-паттернов юнит-тестирования&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8117773591826780213-7442725400589282326?l=lean-lead.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lean-lead.blogspot.com/feeds/7442725400589282326/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://lean-lead.blogspot.com/2010/07/blog-post_14.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/7442725400589282326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/7442725400589282326'/><link rel='alternate' type='text/html' href='http://lean-lead.blogspot.com/2010/07/blog-post_14.html' title='Почему не пишут юнит-тесты'/><author><name>Евгений Воротников</name><uri>http://www.blogger.com/profile/16501223373557911622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://4.bp.blogspot.com/_V2vMA2n5UTI/SshLUf10vSI/AAAAAAAAAIs/nQ8V4jyEpnw/S220/lean-lead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8117773591826780213.post-1484504629576845369</id><published>2010-07-08T14:51:00.000-07:00</published><updated>2010-07-14T12:01:28.598-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='собеседование'/><category scheme='http://www.blogger.com/atom/ns#' term='паттерны поведения'/><title type='text'>Программисты и кодировщики</title><content type='html'>По роду работы приходится периодически проводить собеседования. Первое, что стараюсь выяснить о кандидате: кто передо мной - программист или кодировщик?&lt;br /&gt;&lt;br /&gt;Формально, &lt;span style="font-weight: bold; font-style: italic;"&gt;программист &lt;/span&gt;- тот, кто способен с нуля написать программу на основе нечетких требований и неясных условий (а иначе бывает редко), а &lt;span style="font-weight: bold; font-style: italic;"&gt;кодировщик &lt;/span&gt;- кому нужно точно ставить задачу на отдельные модули системы.&lt;br /&gt;&lt;br /&gt;Или, перефразируя один фильм, кодировщик делает то, что его просят, а программист - что нужно сделать на самом деле.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Для определения, who is who, достаточно попросить решить простую алгоритмическую задачу. Например, набросать на произвольном языке решение квадратных уравнений.&lt;br /&gt;&lt;br /&gt;Программист обязательно спросит про контекст использования (не важно, в самом начале или в процессе) - в рамках чего применять, какие возможны граничные значения и т.п.&lt;br /&gt;&lt;br /&gt;В коде испытуемого следует обращать внимание на соблюдение простых правил - как и почему выбираются типы данных и особенно на то, как обрабатываются исключения.&lt;br /&gt;&lt;br /&gt;Вот несколько градаций уровня "мастерства":&lt;br /&gt;&lt;ul&gt;&lt;li&gt;аргументы (переменные квадратного уравнения) принимаются как целые положительные числа (типа int);&lt;br /&gt;&lt;/li&gt;&lt;li&gt;допускается деление на ноль при вычислении дискриминанта;&lt;/li&gt;&lt;li&gt;исключение обрабатывается возвращением "магического" числа;&lt;/li&gt;&lt;li&gt;исключение обрабатывается, но при этом не сохраняется информация почему оно произошло;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;исключение обрабатывается структурно (на каждый тип ошибки - свой тип исключения), сохраняется информация о значимых аргументах и т.п...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8117773591826780213-1484504629576845369?l=lean-lead.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lean-lead.blogspot.com/feeds/1484504629576845369/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://lean-lead.blogspot.com/2010/07/blog-post.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/1484504629576845369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/1484504629576845369'/><link rel='alternate' type='text/html' href='http://lean-lead.blogspot.com/2010/07/blog-post.html' title='Программисты и кодировщики'/><author><name>Евгений Воротников</name><uri>http://www.blogger.com/profile/16501223373557911622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://4.bp.blogspot.com/_V2vMA2n5UTI/SshLUf10vSI/AAAAAAAAAIs/nQ8V4jyEpnw/S220/lean-lead.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8117773591826780213.post-7392085211487103705</id><published>2010-02-06T01:52:00.000-08:00</published><updated>2010-02-08T04:30:27.761-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='стандарты и шаблоны'/><category scheme='http://www.blogger.com/atom/ns#' term='lean development'/><title type='text'>Стандарты кодирования, C#</title><content type='html'>Обычно код читается гораздо чаще, чем пишется. И чем длительнее проект, тем больше выигрыша от его читабельности и понятности. Чтобы повысить эти характеристики, принято использовать стандарты кодирования.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Примеры стандартов для С#&lt;/span&gt;&lt;br /&gt;Наборов таких стандартов очень много — достаточно хорошие есть на &lt;a href="http://www.rsdn.ru/article/mag/200401/codestyle.XML"&gt;RSDN&lt;/a&gt;, другие примеры можно посмотреть &lt;a href="http://xprogramming.com.ua/codeconvcsharp.php"&gt;здесь&lt;/a&gt; или &lt;a href="http://www.codeproject.com/KB/cs/CSharpCodingStandards.aspx"&gt;здесь&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Внедрение&lt;/span&gt;&lt;br /&gt;Хорошие стандарты содержат только общие рекомендации и в каждой компании или даже в каждом проекте дорабатываются и дополняются в зависимости от специфики.&lt;br /&gt;&lt;br /&gt;Но одного создания документа со стандартами не достаточно. Как правило, программисты их читают, с чем-то соглашаются, с чем-то нет — и продолжают делать все по-старому.&lt;br /&gt;&lt;br /&gt;Ситуацию можно изменить как минимум &lt;nobr&gt;2-мя&lt;/nobr&gt; способами:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Регулярные &lt;a href="http://ru.wikipedia.org/wiki/Code_review"&gt;code review&lt;/a&gt; («инспекции кода») — в этом случае кто-то должен взять ответственность на себя и постоянно «держать руку на пульсе». Потому что в глазах программиста разработка обычно выглядит &lt;a href="http://img11.nnm.ru/6/2/7/1/7/2c5d954b8432a2a3fbb383fd93c.jpg"&gt;так&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Автоматическая проверка с помощью статических анализаторов кода.&lt;/li&gt;&lt;/ol&gt;Конечно, лучше всего сочетать эти 2 подхода.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Проверка стандартов кодирования C#&lt;/span&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Для C# существует достаточно много инструментов:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;FxCop &lt;/span&gt;— встроенный в Visual Studio анализатор кода на основе правил от Microsoft. Из недостатков — полная невозможность хоть какой-то настройки. Использовать as is сложно — потому что некоторые правила Microsoft вызывают недоумение. Кроме того, внедрить сразу все стандарты в уже действующий момент потребует много времени. Которого обычно не хватает.&lt;/li&gt;&lt;li&gt;&lt;a href="http://ru.wikipedia.org/wiki/ReSharper"&gt;Resharper&lt;/a&gt; — пожалуй, самый популярный статический анализатор кода. Уже не очень понимаю, как без него вообще можно писать на C# :) К сожалению, сам по себе никак не интегрирован со средствами компиляции.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.nichesoftware.co.nz/content/stylecop-cmd"&gt;StyleCop&lt;/a&gt; — ещё один бесплатный продукт Microsoft. Вот он-то уже позволяет проверять почти полноценно — настройка интеграции с MSBuild описана &lt;a href="http://blogs.msdn.com/sourceanalysis/pages/source-analysis-msbuild-integration.aspx"&gt;здесь&lt;/a&gt;. Есть и недостатки — правила можно настраивать, но, к сожалению, только отключать. Хотя для почти полного счастья есть &lt;a href="http://www.codeplex.com/StyleCopForReSharper"&gt;плагин&lt;/a&gt;, который позволяет интегрировать Resharper и StyleCop.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.softkey.info/reviews/review6328.php"&gt;CodeIt.Right&lt;/a&gt; — этот инструмент позволяет почти все. Но он платный, поэтому попробовать на практике пока не довелось. &lt;/li&gt;&lt;/ol&gt;Впрочем, до многих других &lt;a href="http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis"&gt;бесплатных и платных инструментов&lt;/a&gt; руки тоже пока не дошли.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Опыт использования&lt;/span&gt;&lt;br /&gt;Одно из правил &lt;a href="http://en.wikipedia.org/wiki/Lean_software_development"&gt;lean development&lt;/a&gt; («бережливой разработки») — в случае наличия проблем останавливать процесс. Это необходимо, чтобы разобраться с ситуацией и избежать повторения ошибок в будущем. Именно поэтому я за те инструменты, которые позволяют проверять стандарты автоматически — на этапе компиляции. А ещё лучше — на этапе написания кода :)&lt;br /&gt;&lt;br /&gt;Сейчас я использую связку Resharper при кодировании + StyleCop при компиляции. Пока хватает, но хотелось бы возможности создавать и настраивать свои правила. К примеру, по нашим стандартам необходимо, чтобы имя private («закрытого») поля в классе начиналось с символа «_» (подчеркивания), а по стандартом Microsoft это запрещено.&lt;br /&gt;&lt;br /&gt;При первой проверке проекта (в терминах Visual Studio), который существует уже полтора года (Resharper использовался с самого начала), выдалось большее 1000 предупреждений. Исправить их сразу было нереально, поэтому после вдумчивого анализа часть правил была отключена. Число предупреждений снизилось до 600. С этим уже можно было работать — пару вечеров, и проект соответствует стандартам.&lt;br /&gt;&lt;br /&gt;После этого была настроена проверка стандартов при компиляции. И настала очередь других проектов :)&lt;br /&gt;&lt;br /&gt;Ещё один вариант внедрения — подключать по одному-двум правилам и сразу настроить проверку при компиляции. В этом случае сам процесс перехода на новые стандарты будет менее болезнен (не самое благодарное дело — просто форматировать код). Но, поскольку будет растянут во времени, потребует большей силы воли.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8117773591826780213-7392085211487103705?l=lean-lead.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lean-lead.blogspot.com/feeds/7392085211487103705/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://lean-lead.blogspot.com/2010/02/c.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/7392085211487103705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/7392085211487103705'/><link rel='alternate' type='text/html' href='http://lean-lead.blogspot.com/2010/02/c.html' title='Стандарты кодирования, C#'/><author><name>Евгений Воротников</name><uri>http://www.blogger.com/profile/16501223373557911622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://4.bp.blogspot.com/_V2vMA2n5UTI/SshLUf10vSI/AAAAAAAAAIs/nQ8V4jyEpnw/S220/lean-lead.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8117773591826780213.post-4217140825939454599</id><published>2010-01-30T10:28:00.000-08:00</published><updated>2010-02-09T14:35:05.720-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='стандарты и шаблоны'/><title type='text'>Стандарты и шаблоны, чеклист</title><content type='html'>Не секрет, что использование шаблонов для решения стандартных операций – один из лучших способов повысить эффективность разработки ПО.&lt;br /&gt;Набор таких операций достаточно сильно зависит от специфики компании и проекта. Но, как правило, включает в себя:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;составление ТЗ;&lt;/li&gt;&lt;li&gt;оценка объёма работ и планирование;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F"&gt;шаблоны проектирования&lt;/a&gt; и &lt;a href="http://lean-lead.blogspot.com/2009/10/blog-post_23.html"&gt;драйверы разработки&lt;/a&gt;;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;стандарты кодирования (автоматическая проверка с помощью статических анализаторов кода);&lt;/li&gt;&lt;li&gt;контроль хода работ – &lt;a href="http://lean-lead.blogspot.com/2009/10/task-board.html"&gt;taskboard (доска задач)&lt;/a&gt;, планы в MS Project или учет задач в JIRA;&lt;/li&gt;&lt;li&gt;тестирование – ручное и автоматическое (функциональное, модульное, динамические анализаторы кода);&lt;/li&gt;&lt;li&gt;обработка ошибок и запросов от пользователей или заказчика;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://lean-lead.blogspot.com/2009/10/blog-post_22.html"&gt;сборка проекта&lt;/a&gt; и формирование релиза – компоненты, настройки системы и скрипты для обновления БД;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;deployment (развертывание системы на «рабочих» серверах);&lt;/li&gt;&lt;li&gt;мониторинг состояния системы – блокировки в БД, загрузка процессора, оповещения об ошибках и т.п.;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;В идеальном проекте все эти операции стандартизированы. Это означает, что не нужно каждый раз «придумывать велосипед» – всегда можно воспользоваться уже существующим опытом. Но стандарты не стоят на месте – меняется ситуация, меняются подходы.&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Проект «с нуля» – хороший шанс улучшить свои методики, кардинально их пересмотрев.&lt;/li&gt;&lt;/ul&gt;Желательно чтобы все шаблоны были описаны в базе знаний и доступны «по паре кликов». Но без излишнего фанатизма: если описание большое и сложное – пользоваться им никто не будет. Иногда достаточно просто ссылки на билдсервер или багтрекер – где можно посмотреть все настройки.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Лучший пример паттернов – ссылки на репозиторий с реально работающим кодом.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8117773591826780213-4217140825939454599?l=lean-lead.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lean-lead.blogspot.com/feeds/4217140825939454599/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://lean-lead.blogspot.com/2010/01/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/4217140825939454599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/4217140825939454599'/><link rel='alternate' type='text/html' href='http://lean-lead.blogspot.com/2010/01/blog-post.html' title='Стандарты и шаблоны, чеклист'/><author><name>Евгений Воротников</name><uri>http://www.blogger.com/profile/16501223373557911622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://4.bp.blogspot.com/_V2vMA2n5UTI/SshLUf10vSI/AAAAAAAAAIs/nQ8V4jyEpnw/S220/lean-lead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8117773591826780213.post-6798855700583106756</id><published>2009-10-29T15:06:00.000-07:00</published><updated>2009-11-10T14:06:51.265-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='битва за agile'/><category scheme='http://www.blogger.com/atom/ns#' term='философия разработки'/><title type='text'>Манифест гибкой разработки</title><content type='html'>"Разрабатывая программное обеспечение и помогая другим делать это, мы стараемся найти наилучшие подходы к разработке. В процессе этой работы мы пришли к тому, что:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Личности и их взаимодействия &lt;span style="font-style: italic;"&gt;важнее&lt;/span&gt;, чем процессы и инструменты. &lt;/li&gt;&lt;li&gt; Работоспособное программное обеспечение &lt;span style="font-style: italic;"&gt;важнее&lt;/span&gt;, чем обширная документация. &lt;/li&gt;&lt;li&gt; Сотрудничество с заказчиком &lt;span style="font-style: italic;"&gt;важнее&lt;/span&gt;, чем переговоры по контрактам. &lt;/li&gt;&lt;li&gt; Умение реагировать на изменения &lt;span style="font-style: italic;"&gt;важнее&lt;/span&gt;, чем следование плану.&lt;/li&gt;&lt;/ul&gt;Таким образом, хотя и существует ценность в понятиях, стоящих в правой части этих сравнений, мы ценим понятия, стоящие в левой части, больше. "&lt;br /&gt;&lt;br /&gt;Полностью про манифест и  12 принципов agile прочитать можно &lt;a href="http://agileguru.org/AgileWiki/%D0%9C%D0%B0%D0%BD%D0%B8%D1%84%D0%B5%D1%81%D1%82_%D0%B3%D0%B8%D0%B1%D0%BA%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8"&gt;здесь&lt;/a&gt; (перевод от авторов &lt;a href="http://agileguru.org/"&gt;agileguru.org&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8117773591826780213-6798855700583106756?l=lean-lead.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lean-lead.blogspot.com/feeds/6798855700583106756/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://lean-lead.blogspot.com/2009/10/blog-post_29.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/6798855700583106756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/6798855700583106756'/><link rel='alternate' type='text/html' href='http://lean-lead.blogspot.com/2009/10/blog-post_29.html' title='Манифест гибкой разработки'/><author><name>Евгений Воротников</name><uri>http://www.blogger.com/profile/16501223373557911622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://4.bp.blogspot.com/_V2vMA2n5UTI/SshLUf10vSI/AAAAAAAAAIs/nQ8V4jyEpnw/S220/lean-lead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8117773591826780213.post-5740410593036843581</id><published>2009-10-25T14:07:00.000-07:00</published><updated>2009-10-26T15:08:03.775-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='битва за agile'/><category scheme='http://www.blogger.com/atom/ns#' term='BDD'/><category scheme='http://www.blogger.com/atom/ns#' term='DDD'/><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='паттерны проектирования'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Драйверы разработки, agile</title><content type='html'>Когда-то давно я считал, что программисты больше всего времени тратят на написание кода. Сидят целыми днями и ночами и строчат. К сожалению  или, к счастью, это практически всегда не так. Ключевое умение любого хорошего программиста - не слепая печать (хотя кто не пытался ею овладеть), а умение думать.&lt;br /&gt;&lt;br /&gt;Особенно много приходится думать в начале проекта, когда непонятно что и как делать. Что бы этот процесс занимал меньше времени, были придуманы драйверы разработки.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Драйвер разработки&lt;/span&gt; - это набор шаблонов и паттернов, которые четко (или не очень) описывают последовательность действий, необходимые для полной реализации продукта.&lt;br /&gt;&lt;br /&gt;Таких драйверов может быть много, они как и обычные программные драйверы могут конфликтовать, а могут использовать одновременно. Ниже описаны самые распространенные в мире agile, которые отлично сочетаются друг с другом - DDD, TDD и BDD.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Domain Driven Design (DDD) &lt;/span&gt;&lt;br /&gt;Подход к проектированию, которые говорит как и в каком порядке нужно проектировать структуру класов приложения. Основная идея - что проектирование должно базироваться на объектах, определяющую предметную область (domain), которые содержат в себе не только свойства, но и бизнес-логику. А доступ к данным и отображение - вещи второстепенные.&lt;br /&gt;&lt;/span&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Шаблоны описаны &lt;a href="http://en.wikipedia.org/wiki/Domain-driven_design"&gt;здесь&lt;/a&gt;, отлично прокомментировано &lt;a href="http://merle-amber.blogspot.com/2009/01/domain-driven-design.html"&gt;здесь&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Test Driven Development (TDD)&lt;/span&gt;&lt;br /&gt;Разработка, управляемая тестирования. Вначале пишем &lt;a href="http://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"&gt;юнит-тесты&lt;/a&gt; (или модульные тесты), потом реализацию кода для того, чтобы эти тесты проходили.&lt;br /&gt;&lt;br /&gt;Информации очень много, примерно столько же сколько и спорных мнений по вопросу.&lt;br /&gt;&lt;a href="http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"&gt;Здесь&lt;/a&gt;, &lt;a href="http://blogs.gotdotnet.ru/personal/ulu/PermaLink.aspx?guid=22f92562-287e-4220-a57a-239d1d0fae53"&gt;здесь&lt;/a&gt;, &lt;a href="http://wiki.agiledev.ru/doku.php?id=tdd:intro"&gt;здесь&lt;/a&gt; и немного критики &lt;a href="http://bishop-it.ru/2009/02/%D1%8E%D0%BD%D0%B8%D1%82-%D1%82%D0%B5%D1%81%D1%82%D1%8B-%D0%B8-tdd/"&gt;здесь&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="fullpost"&gt;&lt;span style="font-weight: bold;"&gt;Behavior Driven Development (BDD)&lt;/span&gt;&lt;br /&gt;Разработка, основанная на функционировании. Дальнейшая эволюция TDD.&lt;br /&gt;Предлагается не просто писать какие-то тесты на какие-то методы, а писать тесты, которые описывают то, что должен делать класс. А потом, уже основываясь на полученных тестах - проектируется интерфейс класса и непосредственно пишется код.&lt;br /&gt;&lt;br /&gt;Информация есть &lt;a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development"&gt;здесь&lt;/a&gt;, &lt;a href="http://www.ibm.com/developerworks/ru/library/j-cq09187/index.html"&gt;здесь &lt;/a&gt;и  &lt;a href="http://progg.ru/Tags/BDD"&gt;здесь&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;span style="font-weight: bold;"&gt;Test Plan Driven Development (TPDD)&lt;/span&gt;&lt;br /&gt;Разработка, управляемая историями тестирования. Драйвер для улучшения взаимодействия с QA-специалистами. Тест-планы служат исходной информацией о задаче для разработчика. Первая версия пишется сразу после планирования итерации, затем тест-планы уточняются разработчиками перед передачей задачи в тестирование.  Если изменения в требованиях - то они сразу вносятся в тест-планы.&lt;br /&gt;&lt;br /&gt;Это уже изобретение нашей команды - в других местах описания не встречал. Попробуем, проверим, насколько оно приживется.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8117773591826780213-5740410593036843581?l=lean-lead.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lean-lead.blogspot.com/feeds/5740410593036843581/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://lean-lead.blogspot.com/2009/10/blog-post_23.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/5740410593036843581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/5740410593036843581'/><link rel='alternate' type='text/html' href='http://lean-lead.blogspot.com/2009/10/blog-post_23.html' title='Драйверы разработки, agile'/><author><name>Евгений Воротников</name><uri>http://www.blogger.com/profile/16501223373557911622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://4.bp.blogspot.com/_V2vMA2n5UTI/SshLUf10vSI/AAAAAAAAAIs/nQ8V4jyEpnw/S220/lean-lead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8117773591826780213.post-937862519459524674</id><published>2009-10-22T08:28:00.000-07:00</published><updated>2009-10-24T12:12:22.486-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='автоматическая сборка'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Автоматическая сборка проекта</title><content type='html'>Автоматическая сборка проекта - один из важнейших инструментов &lt;a href="http://lib.custis.ru/index.php/Continuous_Integration"&gt;непрерывной интеграции&lt;/a&gt; (советую почитать по ссылке). Позволяет существенно сэкономить время и нервы, сняв с релиз-менеджера много рутины.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Лучшие на мой взгляд сервера интеграции:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.jetbrains.com/teamcity/"&gt;TeamCity&lt;/a&gt; (поддерживает Java и .Net)&lt;/li&gt;&lt;li&gt;&lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt; (реализация на Java, порты для .Net и Ruby)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/ru/edu/j-mavenv2/"&gt;Maven&lt;/a&gt; (только Java)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Сборка проекта может запуститься по&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;коммиту - факту попадания изменения в репозиторий;&lt;/li&gt;&lt;li&gt;расписанию - наиболее известны т.н. "ночные сборки";&lt;br /&gt;&lt;/li&gt;&lt;li&gt;нажатию на кнопку "Поехали" - если нужно сделать срочно.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Не все билды одинаково полезны,  поэтому в проекте &lt;span style="font-weight: bold;"&gt;рекомендуется иметь несколько типов билдов&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;полный билд&lt;/span&gt; - с полной валидацией, пересборкой всех компонент и запуском авто- и юнит-тестов;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;легкий билд&lt;/span&gt; - просто обновить компоненты из репозитория, полезна при необходимости срочно посмотреть мелкие изменения;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;билд дистрибутива&lt;/span&gt; - полный билд + сборка инсталлятора или упаковка компонент в архив и складирование в надежном месте.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8117773591826780213-937862519459524674?l=lean-lead.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lean-lead.blogspot.com/feeds/937862519459524674/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://lean-lead.blogspot.com/2009/10/blog-post_22.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/937862519459524674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/937862519459524674'/><link rel='alternate' type='text/html' href='http://lean-lead.blogspot.com/2009/10/blog-post_22.html' title='Автоматическая сборка проекта'/><author><name>Евгений Воротников</name><uri>http://www.blogger.com/profile/16501223373557911622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://4.bp.blogspot.com/_V2vMA2n5UTI/SshLUf10vSI/AAAAAAAAAIs/nQ8V4jyEpnw/S220/lean-lead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8117773591826780213.post-8581027616499088997</id><published>2009-10-22T01:02:00.000-07:00</published><updated>2009-10-21T14:07:24.960-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='битва за agile'/><category scheme='http://www.blogger.com/atom/ns#' term='lesson learned'/><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='практика'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Ретроспектива</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Ретроспектива –&lt;/span&gt; один из видов командной активности в гибких методологиях (XP, Scrum). &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;Задача ретроспективы&lt;/span&gt; - пересмотр ближайшего отрезка времени работы команды с целью улучшения работы этой же команды в этом же проекте.&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;Как правило&lt;span style="font-weight: bold;"&gt;, &lt;/span&gt;ретроспективу полезно делать после выпуска версии, когда закончилась вся "горячка". Если, конечно, версии у вас выходят не каждый день. В этом случае желательно приурочить ретроспективу к  какому-нибудь значительному событию - и лучше проводить сразу после него.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Один из алгоритмов проведения &lt;/span&gt;выглядит так&lt;span style="font-weight: bold;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;1) Вся команда собирается в переговорке - реальной или виртуальной. Вся - значит вся. Это командная практика. Если собрать команду не получается - см. ограничение практики ниже.&lt;br /&gt;&lt;br /&gt;2) Если не первая ретроспектива, фиксируем без оценок и выявления причин.:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;какие улучшения удалось внедрить;&lt;/li&gt;&lt;li&gt;какие не удалось;&lt;/li&gt;&lt;li&gt;что утратили.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;3) По очереди или в произвольном порядке фиксируется то, что понравилось за рассматриваемый период. Нужно фиксировать каждую значимую вещь - техническое улучшение, покупку нового стола, новый подход к работе с Заказчиком, удачное применение парного программирования. Фиксировать лучше всего на стикере, но можно и сразу в электронном виде (+).&lt;br /&gt;&lt;br /&gt;4) Фиксируем то, что не понравилось (-).&lt;br /&gt;&lt;br /&gt;5) Генерируем новые идеи по улучшениям - технические и как улучшить процесс, чтобы добиваться лучшего результата. (!).&lt;br /&gt;&lt;br /&gt;6) Голосуем за пункты из 3-5. Каждый имеет несколько пунктов голоса на (+), (-) и (!).&lt;br /&gt;Рекомендуется по 3, но все зависит от размеров команды и количества оцениваемых пунктов.&lt;br /&gt;&lt;br /&gt;7) Самый интересный момент. Определяем, что будем улучшать на следующем отрезке:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; то, что особенно понравилось (по результатам голосования) - оставляем, обязательно это повторим;&lt;/li&gt;&lt;li&gt;то, что особенно не понравилось - решаем, что с этим делать;&lt;/li&gt;&lt;li&gt;решаем, как будем внедрять особенно понравившиеся новые идеи.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;8) Фиксируем все одобренные и выбранные командой улучшения&lt;span style="font-weight: bold;"&gt;.&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;Можно их делить на процессные и технические, или как-то ещё. А можно просто&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;хранить одним списком.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;Ограничения практики: &lt;/span&gt;&lt;a href="http://www.scrum.com.ua/2008/02/retrospections-formality-or-usefulness.html"&gt;здесь&lt;/a&gt;.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Доп. инфа&lt;/span&gt;:&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span&gt;&lt;a href="http://www.agile.by/2009/05/26/retrospektiva.html"&gt;здесь&lt;/a&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8117773591826780213-8581027616499088997?l=lean-lead.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lean-lead.blogspot.com/feeds/8581027616499088997/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://lean-lead.blogspot.com/2009/10/blog-post_13.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/8581027616499088997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/8581027616499088997'/><link rel='alternate' type='text/html' href='http://lean-lead.blogspot.com/2009/10/blog-post_13.html' title='Ретроспектива'/><author><name>Евгений Воротников</name><uri>http://www.blogger.com/profile/16501223373557911622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://4.bp.blogspot.com/_V2vMA2n5UTI/SshLUf10vSI/AAAAAAAAAIs/nQ8V4jyEpnw/S220/lean-lead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8117773591826780213.post-2002213350559651315</id><published>2009-10-21T00:00:00.000-07:00</published><updated>2010-11-29T12:53:50.268-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ликбез'/><category scheme='http://www.blogger.com/atom/ns#' term='книги'/><category scheme='http://www.blogger.com/atom/ns#' term='методология'/><title type='text'>Что почитать прямо сейчас</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Рекомендуемые книги&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.webkomora.com.ua/ru/articles/web/management/man-month.html"&gt;Фредерик Брукс «Мифический &lt;nobr&gt;человеко-месяц&lt;/nobr&gt;»&lt;/a&gt;, 1975 г.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://bookz.ru/authors/kent-bek/ekstrema_365.html"&gt;Кент Бэк «Экстремальное программирование»&lt;/a&gt;, 2002 г.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Кент Бэк, Мартин Фаулер «Экстремальное программирование. Планирование», 2003 г. В инете не нашел, можно только &lt;a href="http://www.ozon.ru/context/detail/id/1332101/"&gt;купить&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.fictionbook.ru/author/yiordon_yedvard/put_kamikadze_smertelniyyi_marsh/"&gt;Эдвард Йордон «Путь Камикадзе»&lt;/a&gt;, 2005 г.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.twirpx.com/file/13127/"&gt;Мартин Фаулер «Рефакторинг»&lt;/a&gt;, 2005 г.&lt;/li&gt;&lt;li&gt;Хенрик Книберг «Scrum и XP: Записки с передовой». Скачать можно &lt;a href="http://scrum.org.ua/wp-content/uploads/2008/12/scrum_xp-from-the-trenches-rus-final.pdf"&gt;здесь&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Хенрик Книберг и Маттиас Скарин «Kanban vs Scrum: выжимаем максимум». Скачать можно &lt;a href="http://www.infoq.com/resource/news/2010/01/kanban-scrum-minibook/en/resources/KanbanAndScrum-Russian.pdf"&gt;здесь&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Бибичев Андрей «Практика внедения Scrum: трудности и пути их преодоления». Скачать можно &lt;a href="http://agilerussia.ru/files/bibitchev-article.pdf"&gt;здесь&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Конечно, в интернете много других хороших подборок. Например, &lt;a href="http://kibi.ru/xp/xp"&gt;здесь&lt;/a&gt;. Но это мои личные предпочтения:)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Статьи&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Статьи на &lt;a href="http://agilerussia.ru/index.php?option=com_content&amp;amp;view=category&amp;amp;layout=blog&amp;amp;id=16&amp;amp;Itemid=29"&gt;AgileRussia&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Один из лучших авторов статей по философии программирования — &lt;a href="http://russian.joelonsoftware.com/"&gt;Джоэл Спольски&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Статьи по проектированию интерфейсов и usability на &lt;a href="http://fresh.gui.ru/"&gt;fresh.gui.ru&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://lib.custis.ru/index.php/Continuous_Integration"&gt;Про непрерывную интеграцию&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Манифест гибкой разработки на &lt;a href="http://agileguru.org/AgileWiki/%D0%9C%D0%B0%D0%BD%D0%B8%D1%84%D0%B5%D1%81%D1%82_%D0%B3%D0%B8%D0%B1%D0%BA%D0%BE%D0%B9_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8"&gt;agileguru.org&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8117773591826780213-2002213350559651315?l=lean-lead.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lean-lead.blogspot.com/feeds/2002213350559651315/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://lean-lead.blogspot.com/2009/10/blog-post_20.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/2002213350559651315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/2002213350559651315'/><link rel='alternate' type='text/html' href='http://lean-lead.blogspot.com/2009/10/blog-post_20.html' title='Что почитать прямо сейчас'/><author><name>Евгений Воротников</name><uri>http://www.blogger.com/profile/16501223373557911622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://4.bp.blogspot.com/_V2vMA2n5UTI/SshLUf10vSI/AAAAAAAAAIs/nQ8V4jyEpnw/S220/lean-lead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8117773591826780213.post-5778825001222101962</id><published>2009-10-11T02:00:00.000-07:00</published><updated>2010-08-03T06:55:20.335-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='битва за agile'/><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='книги'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Книга "SCRUM и XP: заметки с передовой"</title><content type='html'>Одна из лучших книг по гибким методологиям разработки. Причем на русском языке. Скачать можно &lt;a href="http://scrum.org.ua/wp-content/uploads/2008/12/scrum_xp-from-the-trenches-rus-final.pdf"&gt;здесь&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8117773591826780213-5778825001222101962?l=lean-lead.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lean-lead.blogspot.com/feeds/5778825001222101962/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://lean-lead.blogspot.com/2009/10/scrum-xp.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/5778825001222101962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/5778825001222101962'/><link rel='alternate' type='text/html' href='http://lean-lead.blogspot.com/2009/10/scrum-xp.html' title='Книга &quot;SCRUM и XP: заметки с передовой&quot;'/><author><name>Евгений Воротников</name><uri>http://www.blogger.com/profile/16501223373557911622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://4.bp.blogspot.com/_V2vMA2n5UTI/SshLUf10vSI/AAAAAAAAAIs/nQ8V4jyEpnw/S220/lean-lead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8117773591826780213.post-9119849790607440397</id><published>2009-10-03T00:45:00.000-07:00</published><updated>2010-11-29T12:50:45.828-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='битва за agile'/><category scheme='http://www.blogger.com/atom/ns#' term='task board'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Task Board или как понять: что происходит?</title><content type='html'>&lt;p align="left"&gt;Люблю наглядность и хорошие статьи. Например вот эту от &lt;span class="small"&gt;&lt;a href="http://agilerussia.ru/index.php?option=com_content&amp;amp;view=article&amp;amp;id=50:-gile-taskboard&amp;amp;catid=16:2009-02-17-15-15-09&amp;amp;Itemid=29"&gt;Никиты Филиппова&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p align="left"&gt;"Одним из лучших способов достижения прозрачности и визуализации процесса разработки - эффективная работа через Task Board.&lt;/p&gt; &lt;strong&gt;Какие задачи выполняет Task Board&lt;/strong&gt;: &lt;ol&gt;&lt;li&gt;Отражает список задач, поставленных на недельную итерацию (Sprint), по которым Product Owner может оценивать успехи и корректировать приоритеты.&lt;/li&gt;&lt;li&gt;Позволяет оперативно взаимодействовать с командой и вовремя прояснять спорные моменты&lt;/li&gt;&lt;li&gt;Позволяет сделать прозрачным процесс для заказчика:&lt;/li&gt;&lt;/ol&gt;"Что то вы медленно все делаете... Вы вообще что-нибудь делаете?"    "А где мои проекты?"  На эти и многие другие вопросы помогает ответить хорошо организованный Task Board.&lt;br /&gt;&lt;br /&gt;Итак, от теории к практике  и в обратном порядке."&lt;br /&gt;&lt;br /&gt;&lt;a href="http://agilerussia.ru/index.php?option=com_content&amp;amp;view=article&amp;amp;id=50:-gile-taskboard&amp;amp;catid=16:2009-02-17-15-15-09&amp;amp;Itemid=29"&gt;Продолжение на agilerussia.ru...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8117773591826780213-9119849790607440397?l=lean-lead.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lean-lead.blogspot.com/feeds/9119849790607440397/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://lean-lead.blogspot.com/2009/10/task-board.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/9119849790607440397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/9119849790607440397'/><link rel='alternate' type='text/html' href='http://lean-lead.blogspot.com/2009/10/task-board.html' title='Task Board или как понять: что происходит?'/><author><name>Евгений Воротников</name><uri>http://www.blogger.com/profile/16501223373557911622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://4.bp.blogspot.com/_V2vMA2n5UTI/SshLUf10vSI/AAAAAAAAAIs/nQ8V4jyEpnw/S220/lean-lead.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8117773591826780213.post-6011739220619496306</id><published>2009-10-02T14:47:00.000-07:00</published><updated>2010-11-29T12:49:08.431-08:00</updated><title type='text'>Кто такой тимлид?</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Тимлид &lt;/span&gt;— необходимое и ключевое звено в иерархии управления разработкой ПО. Отличие тимлида от всех остальных менеджеров состоит в том, что он кодирует и проектирует, и занят этим большую часть времени. То есть — он, чтоб быть тимлидом, обязан является практикующим программистом. А поэтому — он глубоко понимает технические проблемы и проблемы своих коллег. Чтоб это было так, размер команды у тимлида нельзя делать слишком большим. А именно&lt;br /&gt;— больше шести человек вместе с ним команду делать нецелесообразно.&lt;br /&gt;&lt;br /&gt;Итак, тимлид — это полу-менеджер, полу-программист, причем обе составляющих достаточно важны. Конкретные пропорции этих обязанностей могут и должны варьироваться, в зависимости от:&lt;br /&gt;1) Компетенции тимлидов.&lt;br /&gt;2) Используемого в организации процесса.&lt;br /&gt;3) Ситуации и требований.&lt;br /&gt;Главное — чтобы он оставался программистом, и не превратился в менеджера. Примерный список возможных обязанностей и ответственности тим-лида:&lt;br /&gt;&lt;br /&gt;1) Тимлид несет личную ответственность за результат работы всей группы, за процесс разработки в группе, и за людей в группе.&lt;br /&gt;2) Тимлид отвечает за назначения задач внутри группы, принимая во внимание личные особенности людей, их компетенции, и их обучение.&lt;br /&gt;3) Тимлид отвечает за порядок выполнения задач и их перебалансировку, принимая во внимание риски и приоритеты, а также технические риски, а также текущую ситуацию.&lt;br /&gt;6) Тимлид отвечает за план работы _своего_ подразделения, который разрабатывает сам в рамках полученных директив, а также за соответствие этого плана директивам и целям верхнего уровня. Также, тимлид проводит еженедельный контроль продвижения по этому плану.&lt;br /&gt;4) Тимлид обязан оказать своевременную помощь своим сотрудникам, лично, или обеспечив ее снаружи.&lt;br /&gt;5) Тимлид участвует в планировании работ подразделения — лично. А именно, он дает свой вклад в разработку общих больших планов, анализ рисков, и расстановку приоритетов.&lt;br /&gt;6) Тимлид отчитывается о прогрессе по плану на уровне подразделения.&lt;br /&gt;7) Тимлид может частично делегировать свои обязанности членам своей команды, &lt;b&gt;но не ответственность.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Не будет тимлида — разработка станет неуправляемой, он необходимое связующее звено. Короче, самая важная работа. Человек, который не работал тимлидом — не сможет быть хорошим менеджером. Ну, трудно ему будет очень.&lt;br /&gt;&lt;br /&gt;Взято с &lt;a href="http://www.rsdn.ru/forum/management/2972662.flat.aspx"&gt;http://www.rsdn.ru/forum/management/2972662.flat.aspx&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8117773591826780213-6011739220619496306?l=lean-lead.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lean-lead.blogspot.com/feeds/6011739220619496306/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://lean-lead.blogspot.com/2009/10/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/6011739220619496306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8117773591826780213/posts/default/6011739220619496306'/><link rel='alternate' type='text/html' href='http://lean-lead.blogspot.com/2009/10/blog-post.html' title='Кто такой тимлид?'/><author><name>Евгений Воротников</name><uri>http://www.blogger.com/profile/16501223373557911622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://4.bp.blogspot.com/_V2vMA2n5UTI/SshLUf10vSI/AAAAAAAAAIs/nQ8V4jyEpnw/S220/lean-lead.jpg'/></author><thr:total>0</thr:total></entry></feed>
