Архивы для Март, 2012

Старт проекта. Что такое Управление Конфигурациями?

Продолжаю серию статей «Старт проекта». Первая статья здесь – Старт проекта. Как это делать?

А в этой статье поговорим о дисциплине управления конфигурациями как таковой и о ее важности.

Сразу начну с кейса из реальной жизни:

  • Заказчик прислал проект на оценку в виде нескольких документов, пусть это будут спецификации: «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 марта состоится 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

22-23 Марта я имел возможность поучаствовать в одном из самых больших ивентов организованных компанией Microsoft Ukraine – MS SWIT 2012. В этот раз, XP Injection являлась медия партнером мероприятия, а я лично выступил там с докладом.


ms swit 2012

Около 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.

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


asp.net portal mobile

Что касается самого приложения – оно выйдет в свет в конце следующей недели. Исходники вы сможете найти на гитхабе, буду рад форкам и пул реквестам.

Оригинал статьи – http://www.beletsky.net/2012/03/ms-swit-2012.html.

Рубрика «Полезное чтиво». Выпуск 25

полезное чтиво

Две недели рубрика «Полезного чтива» не выходила в свет. Это было связано с заслуженным отдыхом. Зато за это время накопилось много всего:

И порция добротного видео для просмотра:

Читайте и набирайтесь новых знаний!

Найм сотрудников. Часть 3 – Нежелательные кандидаты.

нежелательные кандидаты

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

Итак, первый тип «плохих» кандидатов – так называемые бегунки. Это люди, которые постоянно меняют работу и не могут проработать на одном месте больше полугода. Когда таких места 2 или 3, это еще не вызывает подозрения. В этом случае можно сослаться на неудачный опыт, быстрый карьерный рост, короткие проекты и т.д. Но если кандидат за 4 года сменил 6-8 проектов, то для меня это практически красный флаг. 

Я хочу брать в проект людей, которые потенциально готовы работать в нем достаточно долго (хотя бы год-полтора). Ради нескольких месяцев нет смысла вкладывать в человека – передавать ему знания доменной модели, технологического стека, процессов и практик. Это замедляет команду, поэтому такие инвестиции хочется потом вернуть сполна. А бегунок уже имеет совершенно другие планы.

Приведу несколько примеров почему такие кандидаты встречаются. Наиболее распространенный типаж – «я работаю работу там где больше платят и лучше живется». Это значит, что при появлении на рынке более «жирной» вакансии этот человек может не раздумывая «подать на развод». 

Второй пример – «карьеристы». Они действуют по принципу «каждые полгода я очень сильно расту и мне нужны новые горизонты». Но вам то нужен надежный грамотный человек на изначальной позиции. У вас может не быть интереса в такой короткий срок на другие позиции. И, признаться откровенно, большая часть подобных «карьеристов» только мнят себе профессиональный рост. На самом деле они знают все по верхам и пытаются вылезть наверх, пользуясь ситуацией на рынке.

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

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

Второй тип «подозрительных» кандидатов, о котором я хочу поговорить, легко распознать по отношению к собеседованию. Обычно такой кандидат опаздывает на собеседование или же и вовсе приходит со второй попытки. К вопросам на собеседовании у него похожее отношение – все знания очень поверхностные, несколько «неряшливые». При этом в резюме у человека перечислены все возможные технологии, с которыми он хотя бы раз в жизни сталкивался. Обновлять резюме такие кандидаты ленятся.

Часто создается ощущение, что человеку эта работа вообще не так уж и нужна. Он может задавать встречные вопросы наподобие «а зачем мне это знать» или «почему мне задают такие вопросы». Из моего опыта точно так же кандидат будет относиться и к работе в вашей компании – не утруждать себя приходить вовремя на важные мероприятия, не заморачиваться детальным пониманием системы и технологий, выполнять только работу, за которую по его мнению ему платят. Работать с таким человеком в одной команде сложно. Мы работаем далеко не за маленькие деньги в IT индустрии и стоит нанимать только тех людей, которые хотят работать и понимают ответственность этой работы.

Удачного вам найма!

