Всем привет! Я живу в Средней Азии и замечаю следующую картину - мои знакомые и друзья со временем переезжают заграницу. Большей частью в Российскую Федерацию. Кто-то в Америку, кто-то в Корею, Турцию, Европу и прочие благополучные страны. Их всех объединяет одно - они потратили кучу времени и энергии на процесс переезда, получение документов, разрешений и прочих трудностей. Собравшись с несколькими, самыми близкими друзьями, мы решили запилить сервис помощи переселенцам - HumanWay.

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

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

Мне пришла идея - собирать факты. Факт - это объект реального мира - некая порция информации. Факт типизированный, т.е. если факт - "Возраст", тогда этот факт должен хранить объект типа AgeFact в котором может быть только неотрицательное целое число меньше 130 (не слышал, чтобы кто-то дожил до этого возраста, а если дожил, то решил бы в столь почтенные годы на переезд). Или например Область - RussiaRegion - справочный объект со счетным количеством объектов. Соответственно в факт "Область" невозможно записать ничего кроме области. Нраица!

Так возникла идея базы данных фактов. Системы управления фактами. Нереляционной системы управления фактами. Имперской Гвардейской Штурмовой Нереляционная Системы Управления Фактами. Ух, куда занесло.

Как хранить факты? Самое простое - свалим все в кучу, в простой массив. Сам тип факта является ключом. При необходимости можно добавить индекс, но пока массив небольшой, можно и прямым перебором. Сериализуем все в JSON и положим в колоночку с таким же типом в БД. Да - очень просто, но мы же только в начале пути. Как гласит один из принципов языка Python - "simple better than complex".

Хорошо, информацию мы придумали как хранить, а что с этим всем делать? К хранению еще нужна система вывода выражений (в смысле вычисление ответа, а не печати на экране). Достать факт из базы, сделать вывод и произвести какое-нибудь действие. Для этого нужен свой DSL. Велосипед конечно мы строить не будем, а возьмем всеми любимый JavaScript. Запустим песочницу без состояния, будем ей кормить все собранные о пользователе данные и выражение, которое надо вычислить. Ответом будет булевый тип: да или нет. Для примера, пользователю надо напомнить взять трудовую книжку на подачу документов на программу переселения соотечественников. Но для детей подавать трудовую книжку не принято, поэтому введем ограничение по возрасту: AgeFact >= 16.

Пример использования DSL
Пример использования DSL

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

Пример элемента формы ввода
Пример элемента формы ввода

Поля (коих может быть много типов, не только для ввода данных, но и банальное текстовое поле) объединяем в карточки, карточки объединяем в экраны, экраны объединяем в цепочки и мы получили конструктор для сбора практически любого сервиса с богатой доменной областью.

Наш конструктор
Наш конструктор

Решая специфическую задачу, у нас получилось создать решение, которое позволяет быстро раскатывать интерактивные сайты. Мы сделали сайт помощи переселенцам в Россию, теперь мы задумываемся об Америке, Канаде, Корее и других странах. А вообще, мысль на переселении не кончается, любой сложный процесс со сбором справок, документов и прочих бумаг - это наш кандидат на освещение. Например, как организовать учебу за рубежом для своего ребенка? Как купить квартиру? Как устроить ребенка в детский сад? Наша основная задача - помощь людям в сложных, запутанных процессах, где есть множество тайных знаний. Поэтому мы себя и назвали - HumanWay - т.е. путь человека. Мы пытаемся осветить дорогу в сумерках бюрократии :)

На все ушло каких-то полгода разработки такой веселой командой, как:

  1. Программисты 2 шт (Я и не я)

  2. Дизайнер (Чтобы было все красиво)

  3. Юрист (Для сбора информации, бланков, документов и пр.)

И вот мы здесь. Сервис работает, а люди к нам не приходят...

Никто не приходит
Никто не приходит

