суббота, 20 июня 2015 г. - www.msmirnov.ru

ЛАФ-2015

Только что завершился первый день Летнего Аналитического Фестиваля-2015 (6-й по счету).
Я был очень рад видеть завсегдатаев фестиваля, с многими из которых мы уже стали добрыми друзьями.
ЛАФ для меня - это всегда глоток свежего воздуха среди рабочей суеты.

Программа конференции описана здесь: http://conf.uml2.ru/program2015
Наиболее интересными сегодня мне показались два доклада:
  • "Методика оценки коллектива и выбора мотивации" Анны Черновой.
    Очень интересный доклад про достаточно простую методику ранжирования сотрудников по двум категориям - "Хотят"-"не хотят" и "могут" - "не могут" и что делать с сотрудниками, имеющими каждую их четырех комбинаций данных значений.
  • "Роли бизнес и системного аналитика в создании продукта" Дмитрия Безуглова.
    Как всегда у Дмитрия максимальный объем полезной информации на единицу времени, поэтому изложить тезисы доклада практически невозможно, чтобы не пропустить что-то важное. Лучше посмотреть сам доклад.
В целом мне показалось, что в прошлом году уровень докладов был несколько выше, чем сегодня, но это лишь значит что нам есть к чему стремится.

P.S. Хочу сказать спасибо Полине Смирновой за интересную компанию и беседу.
Мой сайт - www.msmirnov.ru

вторник, 7 апреля 2015 г. - www.msmirnov.ru

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

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

Для начала хочу напомнить основой принцип матричной структуры на примере следующего рисунка:



На рисунке зеленым цветом изображены рядовые сотрудники (разработчики, тестировщики, аналитики и т.д.), объединенные в отделы. За управление каждым отделом отвечает его руководитель (выделен синим цветом).
Отдельно находится Проектным Офис (ПО), в котором трудятся руководители проектов (красный цвет) во главе с руководителем проектного офиса (черный цвет).

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

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

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

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

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

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

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

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

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

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

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


Все это постепенно приводит к снижению качества создаваемых продуктов и увеличению затрат на их развитие.

Мой сайт - www.msmirnov.ru

воскресенье, 15 марта 2015 г. - www.msmirnov.ru

Как генеральные IT-подрядчики сбивают цены

В настоящее время на IT-рынке существуют крупные компании-посредники, часто выступающие генеральными подрядчиками крупных государственных, полу-государственным и коммерческих проектов.

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

Для того, чтобы максимально сбить цены субподрядчиков генеральными подрядчиками используются следующие приемы:
  1. Устраивается тендер между несколькими субподрядчиками. Сроки тендера при этом максимально сжимаются, чтобы у субподрядчиков не было достаточно времени выявить и обсудить все нюансы Технического Задания.
    Позднее, когда не выявленные на этапе тендера сложности приведут к увеличению бюджета проекта, оплачивать их реализацию придется субподрядчику, так как он будет обвинен в недостаточном внимании к деталям при оценке.

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

  4. При рассмотрении проектного предложения от субподрядчика требуется разбивка стоимости по работам внутри проекта и ролям, необходимым для выполнения этих работ.
    При изучении состава работ ставится под сомнение необходимость привлечения тех или иных специалистов, а также их плановые трудозатраты.
    В результате уступок со стороны субподрядчика цена здесь также сбивается, а субподрядчик при этом, идя на эти уступки, все равно остается ответственным за свою финальную оценку проекта и будет обязан оплатить превышение бюджета из своего кармана, если такое будет иметь место.
    Здесь осуществляется умелое лавирование между принципами Fix Price и Time-and-Material - опять же с целью сбить цену.
    Оценка идет по принципу Time-and-Material, оплата по Fix Price.  

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

  6. Договор с посредником составляется так, что основные его пункты носят рамочный характер.
    Это приводит к тому, что более поздние конкретные договоренности, изменения и согласования происходят на словах или в переписке. Благодаря этому генеральные подрядчики могут менять условия игры в любой момент по своему усмотрению в каждой конкретной ситуации с максимальной выгодой для себя.
    Зачастую это приводит к неполной оплате проведенных работ под удобными предлогами.
Все эти приемы, используемые в совокупности, дают мощный механизм для снижения цены проектов до нулевой или даже отрицательной рентабельности, высасывания ресурсов и обескровливания субподрядчиков, а после - переключения на новых субподрядчиков.
Мой сайт - www.msmirnov.ru

суббота, 7 марта 2015 г. - www.msmirnov.ru

Концепция автоматизированной системы управления физическим размещением данных на MS SQL Server

В этом материале я хочу рассказать о принципиальной структуре и концепции системы управления физическим расположением данных, построенной на базе MS SQL Server.
Данную концепцию можно использовать при наличии задачи построения системы подобного рода. Я надеюсь, что материал окажется полезным тем, кто сам столкнется с такой тематикой. Если по прочтении статьи у кого-либо появится потребность в более детальном рассмотрении тех или иных вопросов построения такой системы, я буду рад это сделать.

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

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

Структуру такой системы можно изобразить на диаграмме:



Как видно на диаграмме, система разделена на 4 части:
  • Управление расположениями - часть системы, отвечающая за создание, удаление, подготовку к использованию и обслуживание хранилищ данных.  Именно эта часть система отвечает за управление физическим расположением данных.
  • Подсистема безопасности - часть системы, ответственная за управление правами доступа к данным.
  • Интерфейс администрирования - часть системы, предоставляющая администратору возможность управлять ее работой.
  • API - программный интерфейс системы, позволяющий сторонним приложениям получать доступ к хранящимся данным.
