[Перевод] О трудном и утомительном пути от идеи до веб-сайта

4mosfva1-ayfds0fjy26hqnekvw.jpeg


2017 год. Я уже около шести лет работаю в компании, продающей кубики Рубика, и начинаю испытывать зуд от желания попробовать что-то новое. Несколько лет проработав с физическими товарами, я осознал, что всегда хотел работать в полностью онлайновом и виртуальном бизнесе, в котором не придётся иметь дело с материальными продуктами (и не испытывать связанной с ними головной боли).
Первым делом я попробовал найти крутые свободные доменные имена. Мне подумалось, что каждая великолепная идея начинается с крутого и запоминающегося доменного имени. Мои поиски привели меня на сайты-аукционы доменов, где я нашёл подходящее имя, права владения на которое истекали. Сайт назывался thingbase.com. Я оказался единственным, кто сделал ставку, поэтому выиграл имя по номинальной стоимости.

Я был поражён тому, что мне удалось ухватить крутое, по моему мнению, доменное имя, и дал себе обещание, что создам на его основе что-то потрясающее. И так начался многолетний путь по превращению этого домена в действующий веб-сайт.

Сначала мне нужна была концепция того, что будет делать веб-сайт. Я попробовал использовать в качестве источника вдохновения само имя, но это было сложно, учитывая, насколько общим оно было. Я думал, что логичнее будет использовать его «базы данных для вещей». Но что это за вещи (thing)? Вещью может быть что угодно.

Немного поразмыслив, я создал первоначальное видение веб-сайта. Это будет онлайн-хаб software-as-a-service для компаний, людей и брэндов с целью управления создаваемых ими физических и виртуальных продуктов. Продукты будут «вещами», а Thingbase станет местом, откуда можно руководить их онлайн-присутствием.

Чтобы развить эту идею, я нанял своего брата (разработчика ПО), который в качестве подработки в свободное от основной работы время сделал бы мне веб-сайт. Он способный разработчик, однако моё видение сайта было туманным и чрезмерно масштабным. Оглядываясь назад, я понимаю, что вне зависимости то того, что бы он создал, меня бы это не устроило. Спустя несколько месяцев работы с ним и тысяч потраченных долларов я всё ещё ощущал, что проект движется не в том направлении. Поэтому я решил поставить его на паузу.

Однако стремление создать на основе thingbase.com что-то крутое не ослабело. Спустя несколько месяцев я вернулся к нему. Чтобы снизить затраты, я начал учиться делать веб-сайты самостоятельно. Я использовал часть кода, написанного братом, и адаптировал его под собственную интерпретацию видения Thingbase, обучаясь в процессе работы.

После нескольких месяцев кодинга по вечерам и выходным (наряду с моей основной работой) я получил достаточно презентабельный веб-сайт, который развернул в Интернете. Однако проект сильно страдал от «расползания возможностей». Так как моё видение веб-сайта было столь масштабным, я пытался встроить в него все возможные способы применения, которые мог придумать. В результате получился проект-Франкенштейн, пытавшийся решить все задачи, однако толком не решавший ни одной.

Кроме того, поскольку я учился программированию в процессе создания веб-сайта, кодовая база была неорганизованной и неудобной в поддержке. В конце концов осознав, что я сделал проект слишком объёмным, а состояние кодовой базы меня не устраивает, я сдался и снова поставил проект на паузу.

Прошёл почти год. Я не забыл о Thingbase. Он всегда находился на периферии моего сознания. Но я был занят другими аспектами своей жизни и не мог найти мотивации начать с начала.

Однажды совершенно неожиданно я получил в Discord сообщение от некого Криса. Он написал мне наобум, потому что мы сидели на одном Discord-сервере, связанном с разработкой ПО. Крис сказал, что он веб-разработчик из Японии, ищущий проекты.

Не имея других вариантов и думая, что это станет моим шансом наконец-то поднять Thingbase, сотрудничая с «профессиональным» веб-разработчиком, я решил воспользоваться его услугами. Мы договорились о почасовой ставке и он приступил к работе.

На этот раз, научившись на ошибках прошлого, я решил создать более ограниченную версию того, чем мог стать Thingbase. Однако оплачиваемые часы накапливались быстро, а прогресс оказался медленным. Крис не очень хорошо владел английским, и общение с ним иногда было затруднительным. Я просил сделать что-то одно, а он иногда не полностью понимал мою просьбу, впустую тратя время.

Спустя несколько месяцев активной работы с Крисом и тысяч потраченных долларов я постепенно пришёл к осознанию, что наше сотрудничество идёт не так, как задумано. Будучи иностранным подрядчиком на конкурентном рынке, иногда он казался более заинтересованным в максимизации оплачиваемых часов и обеспечение своей стабильной загрузки, а не в создании качественного веб-сайта.

Также я заметил признаки того, что он был не таким уж опытным в веб-разработке, как говорил. В конце концов, я нашёл его благодаря тому, что он наобум писал людям на Discord-серверах. И казалось, что он подделал или приукрасил своё портфолио предыдущих проектов.

Но, честно говоря, не думаю, что какой-либо уровень опыта или возможностей удовлетворил бы меня в тот момент. Проект был моим ребёнком, я был одержим подробностями вплоть до того, что проверял код Криса построчно. По сути, я ожидал получить веб-сайт, который мог бы сделать сам, но руками другого человека.

