Архивы для Март, 2012
Старт проекта. Что такое Управление Конфигурациями?
30 Март
Продолжаю серию статей «Старт проекта». Первая статья здесь – Старт проекта. Как это делать?
А в этой статье поговорим о дисциплине управления конфигурациями как таковой и о ее важности.
Сразу начну с кейса из реальной жизни:
- Заказчик прислал проект на оценку в виде нескольких документов, пусть это будут спецификации: «Spec 1 v1_1» и «Spec 2 v1_2»
- Сделали оценку работ, причем в разделе «References» указали что оценки сделаны на основе этих спецификаций
- Заказчик согласился на оценку, подписали контракт, собрали команду, начали проект
- В середине проекта выяснилось, что обещанные сроки выдержать не получается
- Поначалу «подозрение» пало на некачественный оценку работ
- Но в конечном итоге выяснилось что: А) – заказчик в начале работ «подсунул» другие спецификации (названия те же, но версии и содержание отличаются); Б) – никто не сверился, отличаются ли изначальные и новые спецификации.
А теперь еще несколько типичных проблем:
- Устраненные дефекты появляются снова
- Отсутствуют зафиксированные версии спецификаций, продукта
- Заказчику отдали старую или неполную версию продукта или его частей
- Откуда-то появился новый функционал
- Не совпадают спецификации, продукт и тестовая документация
Отсюда возникает вопрос – как этого не допустить, и как это сделать осмысленно, и без чрезмерных усилий? Как ясно из названия, такие проблемы призвана решить дисциплина Управления Конфигурациями.
Немного истории. Дисциплина, как и многие другие здравые мысли пришла от военных. Кстати еще о военных, есть статья «История проектного инструментария, нач. ХХв.» – рекомендую. Так вот, как говорит Википедия, дисциплина формализовалась в 1950-х в американских воздушных силах для контроля над компонентами сложных систем. И сейчас применяется во многих отраслях, в том числе и космической. Если говорить о более близких к ИТ вещах, то она постепенно стала компонентом CMMI, ISO 9000, ISO 10007, ITIL, PRINCE2 и т.д.
Собственно определение – Управление конфигурацией (Configuration Management, CM) – это управление наборами рабочих продуктов, их версиями, статусами и взаимосвязями.
Ключевые задачи могут немного отличаться в разных источниках, но если выделить основное, то это:
- Определение элементов конфигурации
- Учет состояний и версий
- Отслеживание запросов на изменение
- Верификация конфигураций
Причем, о первых трех в списке нужно по возможности договориться на старте проекта, лучше до подписания контракта. Давайте рассмотрим первую задачу – «Определение элементов конфигурации». На протяжении проекта производится множество разных артефактов (Work Products) – спецификации, отчеты, код, результаты инспекции кода, документация пользователя, тест кейсы, скрипты, протоколы совещаний и т.д. Некоторые из них являются Элементами Конфигурации (Configuration Items), а некоторые нет. Если по простому, то Элементы Конфигурации – это наиболее важные артефакты, это могут быть: результаты поставки заказчику; артефакты, от которых зависят другие артефакты и т.п. Например, спецификация – однозначно Элемент Конфигурации, т.к. на ее основании разрабатывается продукт, тестовая документация, делается приемка продукта и т.п. А вот отчет – вряд ли.
Соответственно к Элементам Конфигурации должен применяться структурированный контроль – со второй по четвертую ключевые задачи в списке.
В силу ограниченности объема статей и емкости материала об Управлении Конфигурациями предлагаю читателям уже самим выбрать наиболее близкий источник для ознакомления, смотрите указанный выше список стандартов.
В следующей статье рассмотрим «заезженную», но плохо применяемую на практике дисциплину Управление Рисками, а точнее некоторые моменты «продажи» Управления Рисками заказчику, что безусловно повышает успешность проекта с самого начала.
Серия статей «Старт проекта» выходит в поддержку тренинга «Успешный старт проекта», в котором темы статей рассматриваются подробнее и с практическими заданиями.
Что готовит нам весна?
29 Март
Весна постепенно набирает обороты. Март уже заканчивается и скоро наступят солнечные (мы искренне надеемся) апрель с маем. Мы запланировали много событий на эту весну. Что же вас ждет?
29 марта состоится 14-ая встреча «Клуба анонимных разработчиков». Мы смело можем назвать ее одной из самых интересных встреч – ведь будет рассматриваться «горячая» тема облачной разработки. На суд участников будут представлены доклады о разработке на облаке Amazon и Windows Azure. Поэтому каждый найдет для себя что-то интересное. Встреча пройдет в уютном офисе ДатаАрт по адресу Бехтеревский переулок 14Е. Начало в 19:00.
6-7 апреля состоится новый тренинг «Инженерные практики в Agile». 2 тренера (Николай Алименков и Алексей Солнцев) в течение 2-ух дней познакомят участников с 8-ью современными инженерными практиками. Будут затронуты вопросы внедрения, поддержания и пользы от этих практик. Все практики будут демонстрироваться на реальных примерах и включают в себя многолетний опыт использования наших тренеров. Это один из лучших наших тренингов. Группа почти набрана, осталось всего 5 мест.
13-14 апреля мы впервые проведем новый тренинг Дмитрия Ефименко под названием «Практики эффективного, но экономного проектирования». Дима вложил в этот тренинг весь свой опыт по проектированию программного обеспечения. Тренинг отлично сочетает в себе информацию о процессах разработки и проектирования, работу с требованиями, инженерные практики и подходы, анализ и управление рисками, а также несколько интересных практических заданий. Участники даже будут писать реальный код.
Группа еще формируется и не поздно присоединиться к составу участников.
21-22 апреля состоится важное событие в мире тестирования – международная конференция SQA Days 11. Наш тренер Николай Алименков выступит на конференции с докладом «А вы знаете что тестируют ваши тесты?». В докладе речь пойдет о связывании тестов с самыми важными артефактами вашего проекта – требованиями и кодом. Николай на практических примерах продемонстрирует как полностью контролировать что и как тестируют ваши тесты. Помимо этого, 20 апреля мы проведем популярный тренинг «QA в Agile». Этот тренинг позволит участникам познакомиться с ролью тестировщика в Agile процессах, грамотно настроить процесс QA в Agile команде, разобраться с ролью автоматизации тестирвания и современными веяниями в мире тестирования. Тренинг будет полезен как менеджерам, так и обычным тестировщикам.
В апреле проходит еще несколько интересных конференций в России и Украине, но побывать везде просто не хватает времени. Вот некоторые из них: CodeFest 2012, Cloud Foundry Open Tour 2012, Software People’12, РИТ++, Quality Assurance Day’12, Fun ConfeT&QA. Мы также постараемся провести очередную бесплатную онлайн конференцию IT Brunch. Тема еще окончательно не выбрана, но в этот раз мы планируем сделать ее более технической.
28 апреля пройдет еще один наш новый тренинг «Успешный старт проекта». Сергей Поволяшко подготовил этот тренинг на основании своего многолетнего опыта управления проектами. На тренинге вы сможете узнать какие активности стоит проводить на стадии инициирования проекта, какие риски есть и как с ними бороться, как оценивать проекты с финансовой и временной точек зрения, что необходимо включить в контракт и как это сделать. Если вы менеджер и ваша работа связана со стартом новых проектов, то этот тренинг для вас!
27-28 апреля Александр Белецкий проведет свой новый тренинг «Веб-разработка с использованием ASP.NET MVC». Этот тренинг рассчитан на программистов, знакомых с концепциями ASP.NET, возможно уже имеющие опыт с Web Forms, но желающих приобрести практические навыки с новой, популярной технологией ASP.NET MVC. Тренинг очень насыщенный и на нем будут рассмотрены практически все аспекты разработки современных веб приложений с использованием ASP.NET MVC.
11-12 мая в Москве состоится очередная конференция для разработчиков Application Developer Days-3. На протяжении двух дней участники смогут посетить множество совершенно разных докладов на тему разработки, а также пообщаться с коллегами. Николай Алименков выступит с докладом «Разработка распределенных приложений на AWS», в котором поделится своим опытом (более 2-ух лет) в разработке приложений в облачной среде. Николай рассмотрит сервисы, предоставляемые Amazon (самым популярным облачным провайдером на данный момент) и даст множество полезных советов тем, кто начинает или только задумывается над переездом в облака.
19 мая мы уже во второй раз соберем Java разработчиков в Киеве на большую конференцию для Java практиков – JEEConf 2012. В этот раз мы собрали еще более интересную программу. Докладчики приедут в Киев с разных стран и будут освещать различные инструменты, методики и практики из мира Java. Николай Алименков выступит на конференции с докладом «За что я ненавижу Hibernate?», в котором рассмотрит недостатки одного из популярных ORM решений и способы их обхода. На данный момент уже более 300 участников изъявили свое желание участвовать в конференции. Это будет действительно яркое событие наступающей весны.
Перед конференцией мы организуем ряд тренингов, посвященных Java разработке: «JavaScript for Java developers», «TDD в Java», «Introduction to Java EE 6″. Все тренинги проводятся опытными профессионалами индустрии. Группы наполняются очень быстро, поэтому поторопитесь занять себе место в составе участников.
Завершит весеннюю гонку конференция AgileBaseCamp CREW DRILL в Харькове 26-27 мая. Это два дня, насыщенных докладами экспертов, воркшопами и вдохновляющими блицами. Панельные дискуссии и Open Space, демонстрации от практиков и два полномасштабных мастер-класса. Наши тренеры Александр Белецкий, Дмитрий Ефименко и Николай Алименков готовятся выступить с докладами. Программа конференции еще формируется.
А еще на апрель и май у нас запланированы корпоративные тренинги в Киеве, Днепропетровске, Воронеже и Москве. Приглашайте нас в свой город и мы с радостью приедем!
Вот такая интересная выдалась весна. Будем рады видеть вас на перечисленных мероприятиях!
MS SWIT 2012
28 Март
22-23 Марта я имел возможность поучаствовать в одном из самых больших ивентов организованных компанией Microsoft Ukraine – MS SWIT 2012. В этот раз, XP Injection являлась медия партнером мероприятия, а я лично выступил там с докладом.
Около 2 лет назад, я присутствовал на первом MS SWIT 2010. В те дни главной темой всей конференции были облака и облачные технологии. На этот раз, «шум стоял» вокруг Windows 8, Market Place и Metro-style приложений. Конечно же, облачные технологии не были лишены внимания и на этой конференции.
Мне очень понравился вступительный доклад первого дня, который сделал Вольфганг Эберманн, вице-президент Майкрософт. Действительно, Майкрософт предлагает новые уникальные возможности для разработчиков под платформы Windows 8 и Windows Phone. Недавно, Украина вошла в список стран с официальной поддержкой Market Place. Это реальный шанс для многих попробывать свои силы в мобильной разработке, с возможность заработать на этом. А благодаря новым стратегиям Майкрософт, в области принятия открытых стандартов, таких как HTML5, EcmaScript – разработка под эти платформы выглядит действительно привлекательно.
Большое внимание было уделено свежим релизам таких продуктов, как: Share Point, SQL Server Denali, Windows Server 8 и т.д. Учитывая то, что я более сфокусирован на технологиях веб разработки, не могу сказать, что эти технологии были крайне интересны мне, но тем не менее, всегда полезно держать глаза открытыми и знать что происходит вокруг.
В первый день было дейсвительно много народу. Поэтому на «громкие» доклады надо было приходить заранее, чтобы успеть занять место. Во второй день, как мне показалось – людей было меньше. Поэтому, все те кто не пришли, могут начинать жалеть, самое интересное было именно во второй день.
Мой доклад был посвящен новому релизу ASP.NET MVC4 с фокусом на разработку мобильных веб приложений. Я бы сказал, что это была самая большая аудитория, перед которой я когда либо выступал. Мне кажется, что в зале было 150-200 человек.
Будучи вдохновенным выступлением Стива Сандерсена на TechDays 2012, я решил сделать свой доклад в подобном стиле. А именно, разработать простое мобильное веб приложения прямо по ходу доклада. Я решил сделать мобильный клиент к известному порталу http://asp.net. Не обошлось без недочетов: во первых, я немного затянул со вступильной частью (моя обычная проблема), во вторых во время доклада у меня на минуту пропал интернет, что заставило меня немного поволноваться и нарушило темп. Тем не менее, я надеюсь, что раскрыл те важные темы как CSS3 Media Queries, Display Modes, jQuery Mobile.
Спасибо большое, всем тем, кто пришел на мой доклад и подходил с вопросами после. Я крайне благодарен вашему вниманию и надеюсь что доклад был действительно полезным для вас.
Что касается самого приложения – оно выйдет в свет в конце следующей недели. Исходники вы сможете найти на гитхабе, буду рад форкам и пул реквестам.
Оригинал статьи – http://www.beletsky.net/2012/03/ms-swit-2012.html.
Рубрика «Полезное чтиво». Выпуск 25
26 Март

