Какой мы видим свою роль как внешнего разработчика в таких условиях и какую ценность видят в нас наши заказчики даже при наличии внутренней разработки? Конечно, собственный департамент разработки позволяет решать большую часть ежедневных задач без потерь на подключение внешнего исполнителя – как финансовых, так и коммуникационных. Но есть целый ряд случаев, когда обращение к специализированной компании-разработчику несет зримые выгоды.
Первая и самая тривиальная выгода – решение одноразовых задач. Если бизнесу необходима разработка новой системы или доработка существующей, бывает крайне неудобно и накладно искать и принимать на работу разработчиков, тестировщиков, аналитиков, выделять оборудование и покупать лицензии на средства разработки. Это тем более неудобно, что по завершении проекта придется так же резко сворачивать эту активность, переводя новую систему в режим поддержки. Здесь подключение внешнего исполнителя выглядит органичным решением проблемы.
Понятно, что ведение внутренней разработки позволяет собрать команду специалистов, глубоко понимающих собственные приложения и информационные системы и отлично ориентирующихся в используемых в них технологиях. Однако когда бизнес-требования диктуют необходимость разработки новых компонент, систем и комплексов, бывает, нужна экспертиза, далеко выходящая за рамки ежедневной поддержки существующих систем. И здесь проявляется наше второе отличие: мы обладаем широким опытом разработки самых разных систем в различных отраслях – от банков и органов государственной власти до машиностроения и медицины. Центр программных решений выполняет десятки программных проектов каждый год, и этот опыт позволяет оперативно и качественно подходить к решению самых нестандартных задач заказчиков. Различные вендоры, технологические стеки, требования и стили ведения проектов (то, что может представлять серьезные трудности для внутренней команды разработки) являются ежедневной реальностью наших команд.
Чтобы представить еще один аспект, касающийся ценности внешнего разработчика, необходимо сделать философское отступление. Очень часто инженеры вообще и программисты в частности относятся к одному из двух типов характеров. Одни легко разбираются в новой тематике, энергично строят новые системы, но теряют к ним интерес, как только решены основные дизайнерско-конструкторские задачи. Другие не так любят изобретать новые подходы и архитектуры, зато эффективно и профессионально решают задачи по разработке и любят доводить работу до логического завершения. Для успеха любого проекта обязательно нужны люди обоих типов. Отметим также, что зачастую сразу после выхода системы в продуктив инженеры первого типа начинают присматриваться к другим проектам и в конце концов оставляют работу по этой системе или даже меняют место работы. В результате, когда нужно вновь вернуться к разработке (как правило, получив новые требования от бизнеса), внутренней команде бывает трудно найти нужных для такой активности инженеров.
Мы одновременно ведем множество проектов для наших заказчиков. На их разных этапах нужны разнообразные специалисты, причем в различных количествах. Большой пул параллельных проектов позволяет нам гибко менять работу для наших специалистов, обеспечивая их возможностью постоянного профессионального роста. Кроме того, они избегают застоя в работе. Что это дает нашему заказчику? Возможность всегда обратиться к нам и реализовать проект, обеспечив себя командой, которая как раз и нужна для успеха всего дела.
Еще одна наша особенность – широкая специализация. Можно для разнообразия привести в пример не разработку, а нагрузочное тестирование. Одна из его задач – провести сайзинг оборудования, например, при смене поколений серверных систем или систем хранения данных под определенную ИС. Эта работа требует наличия методик и подходов к организации нагрузочного тестирования, умения строить тестовые модели данных, владения инструментами нагрузки, способности интерпретировать результаты измерений и не в последнюю очередь наличия свободного «железа» для проведения тестирования. Конечно, все это любая крупная компания обычно способна организовать у себя самостоятельно. Но смена поколений оборудования обычно происходит раз в 3–6 лет, понятно, что конструкция, в которой необходимые для этого люди и «железо» будут востребованы настолько редко (а в остальное время будут простаивать), нежизнеспособна. Поэтому к нам часто обращаются именно с такими задачами: не типовыми и требующими узкой специализации, невозможной в условиях внутренней разработки.
Следствием разнообразия наших проектов является естественно наработанный опыт использования самых разных технологий и продуктов различных вендоров. Нужно выбрать между RDBMS и NoSQL? Нужно решить, какую шину использовать – от IBM, Oracle или Red Hat? Нужно выбрать, строить ли приложение на 3-звенной архитектуре с сервером приложений или на распределенной микросервисной архитектуре? Мы можем разобраться в стоящих перед заказчиком задачах и помочь сделать правильный выбор.