Старт проекта. Как это делать?

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

Вопрос. Как это делать? Т.е. Как делать ваш проект? Предположим, что заказчик понимает зачем делать, и что у вас уже есть хотя бы предварительные требования, т.е. что делать с точки зрения результата проекта.

Приведу немного перефразированные случаи из жизни:

  • Стартап, заказчик имеет ограниченный бюджет, которого хватит на несколько месяцев, понимает идею продукта и полностью доступен для коммуникаций. Всем ясно, что за этот бюджет скорее всего можно получить только неплохой прототип, судьбу которого далее решает инвестор.
  • Переделка довольно сложного бизнес приложения на новые технологии. Никакой документации к существующему приложению нет. Бизнес-область компании-исполнителю незнакома. Во что выльется переделка – изначально сложно даже предположить. Но скорее всего много относительно возможностей заказчика. На стороне заказчика есть специалисты по старым технологиям, которые могут в какой-то мере саботировать проект.
  • Поддержка и развитие системы с множеством версий для разных заказчиков. Долгосрочное (годы) сотрудничество, важность накопления знаний внутри команды по предметной области. Наличие другой команды-конкурента, команды могут сравниваться по производительности по количественным показателям. Заказчик диктует свои стандарты кодирования и подход к архитектурным решениям продукта. Довольно большая доля бизнеса для компании-исполнителя.

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

  • Необходимость разбить проект на фазы, например: передачи знаний, выяснения требований, прототипа, проектирования, выполнения, внедрения и т.п. Соответственно в каждой фазе будут совершенно разные результаты работы, состав команды, продолжительность, тип контракта, методология.
    • Когда необходимо разбивать на фазы? Когда требования неясны, новая и сложная предметная область, новая технология, требуется получить точные оценки и планы работ, внедрение или долгое или отложено во времени, заказчик или исполнитель не готов делать сразу весь проект и т.п.
  • Необходимость договориться о процессах работы – это собственно процессы, поддерживающие методологии, стандарты, технологии. Обычно у компании-исполнителя есть определенные внутренние договоренности «как делать» те или иные инженерные и управленческие практики. У заказчика тоже могут быть свои соображения и по поводу процессов, и по поводу методологий, и по поводу инструментария. Сам по себе проект тоже накладывает определенные условия.
    • Задача компании-исполнителя, а особенно ответственного менеджера проекта – установить процессы, которые были бы в первую очередь полезны конкретному проекту, учитывая процессные требования как заказчика, так и компании исполнителя.
  • Необходимость понять политические факторы проекта. Их может быть великое множество. Давайте посмотрим. Кому проект выгоден, а кому может быть и не выгоден? Даже есть такое понятие «murder board». Невыгоден – пользователям заказчика, работу которых автоматизируют, т.е. вероятны сокращения штата; ит-шникам заказчика, которые «застряли» на устаревших технологиях или дорого обходятся заказчику; представители подразделений и других проектов заказчика, у которых ваш проект «отбирает» финансирование, т.е. те, кто напрямую не заинтересован в проекте. Со стороны компании-исполнителя тоже может быть набор политических факторов, таких как приоритетность заказчика или направления бизнеса среди других; состояние финансовых и договорных отношений; наличие и квалификация специалистов определенного направления и т.п.
    • По политическим факторам скорее всего нужно уделить внимание двум аспектам: а) скажем так – психологической готовности их нейтрально воспринимать; б) выбору правильных способов коммуникации и эскалации, причем с уклоном в более формальные методы.

В следующей статье рассмотрим дисциплину Управление Конфигурациями, и почему важно уделить ей внимание на старте проекта.

Оригинал статьи здесь.

Ошибки проектирования

Предварительное проектирование и планирование работ – отличный инструмент, применяемый в большом количестве отраслей человеческой деятельности, но часто неработающий в разработке софта. Пусть простят меня сторонники Наполеоновского подхода «ввяжемся в драку, а потом посмотрим», но практика показывает, что команда, уделившая немало времени предварительной подготовке – при прочих равных выдает лучший результат. Если, конечно, не совершает типичных ошибок, о которых я хочу рассказать в течение нескольких статей.