Две недели рубрика «Полезного чтива» не выходила в свет. Это было связано с заслуженным отдыхом. Зато за это время накопилось много всего:
- 12 Essential Skills for Software Architects – хорошая книга для списка на прочтение
- Basic Site Documentation: Maven 3 – maven site может подготовить отличную документацию по вашему проекту
- Spring MVC – Flash Attributes – теперь в Spring MVC можно передавать параметры между страницами
- Интеграция DBUnit и Spring TestContext Framework – для тех, кто не знает о Unitils, но очень хочет тоже иметь красивые удобные тесты
- 10 Best Practices for Code Commenting & Formatting – несколько простых правил по комментариям и форматированию кода
- Suppressing FindBugs Warnings – как отключить замечания от FindBugs
- TeamCity 7.0: Control the power! – цепочки билдов, типизация параметров, инкрементальные билды и много чего еще в TeamCity 7.0
- Common Sense and Code Quality, Part 2 – что умеют статические анализаторы в структурном анализе кода
- «I Have No Impediments» – в Scrum самым важным является поиск и устранение препятствий на пути команды
- Опубликован перевод документации по Selenium – опубликован перевод документации по Selenium на русский язык
- Observations on Dev / Ops Culture – все таки какие все IT компании разные…
- JQUERY 1.7.2 RELEASED – вышел jQuery 1.7.2
- Why Some People Think Messaging Is More Scaleable – в действительности, без сообщений очень тяжело построить масштабируемую систему
- How to Hire a Programmer – советы по найму сферического программиста в вакууме
- Test-Driven Emergent Design vs. Analysis – как TDD сочетается с дизайном
- Пишем кеш с определенным временем хранения объектов с использованием java.util.concurrent – а чего просто не взять кеш из Google Guava или EHCache?
- Sprint issues – when sprints turn into crawls – стандартные проблемы со спринтами в Scrum
- Run your enterprise like a startup – большие проекты тоже надо делать маленькими талантливыми командами!
- NoOps: Its Meaning and the Debate around It – скоро придем наконец к жизни, в которой работу админов будут выполнять облачные платформы, или не придем?
- Getting the Most of Scrum Burn Charts – отличная подборка материалов на тему burn down/burn up диаграмм
- Is HTML5 ready yet? – HTML5 никогда не будет закончен как стандарт, потому что мир меняется слишком быстро
- BDD in a Nutshell – что такое BDD и где узнать об этом побольше
- Here Is The Main Reason Why You Suck At Interviews – к интервью нужно готовиться как и к любой другой активности, если хотите делать ее успешно
- Incremental Building with Maven and TeamCity – как настроить инкрементальную сборку с Maven в новом TeamCity
- Incremental testing with TeamCity – инкрементальный запуск тестов на новом TeamCity поможет многим сэкономить кучу времени
- Сколько серверов в облаке Amazon EC2? – Amazon EC2 растет не по дням а по часам – уже 450 тысяч серверов
- Learning from mistakes with BDD – шикарный анализ типичных ошибок при работе в стиле BDD
- Top 3 Myths of Agile Testing – пару мифов Agile тестирования
- Guidelines for Java Testable Design – советы как сделать Java код более тестируемым
- Selenium IDE FlowControl: Примеры использования – подробная инструкция по подключению расширения FlowControl в Selenium IDE
- Agile Can Be Dangerous – отличный пример того, каким разным может быть понимание Agile
- Документация jQuery UI на русском – возрадуйтесь лентяи – теперь документация по jQuery UI есть на русском языке
- All about JMS messages – структура JMS сообщений
- Архитектура Tumblr – сколько же всего полезного можно почерпнуть из архитектурных решений таких проектов как Tumblr
- Burning Down Hours is Anti-Agile Because Working Software is the Primary Measure of Progress – я всегда считал burn down почасовой глупым занятием, сторипоинты и burn up куда лучше
- SQL Injection Attacks by Example – детальный разбор что можно получить с SQL Injection атакой, предохраняйтесь!
- scrum – agile = problems – гораздо важнее впитать Agile принципы и им следовать, чем работать по Scrum или даже XP
- 25 сервисов для продуктивной работы с Gmail – набор мегаполезных расширений для GMail
- Asynchronous and negative testing – как тестировать асинхронный код
- The Truth About Estimates in Software Development – размышления по поводу оценок и оценивания
- Optimizing ORM Performance – оптимизация работы ORM
- Speeding Up Java Test Code – cоветы по ускорению модульных тестов
- Extract, Inject, Kill: Breaking Hierarchies (Part 1) – некоторые шаблоны дизайна (template method) очень неприятны в тестировании
- Common Sense and Code Quality, Part 1 – качество кода, как его добиваться?
- Best Practices for Variable and Method Naming – для тех, кто подзабыл хорошие правила именования в Java
- Mikado Method For Refactoring Legacy Software – метод Mikado очень помогает при рефакторинге
- Question from the Mailbox: What Metrics Do You Use in Agile? – для Agile процессов не все классические метрики работают, надо использовать другие
- Redis: подробный обзор – обзор Redis на русском языке
- Thoughts on Test Automation in Agile – советы по автоматизации тестирования
- Screenshot on Fail v1.0 for Selenium IDE Now Available – отличный плагин для Selenium IDE, снимающий скриншоты на падении теста
- How to earn more money as a software engineer – чтобы зарабатывать больше денег разработчику нужно всегда быть на гребне волны и развиваться
- Selenium Tips: Uploading Files in Remote WebDriver – как загружать файлы с помощью WebDriver
- Introducing Akka 2.0 – вышла версия Akka 2.0
И порция добротного видео для просмотра:
- Tailoring Spring for Custom Usage – путешествие по Spring с одним из опытных разработчиков
- MESSAGING FOR MODERN APPLICATIONS – все таки Spring Integration, AMQP и RabbitMQ реально рулят!
- Видео докладов с конференции SPMConf-2011 – все одним торрентом
- Selenium Camp 2012 – опубликованы видео всех докладов конференции Selenium Camp 2012
- Жизнь без тестировщиков: миф или реальность? – видео моего доклада про жизнь без тестировщиков с онлайн конференции Chief ConfeT&QA
- Stripping Down RemoteWebdriver – отличная техническая презентация про WebDriver
Читайте и набирайтесь новых знаний!
Найм сотрудников. Часть 3 – Нежелательные кандидаты.
26 Март

