Archive for the ‘Менеджмент’ Category

Если подчиненных больше N…

Среда, Февраль 11th, 2009

Когда-то я написал пост, про то, какой я вижу распределение должностей в компании.

Так вот, там я в куче мест указал, что подчиненных у каждого должно быть от 1 до N. И нигде не указал, сколько же должно быть это N.

Так вот количество подчиненных для фирмы больше 10 человек должно выглядеть так
а) Ноль, для тех кто делает конечную работу и Developer, QA, Sales сидящий на телефоне
б) От одного до трех, для того, кто все еще делает конечную работу, но еще и должен руководить
кем-то (из-за того, что он более опытный). Например Dev Team Lead или QA Test Lead
в) От четырех до семи, для тех кто не делает конечной работы и только управляют (например Project manager, director).

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

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

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

Особенно меня радует, когда в разумно небольшой фирме образуется целая пачка людей а-ля — product manager’ов, VP чего-то там, маркетологов. Как то обычно, они множатся очень быстро, а уходят из фирмы очень медленно. (Для ясности — эти позиции нужны, но вероятнее всего в гораздо меньших количествах).

О тупых программистах.

Пятница, Январь 30th, 2009

Осторожно, очень много букв 🙂

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

Кстати,  именно он подкинул мне идею (был ее автором) самой моей любимой серии статей про программистский синхрофазатрон.

И вот, собственно, смирившись с невозможность победить в online споре, я решил перейти в offline режим, где смогу детализировано рассмотреть проблему.

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

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

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

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

Итак начнемс…

Приведу три точки зрения. Первая — точка зрения программиста, вторая точка зрения менеджера, третья — точка зрения предпринимателя.

С точки зрения хорошего программиста Пети. Работа выглядит так
— Васе дали задачу, которую Петя мог сделать за 5 часа
— Вася поморочил Пети голову 2.5 часа, чтобы понять как ее сделать
— Вася проработал над задачей 20 часов пока не сделал
— Пете еще 2.5 потом пытается привести в порядок, то что натворил Вася

— Качество результата вышло хуже, чем если бы Петя делал сам.

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

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

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

Менеджер мыслит примерно так (естественно не с такими детальными выкладками)

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

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

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

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

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

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

Небольшое замечание по измерению оценки. Программист оценивает других программистах в терминах «на» — Вася сделает туже задачу _на_ X долларов дороже чем я, поэтому Вася не нужен. Менеджер измеряет в терминах «в». Вася сделает туже задачу _в_ Y раза дороже.

Теперь следующий шаг в оценках менеджера. Пусть мы знаем, что задача которая подается программистам на вход должна принести скажем $10k. Самый эффективный программист на ее решение тратит $1k. Из этого следует, что все кто эффективны менее чем в 10 раз, будут тратить больше $10k и значит, что они приносят фирме уже только убыль. И чем больше они работают, тем большую убыль приносят. Так, что их таки можно увольнять.

Возвращаясь к Васе. Пусть Вася по этой формуле оказался в 4 раза менее эффективным. Тем не менее, с решенной задачи мы все еще имеем $10k — $4k = $6k прибыли.
Хотя безусловно, если Васю уволить, то получится $9k прибыли.

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

То есть, если у него эффективность жуткая (в 7 раз хуже, чем у Пети), но работает он автономно и Петю не трогает вообще, то тогда, получается, что они вдвоем могут приносить $10k-$1k (Петя) + $10k-$7k (Вася) = $12k. А если Васю уволить, то прибыль падает до $9k.

Ну и теперь с точки зрения предпринимателя.

Базируем ее на точки зрения точке зрения менеджера. Только введем некоторые дополнительные параметры.

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

Итого, когда у нас диапазон качества, в абсолютно условных цифрах от 3 до 5. То вполне возможно, Вася сделал бы задачу с качеством 3 с той же эффективность, которое Петя делает задачу с качеством 8 (с одной стороны такое качество просто и не нужно, с другой стороны Петю ругать за дополнительное качество тоже было бы странно, да и плюс именно из-за Пети в целом программа не выпадает из диапазона).

Заметьте, как мыслит программист

а) Берется факт о случившейся ситуации где эффективность другого программиста была низкая

б) Из факта делается индукция, что у программиста всегда эффективность низкая (индукция тут не совсем правильна, но в целом, конечно вывод получается правильный, что у программиста низкая эффективность)

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

На самом же деле расход и доход динамичен. Он происходит в разные моменты времени.

Вернемся к примеру, который привел программист. Если плохой программист тратит в одной точки времени 5 часов хорошего, 20 часов своих и после этого в какой-то момент получается прибыль $10k, то действительно второй программист паразитирует в прямом смысле слова.

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

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

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

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

