Archive for the ‘Инфраструктура’ Category

Программист vs QC

Четверг, Январь 15th, 2009

В нескольких статья меня пнули ногой (и правильно), что я путаю QA и QC. Ну, слава богу, уже разобрался.

Хотя как показала практика, не один я такой. В Google ищем «QA engineer» — получаем 1M результатов, «QC engineer» — 200k. Судя по всему, большинство таки людей хотя сказать QC используют QA.

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

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

Или например, в Scrum, есть попытка ввести понятие Team member, без разделения на программиста и тестировщика. И типа, что нужно то и делай для окончания задачи.

Честно говоря, я не в восторге от обоих инициатив. Разобью по пунктам, собственно в чем состоит мое недовольство.

а) Разделение труда

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

б) Квалификация

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

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

в) Стоимость работы

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

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

г) Односторонняя взаимозаменяемость

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

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

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

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

Никаких супер привелегий у них нету, просто они делают работу которую тестировщик не умеет делать.

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

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

Дописал большой P.S.
Дисскусия в нескольких ветках упала в сторону, кто быстрее выучиться программист — тестировщиком или тестировщик программистом.

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

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

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

Возьмем двух человек
а) Хорошего программиста
б) Хорошего тестировщика

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

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

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

Таким образом, когда программиста нужно обучить тестированию, то по большему счету ему нужно углубить свои знания в
а) Стресс тестировании
б) Почитать несколько книг по планированию тестирования
в) Поменять мышление, для того, мыслить не с точки зрения «вот, что надо сделать, чтобы оно работало» а на «вот, что надо сделать, чтобы оно НЕ работало».
г) Изучить некоторое количество инструментов для тестирования
д) Потестировать, чтобы разобраться что правильно, а что неправильно

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

Теперь тестировщику нужно обучиться программированию.
И вот тут база оказывается достаточно большой
а) Изучить основы программирования
б) Изучить язык программирования
в) Изучить API операционной системы/browser/базы данных
г) Изучить инструменты для программирования
д) Изучить такие вещи как ООП
е) Пописать программы, чтобы понять, что правильно, а что неправильно

То есть база знаний больше. А знание основ этой базы у тестировщика меньше.

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

Уже через неделю программист может выполнять простые элементы тестирования на __РЕАЛЬНЫХ__ (это ключевое слово) проектах.

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

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

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

Понедельник, Ноябрь 3rd, 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. Круто… Первая картинка в блоге 🙂

Все что может не работать — будет не работать.

Среда, Сентябрь 3rd, 2008

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

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

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