Сегодня решил написать очередную статью из серии статей на тему отбора сотрудников. Статья будет короткой, но я постараюсь сделать ее интересной. Будут рассмотрены несколько вещей, на которые я обращаю большое внимание при отборе кандидатов, при этом не связанные напрямую с его уровнем подготовки.
Итак, первый тип «плохих» кандидатов – так называемые бегунки. Это люди, которые постоянно меняют работу и не могут проработать на одном месте больше полугода. Когда таких места 2 или 3, это еще не вызывает подозрения. В этом случае можно сослаться на неудачный опыт, быстрый карьерный рост, короткие проекты и т.д. Но если кандидат за 4 года сменил 6-8 проектов, то для меня это практически красный флаг.
Я хочу брать в проект людей, которые потенциально готовы работать в нем достаточно долго (хотя бы год-полтора). Ради нескольких месяцев нет смысла вкладывать в человека – передавать ему знания доменной модели, технологического стека, процессов и практик. Это замедляет команду, поэтому такие инвестиции хочется потом вернуть сполна. А бегунок уже имеет совершенно другие планы.
Приведу несколько примеров почему такие кандидаты встречаются. Наиболее распространенный типаж – «я работаю работу там где больше платят и лучше живется». Это значит, что при появлении на рынке более «жирной» вакансии этот человек может не раздумывая «подать на развод».
Второй пример – «карьеристы». Они действуют по принципу «каждые полгода я очень сильно расту и мне нужны новые горизонты». Но вам то нужен надежный грамотный человек на изначальной позиции. У вас может не быть интереса в такой короткий срок на другие позиции. И, признаться откровенно, большая часть подобных «карьеристов» только мнят себе профессиональный рост. На самом деле они знают все по верхам и пытаются вылезть наверх, пользуясь ситуацией на рынке.
Третий тип – люди, которые ни с кем не могут ужиться в команде. Вот сидит перед вами отличный технический специалист, но в команде он скорее тормозит работу, чем помогает добиваться поставленных целей.
В любом случае, с таким типом кандидатов лучше не рисковать. Я встречал их очень много и каждый раз оказывался прав. Некоторые заранее имели свои планы на работу в компании, дожидаясь выезда за границу. Другие начинали играть на проблемах и интересах проекта. Для себя я точно решил, что риск в подобных случаях совершенно неоправдан. Кандидат может оказаться адекватным, но ошибка будет стоить гораздо дороже.
Второй тип «подозрительных» кандидатов, о котором я хочу поговорить, легко распознать по отношению к собеседованию. Обычно такой кандидат опаздывает на собеседование или же и вовсе приходит со второй попытки. К вопросам на собеседовании у него похожее отношение – все знания очень поверхностные, несколько «неряшливые». При этом в резюме у человека перечислены все возможные технологии, с которыми он хотя бы раз в жизни сталкивался. Обновлять резюме такие кандидаты ленятся.
Часто создается ощущение, что человеку эта работа вообще не так уж и нужна. Он может задавать встречные вопросы наподобие «а зачем мне это знать» или «почему мне задают такие вопросы». Из моего опыта точно так же кандидат будет относиться и к работе в вашей компании – не утруждать себя приходить вовремя на важные мероприятия, не заморачиваться детальным пониманием системы и технологий, выполнять только работу, за которую по его мнению ему платят. Работать с таким человеком в одной команде сложно. Мы работаем далеко не за маленькие деньги в IT индустрии и стоит нанимать только тех людей, которые хотят работать и понимают ответственность этой работы.
Удачного вам найма!
Старт проекта. Как это делать?
20 Март
Хочу предложить вашему вниманию серию статей «Старт проекта», еще это называют инициирование проекта. Инициирование проекта – переходной процесс между «продажниками» и исполнителями, который зачастую оказывается либо «ничейным» либо недостаточно качественно сделанным. Что уже с самого начала проекта вносит негативные факторы. В этой серии рассмотрим наиболее, с моей точки зрения, важные вопросы, которым далеко не всегда уделяется нужное внимание.
Вопрос. Как это делать? Т.е. Как делать ваш проект? Предположим, что заказчик понимает зачем делать, и что у вас уже есть хотя бы предварительные требования, т.е. что делать с точки зрения результата проекта.
Приведу немного перефразированные случаи из жизни:
- Стартап, заказчик имеет ограниченный бюджет, которого хватит на несколько месяцев, понимает идею продукта и полностью доступен для коммуникаций. Всем ясно, что за этот бюджет скорее всего можно получить только неплохой прототип, судьбу которого далее решает инвестор.
- Переделка довольно сложного бизнес приложения на новые технологии. Никакой документации к существующему приложению нет. Бизнес-область компании-исполнителю незнакома. Во что выльется переделка – изначально сложно даже предположить. Но скорее всего много относительно возможностей заказчика. На стороне заказчика есть специалисты по старым технологиям, которые могут в какой-то мере саботировать проект.
- Поддержка и развитие системы с множеством версий для разных заказчиков. Долгосрочное (годы) сотрудничество, важность накопления знаний внутри команды по предметной области. Наличие другой команды-конкурента, команды могут сравниваться по производительности по количественным показателям. Заказчик диктует свои стандарты кодирования и подход к архитектурным решениям продукта. Довольно большая доля бизнеса для компании-исполнителя.
Как видно, ситуации совершенно разные, и подход – «Как делать» – тоже будет разный. И лучше договориться о нем заранее. На что обратить внимание:
- Необходимость разбить проект на фазы, например: передачи знаний, выяснения требований, прототипа, проектирования, выполнения, внедрения и т.п. Соответственно в каждой фазе будут совершенно разные результаты работы, состав команды, продолжительность, тип контракта, методология.
- Когда необходимо разбивать на фазы? Когда требования неясны, новая и сложная предметная область, новая технология, требуется получить точные оценки и планы работ, внедрение или долгое или отложено во времени, заказчик или исполнитель не готов делать сразу весь проект и т.п.
- Необходимость договориться о процессах работы – это собственно процессы, поддерживающие методологии, стандарты, технологии. Обычно у компании-исполнителя есть определенные внутренние договоренности «как делать» те или иные инженерные и управленческие практики. У заказчика тоже могут быть свои соображения и по поводу процессов, и по поводу методологий, и по поводу инструментария. Сам по себе проект тоже накладывает определенные условия.
- Задача компании-исполнителя, а особенно ответственного менеджера проекта – установить процессы, которые были бы в первую очередь полезны конкретному проекту, учитывая процессные требования как заказчика, так и компании исполнителя.
- Необходимость понять политические факторы проекта. Их может быть великое множество. Давайте посмотрим. Кому проект выгоден, а кому может быть и не выгоден? Даже есть такое понятие «murder board». Невыгоден – пользователям заказчика, работу которых автоматизируют, т.е. вероятны сокращения штата; ит-шникам заказчика, которые «застряли» на устаревших технологиях или дорого обходятся заказчику; представители подразделений и других проектов заказчика, у которых ваш проект «отбирает» финансирование, т.е. те, кто напрямую не заинтересован в проекте. Со стороны компании-исполнителя тоже может быть набор политических факторов, таких как приоритетность заказчика или направления бизнеса среди других; состояние финансовых и договорных отношений; наличие и квалификация специалистов определенного направления и т.п.
- По политическим факторам скорее всего нужно уделить внимание двум аспектам: а) скажем так – психологической готовности их нейтрально воспринимать; б) выбору правильных способов коммуникации и эскалации, причем с уклоном в более формальные методы.
В следующей статье рассмотрим дисциплину Управление Конфигурациями, и почему важно уделить ей внимание на старте проекта.
Оригинал статьи здесь.
Ошибки проектирования
18 Март