Все данные, расположением которых управляет такая система, можно разделить на типы.
Типом данных может быть что угодно, например - список клиентов, история заказов, история просмотров - в общем, что угодно.
Каждый тип данных при этом обладает своей структурой - списком атрибутов, определяющих какие именно данные хранит каждый тип.


Задачи подсистемы "Интерфейс администрирования".
  1. Позволять регистрировать в системе новые типы данных, определять их структуру (имена атрибутов, их типы и другие свойства).
  2. Регистрировать в системе новые физические сервера для размещения данных
  3. Задавать настройки расположение данных на каждом сервере
  4. Управлять настройками распределения данных между серверами
  5. Управлять настройками прав доступа

Задачи подсистемы "Управление расположением".
  1. Заблаговременно и по требованию пользователя создавать на физических серверах базы данных, таблицы, элементы партицирования и пр. для размещения данных
  2. Исправлять ошибки, возникающие в процессе работы - обрывов связи, сбоев в работе серверов и т.п.
  3. Проводить публикацию новых данных, если она требуется
  4. Выполнять дефрагментацию и переиндексацию
  5. Удалять устаревшие данные
  6. Управлять распределением данных между серверами

Задачи подсистемы безопасности.
  1. Управление доступом на запись и чтение данных
  2. Управление пользовательскими сессиями, мешающими работе с данными


Задачи подсистемы API.
  1. Выдавать конечным потребителям данные, хранящиеся в системе
  2. Принимать от потребителей новые данные, которые необходимо поместить в систему
  3. Получать от потребителей сигналы о необходимости выполнения публикации переданных данных
  4. Обеспечение параллельной работы пользователей с системой

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

Мой сайт - www.msmirnov.ru

воскресенье, 15 февраля 2015 г. - www.msmirnov.ru

Вебинар Елены Резановой "Work-life balance для занятых"

Сегодня принял участие в вебинаре Елены Резановой "Work-life balance для занятых".

Краткий (всего 1 час) и очень полезный вебинар, помогающий произвести определение желаемого Work-life balance (т.е. целеполагание), определить текущее состояние и наметить средства достижения своего желаемого Work-life balance.

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

Видео запись вебинара доступна здесь - https://www.youtube.com/watch?v=ecfus4cQ95I



P.S. У кого есть вышеописанная проблема с энергией, то рекомендую также к прочтению книжку "Эссенциализм. Путь к простоте" Грег МакКеон
Мой сайт - www.msmirnov.ru

суббота, 14 февраля 2015 г. - www.msmirnov.ru

Семинар Евгения Бумагина "Простые шаги для внедрения проектного офиса в организации"

Только что завершился семинар "Простые шаги для внедрения проектного офиса в организации", трансляцию которого проводил Стратоплан в рамках мероприятий PM Weekend.
На мой взгляд это был интереснейшее мероприятие, которое проводил Евгений Бумагин, президент питерского отделения PMI.
Семинар был посвящен основным вопросам, рискам и дорожной карте внедрения проектного офиса в организации, работающей в любой сфере деятельности (не только IT).

Что особенно понравилось:
  • Были освещены тонкости взаимодействия с высшим руководством компании, направленные на решение типичных вопросов и проблем, возникающих при внедрении проектного управления.
  • Были выданы рекомендации преодоления внутреннего сопротивления в организации.
  • Была представлена четкая и понятная дорожная карта внедрения.
  • Был приведен очень интересный пример внедрения проектного офиса в компании среднего размера.
  • Все изложение велось простым языком, характерным для практических профессионалов (но без излишнего упрощения, характерного при недостатке опыта).
По ходу трансляции я наделал для себя десяток полезных скриншотов.
Надеюсь Стратоплан выгрузит через какое-то время видео семинара.
Мой сайт - www.msmirnov.ru

вторник, 23 декабря 2014 г. - www.msmirnov.ru

Нагрузочное тестирование с использованием Amazon Web Services

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

На тот момент у нас уже были автоматизированные сценарии тестирования, которые имитировали поведение обычных пользователей при работе с системой. Сценарии были разработаны с использованием Coded UI Tests и Selenium.

Эти сценарии использовались в рамках текущего автоматизированного регрессионного контроля.

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

В рамках такого тестирования мы решали задачи поиска деградации производительности системы, поиска узких мест и роста потребления системных ресурсов (утечки памяти, место на дисках, CPU и т.п.)

В качестве платформы размещения тестовых сценариев была выбрана облачная платформа Amazon Web Services (AWS) в следующем виде - мы создали эталонную виртуальную машину в Amazon Elastic Cloud 2 (EC2), на которую установили скрипты автоматизированного тестирования.

Затем, мы разработали отдельное центральное приложение, которое через AWS API дублировало эталонную машину в Amazon EC2 столько раз, сколько нам требовалось (например, создавало 100 одинаковых машин), затем проводило окончательную настройку тестовых сценариев и запускало эти сценарии на выполнение.

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

По завершении тестового периода центральное приложение уничтожало все тестовые виртуальные машины (кроме эталонной) и генерировало отчет о результатах тестирования, который содержал сводную информацию по всем машинам и по каждой машине отдельно.
Мой сайт - www.msmirnov.ru