Введение
В этой статье я коснусь некоторых проблем заказной разработки, как мы эти проблемы решаем, и как мы постепенно перешли к идее создать it продукт — веб-платформы с подходом, где во главе угла стоит SQL.
Демостенд нашей веб-платформы можно посмотреть
здесь. Заказная разработка: ключевые проблемы в нашей практике
Делая очередной проект по схеме заказной разработки, когда код пишется под проект на неком фреймворке, сталкиваешься с одним и тем же набором проблем.
Долго делается веб-проектОжидания заказчика по срокам проекта всегда сильно превосходят реальность. Полный стек разработки подразумевает взаимодействие множества людей, возникают микрозадержки, и в итоге все это растягивается (даже без учета периода отладки).
В такой схеме программист — самое узкое звено, и именно оно должно работать на полную мощность без ненужных простоев.
Много ошибок при запуске продуктаРазработка с нуля и полный стек подразумевают больше мест, где можно допустить ошибку. Особенно это проявляется при попытках «ускорить» проект. Добавляются новые программисты, какие-то решения по требованиям принимаются необдуманно, прямо на ходу.
В итоге это ведет все к ошибкам, долгой отладке и лишним нервам.
Отладка растягивается из-за того, что ошибка может быть где угодно расположена по стеку.
Дорого стоит разработка с нуляОчень часто заказчик сравнивает заказную разработку с созданием аналогичного продукта на готовой системе — какой-либо CMS. При этом совершенно не учитывается гибкость и возможность дальнейшего развития.
Заказная разработка - это всегда дорого, т.к. количество людей требуется в этом процессе гораздо больше, нежели в сборке из готовых модулей.
При этом квалификация этих людей требуется более высокая высокая, чем при работе с модулями на CMS в общем случае.
Возрастает человеческий факторНеправильный доступ к данным, гигантские неявные циклы в коде могут привести к проблемам производительности. Сложно искать подобные ошибки по проекту, когда их можно внести на любом уровне (в хранимых процедурах, бизнес-логике, контроллерах).
Подробнее проблема
качественного кода разобрана в другой статье.
Должно быть довольно хорошее понимание этих моментов у каждого разработчика, иначе в дальнейшем можно получить проблемные места по производительности где-то в коде проекта.
При этом подготовка одного программиста по полному стеку довольно непростая история. И далеко не сразу вопросы производительности для него становятся актуальными.
Уход человека из команды может очень сильно сказаться на дальнейшем качестве проекта, и здесь сложно что-то изменить, т.к. в любом случае есть такие люди, которые знают о проекте больше других, и никакая документация не сможет компенсировать для проекта их потерю.
В нашем случае заказная разработка — не сахар.
Возможно, есть такие команды, которые делают все легко и просто (ну или поддерживают такое ощущение у потенциального клиента).
Если же эти проблемы наложить на неуемные аппетиты заказчика по кастомизации и гибкости, то картина получается совсем грустная. Долго, дорого, с ошибками делаем проект, переделываем под новые требования-хотелки клиента, пока в итоге не заканчивается бюджет, и проект замораживается на неопределенный срок.
Эти проблемы были порождением нашего подхода, и необходимо было что-то менять именно в нем, возможно от чего-то отказаться.
Особенно, конечно, удручает ситуация, когда относительно типовые вещи (например, добавление поля на редактирование в таблицу) делаются очень долго. Нужен был новый способ, который позволил бы делать эти правки легко и без лишних хлопот различных специалистов.
Что нужно заказчику
Что хочет от нас заказчик, когда создает свой it продукт?
Экономия средствОдин из главных факторов — это деньги. Он хочет сэкономить и понимать свои будущие расходы на развитие проекта.
Для большинства заказных проектов стоимость изменений постепенно растет. В начале быстро движемся, реализуем все необходимые возможности. Но по мере использования проекта, изменение/добавление возможностей делать все сложнее/дороже.
Скорость внедрения новых возможностейСкорость внедрения идет рука об руку с экономией. Все, что долго внедряется, и бюджета требует больше.
Умный заказчик инстинктивно понимает, что ему не нужен долгий тяжелый проект, в котором можно надолго застрять. Нужно сделать быстро что-то небольшое, внедрить, получить обратную связь (и свернуть проект, если нет результата).
Если же делать большой проект год-полтора, то надо вбухать большую сумму, при этом нет никакой гарантии, что самолетик полетит.
Продукт можно быстро менять, а не ждать внедрения каждой возможности неделями.
В проекте может быть очень много гипотез, которые заказчик хочет проверить на своих пользователях. И важно успевать за ритмом хотелок заказчика. Вчера придумали, сегодня описали, завтра внедрили и пользуемся. Так в идеале должны внедряться мелкие доработки.
Совсем идеал — это когда заказчик некоторые моменты может по-горячему поправить в системе (конечно, с пониманием и полной ответственностью за свои действия) — как мы это делаем в Excel, меняя формат таблиц или добавляя новую формулу.
Забегая вперед, скажу, что мы исходим из того, что заказчик может знать SQL, а значит, может при желании много что изменять в нашей системе.
Кастомизация функционала под требования клиентаИменно по этой причине заказчик выбирает разработку под свои нужды.
В заказной разработке можно сделать что угодно и как угодно.
Это пункт, где по умолчанию к заказной разработке клиент выдвигает максимально высокие требования: уникальный дизайн, все требования бизнес-аналитика заказчика, плотные интеграции с внешними системами.
Важный нюанс — кастомизация в будущем под вновь возникающие потребности бизнеса. Если это совсем не учитывать в начале, то может получиться хорошая система, которую никак нельзя поменять (очень дорого), либо изменение делается через дичайшие костыли.
Низкие риски смены поставщикаВ идеале для заказчика проект никак не должен зависеть от поставщика услуг. Это достигается за счет использования широко известных проверенных технологий, чтобы иметь достаточно вариантов для найма подходящего специалиста. Второе по важности — это документация, которая создается (или не создается) под проект по мере развития системы.
В нашей платформе для поддержки решения надо знать всего лишь 2 распространенных технологии: MS SQL Server (бизнес-логика и обработка данных) и Bootstrap (стилизация интерфейса)
Высокое качество выпускаемого продуктаНа этапе запуска заказчик ожидает, что продукт должен быть хорошо протестирован и не содержать ошибок. В теории — да. Но посмотрите на количество патчей готового продукта ОС Windows (возможно сравнение некорректное ввиду сложности и масштабов, но суть примерно та же).
Здесь важнее понимать итеративную природу проекта, и с понимаем относиться к ошибкам (нашли — исправили — работаем дальше).
В любом случае разработчик, со своей стороны, должен в целом как-то уменьшать риски возникновения ошибок, не влияя сильно на раздувание бюджета.
Что может предложить разработчик: заказная разработка и готовый свой it продукт
Что может предложить веб-разработчик такому заказчику?
По большому счету у него 2 варианта:
- сделать свое типовое готовое решение под конкретную задачу (например, CRM) и продавать это решение заказчику (если оно удовлетворит его потребности в полной мере).
- предложить услуги заказной разработки (продавать часы программистов).
Оба решения имеют свои достоинства и недостатки.
Готовое решение сложно в дальнейшем кастомизировать, а заказная разработка это очень долго и дорого.
Главная дилемма заказчика — хочется быстро получить готовое решение, но при этом оставить возможность глубокой кастомизации под себя и возможность в дальнейшем развивать свой продукт.
Разработчику в идеале хорошо бы сделать свой типовой продукт и продавать его всем желающим. Но есть свои нюансы:
- продукт создавать дорого (надо как-то сводить концы с концами, пока продукт не зарабатывает)
- легко промахнуться мимо рынка (никому не нужно, не решает задачу, сильно проигрывает конкурентам). Разработчики — не маркетологи, и в большей части не обладают глубоким пониманием проблем конечного пользователя, фокусируясь на других аспектах продукта.
Как увязать готовые продукты и заказную разработку
Постепенно пришло понимание, что заказная работа по фуллстеку — это сложно масштабируемое низкорентабельное и довольно неблагодарное дело:
- довольно сложно копить кодовую базу (не всегда получается так разработать компонент, чтобы повторно использовать).
- ошибки могут вылезать откуда угодно
- сложно обучать начинающего разработчика полному стеку. При этом он еще рано или поздно уходит.
- очень долго внедряются даже простые правки.
В идеале решение виделось таким:
- создать некую платформу, которая позволяет делать быстрые изменения по бизнес-логики без необходимости делать обновления кода сайта.
- некий пул типовых компонентов, которыми можно управлять из SQL. SQL все знают, хранимые процедуры в целом имеют довольно хорошие возможности по описанию бизнес-логики (наверно, это для ООП-программистов звучит дико).
- максимально уменьшить стек разработки, чтобы разработчику не нужно было изучать 6-7 технологий для поддержки проекта. Меньше технологий — дешевле поддержка, быстрее обучение, более надежно работающее решение.
- стандартизация элементов и подходов к разработке. Раньше была проблема — каждый разработчик чуть-чуть, но все же по-своему делал некоторые элементы. И по мере развития проекта это значительно усложняет поддержку кода. В идеале система должна выглядеть таким образом, как будто ее писал один человек.
- крайне важно оставить возможность глубокой кастомизации. Без этого часть возможных покупателей платформы откажутся в силу недоступности той или иной возможности. Т.е. задача сделать так, чтобы можно было относительно простыми средствами развивать систему под себя, не опасаясь, что мы не сможем реализовать какую-то бизнес-функцию приложения.
- возможность наращивать способности системы от проекта к проекту. Не в плане брать чужие наработки по бизнес-логике, а в плане шлифовки возможностей стандартных компонентов (появление опций, правка сложных багов и т.д.)
- меньше людей на проекте. Чем больше требуется разработчиков, тем сложнее координация, тем больше требуется звонков, совещаний, пояснений по бизнес-логике. При увеличении количества качество кода будет падать. И не факт, что это как-то ускорит проект.
Меньше технологий — дешевле поддержка, быстрее обучение, более надежно работающее решение.
Как появилась идея создать конструктор сайтов. Суть платформы Falcon Space
Управление метриками через SQLВ нашей старой системе учета, которую мы сделали под свои нужды, был модуль Метрики.
В нем я реализовал подход, когда метрика — это просто некая хранимая процедура на SQL, которая визуализируется в таблицу. В таблице могут быть вложенные таблицы, которые также создаются через SQL.
В итоге, чтобы создавать такие метрики не нужно менять код приложения, делать обновления PROD-версии. Меняем данные в таблицах, создаем процедуры и проверяем на сайте.
Нет комментариев