Цена товара
Показывать так, как товар реально продаётся
Если лента продаётся кратно пяти метрам, интерфейс не должен создавать ощущение более низкой цены за счёт цены за метр.
Проект · интернет-магазин · каталог · данные
Этот проект начался не с разработки.
Сначала была подработка на монтаже светодиодного освещения. Хороший старый друг предложил мне помогать фирме, которая занималась продажей и монтажом LED-оборудования.
Я ездил на объекты, впервые серьёзно столкнулся с паяльником, оборудованием, лентами, блоками питания, профилями и всем тем, что обычно скрыто за красивой подсветкой.
Сейчас я понимаю, что этот опыт был важен не только сам по себе. Друг показал мне более смелое отношение к сложной работе: сначала разобраться, потом попробовать, ошибиться, поправить и постепенно начать понимать.
Позже этот принцип много раз проявлялся и в разработке.
Контекст
Продажа и монтаж LED-оборудования
Старт
Аудит старого сайта и перенос на Yii2
Сложность
Каталог, характеристики, импорт прайсов и заказы
Главный урок
Интерес не заменяет MVP и приоритеты
01 · От монтажа к сайту
Со временем мне стало интересно, как устроен сам бизнес.
Фирма продавала светодиодное оборудование, закупала товары у поставщиков, перепродавала их клиентам и параллельно занималась монтажом.
У них был сайт. Через него продавали товары, принимали заказы и продвигали услуги.
Когда прежний подрядчик перестал заниматься сайтом, меня попросили провести аудит. Оказалось, что сайт работает на устаревшем и малопонятном движке, который сложно развивать.
На тот момент я уже изучал Yii2 и предложил перенести сайт на него.
Проект во многом держался на интересе и личных отношениях. Мне хотелось проектировать, писать код, разбираться в архитектуре и решать реальные задачи.
Сейчас я понимаю: для старта этого интереса хватило, но для сложного проекта его оказалось недостаточно.
Первый сдвиг понимания
Проект начался как перенос сайта, но быстро стал задачей о данных, процессах и границах разработки.
02 · Каталог оказался сложнее сайта
Сначала мне казалось, что нужно просто перенести сайт и сделать лучше.
Но главной сложностью оказался каталог.
LED-магазин — это не набор одинаковых товаров. Ленты, блоки питания, профили, светильники, контроллеры и комплектующие имеют разные характеристики.
Для одной категории важна мощность, для другой — напряжение, для третьей — цветовая температура, длина, степень защиты или тип монтажа.
Нужно было сделать так, чтобы каталог оставался гибким и при этом управляемым.
Я выбрал решение, которое позволяло задавать разные характеристики для разных категорий. На старте оно казалось правильным.
Но позже, когда товаров стало больше, стало понятно: гибкость имеет цену. Система стала сложнее в поддержке и тяжелее в работе.
Это был важный архитектурный урок: решение, удобное в начале, может стать ограничением при росте данных.
Категории
Ленты, блоки питания, профили, светильники, контроллеры и комплектующие.
Характеристики
Мощность, напряжение, длина, цветовая температура, степень защиты и тип монтажа.
Ограничение
Гибкая модель помогает на старте, но усложняет поддержку при росте каталога.
03 · Импорт товаров
Вторая большая сложность — обновление товаров.
Поставщики не давали API, через который можно было бы напрямую получать данные. Вместо этого предоставляли публичные ссылки на прайс-листы в Excel.
Нужно было обновлять цены, добавлять новые позиции и следить за тем, что исчезло из прайсов.
Я сделал систему импорта, которая могла читать такие файлы и обновлять каталог.
Тогда мне казалось, что чем больше автоматизации, тем лучше. Позже я понял, что с нестабильными Excel-файлами полная автоматизация становится рискованной.
Особенно если система может массово менять цены, добавлять или удалять товары.
В таких местах нужен контроль человека. Автоматизация должна помогать, но не должна превращаться в чёрный ящик, которому все слепо доверяют.
Логика безопасного импорта
01
Получить данные из Excel-прайса поставщика.
02
Понять, что изменится в товарах, ценах и наличии.
03
Не скрывать массовые изменения внутри автоматизации.
04
Применить изменения после осознанного контроля.
04 · Покупательский опыт
В проекте хорошо проявились вопросы клиентского опыта.
Например, светодиодная лента на старом сайте показывалась по цене за метр, хотя продавалась кратно пяти метрам.
С одной стороны, цена за метр выглядит ниже. С другой — в корзине покупатель всё равно увидит реальную сумму.
Мне казалось честнее и понятнее показывать товар так, как он действительно продаётся.
Был и другой спор — про форму заказа. Часть данных требовалась для доставки, но форма становилась слишком длинной.
Я считал и продолжаю считать, что продавец должен по возможности упрощать путь покупателя, а не перекладывать на него внутренние сложности процесса.
Этот проект помог мне лучше понять: интерфейс должен помогать человеку купить, а не объяснять ему внутреннее устройство бизнеса.
Цена товара
Если лента продаётся кратно пяти метрам, интерфейс не должен создавать ощущение более низкой цены за счёт цены за метр.
Форма заказа
Если бизнесу нужны данные для доставки, это не значит, что форма должна становиться тяжёлой и отпугивать клиента.
05 · Проект-урок
Этот проект я не считаю примером безупречной разработки.
Он важен для меня по другой причине.
Через него я понял, как быстро интерес к сложной задаче может увести проект вглубь, если нет чёткого MVP — минимально жизнеспособного продукта, плана запуска и разделения главного от второстепенного.
Я пытался сделать слишком много сразу: каталог, импорт, доставку, личный кабинет, публичную часть, дизайн, дополнительные функции и внутренние инструменты.
Не было дизайнера. Я решил, что всё сделаю сам.
Вместо минимальной рабочей версии я долго застревал на отдельных участках: искал лучший вариант, переделывал, сомневался и уходил в детали.
Сейчас я понимаю: сначала нужно было определить необходимое для запуска, выпустить рабочую версию и только потом развивать проект по данным, обратной связи и реальным задачам.
Без такого подхода сложная система легко уходит в бесконечную разработку.
06 · Новая версия
Позже, после работы в IT-компании и знакомства с новыми инструментами, я посмотрел на проект иначе.
Стало понятно, что часть архитектурных решений нужно пересматривать. Некоторые решения, которые казались удачными в начале, перестали соответствовать масштабу задачи.
Я начал новую версию приложения.
Многие вещи пошли быстрее, потому что опыта стало больше. Я уже лучше понимал архитектуру, сроки, ограничения и то, как важно не закапываться в детали до бесконечности.
Обновлённая версия стала для меня способом довести старый проект до более зрелого состояния.
Я хочу довести этот проект до логического завершения, потому что он важен для моего пути в разработке. Я хорошо знаю этих людей, видел бизнес изнутри и понимаю, сколько труда уже вложено.
07 · Что я понял после проекта
Сложность интернет-магазина находится в характеристиках, категориях, ценах, поставщиках, прайсах, остатках, доставке и правилах обновления.
Архитектура должна позволять рост, но не превращаться в бесконечную абстракцию.
Если источник данных нестабилен, система должна показывать человеку, что именно изменится.
Сайт не должен перекладывать внутреннюю сложность бизнеса на клиента.
Сначала нужна рабочая версия, которая создаёт ценность. Потом — развитие по данным и обратной связи.
Интерес помогает начать, но сложному проекту нужны приоритеты, сроки и границы.
Главный вывод
LED-магазин стал для меня не просто проектом интернет-магазина.
Через него я начал понимать, что сложность такого проекта находится не на поверхности. Не в красивой главной странице, не в корзине и не в кнопке «купить», а в данных, процессах и решениях, которые должны работать вместе.
Каталог, характеристики, поставщики, прайсы, импорт, доставка, заказы и интерфейс — всё это оказалось частями одной системы.
Но главный урок был не только техническим.
Если нет плана запуска, MVP и ясных приоритетов, даже сильный интерес может увести проект слишком глубоко. Система будет становиться сложнее, но так и не выйдет к пользователю.