Предварительное проектирование и планирование работ – отличный инструмент, применяемый в большом количестве отраслей человеческой деятельности, но часто неработающий в разработке софта. Пусть простят меня сторонники Наполеоновского подхода «ввяжемся в драку, а потом посмотрим», но практика показывает, что команда, уделившая немало времени предварительной подготовке – при прочих равных выдает лучший результат. Если, конечно, не совершает типичных ошибок, о которых я хочу рассказать в течение нескольких статей.
Ошибка первая – потеря фокуса на цели. Одно из главных наших препятствий кроется психологической ловушке – мы пытаемся запланировать действия и это не работает в условиях большого количества рисков. В результате, стремление спроектировать и спланировать движение вперед приводит к пустой трате сил и времени и быстрому устареванию результатов проектирования. Вроде бы разработчики научились «замораживать» время на короткие итерации, но все равно, как говорил классик: «включаешь – не работает». А ученым и военным давно известно, что лучшей единицей планирования в условиях дорого проекта, находящегося в неопределённости – служит цель, которую надо добиться (проблема, которую надо решить). Как только команда перестает отвечать на вопрос «зачем мы это делаем» и «какую мы проблему решаем» – крушение не за горами. Да и с заказчиком проще общаться на языке целей, проблем, ценности, чем на языке реализации.
Поэтому, вопрос «зачем мы это делаем» нужно задавать себе постоянно – это очень здорово влияет на конечный результат. Войдя во вкус, вы начнете задавать себе и другие вопросы – «как доказать, что мы сделали правильно», «что делать, если цель меняется» – и многие другие очень полезные вопросы, которые выведут управление вашими (и заказчика) рисками на совершенно другой уровень.
Вторая ошибка – культ Карго касательно процессов проектной деятельности и инженерных практик. Процесс безусловно важен, но он не должен руководить. Фокус должен быть на результате, поэтому, люди, которые отвечают за процессы – не должны руководить разработкой. Тогда вы перестанете «делать процесс» и начнете делать продукт. Исключение – когда разработкой руководят люди, которые в том числе внедряют процессы как один из инструментов. Но это плохая работа. Она рано или поздно приводит к всплескам в мышлении так называемой производственной ментальности: ресурсы слишком ценны, чтобы простаивать, если ресурсы начали гнать некачественный продукт, то мы поменяем прошивку, заменим износившиеся детали на новые и более модные, изменим набор действий, запланируем его другим инструментом и все станет хорошо бла-бла-бла.
Это не работает. Это просто приведет к тому, что у нас будет 100% покрытие зелеными тестами, например, но свободный поиск руками покажет, что фича негодна. С такими всплесками нужно бороться. Например – ни одна практика не внедряется без экономического обоснования с точки зрения целей проекта, а не процесса. Потому что под процесс всегда можно оправдать
А вы попробуйте честно доказать друг-другу, например, что TDD вам нужна в первую очередь как инструмент уточнения требований, а уж потом – как средство повысить качество кода. Очень много интересного узнаете о том, как вы управляете требованиями и почему у вас они часто меняются.
Ценность agile практик, кстати, как раз в том и заключается (в том числе), чтобы убрать культы, но человек слаб, поэтому он часто возводит уже agile в культ.
Третья ошибка – смещение фокуса ролей. Крамольная мысль №1 – не нужен в команде «главный выделенный архитектор», отвечающий за стратегию и фреймворк решений. Так много внимания уделяется архитектуре приложения во всех её проявлениях – архитектура, дизайне, детальный дизайн. А ведь это инструмент, не более. Потому что проектирование – это не создание технического фреймворка, это процесс решения вполне себе экономических, социальных, психологических и прочих проблем. Мы привыкли рассматривать разработку как процесс создания артефакта – работающего кода. А решаемые проблемы (заказчика и разработчика) – они не ложатся в этот фреймворк, в его структуру и иерархию – он просто выступает одним из решений.
Крамольная мысль №2 - значительно полезнее иметь не выделенного архитектора, а бизнес-аналитика, который займется связями использования и реализации. Архитектуру поменять сложно, но можно – даже на крупном проекте, масса проектов с кривой архитектурой и не менее кривой реализацией успешно работают и делают людей счастливыми. А вот если у проекта не будет очень хорошей обратной связи к бизнесу – это почти сразу труба, можно садится и прогнозировать убытки.
Крамольная мысль №3 – наличие выделенного архитектора во много крат повышает влияние риска «любимого ребенка» и вместо реальной помощи при адаптации архитектуры под изменения требований бизнеса – начинается игра не в те ворота. Как часто вам главные архитекторы тормозили процесс изменений и рассказывали, что это сложно, невозможно и очень трудно тестировать? И ведь под благим предлогом – нам нельзя дестабилизровать проект и т.д. и т.п.
Сразу отвечаю на вопрос – а как же все-таки без архитектора? Он будет, но это будет команда опытных разработчиков. Все как-то гонят от себя мысль, что архитектуру и фреймворк проекта должен писать «кодирующий архитектор» – потому что критерии качества архитектуры в большинстве случаев проявляются только в ходе процесса создания архитектуры, а не до него. Других вариантов нет – некодирующий архитектор рано или поздно превратится в инвалида, который неспособен уточнить требования через код или внедрить инженерную практику через действие.
Иными словами, архитекторы – это опытные разработчики, которых подпирает бизнес-аналитик, не позволяя увлечься сферическим конем в вакууме, постоянно напоминая о реальных критериях качества, а не о чистоте архитектурных решений, паттернах и иерархии классов. При этом, завершив этап архитектуры, эти разработчики начинают получать обратную связь о качестве этой архитектуры путем использования – самы хороший вид обратной связи. Кстати, самая навороченная из Agile методик – Feature-Driven Development, как раз и оперирует группами архитекторов (Chief Developers).
Продолжение следует…
Стоит ли задавать вопросы с примерами кода на собеседовании?
17 Март