Что мы для раскрутки?

  1. Раскидали по знакомым, чтобы те отправили знакомым и т.д. - я бы сильно не рассчитывал на этот канал раскрутки

  2. Добавились во все найденные группы переселения и даже! наш пост запинили в 3х группах! Итог: люди не особо читают запиненные сообщения. В прочих группах, админы хотят денег, что логично. Вначале нам казалось, что группы тг - это главный наш источник пользователей, но выяснилось, что у формата чата есть неприятная особенность - ваши сообщения уплывают вверх и их читает очень ограниченное количество людей. Было бы классно разработать бота, который бы мог отвечать пользователям на их вопросы - идет разработка решения, как только что-то будет (или не будет) - ждите статьи!.

  3. SEO оптимизировались, сделали статичную версию сайта, чтобы скормить поисковикам.

  4. Не опускаем руки! Мы искренне верим в сервис, что он будет полезен нашим пользователям. Просто они должны узнать о нас.

Пожалуйста, пользователь, прийди. Мы все сделали, чтобы тебе было удобно. Чтобы ты смог узнать о многих подводных камнях такого сложного процесса, как переселение. Мы очень старались!

Плачущий кот, который должен показать наши чувства после полугода разработки, а пользователь не приходит
Плачущий кот, который должен показать наши чувства после полугода разработки, а пользователь не приходит

Команда HumanWay