Тут кроется одна проблема, это хорошо масштабируется от 1 до 5 хороших программистов, плохо от 5 до 50 и не масштабируется фактически вообще от 50 до 500 программистов. Поэтому для увеличения прибыли и сокращения сроков, компании проще нанимать 50 хороших программистов и 500 плохих, чем 100 хороших.

И последняя особенность.  В формуле прибыль = доход — расход, и доход и расход на самом деле являются не константами, а функциями.

Во первых, если фирма имеет большие продажи, то тогда доход от одной и той же функциональности может быть разный. И вот возникает интересный эффект. Если доход $10k, при расходах $1k и $7k — то отличие хороших и плохих программистов очень чувствительно (так как это изменяет прибыли от 90% дохода до 30% дохода). А вот если доход составит $100k, то разница между хороших и плохим программистов фактически не чувствуется (99% или 93%).

Важное замечание, которые мне написали: Это естественно более актуально для продуктов, где прибыль зависит от объема продаж. Для попроектной работы, прибыль заранее фиксирован. Более того, чаще всего они сильно прижат конкуренцией за исполнение проекта.

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

Фух… Подводя к итогам всю эту фигню, которую я написал.

а) Идеальная ситуация — много хороших программистов, нету плохих. Ситуация идеальная, но недостижима из-за плохого масштабирования найма хороших программистов.

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

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

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

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

Корпоративная культура (часть вторая).

Воскресенье, Январь 11th, 2009

Когда-то я писал статью уже о корпоративной культуре (КК). Пока, все еще, актуальна, хотя немножко мой взгляд уже изменился.

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

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

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

Так, вот эволюционно стабильной стратегией называется такая смесь в группе разных стратегий, в которую кого не подбрасывай, шансы на выживания и размножение меньше, чем у тех кто населяет группы.
Единственная особенность, которая приведена в книге, что стабильных стратегий может вполне быть несколько и в случае каких-то серъезных внешних событий, вполне группа может «переключиться» (ее заполнят) те, кто придерживался другой стратегии.

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

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

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

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

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

Скажу честно, я не знаю, какая культура стабильная. Но, могу четко сказать, что культура чисто альтруистическая — проект интересный и я готов чуть ли не за бесплатно над ним работать не является стабильной. Так же не является аналогичная культура но которая насаждается сверху (что-нибудь типа — «Все мы одна команда. Давайте возьмемся и вместе сделаем»).

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

Вера в лидеров и бабки.

Воскресенье, Январь 4th, 2009

И еще одна из незаконченных статей.

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

Так вот, по поводу этого, у меня пару «за» и пару «против».

Начну очень издалека.

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

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

Теперь прыгаем к примеру с продавшицой. Пусть есть магазин в котором объем продаж $5k-$10k и в нем сидит продавщица, которая «отрываясь» на клиентах отбивает их от магазина и приближает продажи ближе к $5, а не отрываясь она приближает их к $10k. У нее же самой ЗП, может быть вполне $200. Стоит ли ей платить больше (есть на рынки именно такие цены). Я бы сказал, стоит если она старается, если же она требует это пытаясь держать вас в заложниках того, что ваша прибыль упадет на $5k, то ее надо гнать в шею, как того работника который просил повысить ЗП, чтобы он не работал плохо.

Смотрим дальше, предположим из-за ново нанятой продавщины, просто отбоя в магазине нету, вероятнее всего ей можно и $500k и $1k поставить зарплату (гораздо выше средней по рынке), если продажи зашкалили за $15k.

В том же магазине работает дядя Вася грузчик, который таскает от грузовика в магазин товары. Само собой, если он делает работу плохо — то его сразу можно уволить. Если он делает работу свою просто гениально, ну может с $100 его зарплату можно поднять до $150, дальше ну никак, просто потому, что он и не увеличивает прибыль, а разве что может ее не уменьшать.

А теперь, какое это к черту имеет все отношению к лидерам?

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

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

Еще дальше возвращаясь, к статье Макса. Так вот, с чем я НЕ согласен, что роль лидера преувеличена. Да, CEO не решает все в компании (как Макс писал, статистически 10% успехов компании может быть отнесены к действиям CEO). С другой стороны, если 10% успехов увеличивают в 10 раз прибыль, то можно и в раза два зарплату им выше держать.

Как я писал, статья лежала в загашнике и честно говоря я не совсем понимаю к чему я тогда вел 🙂 Так что приведу чуть другую схему аргументировка.

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

Тоже самое в компаниях. Да, лидерство не так важно, когда все идет хорошо. Но когда все идет плохо, то лидерство — это единственное, что может спасти компанию. Поэтому, как по мне роль лидерства не преувеличена, а просто не правильно акцентировано внимание, когда же его роль действительно важна.