Ошибка первая – потеря фокуса на цели. Одно из главных наших препятствий кроется психологической ловушке – мы пытаемся запланировать действия и это не работает в условиях большого количества рисков. В результате, стремление спроектировать и спланировать движение вперед приводит к пустой трате сил и времени и быстрому устареванию результатов проектирования. Вроде бы разработчики научились «замораживать» время на короткие итерации, но все равно, как говорил классик: «включаешь – не работает». А ученым и военным давно известно, что лучшей единицей планирования в условиях дорого проекта, находящегося в неопределённости – служит цель, которую надо добиться (проблема, которую надо решить). Как только команда перестает отвечать на вопрос «зачем мы это делаем» и «какую мы проблему решаем» – крушение не за горами. Да и с заказчиком проще общаться на языке целей, проблем, ценности, чем на языке реализации.

Поэтому, вопрос «зачем мы это делаем» нужно задавать себе постоянно – это очень здорово влияет на конечный результат. Войдя во вкус, вы начнете задавать себе и другие вопросы – «как доказать, что мы сделали правильно», «что делать, если цель меняется» – и многие другие очень полезные вопросы, которые выведут управление вашими (и заказчика) рисками на совершенно другой уровень.

Вторая ошибка – культ Карго касательно процессов проектной деятельности и инженерных практик. Процесс безусловно важен, но он не должен руководить. Фокус должен быть на результате, поэтому, люди, которые отвечают за процессы – не должны руководить разработкой. Тогда вы перестанете «делать процесс» и начнете делать продукт. Исключение – когда разработкой руководят люди, которые в том числе внедряют процессы как один из инструментов. Но это плохая работа. Она рано или поздно приводит к всплескам в мышлении так называемой производственной ментальности: ресурсы слишком ценны, чтобы простаивать, если ресурсы начали гнать некачественный продукт, то мы поменяем прошивку, заменим износившиеся детали на новые и более модные, изменим набор действий, запланируем его другим инструментом и все станет хорошо бла-бла-бла.

Это не работает. Это просто приведет к тому, что у нас будет 100% покрытие зелеными тестами, например, но свободный поиск руками покажет, что фича негодна. С такими всплесками нужно бороться. Например – ни одна практика не внедряется без экономического обоснования с точки зрения целей проекта, а не процесса. Потому что под процесс всегда можно оправдать :) А вы попробуйте честно доказать друг-другу, например, что TDD вам нужна в первую очередь как инструмент уточнения требований, а уж потом – как средство повысить качество кода. Очень много интересного узнаете о том, как вы управляете требованиями и почему у вас они часто меняются.

Ценность agile практик, кстати, как раз в том и заключается (в том числе), чтобы убрать культы, но человек слаб, поэтому он часто возводит уже agile в культ. :)

Третья ошибка – смещение фокуса ролей. Крамольная мысль №1 – не нужен в команде «главный выделенный архитектор», отвечающий за стратегию и фреймворк решений. Так много внимания уделяется архитектуре приложения во всех её проявлениях – архитектура, дизайне, детальный дизайн. А ведь это инструмент, не более. Потому что проектирование – это не создание технического фреймворка, это процесс решения вполне себе экономических, социальных, психологических и прочих проблем. Мы привыкли рассматривать разработку как процесс создания артефакта – работающего кода. А решаемые проблемы (заказчика и разработчика) – они не ложатся в этот фреймворк, в его структуру и иерархию – он просто выступает одним из решений.

Крамольная мысль №2 -  значительно полезнее иметь не выделенного архитектора, а бизнес-аналитика, который займется связями использования и реализации. Архитектуру поменять сложно, но можно – даже на крупном проекте, масса проектов с кривой архитектурой и не менее кривой реализацией успешно работают и делают людей счастливыми. А вот если у проекта не будет очень хорошей обратной связи к бизнесу – это почти сразу труба, можно садится и прогнозировать убытки.