Комментарии (17)


  1. AleksDesker
    28.08.2022 12:45
    +7

    А ваш пользователь он вообще существует? Думаю у тех у кого есть интернет и на чем смотреть ваш сайт скорее интересует вопрос как свалить из РФ, а не наоборот.


    1. HumanWay Автор
      28.08.2022 13:13

      Другие страны на очереди :) Мы работаем над Америкой сейчас.


    1. HumanWay Автор
      28.08.2022 13:27
      +1

      https://lenta.ru/news/2022/08/08/trudmig/ а потом минимум 10-15% этих людей со временем получат паспорт РФ


    1. Lazytech
      28.08.2022 14:18
      +1

      Напомню, есть еще гастарбайтеры. Только они на русском не всегда читать умеют, а некоторые кириллицу вообще не понимают. :) К сожалению, это почти не шутка.


    1. nick-for-habr
      28.08.2022 16:53
      +1

      Рискну предположить, что ваше утверждение не на 100% верное. Пруфов, как и вы - не привожу, да и кто в наше время верит пруфам: аргумент "это же очевидно любому!" рулит.

      Ваш взгляд на миграцию несомненно популярнее минимум на Хабре, и (возможно) даже ближе к действительности, но всё же не стоит так категорично отвергать альтернативы. Всё же не секрет, что мы живём в информационном пузыре, и часто путаем пузырь с реальностью. А это лишь пересекающиеся, но не совпадающие множества.


    1. goga_kk
      28.08.2022 17:47
      +3

      Послушайте вы и вам подобные. Мне не нравится происходящее, этого не должно было случится.

      Но у меня и у многих других есть вагон причин никуда не уезжать, которые реально являются стоп факторами. Писать свои и приводить примеры не вижу смысла. Мне кажется многое на поверхности.

      Да, можно апеллировать к тому, что дальше будет только хуже, но это все вилами по воде с учетом серьезности стоп факторов.

      На деле я вижу, что обо всех, кто не стремится уехать, мнение, как о недалеких. Больше скажу, как о не людях. Это по-вашему нормально? Ответьте.

      И еще. Вы действительно думаете, что такое отношение поможет как-то исправить ситуацию?


      1. PanDubls
        28.08.2022 18:06

        "Не хотеть уехать из РФ" != "Хотеть приехать в РФ"


      1. AleksDesker
        28.08.2022 19:13
        +1

        Вы очень многое нашли в моем комментарии, чего там нет.

        Про стоп-факторы я прекрасно понимаю, сам до сих пор в России.

        "кто не стремится уехать" "о недалеких" "не людях" - а откуда это у вас выползло я даже предположить не могу.

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


  1. dikkini
    28.08.2022 13:52

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


    1. HumanWay Автор
      28.08.2022 13:58

      Всё верно, конечно же люди решают проблему, но одни это делают за 2, 3, 5 и даже 10 походов в каждое ведомство (а ведомств 3-5 ещё к тому же), т.к. не знают что делать, а мы предлагаем это сделать за 1-2 раза, т.к. человек будет полностью подготовлен. Это экономия времени и денег и нервов :)


  1. kinall
    28.08.2022 14:09

    Меня такое приложение интересует как пользователя. Вы сравнивали ваш продукт с аналогами? Например, рекламируют последнее время MigApp. В чём именно ваши киллер-фичи?


  1. ZhilkinSerg
    28.08.2022 14:17

    ORM изобрели. Поздравляю!


    1. HumanWay Автор
      28.08.2022 15:01

      ORM все таки на уровень ниже, на инфраструктурном уровне. Я описываю больше подход к хранению данных. Способу представления сведений о пользователе и методе работы с ними. Так то можно было бы завести объект User, дать ему свойства User.originCountry, User.age и т.д. Мы же представляем данные о пользователе как набор фактов: AgeFact, NameFact, OriginCountry. А дальше в дело вступает движок CQRS и делает Read модели, где вполне может использоваться традиционный подход с к свойствам.


  1. kahi4
    28.08.2022 19:02
    +2

    Про пролог уже кто-то написал?

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


  1. Rampages
    28.08.2022 21:52
    +1

    Мне многие такие системы не нравятся, тем что они собирают информацию и ты обязан согласиться, с тем, что их будут обрабатывать они и сторонние ресурсы, то есть соберут у себя базу данных и будут ей приторговывать… Что там у вас с реализацией GDPR?

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

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

    Вообще если бы сам делал подобный проект, наверное бы сделал опросник, типо:

    • Кто я?(кратко о себе, пол, возраст, религиозные предпочтению или их отсутствие, знание языков)

    • Что умею/могу? (профессия или навыки, возможно опыт работы какой-то)

    • Что хочу/к чему стремлюсь? (допустим хочу получить гражданство такой-то страны или допустим иметь свободный выезд за границу в такую-то страну, или что-то типо основать интернациональный бизнес/компанию, короче много вариантов можно придумать)

    • Чего не хочу/к чему не стремлюсь? (для простоты тоже предоставить варианты, например не хочу жить в исламской стране или не хочу жить в стране со строгим валютным контролем или не хочу жить в стране окруженной водой, тоже можно много вариантов придумать)

    • Где за границей успел побывать в качестве туриста? Что понравилось? Что не понравилось? дата когда это было (мб что-то поменялось с тех пор).

    • Где за границей успел побывать по работе или пытался релоцироваться и вопросы аналогичные туристу выше.

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

    Также неплохо было бы сделать какой-то раздел, для тех кто уже оказался в такой-то стране и сейчас не знает что делать и как быть, допустим какие-то документы можно получить в том же посольстве РФ, но при этом в какой-нибудь Турции время пребывания без икамета (ВНЖ) ограничено 2мя месяцами и получить какие-то документы в посольстве РФ можно не успеть. Ну то есть тоже есть на что обратить внимание. При мне в Турции у нотариуса делали доверенность на человека в Москве без присутствия этого человека в Турции, то есть даже если вы уехали и забыли сделать доверенности на друзей/родственников на всякий случай, то необязательно возвращаться, и вот таких нюансов очень и очень много в каждой стране.

    Сейчас расплодилось очень много сообществ в телеграмме, с базами знаний в Notion.


  1. Roodootoo
    29.08.2022 05:35

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


  1. EXellence
    29.08.2022 12:58
    +1

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

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

    Ну и, конечно, нужно убедить пользователя доверить вам свои данные - добавить раздел о защите и конфиденциальности, разместить отзывы, предложить блогерам протестировать сервис, в конце концов.

    Удачи!