В последнее время стало модно писать про проведение собеседований. Вопросам правильного найма сотрудников уделяется все больше внимания. Я хочу поделиться своим мнением по поводу подхода, в котором у кандидата не спрашивают про конкретные примеры использования инструментов, API, библиотек языка программирования. Мол, главное чтобы соображал хорошо, а для остального есть Google.
Мне данный подход кажется более чем неправильным. Я не призываю спрашивать наизусть заученные названия классов и методов. Это как раз можно решить с помощью IDE и того же Google. Но вот в какую сторону копать надо знать четко. Особенно если именно в этой области вам предстоит работать достаточно долго.
Отличным примером такой области является многопоточность. Я не верю, что можно найти правильное решение задачи параллельного доступа к ресурсам, если ты не знаешь основных подходов и шаблонов. Более того, можно даже не подозревать, что проблема вообще возможна. И даже не будет необходимости искать решение.
А если начать искать, то в топе будут обычные классические примеры на «чистой» Java или другом языке программирования. И что происходит дальше? Человек просто копирует решение к себе и не переживает. Откуда ему знать про Java Concurrency API, про Google Guava и другие полезные библиотеки? Что получается в итоге? Куча времени на поиск и понимание решения, бездумное копирование и минимум новых знаний. Потом это решение в коде находит грамотный разработчик и исправляет его на более быстрое, надежное и грамотное. А за все уже заплачено!
И зачем платить больше? Ведь дешевле нанять заведомо хорошо разбирающегося в данной области человека, возможно за большее количество денег, чем платить постоянно. Расходы гораздо более предсказуемы. И это мы рассмотрели позитивный сценарий, когда найденное решение или его копирование не приводит к ошибке. Иначе стоимость будет гораздо выше.
Еще один банальный пример из Java мира – поиск в строке. Казалось бы безобидный поиск, но каждый раз создается и компилируется шаблон регулярного выражения, что замедляет работу метода в десятки раз. Это нереально найти, если ты заранее не знаешь о таком поведении. Логично ли задать такой вопрос для проекта, где работа со строками идет очень интенсивно? Или лучше потерять потом часы и дни на отладку и тюнинг производительности?
Приведу еще один пример, более «бытовой». Все знают, что ORM библиотеки умеют подгружать коллекции дочерних элементов автоматически по заданному маппингу. Но задумается ли человек, который не изучал как работает используемый в вашем проекте ORM инструмент, как и когда это происходит? Я думаю нет! И, в итоге, код будет делать сотни запросов в базу данных по совершенно простому действию с коллекцией (к примеру поиску по ней). И ничего не будет предвещать беды, пока приложение не будет под реальной нагрузкой. Стоит ли разбирать такие куски кода на собеседовании, если ORM у вас используется очень активно? Думаю да!
Резюмируя, очень важно убедиться, что кандидат понимает важную для вашего проекта область разработки на должном уровне. И для этого можно и нужно разбирать реальные примеры, задачи из жизни и реальный код. Ничего плохого в этом нет. Но и требовать от кандидата держать в памяти все методы и классы глупо. Важно убедиться в том, что при проблеме человек точно знает направление поиска. Беспорядочный поиск будет стоить вам очень дорого! Помните, что дешевле не нанять правильного человека чем нанять неправильного!
Размышления вслух на тему рынка IT в Украине
15 Март

