Цель этой книги — поделиться с вами принципами. приёмами и методиками разработки коммерческого ПО в растущей среде начинающей компании, найденными в результате нелёгкого труда. В книге будут раскрыты самые важные и фундаментальные принципы, позволяющие выпускать качественные программы. Я не буду отвлекаться на праздные дискуссии или перечислять сотни возможных способов решения той или иной проблемы, а расскажу лишь о подходах, которые были с успехом использованы для разработки коммерческого ПО в начинающей компании. Я также расскажу об опыте моей работы в NuMega: как мы воспитывали своих специалистов и создавали наши продукты, находясь в начале пути.
Думаю, что среда начинающей компании практически тождественна небольшим и средним проектам (в которых занято до 30 человек). Мала или велика ваша организация, занимается она Интернет-услугами или информационными технологиями, являетесь вы гуру Ассемблера или Web-программистом, — нужно выпускать качественные программы и делать это вовремя. Вы постоянно находитесь под давлением этой необходимости, вам приходится иметь дело с идентичными проблемами, и вы тоже стремитесь к успеху. В конце концов, когда последний раз ваша группа смогла избежать конфликта задач, накладок с графиком, нехватки ресурсов и других «радостей» типичного цикла разработки ПО?
Пожалуйста, имейте в виду, что эта книга — не исчерпывающее пособие по какому-либо предмету. Книг, посвящённых подробному анализу узких вопросов: набору кадров, технологии разработки ПО, тестированию, инженерной психологии и др. — хватает. Уверен, на собственном опыте вы уже убедились, что во время цикла разработки редко удаётся полностью реализовать какой-либо отдельный этап. Поэтому важно отличать главное от второстепенного. Нужно овладеть основами и не беспокоиться о мелочах. Если можно сэкономить время, силы или средства, экономьте! Но если нет иного способа решить задачу, кроме трудного, все равно беритесь за эту задачу.
С другой стороны, эта книга — не обзор оценок способов решения различных задач. Вы не найдёте здесь критики всех разнообразных стратегий решения конкретных задач. Вместо этого я расскажу вам о наших испытанных методах и покажу, как быстро и эффективно связать их воедино в цикле разработки. Хотя есть ещё целый ряд замечательных идей, ждущих своего воплощения, я сосредоточусь только на подходах, опробованных на деле.
Я не хочу сказать, что изложенные в этой книге идеи подойдут для каждой группы и будут работать в каждой компании. Однако я глубоко убеждён, что большинство этих идей будет полезно самым разным организациями при работе над широким спектром проектов. Надеюсь, вы сможете адаптировать под нужды ваших проектов как можно больше информации из этой книги. Описанный подход к созданию программ не единственный, но он испытан в деле и с успехом применялся.
Если вы занимаете (или надеетесь занять) руководящую должность в проекте по созданию ПО, то эта книга — для вас. К целевой аудитории книги также относятся:
• верхние эшелоны управления техническими подразделениями (вице-президенты компаний, начальники отделов, руководители групп);
• руководители проектов;
• ведущие разработчики;
• архитекторы ПО;
• менеджеры продуктов;
• менеджеры групп технических писателей;
• ведущие технические писатели;
• менеджеры групп тестировщиков;
• ведущие тестировщики;
• менеджеры по эргономике;
• ведущие специалисты по эргономике;
• менеджеры групп технологов по разработке ПО;
• ведущие технологи по разработке ПО.
Если вы — рядовой член группы, вам тоже следует прочитать эту книгу. В ней описаны роли всех участников команды, а не только менеджеров и ведущих специалистов. Важно, чтобы вся команда работала как единое целое, разделяя одни и те же концепции, единое отношение к разным проблемам, чтобы это были единомышленники и носители одной культуры.
В книге три части, и в каждой описан один из критических аспектов управления созданием ПО.
Часть 1. Люди, организация и методы
Прежде чем приступать к планированию проекта или написанию программы, нужно позаботиться об основах. Для эффективной работы необходимо подобрать людей, организовать их и вооружить их приёмами. Без этого все усилия не отстать от графика будут безуспешны, и при возрастании темпа работы и давления сроков проект просто развалится на части. Первая часть посвящена фундаментальным потребностям любого проекта, исполняемого быстрыми темпами, включая:
• кадры — как найти и удержать нужных специалистов;
• организацию — какова роль и обязанности каждого участника группы;
• инструментарии — ключевые инструменты для разработки и способы их использования;
• тестирование — как вести тестирование параллельно с разработкой;
• технологию разработки — как поддерживать целостность программы и обеспечивать её пригодность к использованию на протяжении цикла разработки.
Часть 2. Формулирование и планирование проекта
Если вы всерьёз намерены выпустить программу в срок, то прежде, чем приступать к её созданию, нужно понять, что и как должно быть создано. Даже самым талантливым людям требуется иметь представление о планируемых результатах проекта, намеченных для использования технологиях и конечном облике продукта. В связи с этим нужно:
• сформулировать основные требования к проекту:
• определить технологии, которые лягут в основу проекта:
• создать модель использования проекта.
Решив эти задачи, можно составить график, в котором задачи проекта приведены в равновесие с доступными кадрами и уровнем их способностей. В определённой степени можно быть уверенным, что при таком подходе будет создан реалистичный график создания именно такой программы, какая нужна.
Все четыре предмета — требования, технологии, использование и график работ — тесно связаны, поэтому если ваша цель — успешный проект, их нельзя рассматривать в отрыве друг от друга. Без них придётся полагаться только на догадки, допущения и игнорировать ключевые элементы проекта, внося неприемлемый риск, часто ведущий к возникновению проблем и срывам графика. Помните: почти все самые большие ошибки делаются в первые несколько недель работы над проектом, при планировании.
Часть 3. Исполнение проекта
Планирование закончено — всё готово для создания продукта. При наличии толковых людей, верных технологических приёмов и хорошего плана, шансы уложиться в срок весьма велики. Однако необходимо следить за тем, чтобы и на завершающих стадиях проекта всё шло должным образом.
В третьей части я рассказываю о моделях исполнения проекта, управляющих повседневными работами по разработке продукта. Мы рассмотрим:
• исполнение — как не дать проекту сбиться с курса, обнаруживая и решая проблемы как можно раньше;
• бета-тёсmирование — как с помощью бета-тестирования получать из внешнего мира отзывы о программе и расширить возможности тестирования;
• работа с кандидатами на выпуск — как управлять заключительными этапами проекта и обеспечить готовность продукта;
• закрытие проекта — что это такое, зачем оно нужно и как его провести.
В конце каждой главы приводятся ответы на распространённые вопросы и методы решения проблем, часто возникающих во время применения изложенных в книге идей на практике. Большинство вопросов и проблем взято из реальных случаев, поэтому я надеюсь, что они помогут вам выйти из реальных затруднительных ситуаций.