понедельник, мая 02, 2011

Обзор: японские программисты (часть 1)

Почему-то среди всего, имеющего отношение к Японии, наибольшую известность имеют товары (т.е. предметы, произведенные с целью продажи) и более-менее известные люди (политики, актеры, режиссеры и один разработчик Ruby). По идее, в условиях глобализации и децентрализации производства на первый план должна выходить "услуга", в нашем непростом программистском мире более известная как SAAS. Однако внешние заказчики предпочитают обращаться за аутсорсом в Китай или Индию, а японских программистов стараются избегать.

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

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

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

Длинная версия.

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


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

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

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

Однако в Японии, с точки зрения сложившихся отношений, даже изначально ирреальные цифры в естимейтах не отпугивают потенциальных заказчиков: если фирма утверждает, что сможет предоставить 5000 отдельно взятых тестов на 7000 строк кода - то фирма действительно предоставит :) (Другое дело, что качество и содержание этих тестов - полный и бесповоротный абзац, но в такие тонкости кастомеры, как правило, не лезут.)

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

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

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

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

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

Ну, и главное требование - чтобы заказчик сам был адекватен. Без этого получается хрень :)

Pros:
- при отсутствии катастрофических дизастеров и прочих природных катаклизмов работа будет сдана точно в срок;
- заказчик получает полную информацию по проекту практически в любой момент времени;
- заказчик может быть уверен в полной сохранности персональных данных. Тут вам не там, где на базаре можно купить базу паспортных данных :)
- КПД ресурсов, вложенных в разработку - приближается к 100%.

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


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