7. Проект - о разделе
О разделе
Как мы уже выяснили, разработка в IT - процесс широкий и комплексный, и он охватывает множество направлений, включая как разработку, аналитику и тестирование, так и проектирование, маркетинг и управление.
Представим себе ситуацию. Вы - бизнесмен, которому нужно обеспечить автоматизацию процесса согласования договоров в организации. К этой идее вы пришли либо самостоятельно, либо увидели на форуме презентацию новой технологии. Но у вас строительная компания, и вам нужна помощь профессионалов!
Так, вас судьба привела к договору на оказание услуг по разработке информационной системы силами исполнителя. Этим исполнителем оказывается некая IT-компания, у которой всё чётко поставлено и организовано. И эта организация управления проектами в сфере информационных технологий является таким же специфичным для отрасли стилем, как и ведение проектов в строительстве, или финансовой сфере.
Общий поток всегда один:
Договоренность - Выполнение работ/оказание услуг - Сдача результата в срок.
И чтобы сдать результат в срок в строгом соответствии с условиями договора, нужно внутри организации-исполнителя грамотно поставить «конвейер» поставки продуктов. Для этого мы должны собрать команду, которая включает в себя руководителя проекта (с которого будем требовать), всех сопутствующих обслуживающих менеджеров и специалистов (эксперты, финансисты, бухгалтера, экономисты, юристы, маркетологи, администраторы, безопасники и прочие важные спецы), и самое главное - команду разработки.
В этой команде разработки мы должны включить несколько важных категорий:
- Архитектор системы. Он должен будет, по договорённости с руководством и с заказчиком-бизнесменом, обсудить единую общую картину, как всё должно работать в результате, и именно ему предстоит всё распределить, спроектировать, и подготовить итоговое крупное видение всех элементов системы. Он проектирует набор инструментов, языков, протоколов, способов интеграции, согласует коммуникации и тому подобное, абсолютно так же, как главный архитектор здания. Это, как можно понять, должен быть самый грамотный специалист, с большим опытом работы, ведь именно его ошибка будет стоить максимально дорого. Если ошибается архитектор в выборе технологии или подхода, вся система будет не соответствовать ожиданиям и это очень, очень плохо.
- Аналитики. Тут могут быть разные ребята - бизнес-аналитики, системные аналитики, аналитики данных, но они объединены единой целью - разобраться, и детализировать конкретные направления, которые решил архитектор. Ошибка аналитика является второй по приоритетности, так как он должен изучить логику, и если реализация будет хромать из-за него, придётся откатываться назад по целому направлению.
- Разработчики. Это «строители», которые будут строить по проекту и анализу, как по чертежам. Это глубокие технические специалисты, которые сами разберутся с кодом и низкоуровневыми проблемами, но при этом они не лезут в выбранные решения по технологиям и реализациям. Аналитиком сказано, что нужно сделать так - разработчик сделает именно так, как сказано, так как он не видит всей картины. Пример со строителями - они положат бетонные плиты и кирпичи именно там, где сказано в проекте, их обязанность - соблюдать точность, ведь они не знают всей задумки. Сказано на 5 сантиметров выше - значит делаем так. Если это плохое решение, отвечать будет тот, кто выставил требование. Ошибку разработчика можно исправить, попросить переделать, пофиксить баг, изменить код, переписать и улучшить. Так что она третья в приоритете.
- Тестировщики. Это те, кто проверит, точно ли в соответствии с требованиями реализована работа программы. Словом, точно ли там 5 сантиметров? По приоритетности ошибки тестировщика спорно. По идее, это четвертый приоритет, но всё же могут быть ситуации и критичные. С одной стороны, если ошибка допущена, и не замечена тестировщиком, то она всё равно есть, и выплывает позже рано или поздно, и её останется лишь исправить. Если это ошибка разработчика. Ошибку аналитика или архитектора тестировщик лишь выявит/не выявит, но природа ошибки, как её приоритет, сохранится за ответственными лицами. Поэтому ответственность тестировщика равнозначная любому проверяющему - если пропустить важный момент, то ошибка тестировщика лишь сохранит чужую ошибку. Можно сказать, что тестировщик это второй шанс, спасительная инстанция, которая может в перспективе защитить от убытков. Многие IT-компании (особенно в игровой индустрии) высший приоритет ставят именно тестированию, чтобы ничего не упустить.
И в этой книге мы должны будем разобраться, как всем этим «хозяйством» грамотно управлять. Нужно узнать, как проектируются системы - паттерны проектирования, принципы SOLID, архитектурные стили (монолит, микросервисы), а также как работать аналитику, тестировщику, как работать с задачами и документацией. Если вы менеджер или планируете управлять командой в дальнейшем, вам неизбежно придётся изучить всю внутреннюю кухню работы над проектом.
Проекты бывают разные, порой они требуют глубокого изучения предметной области, а порой представляют собой уже кем-то созданный проект, который надо «подхватить» и вытащить из болота. Тогда перед нами открывается новая проблема - когда кто-то уже сделал работу, а нам придётся в ней разобраться. Это мы тоже разберём, изучив культуру кода, хороший тон, соглашения, и конечно легаси-код, как работать с чужим кодом.
Здесь сосредоточимся на команде, процессе и ответственности. В реальном мире заказчик не спросит, как мы написали код, нас спросят, решена ли задача.
Помните - вас нанимают не потому что вы умный или хороший, а потому что вы решаете проблему заказчика/работодателя.
Общее о бизнесе
Команда и управление
Методология и жизненный цикл ПО
- 7.03. Методология и жизненный цикл ПО
- 7.03. Методология государственных систем
- 7.03. Итоги
- 7.03. Чек-лист самопроверки
Методология и жизненный цикл ПО
Аналитика
- 7.04. История аналитики
- 7.04. Основы анализа
- 7.04. Профессиональный анализ
- 7.04. Бизнес аналитик
- 7.04. Системный аналитик
- 7.04. Исследование систем
- 7.04. Требования
- 7.04. Документация
- 7.04. Виды документации
- 7.04. Confluence
- 7.04. Руководства и инструкции
- 7.04. Прочие документы
- 7.04. Практика
- 7.04. Артефакты
- 7.04. Моделирование
- 7.04. Прототипирование
- 7.04. Инструменты аналитика
- 7.04. Взаимодействие
- 7.04. Технический дизайн
- 7.04. Справочник по BPMN 2.0
- 7.04. Итоги
- 7.04. Чек-лист самопроверки
Аналитика
Тестирование
- 7.05. Основы тестирования
- 7.05. Классификация тестирования
- 7.05. Процесс тестирования
- 7.05. Проектные артефакты QA
- 7.05. End-to-End и системное тестирование
- 7.05. Автоматизация тестирования
- 7.05. Порядок тестирования
- 7.05. Объекты в тестировании
- 7.05. Инструменты тестирования
- 7.05. Selenium
- 7.05. Тестовая документация
- 7.05. Юнит тестирование
- 7.05. Интеграционное тестирование
- 7.05. Нагрузочное и стресс тестирование
- 7.05. Тестирование безопасности
- 7.05. Тестирование мобильных приложений
- 7.05. Мутационное тестирование
- 7.05. Покрытие программного кода и полнота тестирования
- 7.05. Техники тестирования и тест-дизайн
- 7.05. Тестирование и исследование API
- 7.05. Итоги
- 7.05. Чек-лист самопроверки
Тестирование
Проектирование и архитектура
- 7.06. Общее о проектировании и архитектуре
- 7.06. Виды архитектур
- 7.06. Стили внутренней организации
- 7.06. Принципы компонентной архитектуры
- 7.06. Декомпозиция монолита
- 7.06. Инфраструктура как архитектурный фактор
- 7.06. Типы классов
- 7.06. Конструкция из классов
- 7.06. Доменная модель
- 7.06. Паттерны проектирования
- 7.06. Основы системного проектирования и масштабируемости параллелизма
- 7.06. Архитектурная практика
- 7.06. Итоги
- 7.06. Чек-лист самопроверки
Проектирование и архитектура
Проектирование и архитектура
Проектирование
- 7.06. Проектирование
- 7.06. Подходы к проектированию
- 7.06. Принципы проектирования
- 7.06. Проектирование сервисов и методов
- 7.06. Проектирование функциональных UI
- 7.06. Проектирование под нефункциональные требования
- 7.06. Документация как инструмент проектирования
- 7.06. Проектирование баз данных
- 7.06. Проектирование API и интеграций
- 7.06. Паттерны микросервисной архитектуры
- 7.06. Проектирование веб-разработки
- 7.06. Проектирование распределенных систем
- 7.06. Хранилища DWH и ETL-процессы
- 7.06. Лестница проектирования систем
- 7.06. Вертикальное масштабирование
- 7.06. Горизонтальное масштабирование
- 7.06. Горизонтальное дублирование
- 7.06. Competing Consumer Pattern
- 7.06. Read Replicas
- 7.06. Shared Nothing Architecture
- 7.06. Shared Storage Architecture
- 7.06. Single Node architecture
- 7.06. Уровни развития API и модель Ричардсона
- 7.06. Модельная архитектура микросервисов
- 7.06. Стратегии совместного использования кода в микросервисах
- 7.06. CQRS
- 7.06. Event Sourcing
- 7.06. Saga
- 7.06. Strangler Fig
- 7.06. Модульный монолит
- 7.06. Событийно-ориентированная архитектура
- 7.06. Сервисно-ориентированная архитектура
- 7.06. Пространственная архитектура
- 7.06. Методы и ключ идемпотентности
- 7.06. Архитектура конвейера
- 7.06. Одноранговая архитектура
- 7.06. Чистая архитектура
- 7.06. Многоуровневая архитектура
- 7.06. Надежность и доступность
- 7.06. Уровни SLA и реальное время простоя
- 7.06. Инженерия устойчивости
- 7.06. Масштабирование чтения и записи в веб-приложении
Проектирование
Интеллектуальные права
Техническое письмо
- 7.08. Техническое письмо
- 7.08. Паттерны стиля
- 7.08. Техническое задание по ГОСТ
- 7.08. Спецификация по ГОСТ
- 7.08. ПМИ по ГОСТ
- 7.08. ПЗ по ГОСТ
- 7.08. Руководство системного программиста по ГОСТ
- 7.08. Руководство программиста по ГОСТ
- 7.08. Руководство оператора по ГОСТ
- 7.08. Руководство по техническому обслуживанию по ГОСТ
- 7.08. Руководство пользователя по ГОСТ
- 7.08. Руководство администратора по ГОСТ
- 7.08. Документирование с помощью Swagger
- 7.08. Итоги
- 7.08. Чек-лист самопроверки
Техническое письмо
Базы знаний и задачники
- 7.09. Базы знаний
- 7.09. Wiki проекта
- 7.09. Задачи
- 7.09. Итоги
- 7.09. Чек-лист самопроверки
Базы знаний и задачники