Крамольная мысль №3 – наличие выделенного архитектора во много крат повышает влияние риска «любимого ребенка» и вместо реальной помощи при адаптации архитектуры под изменения требований бизнеса – начинается игра не в те ворота. Как часто вам главные архитекторы тормозили процесс изменений и рассказывали, что это сложно, невозможно и очень трудно тестировать? И ведь под благим предлогом – нам нельзя дестабилизровать проект и т.д. и т.п.

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

Иными словами, архитекторы – это опытные разработчики, которых подпирает бизнес-аналитик, не позволяя увлечься сферическим конем в вакууме, постоянно напоминая о реальных критериях качества, а не о чистоте архитектурных решений, паттернах и иерархии классов. При этом, завершив этап архитектуры, эти разработчики начинают получать обратную связь о качестве этой архитектуры путем использования – самы хороший вид обратной связи. Кстати, самая навороченная из Agile методик – Feature-Driven Development, как раз и оперирует группами архитекторов (Chief Developers).

Продолжение следует…

Стоит ли задавать вопросы с примерами кода на собеседовании?

вопросы на интервью

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

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

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

А если начать искать, то в топе будут обычные классические примеры на «чистой» Java или другом языке программирования. И что происходит дальше? Человек просто копирует решение к себе и не переживает. Откуда ему знать про Java Concurrency API, про Google Guava и другие полезные библиотеки? Что получается в итоге? Куча времени на поиск и понимание решения, бездумное копирование и минимум новых знаний. Потом это решение в коде находит грамотный разработчик и исправляет его на более быстрое, надежное и грамотное. А за все уже заплачено!

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

Еще один банальный пример из Java мира – поиск в строке. Казалось бы безобидный поиск, но каждый раз создается и компилируется шаблон регулярного выражения, что замедляет работу метода в десятки раз. Это нереально найти, если ты заранее не знаешь о таком поведении. Логично ли задать такой вопрос для проекта, где работа со строками идет очень интенсивно? Или лучше потерять потом часы и дни на отладку и тюнинг производительности?

Приведу еще один пример, более «бытовой». Все знают, что ORM библиотеки умеют подгружать коллекции дочерних элементов автоматически по заданному маппингу. Но задумается ли человек, который не изучал как работает используемый в вашем проекте ORM инструмент, как и когда это происходит? Я думаю нет! И, в итоге, код будет делать сотни запросов в базу данных по совершенно простому действию с коллекцией (к примеру поиску по ней). И ничего не будет предвещать беды, пока приложение не будет под реальной нагрузкой. Стоит ли разбирать такие куски кода на собеседовании, если ORM у вас используется очень активно? Думаю да!

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

Размышления вслух на тему рынка IT в Украине

IT аутсорсинг Украины

Давно собирался написать на тему нашего аутсорсинга, но все не хватало времени. На пляже его вдоволь, поэтому немного пофилософствую. 

Начну я с одной реальной истории, не имеющей отношение к миру IT. Слышал ее в какой-то передаче по Discovery. Она про один замечательный красивый остров в океане. Он был очень густо заселен лесом. И люди решили продавать лес, в связи с чем начались массовые вырубки. Естественно, никто не думал о новых посадках или экологии – ведь надо было рубить бабло. И все больше людей занимались этим бизнесом, перекупая лес, землю и готовую древесину. Чем меньше леса оставалось, тем дороже он стоил. Но это никого не волновало – ведь можно было просто продавать больше и дороже, получая ту же прибыль. 

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

Теперь вернемся к нашему рынку IT. Компании на нашем рынке ведут бизнес «по-украински», плюя с высокой колокольни на будущее индустрии в Украине. Бабло нужно колотить сегодня и сейчас. А завтра будет завтра. Поэтому они переманивают сотрудника за +X к зарплате и не задумываются о последствиях. А последствия очень печальны – растут зарплаты и запросы у разработчиков. Мы пилим сук, на котором сами сидим. Очень скоро работать с Украиной станет просто невыгодно.