Давно собирался написать на тему нашего аутсорсинга, но все не хватало времени. На пляже его вдоволь, поэтому немного пофилософствую.
Начну я с одной реальной истории, не имеющей отношение к миру IT. Слышал ее в какой-то передаче по Discovery. Она про один замечательный красивый остров в океане. Он был очень густо заселен лесом. И люди решили продавать лес, в связи с чем начались массовые вырубки. Естественно, никто не думал о новых посадках или экологии – ведь надо было рубить бабло. И все больше людей занимались этим бизнесом, перекупая лес, землю и готовую древесину. Чем меньше леса оставалось, тем дороже он стоил. Но это никого не волновало – ведь можно было просто продавать больше и дороже, получая ту же прибыль.
В итоге, леса на острове почти не осталось и началась экологическая катастрофа. Вымирали некоторые виды животных, насекомых и растений, которые были связаны с лесом. Оказалось, что корни деревьев держали почву и не давали ей двигаться. Когда их не стало, остров стал медленно разваливаться. На данный момент ученые прогнозируют, что достаточно скоро он может полностью уйти под воду. Вот такая вот печальная история.
Теперь вернемся к нашему рынку IT. Компании на нашем рынке ведут бизнес «по-украински», плюя с высокой колокольни на будущее индустрии в Украине. Бабло нужно колотить сегодня и сейчас. А завтра будет завтра. Поэтому они переманивают сотрудника за +X к зарплате и не задумываются о последствиях. А последствия очень печальны – растут зарплаты и запросы у разработчиков. Мы пилим сук, на котором сами сидим. Очень скоро работать с Украиной станет просто невыгодно.
При этом качество разработчиков с каждым годом становится все печальнее. Да и зачем развиваться? На перегретом рынке можно запросто перескочить на +500 к зарплате просто потому, что на очередном «фабричном» проекте появились 20 горящих вакансий. Доходит до абсурдного – люди с 5 годами опыта на собеседовании ничего не знают и не могут написать простейший код в IDE. А ожидания по зарплате выше среднего по рынку. И в глазах немой вопрос: «А зачем мне уходить с текущего места, где я в команде из 40 человек ни черта не делаю и получаю XXX?».
И при этом никто не хочет вкладывать в рынок. Просто безвозмездно вкладывать. Чтобы на рынке было много качественных специалистов и они искали работу, а не компании заманивали их в свои сети. Чтобы их было больше, чем нужно на данный момент. Чтобы рынок толкал их к развитию. Чтобы люди дорожили своей работой. Чтобы не было безумного роста зарплат и мы оставались интересным рынком для иностранных проектов.
Но вместо этого все только жалуются на жизнь и считают каждый потраченный доллар на публичное мероприятие. Компания на 500+ сотрудников «серьезно задумывается» дать ли $1000 на поддержку конференции. Это просто смешно! Не хотите поддерживать чужие мероприятия? Делайте свои! Делайте много и в разных областях! Делайте бесплатными или почти бесплатными! Делайте большие обучающие программы дешево и качественно! Просто развивайте рынок!
Но для этого нужно изменить подход. Цели развития рынка и получения максимальной прибыли прямо сейчас противоречат друг другу. Не пытатесь хватать все проекты подряд, даже если полностью уверены в их прибыльности. Нас мало и наша сильная сторона – интеллект и способность решать сложные задачи. Давайте оставим «фабрики клонов» индусам и китайцам. Иначе они просто оставят нас без работы.
Индия очень уверенно развивается, причем развивают ее большие компании с огромными бюджетами. С их возможностями можно сделать очень много. Взгляните на статистику в интересных и толковых группах LinkedIn, информационных порталах о разработке, форумах. Там огромный процент индусов. И многие очень достойного уровня.
Когда я был в Индии, мне удалось пообщаться с семьей, сын которой учится на программиста. Они все гордятся его специальностью, а он прилагает максимум усилий для учебы. А у нас? Никто не хочет учиться! Всем откровенно наплевать на развитие. Научился писать хоть как-то – добро пожаловать на «фабрику» и получать бабло! Ситуацию надо менять иначе может быть уже слишком поздно…
Мы же, в свою очередь, будем организовывать еще больше образовательных мероприятий по различным направлениям. Платных, бесплатных, в формате клуба, онлайн, тренингов, мастер-классов, конференций, встреч – для всестороннего развития «жителей» IT мира. Будем привлекать зарубежных экспертов, для большинства из которых Украина – это дикая страна, и поднимать уровень рынка IT Украины на международной арене. Будем искать и открывать местные дарования и давать им возможность делиться своим опытом и знаниями. Ведь у нас много талантов и нам есть чем гордиться!
Облачная разработка в «Клубе анонимных разработчиков» 29 марта
11 Март
Очень хотелось провести 14-ую встречу клуба пораньше, но не сложилось. Поэтому в очередной раз мы соберем разработчиков пообщаться и послушать выступления докладчиков 29 марта. В этот раз темой выбрана облачная разработка. Будут обсуждаться вопросы построения приложений с облачной архитектурой, а также провайдеры облачных платформ.
Одним из докладчиков станет Николай Алименков. Он расскажет о своем двухлетнем опыте разработки проекта полностью на платформе Amazon Web Services (AWS). Николай расскажет о преимуществах и недостатках данного решения, о важных моментах, которые стоит учитывать при переходе на облачную инфраструктуру. Также участники смогут узнать об особенностях использования различных облачных сервисов от Amazon и задать любые вопросы на данную тему.
Виктор Цикунов и Антон Бойко представят участникам сервис Windows Azure. Помимо краткого обзора Windows Azure будут затронуты темы создания распределенных приложений, нагрузочного тестирования приложений, автоматического масштабирования ресурсов. В рамках этого выступления не планируется показывать слайды – только живые демонстрации. Поэтому выступление получится более чем практическим.
Мы приглашаем выступить и поделиться опытом других докладчиков. Вы сможете в неформальной обстановке рассказать о своих достижениях и провалах, обсудить их с участниками, выслушать вопросы, советы и критику. Это отличная возможность попробовать себя в роли докладчика.
Итак, встреча пройдет в четверг 29 марта. Место проведения мы объявим ближе к дате мероприятия. Это связано с тем, кто число членов клуба постоянно растет и мы рискуем не влезть в уютный Киевский офис компании DataArt. Этот офис полюбился членам клуба своей уютной обстановкой и наличием всего необходимого для продуктивного общения. Но, по итогам прошлых встреч, есть риск, что все желающие не поместятся.
Официальное начало встречи по-прежнему в 19:00, завершение в 23:00. Стоимость участия 80 гривен при оплате заранее, 120 гривен при оплате на месте. Пива, пиццы и кофе с печеньками хватит на всех. Регистрация обязательна. Все детали по оплате будут высланы вам после успешного прохождения регистрации. Количество мест ограничено 60 участниками.