Потратив ещё несколько тысяч долларов на так и незавершённый веб-сайт, я сказал Крису, что ему больше не надо работать над проектом, и снова поставил его на паузу.

После трёх неудачных попыток, десятков тысяч долларов и тысяч потраченных часов, у меня на руках не было ничего, что я мог бы продемонстрировать. Я решил, что настало время поразмыслить, и пришёл к выводу, что прежде чем двигаться дальше, надо разобраться, что же пошло не так.

В конце концов, я подумал, что вероятность успеха одного веб-сайта низка, поэтому нужно сосредоточиться на совершенствовании своих навыков разработки веб-сайтов и быстро выполнять итерации, а не делать единственную ставку на один проект.

uwaw35gtumn67om3hwbbzzetmqm.jpeg

Официальный веб-сайт Giraffeql Boilerplate

Так родилась концепция Giraffeql Boilerplate. Boilerplate — это готовый фреймворк для веб-сайтов, который можно без особых дополнительных усилий можно настроить под любой проект веб-сайта. При разработке каждого нового проекта я буду встраивать все крупные изменения в Boilerplate для упрощения разработки следующего проекта.

6qixrxokysdxcutshij7ngjlqc4.jpeg

OSRSRecords.com, один из проектов, разработанных автором при помощи Giraffeql Boilerplate

За последующие несколько лет я при помощи Boilerplate разработал множество проектов. Я разработал веб-сайт для документирования «алгоритмов» решения кубика Рубика (к сожалению, сайт столкнулся с препятствиями, поэтому так и не был выпущен). Я разработал веб-сайт для отслеживания личных рекордов по скоростной сборке кубика Рубика (CubePB.com). Разработал веб-сайт для отслеживания спидранов боссов для сообщества любителей олдскульной RuneScape (OSRSRecords.com).

Кроме того, были десятки других, более мелких личных проектов, которые так и не выпущены, но это неважно, поскольку благодаря их разработке я смог усовершенствовать бойлерплейт, чтобы упростить разработку своего следующего проекта. В этом заключались красота и магия использования бойлерплейта.

Спустя годы разработки новых веб-проектов при помощи бойлерплейта цель создания Thingbase так и не покинула мои мысли. Я вернусь к нему, это лишь вопрос времени, и на этот раз, надеюсь, всё будет по-настоящему.

Прошлой осенью я почувствовал, что снова готов к работе над Thingbase. Я нашёл возможный способ применения Thingbase в собственной компании онлайн-продаж, которая использовала в качестве платформы продаж Shopify. По сути, в Shopify есть система управления перечнем товаров, которую я считаю незавершённой, и мне захотелось использовать Thingbase для восполнения отсутствующих функций.

При работе с Shopify есть возможность управлять несколькими точками и отслеживать перемещение товаров между этими точками. К сожалению, к системе перемещения невозможно получить доступ через API (эту проблему Shopify не решает уже несколько лет), что усложняет разработку специализированных приложений на его основе. Наша компания вынуждена использовать скрипты TamperMonkey, чтобы обойти отсутствие возможности доступа через API, но это было грубое решение, которое часто ломается.

Кроме того, я обнаружил, что в Shopify невозможно выполнять перемещение ещё не существующих продуктов. Допустим, прибыл новый товар, который ещё не ввели в систему Shopify. Отслеживать состояние этого товара через систему перемещений просто невозможно, поскольку товар в системе пока не существует.

Для решения этой проблемы я разработал систему управления товарами и их перемещения вне Shopify, а затем использовал последовательность webhook-запросов для синхронизации всех изменений в перечне с системами Shopify.

И на этом я хочу представить последнюю итерацию Thingbase для публичного бета-тестирования. Моя компания с прошлой осени успешно использовала Thingbase вместо системы перемещений Shopify, но теперь я пытаюсь исследовать дополнительные способы его применения, в том числе у других компаний онлайн-торговли и частных лиц.

oowkj2ljoifjqqzmqvhrufvx11u.jpeg

Превью системы перемещений Thingbase

Я попытался извлечь урок из своих ошибок, когда видение Thingbase было слишком сложным и масштабным. Цель нового Thingbase проста: помогать пользователям отслеживать их «вещи», физические или виртуальные.

aq1cnftbykdivvw0r5hxmwoim2e.jpeg

При помощи инвентарей Thingbase можно отслеживать любые свои «вещи»

Хотя эта последняя итерация Thingbase стала кульминацией почти шести лет попыток, итераций и неудач, я всё равно знаю, что моя работа далеко не завершена. На самом деле, она едва началась. Мне предстоит долгий и утомительный путь к тому, чтобы сделать Thingbase таким веб-сайтом, которым я его задумал.

В разработке ПО нет конечного пункта назначения, поэтому нужно наслаждаться дорогой. Неизбежно появятся новые итерации на основе отчётов о багах и отзывов пользователей. Но теперь я вооружён Giraffeql Boilerplate и способностью быстро реализовывать нужные пользователям функции; я чувствую, что готов к любым испытаниям, которые встретятся на моём пути.

Ссылки


© Habrahabr.ru