Archive for Сентябрь, 2008

Компанейская архитектура.

Четверг, Сентябрь 18th, 2008

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

Так что буду потихоньку эту тему раскапывать.

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

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

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

CompanyStructure

А теперь, о том, что я имел ею в виду

— Первое и самое основное (того, чего в схемке не указано). У каждой позиции должен быть четкий список обязанностей и ответственности. Директор по продажам не должен садиться подпедалить код,
а технический менеджер не должен мотаться по всему миру собирая у заказчиков требования.
Я кстати об этом писал в статье «О разделении обязанностей между технарями и продавцами.»

— Второе. Это размер фирмы. Естественно, нарисованная фирма скорее выглядит как что-то эдак размером человек 500. Скажем так, многие из этих должностей могут быть объедененны в одном человек для небольшой фирмы. Главное, что можно объеденять должности внутри одного подразделения, но не между ними.

То есть может быть и программист и главный программист в одном лице. И product manager с business director’ом в одном лице. Но уж никак не главный QA и sales director в одном флаконе.

Теперь можно уже и по структуре. Основное, с чего я вообще начал рисовать эту схему с Product Manager’а. Звучит конечно смешно, но это самый главный человек в компании. C одной стороны он находится достаточно низко в структуре, чтобы влиять на детали, с другой стороны достаточно высоко, чтобы выбирать направление. В этому его уникальность и ценность одновременно.

Итак, самая основная его идея в том, чтобы собирать все хотелки сверху (от CEO, от Sales (это скорее сбоку)), идеи о том куда двигаться в будущем (от маркетинка), крики и плевки от заказчиков (через отдел support’а) и пинки от engineering’а. После того, как все собрано — все приоритезируется и выдается вниз engineering’у на исполнение и вверх отчетность о приоритетах.

Замечу, дальше в зависимости от удачности или не удачности приоритезации именно product manager’ов (включая business development director) должны либо гладить по голове, либо гладить утюгом.

То есть к ним идут все ниточки входных сигналов и от них идут все ниточки выходных сигналов. Еще раз замечу, не к CEO, а к ним.

Теперь, расходимся от них концентрическими кругами.

В случае если product  manager’ов несколько — то Business Director как раз должен руководить, тем чтобы ниточки по нужным направлениями шли к нужному product manager’у и в ответ выходили нужные ответные сигналы.

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

Движемся дальше. Когда сигнал опускается до director’а engineering’а — то он обычно заключается в крупных проектах и это уже его дело разбить это напроекты поменьше, раздать менеджерам проектов х контролировать и т.п. В общем-то director engineering’а и project manager’ы это как раз те самые менеджеры среднего звена о которых я писал уже несколько раз.

Дальше движемся вверх по схеме. CEO по большему счету должен быть нужен в фирме для трех вещей

а) В случае наличия инвесторов — общение с ними

б) В случае если он основатель и задумщик идеи — он должен кормить этими идеям product manager’а. Хотя в идеале, тогда он должны перейти на должность Business Development Director и отдать руль CEO кому-то другому.

в) В случае если какая-то ветка работает плохо, разобраться в причине и уволить ее.

Ну и плюс сюда можно приписать воодушивительные выступления перед фирмой.

По большему счету это все, за что он должен отвечать

To be continued…

P.S. Круто… Первая картинка в блоге 🙂

Категоризация программистов.

Среда, Сентябрь 17th, 2008

Не программист — тот кто вообще не может решить проблему (написанием кода).

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

Средний программист — это тот, кто уже может решить проблему. Но, со временем, его решение обрастает соплями и ведет к большей проблеме (но уже на длительном промежутке времени).

Хороший программист — тот кто решает проблему и заодно предвидит/предотвращает будущие возможные проблемы.

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

Проклятье хороших программистов.

Пятница, Сентябрь 12th, 2008

Небольшое выныривание из заморозки.

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

а) Прекращаешь спрашивать совета у других (так как вероятнее всего они хуже и толкового совета не дадут).

б) Прекращаешь критически оценивать свои идеи (так как уже нереально крут, а значит прав по определению).

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

Глубокая заморозка

Четверг, Сентябрь 4th, 2008

Увы, но со временем стало совсем туго — стартование нового бизнеса, разбирание с юридическими и бухгалтерскими приколами в США и т.п.

По этому поводу провожу глубокую заморозку блога на пару недель и писать новые статьи не буду (заодно может интересные мысли поднакопятся).

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