При этом качество разработчиков с каждым годом становится все печальнее. Да и зачем развиваться? На перегретом рынке можно запросто перескочить на +500 к зарплате просто потому, что на очередном «фабричном» проекте появились 20 горящих вакансий. Доходит до абсурдного – люди с 5 годами опыта на собеседовании ничего не знают и не могут написать простейший код в IDE. А ожидания по зарплате выше среднего по рынку. И в глазах немой вопрос: «А зачем мне уходить с текущего места, где я в команде из 40 человек ни черта не делаю и получаю XXX?».

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

Но вместо этого все только жалуются на жизнь и считают каждый потраченный доллар на публичное мероприятие. Компания на 500+ сотрудников «серьезно задумывается» дать ли $1000 на поддержку конференции. Это просто смешно! Не хотите поддерживать чужие мероприятия? Делайте свои! Делайте много и в разных областях! Делайте бесплатными или почти бесплатными! Делайте большие обучающие программы дешево и качественно! Просто развивайте рынок!

Но для этого нужно изменить подход. Цели развития рынка и получения максимальной прибыли прямо сейчас противоречат друг другу. Не пытатесь хватать все проекты подряд, даже если полностью уверены в их прибыльности. Нас мало и наша сильная сторона – интеллект и способность решать сложные задачи. Давайте оставим «фабрики клонов» индусам и китайцам. Иначе они просто оставят нас без работы.

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

Когда я был в Индии, мне удалось пообщаться с семьей, сын которой учится на программиста. Они все гордятся его специальностью, а он прилагает максимум усилий для учебы. А у нас? Никто не хочет учиться! Всем откровенно наплевать на развитие. Научился писать хоть как-то – добро пожаловать на «фабрику» и получать бабло! Ситуацию надо менять иначе может быть уже слишком поздно…

Мы же, в свою очередь, будем организовывать еще больше образовательных мероприятий по различным направлениям. Платных, бесплатных, в формате клуба, онлайн, тренингов, мастер-классов, конференций, встреч – для всестороннего развития «жителей» IT мира. Будем привлекать зарубежных экспертов, для большинства из которых Украина – это дикая страна, и поднимать уровень рынка IT Украины на международной арене. Будем искать и открывать местные дарования и давать им возможность делиться своим опытом и знаниями. Ведь у нас много талантов и нам есть чем гордиться!
  

Облачная разработка в «Клубе анонимных разработчиков» 29 марта

Очень хотелось провести 14-ую встречу клуба пораньше, но не сложилось. Поэтому в очередной раз мы соберем разработчиков пообщаться и послушать выступления докладчиков 29 марта. В этот раз темой выбрана облачная разработка. Будут обсуждаться вопросы построения приложений с облачной архитектурой, а также провайдеры облачных платформ.

Одним из докладчиков станет Николай Алименков. Он расскажет о своем двухлетнем опыте разработки проекта полностью на платформе Amazon Web Services (AWS). Николай расскажет о преимуществах и недостатках данного решения, о важных моментах, которые стоит учитывать при переходе на облачную инфраструктуру. Также участники смогут узнать об особенностях использования различных облачных сервисов от Amazon и задать любые вопросы на данную тему.

Виктор Цикунов и Антон Бойко представят участникам сервис Windows Azure. Помимо краткого обзора Windows Azure будут затронуты темы создания распределенных приложений, нагрузочного тестирования приложений, автоматического масштабирования ресурсов. В рамках этого выступления не планируется показывать слайды – только живые демонстрации. Поэтому выступление получится более чем практическим.

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

Итак, встреча пройдет в четверг 29 марта. Место проведения мы объявим ближе к дате мероприятия. Это связано с тем, кто число членов клуба постоянно растет и мы рискуем не влезть в уютный Киевский офис компании DataArt. Этот офис полюбился членам клуба своей уютной обстановкой и наличием всего необходимого для продуктивного общения. Но, по итогам прошлых встреч, есть риск, что все желающие не поместятся.

Официальное начало встречи по-прежнему в 19:00, завершение в 23:00. Стоимость участия 80 гривен при оплате заранее, 120 гривен при оплате на месте. Пива, пиццы и кофе с печеньками хватит на всех. Регистрация обязательна. Все детали по оплате будут высланы вам после успешного прохождения регистрации. Количество мест ограничено 60 участниками.