RSS

Комментарии

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

Главный метод определения целевой аудитории в современном маркетинге — сегментация. Сегментация — это разделение клиентов на группы по заданным параметрам.

Для чего нужно сегментировать аудиторию?

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

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

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

По данным Website builder, 44% людей, получавших таргетированные письма, совершили как минимум одну покупку по содержащимся в них предложениям.

— В среднем, сегментация повышает open rate на 14,69%, а click rate — на 60%.

При проведении исследования 52% опрошенных маркетологов сказали о необходимости сегментации базы данных в email-рассылках, так как индивидуальные предложения приносят в 18 раз больше доходов, чем широковещательные.

Какие данные сегментировать

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

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

Анализ результатов опросов используется для приоритезации задач бизнеса, создания вектора коммуникации с потребителями либо корректировки коммуникационной стратегии. Анализ истории покупок — для создания рекламных кампаний, построения механик программы лояльности и геймификации, изменения фокусировок маркетинга.

Например, даже профессиональный аналитик (только если он дополнительно не учился на психолога) не сможет понять лучше самого клиента, что клиенту действительно надо.

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

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

Важные принципы проведения опросов

— Опрашивайте клиентов, у которых уже есть опыт использования вашего продукта или схожего продукта конкурентов.
— Задавайте открытые вопросы. Например, «Сколько бы вы заплатили за этот продукт?» вместо «Вы заплатили бы 100, 200 или 300 рублей?» или «Заплатили бы вы 500 рублей за этот продукт?». В противном случае срабатывает «эффект якоря» и человек будет отталкиваться от обозначенной суммы при ответе.
— Если вопрос относится к проблеме или боли клиента, то спросите, как он ее решает. Если в ответ последует «никак», то приоритет у этой проблемы не так высок, как это описывает интервьюируемый.
— Избегайте обобщений. Вместо формулировки «Как часто вы пользуетесь сервисом?» используете «Сколько раз в месяц вы пользуетесь сервисом?».
— Для подтверждения позитивной позиции клиента попросите его совершить конкретное действие здесь и сейчас: подписаться на группу в соцсетях, заплатить за продукт, оставить контакты. Если он не готов этого совершить, то вряд ли он действительно купит продукт в будущем.
— Задавайте уточняющие вопросы. Если клиент говорит, что часто сталкивается с обозначенной проблемой, спросите, когда он сталкивался с ней в последний раз, после чего ответ может измениться.

Как сегментировать

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

Сегментацию можно проводить даже в Excel, для более сложной аналитики и большого объема данных можно использовать методы машинного обучения, языки Python, R, Scala, набирающий популярность Julia и другие.

— Существует два крупных типа сегментаций: на основании статических и динамических данных.

Статические данные — критерии пользователей, которые не зависят от его действий, не меняются или меняются редко. К показателям статической сегментации относят: пол, возраст, географические данные.

Динамические показатели — те, что формируются на основании поведения пользователя относительно других пользователей: RFM-кластеризация, размер среднего чека, частота покупок и так далее. Границы сегментов, сформированных на основании поведения, динамические и меняются при совершении каждой новой покупки.

Пошаговое руководство проведения сегментации

1. Определить цель сегментации:

— кто будет использовать результаты сегментации;
— для чего они будут использоваться.

2. Выбрать один из методов сегментации или создать собственный алгоритм вычисления.

3. Понять, какие данные необходимы:

— какая часть клиентской базы будет использоваться (активные клиенты; клиенты, совершившие N покупок; покупавшие определенный товар; установившие мобильное приложение; все клиенты);
— выбрать период;
— собрать показатели, необходимые для вычисления.

4. Обработать и подготовить данные:

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

— — посчитать стандартное отклонение. Факт его значительного отличия от среднего значения говорит о том, что в выборке присутствуют выбросы;
— — вычислить медиану — величину, находящуюся в середине набора данных, упорядоченного по возрастанию или убыванию. Если количество членов нечетное, то она принимает значение суммы двух срединных членов, деленной на два;
— — вычислить верхнюю и нижнюю границу квартиля — величин, за пределами которых (выше и ниже соответственно) находится 25% значений;
— — все, что лежит выше суммы (разности) верхней (нижней) границы квартиля и межквартильного расстояния, умноженного на 1,5, является выбросами.

Выше я говорила о том, что данные опросов, как и количественные данные, можно сегментировать, но прежде их надо обработать:

— проверка анкеты: если вы выполняете анкетирование не лично, а отдаете на аутсорс или отправляете анкету по email, то первым делом следует проверить качество заполнения и отсутствие пропущенных ответов;
— оцифровать: все анкеты необходимо перевести в электронный вид для продолжения анализа, после этого исправить ошибки, привести ответы на открытые вопросы к единым формулировкам;
— чистка данных — на этом этапе следует повторно проверить данные на отсутствие пропущенных значений, выходы значений за обозначенные пределы. Анкеты с ошибками должны полностью исключаться из анализа.

Другой вопрос — какое количество клиентов опрашивать для получения точных данных. Один из вариантов — посчитать величину, используя для этого стандартные калькуляторы, введя в поиске «размер выборки». Но на самом деле это не так просто, подобные калькуляторы позволяют узнать размер выборки только по одному вопросу, на который будет всего два варианта ответа. Но в большинстве случаев анкета предполагает сбор большего количества данных.

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

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

Давайте теперь разберем несколько методологий проведения сегментации.

RFM-анализ

RFM-анализ — это анализ по трем показателям:

— Recency — показатель активности, вычисляется как давность последнего действия клиента (покупки, авторизации в личном кабинете, открытия email-рассылки и др.).
— Frequency — количество покупок (других действий) клиента.
— Monetary — Lifetime value, жизненная ценность клиента, равна сумме его покупок или прибыли.

Часто при проведении RFM-анализа клиентов по каждому из параметров делят на группы по равным интервалам от минимального до максимального значения. Например, давность (recency) последней покупки до 1 недели, до 2 недель, до 3 недель.

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

Индексы 1 и 3 в рамках RFM-анализа характеры для исключительных клиентов с различными особенностями поведения. Так, клиенты кластера r1m3 (при любом значении f) — это покупатели, которые ранее были доходны для компании, но перестали совершать покупки, причину чего необходимо выяснить с помощью опросов.

Кластер r3f3m1 является потенциальным для увеличения LTV (monetary), так как клиенты проявляют лояльность, но при этом совершают покупки на небольшие суммы. В такой ситуации следует предложить покупателям скидку при покупке на сумму от N рублей, либо порекомендовать сопутствующие товары на основании истории их покупок.

При помощи RFM-сегментации можно строить значительно более эффективную политику взаимодействия с клиентами, чем отправка писем всей клиентской базе. Для этого анализа вам потребуются необходимые показатели по клиентам, Excel и 30 минут работы.

Кластерный анализ

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

Мы чаще всего используем одну из разновидностей кластерного анализа — k-means.

Алгоритм анализа следующий.

Назначить число кластеров k, на которое будут делиться составляющие кластеризации. Число k либо задается вручную (удобно определять количество кластеров на основании древовидной кластеризации), либо вычисляется как оптимальное значение с помощью машинного обучения.

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

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

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

На примере мы видим, что кластер сформирован благодаря схожести клиентов по индексам «Вариативность выбора» и «Частота участия в акциях», что представляет собой яркую особенность поведения. Эта группа является целевой для тестирования новой функциональности приложения, сбора обратной связи. Группа заинтересована в акциях и вводе новых товаров.

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

Также данный вид сегментации можно использовать для анализа опросов. Но так как текстовые данные сложно преобразовать в числовые индексы, тем более, если речь идет о тысячах анкетируемых, то мы рекомендуем задавать вопросы формата «Оцените важность/качество/ величину… от 1 до 5».

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

Владельцы дебетовых карт:

— экономные — наивысшие оценки были поставлены фактору «стоимость годового обслуживания»;
— используют карту для переводов — важен размер комиссии за переводы на карты других банков;
— конформисты — оценили важность факторов «репутация бренда» и «отзывы» на 5 из 5, «стоимость обслуживания» — на 4.

Юридические лица, регулярно совершающие расчетно-кассовые операции:

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

Анализ ассоциативных правил

Анализ ассоциативных правил (анализ рыночной корзины) — анализ, который используется для нахождения устойчивых сочетаний товаров в покупках. Для его вычисления есть множество алгоритмов, первый из них — AIS — был разработан в 1993 году. Для анализа необходима база данных покупок, каждая покупка должна иметь уникальный идентификатор (часто в этой роли выступает номер чека) и позиции, которые входят в него.

Что в этих случаях делать компаниям, которые не входят в сегмент FMCG? Мы предлагаем использовать и используем в собственном бизнесе вместо номера чека уникальный id клиента. Таким образом мы вычисляем устойчивые паттерны в поведении клиентов относительно истории их покупок, на основании которых строим рекомендательную систему.

Допустим, покупки на Aviasales совершили 3 тысячи человек, на Booking — 1 тысяча. Клиентов, которые совершили покупки как на Aviasales, так и на Booking — 500. Объем клиентской базы равен 5 тысячам клиентов.

На основании этих данных высчитываются два показателя: достоверность (confidence) и поддержка (support) правила.

Поддержка — доля клиентов, совершивших транзакции у обоих партнеров от общего числа транзакций, то есть 10%.

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

Достоверность, как вы уже поняли, имеет два значения, в нашем случае для Booking она равна 50%, для Aviasales — 16,7%. Это означает, что клиент вероятнее совершает покупку на Booking и потом совершает на Aviasales, чем наоборот.

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

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

Без ответов на эти вопросы приступать к разработке глупо.

Быстрые прототипы и мгновенная обратная связь с заказчиком

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

Тут хорошо показывают себя Ruby on Rails/Laravel/Nest.js/Django. Подобные вещи помогают сохранять высокий темп разработки. Иначе бизнес может поменять концепцию, сократить бюджет или даже закрыть проект. А участники разработки без очевидных результатов рискуют просто перегореть.

Про окружение

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

Сейчас верстка под разные экраны — самая незначительная забота. Мы живём в то время, когда уже нет той боли в эпоху IE6-7-8-9. Сегодня гораздо проще работать с интерфейсами, особенно с повсеместным переходом браузеров на WebKit.

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

Говоря о логике построения интерфейсов, стоит помнить, что несмотря на обилие различных фреймворков (Angular, React, Vue), предлагающих упростить разработку фронтенда, по неопытности строят монструозные системы, не думая, нужен ли этот код на странице. Страница оказывается перегружена, долго отрисовывается, плохо работает на мобильных устройствах. Как следствие, пользователи отказываются от приложения, бизнес теряет клиентов и деньги.
Помним про безопасность

Сегодня много спорят, как обмениваться данными — REST / SOAP / GraphQL — и при этом передают важную информацию в незашифрованном виде. Буквально недавно мы столкнулись с проектом, который получили на доработку, и обнаружили, что если в момент аутентификации отключить интернет, то приложение выдаёт ошибку «ERROR» и показывает пару логин/пароль.

Про декомпозицию

Если говорить об организации процессов, то всегда нужно иметь в виду, что должно быть продакшн-окружение и тестовое окружение, где можно все протестировать, проверить. И да, бэкапы нужны всего и всегда. Создание софта всегда следует декомпозировать на отдельные участки, на каждом выполняется своя работа — бэкенд, фронтенд, тестирование, не говоря про аналитиков, UX & UI designer, devops инженера.

Full-stack — это круто, но рискованно, использовать можно и нужно, но дозированно. Фронт и бэк всё-таки стоит разделять, иначе люди быстро сгорают или темп проекта замедляется, особенно когда идёт работа над большим приложением.

Про важное

Не так важно, MVC или MVP.

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

Важно говорить на одном внятном языке.

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

Важно знать свои инструменты.

Изолируйте, что можете. Поверьте, будет меньше боли.

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

Помните про 12 факторов

Всё, что я рассказал, и даже больше содержатся в принципах 12-факторного приложения — открытой методике создания веб-сервисов, которая содержит общие декларации разработки софта, вне зависимости от платформы, языка разработки, назначения и т.п. Эти 12 факторов и есть 12 правил правильного написания приложений.

К сожалению, вот эти 12 факторов чаще всего открывают для себя на позиции middle/senior, когда уже обжигаются на ошибках, которых можно было бы избежать. Используйте это как направляющую в любых проектах!
Любое приложение пишется для решения конкретной задачи. Софт под задачи бизнеса должен гибко реагировать на изменения, и чем проще и меньше время реакции, тем больше софт жизнеспособен в конкретной среде.

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

Без ответов на эти вопросы приступать к разработке глупо.

Быстрые прототипы и мгновенная обратная связь с заказчиком

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

Тут хорошо показывают себя Ruby on Rails/Laravel/Nest.js/Django. Подобные вещи помогают сохранять высокий темп разработки. Иначе бизнес может поменять концепцию, сократить бюджет или даже закрыть проект. А участники разработки без очевидных результатов рискуют просто перегореть.

Про окружение

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

Сейчас верстка под разные экраны — самая незначительная забота. Мы живём в то время, когда уже нет той боли в эпоху IE6-7-8-9. Сегодня гораздо проще работать с интерфейсами, особенно с повсеместным переходом браузеров на WebKit.

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

Говоря о логике построения интерфейсов, стоит помнить, что несмотря на обилие различных фреймворков (Angular, React, Vue), предлагающих упростить разработку фронтенда, по неопытности строят монструозные системы, не думая, нужен ли этот код на странице. Страница оказывается перегружена, долго отрисовывается, плохо работает на мобильных устройствах. Как следствие, пользователи отказываются от приложения, бизнес теряет клиентов и деньги.
Помним про безопасность

Сегодня много спорят, как обмениваться данными — REST / SOAP / GraphQL — и при этом передают важную информацию в незашифрованном виде. Буквально недавно мы столкнулись с проектом, который получили на доработку, и обнаружили, что если в момент аутентификации отключить интернет, то приложение выдаёт ошибку «ERROR» и показывает пару логин/пароль.

Про декомпозицию

Если говорить об организации процессов, то всегда нужно иметь в виду, что должно быть продакшн-окружение и тестовое окружение, где можно все протестировать, проверить. И да, бэкапы нужны всего и всегда. Создание софта всегда следует декомпозировать на отдельные участки, на каждом выполняется своя работа — бэкенд, фронтенд, тестирование, не говоря про аналитиков, UX & UI designer, devops инженера.

Full-stack — это круто, но рискованно, использовать можно и нужно, но дозированно. Фронт и бэк всё-таки стоит разделять, иначе люди быстро сгорают или темп проекта замедляется, особенно когда идёт работа над большим приложением.

Про важное

Не так важно, MVC или MVP.

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

Важно говорить на одном внятном языке.

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

Важно знать свои инструменты.

Изолируйте, что можете. Поверьте, будет меньше боли.

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

Помните про 12 факторов

Всё, что я рассказал, и даже больше содержатся в принципах 12-факторного приложения — открытой методике создания веб-сервисов, которая содержит общие декларации разработки софта, вне зависимости от платформы, языка разработки, назначения и т.п. Эти 12 факторов и есть 12 правил правильного написания приложений.

К сожалению, вот эти 12 факторов чаще всего открывают для себя на позиции middle/senior, когда уже обжигаются на ошибках, которых можно было бы избежать. Используйте это как направляющую в любых проектах!
Любое приложение пишется для решения конкретной задачи. Софт под задачи бизнеса должен гибко реагировать на изменения, и чем проще и меньше время реакции, тем больше софт жизнеспособен в конкретной среде.

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

Без ответов на эти вопросы приступать к разработке глупо.

Быстрые прототипы и мгновенная обратная связь с заказчиком

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

Тут хорошо показывают себя Ruby on Rails/Laravel/Nest.js/Django. Подобные вещи помогают сохранять высокий темп разработки. Иначе бизнес может поменять концепцию, сократить бюджет или даже закрыть проект. А участники разработки без очевидных результатов рискуют просто перегореть.

Про окружение

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

Сейчас верстка под разные экраны — самая незначительная забота. Мы живём в то время, когда уже нет той боли в эпоху IE6-7-8-9. Сегодня гораздо проще работать с интерфейсами, особенно с повсеместным переходом браузеров на WebKit.

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

Говоря о логике построения интерфейсов, стоит помнить, что несмотря на обилие различных фреймворков (Angular, React, Vue), предлагающих упростить разработку фронтенда, по неопытности строят монструозные системы, не думая, нужен ли этот код на странице. Страница оказывается перегружена, долго отрисовывается, плохо работает на мобильных устройствах. Как следствие, пользователи отказываются от приложения, бизнес теряет клиентов и деньги.
Помним про безопасность

Сегодня много спорят, как обмениваться данными — REST / SOAP / GraphQL — и при этом передают важную информацию в незашифрованном виде. Буквально недавно мы столкнулись с проектом, который получили на доработку, и обнаружили, что если в момент аутентификации отключить интернет, то приложение выдаёт ошибку «ERROR» и показывает пару логин/пароль.

Про декомпозицию

Если говорить об организации процессов, то всегда нужно иметь в виду, что должно быть продакшн-окружение и тестовое окружение, где можно все протестировать, проверить. И да, бэкапы нужны всего и всегда. Создание софта всегда следует декомпозировать на отдельные участки, на каждом выполняется своя работа — бэкенд, фронтенд, тестирование, не говоря про аналитиков, UX & UI designer, devops инженера.

Full-stack — это круто, но рискованно, использовать можно и нужно, но дозированно. Фронт и бэк всё-таки стоит разделять, иначе люди быстро сгорают или темп проекта замедляется, особенно когда идёт работа над большим приложением.

Про важное

Не так важно, MVC или MVP.

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

Важно говорить на одном внятном языке.

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

Важно знать свои инструменты.

Изолируйте, что можете. Поверьте, будет меньше боли.

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

Помните про 12 факторов

Всё, что я рассказал, и даже больше содержатся в принципах 12-факторного приложения — открытой методике создания веб-сервисов, которая содержит общие декларации разработки софта, вне зависимости от платформы, языка разработки, назначения и т.п. Эти 12 факторов и есть 12 правил правильного написания приложений.

К сожалению, вот эти 12 факторов чаще всего открывают для себя на позиции middle/senior, когда уже обжигаются на ошибках, которых можно было бы избежать. Используйте это как направляющую в любых проектах!
Любое приложение пишется для решения конкретной задачи. Софт под задачи бизнеса должен гибко реагировать на изменения, и чем проще и меньше время реакции, тем больше софт жизнеспособен в конкретной среде.

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

Без ответов на эти вопросы приступать к разработке глупо.

Быстрые прототипы и мгновенная обратная связь с заказчиком

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

Тут хорошо показывают себя Ruby on Rails/Laravel/Nest.js/Django. Подобные вещи помогают сохранять высокий темп разработки. Иначе бизнес может поменять концепцию, сократить бюджет или даже закрыть проект. А участники разработки без очевидных результатов рискуют просто перегореть.

Про окружение

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

Сейчас верстка под разные экраны — самая незначительная забота. Мы живём в то время, когда уже нет той боли в эпоху IE6-7-8-9. Сегодня гораздо проще работать с интерфейсами, особенно с повсеместным переходом браузеров на WebKit.

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

Говоря о логике построения интерфейсов, стоит помнить, что несмотря на обилие различных фреймворков (Angular, React, Vue), предлагающих упростить разработку фронтенда, по неопытности строят монструозные системы, не думая, нужен ли этот код на странице. Страница оказывается перегружена, долго отрисовывается, плохо работает на мобильных устройствах. Как следствие, пользователи отказываются от приложения, бизнес теряет клиентов и деньги.
Помним про безопасность

Сегодня много спорят, как обмениваться данными — REST / SOAP / GraphQL — и при этом передают важную информацию в незашифрованном виде. Буквально недавно мы столкнулись с проектом, который получили на доработку, и обнаружили, что если в момент аутентификации отключить интернет, то приложение выдаёт ошибку «ERROR» и показывает пару логин/пароль.

Про декомпозицию

Если говорить об организации процессов, то всегда нужно иметь в виду, что должно быть продакшн-окружение и тестовое окружение, где можно все протестировать, проверить. И да, бэкапы нужны всего и всегда. Создание софта всегда следует декомпозировать на отдельные участки, на каждом выполняется своя работа — бэкенд, фронтенд, тестирование, не говоря про аналитиков, UX & UI designer, devops инженера.

Full-stack — это круто, но рискованно, использовать можно и нужно, но дозированно. Фронт и бэк всё-таки стоит разделять, иначе люди быстро сгорают или темп проекта замедляется, особенно когда идёт работа над большим приложением.

Про важное

Не так важно, MVC или MVP.

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

Важно говорить на одном внятном языке.

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

Важно знать свои инструменты.

Изолируйте, что можете. Поверьте, будет меньше боли.

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

Помните про 12 факторов

Всё, что я рассказал, и даже больше содержатся в принципах 12-факторного приложения — открытой методике создания веб-сервисов, которая содержит общие декларации разработки софта, вне зависимости от платформы, языка разработки, назначения и т.п. Эти 12 факторов и есть 12 правил правильного написания приложений.

К сожалению, вот эти 12 факторов чаще всего открывают для себя на позиции middle/senior, когда уже обжигаются на ошибках, которых можно было бы избежать. Используйте это как направляющую в любых проектах!
Существует множество способов разработки веб-приложения. Одним из самых современных считается реализация фронтенда как SPA (single page application), где взаимодействие с бэкендом происходит через REST API. Рассмотрим каждый из компонентов этой схемы детально.

Бэкенд

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

На каком языке реализовывать

Тут всё не так однозначно. Если не так важна производительность, то можно реализовывать на NodeJS (фреймворки ExpressJS, KoaJS, GatsbyJS), Python (фреймворки Django, Flask), Ruby (фреймворки Ruby on Rails, Grape). Если важна скорость — используйте Golang (фреймворки Gingonic, Beego, Revel). Думаю, самое верное решение — писать на том языке, который знаете. Мне, например, очень нравится Ruby и фреймворк Ruby on Rails.

Как реализовывать

Придерживайтесь паттерна MVC, и в какой-то момент вы заметите, что усложняется бизнес-логика. И дальше возникнет вопрос: где её реализовывать? В контроллерах или моделях? Один из наиболее простых и удобных способов — использовать интеракторы и презентеры.

Тестирование бэкенда

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

Сваггер

Представьте, что вы начали разрабатывать фронтенд. Как понять, какие параметры и запросы отправлять на сервер? Смотреть в код бэкенда? Согласитесь, не лучшее решение. Лучше добавить поддержку сваггера — в идеале, если сваггер поддерживает генерацию через тесты, он поможет документировать API.

Фронтенд

Тут всё не так просто, так как фреймворков очень много. Сейчас в основном используют AngularJS, ReactJS, VueJS. У каждого есть свои достоинства и недостатки. Я бы выбрал ReactJS: он достаточно простой и гибкий.

Тестирование фронтенда

Для фронтенда есть два основных типа тестов — тесты на логику и тесты на отображение. Первые проверяют логическую реализацию функций и классов. Тесты на отображение отвечают за то, чтобы контент демонстрировался пользователю в задуманном виде. Можно использовать следующие фреймворки: Mocha, Chai, Jest, Ava, Enzyme, Jest.

Отслеживание качества контента

После создания сайта хочется понимать, насколько качественно он реализован. В этом может помочь Lighthouse — это автоматизированный инструмент с открытым исходным кодом для отслеживания качества вашего сайта. Система проводит аудит производительности и доступности веб-приложений, на основании этих данных можно в случае необходимости оптимизировать или доработать его.
Существует множество способов разработки веб-приложения. Одним из самых современных считается реализация фронтенда как SPA (single page application), где взаимодействие с бэкендом происходит через REST API. Рассмотрим каждый из компонентов этой схемы детально.

Бэкенд

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

На каком языке реализовывать

Тут всё не так однозначно. Если не так важна производительность, то можно реализовывать на NodeJS (фреймворки ExpressJS, KoaJS, GatsbyJS), Python (фреймворки Django, Flask), Ruby (фреймворки Ruby on Rails, Grape). Если важна скорость — используйте Golang (фреймворки Gingonic, Beego, Revel). Думаю, самое верное решение — писать на том языке, который знаете. Мне, например, очень нравится Ruby и фреймворк Ruby on Rails.

Как реализовывать

Придерживайтесь паттерна MVC, и в какой-то момент вы заметите, что усложняется бизнес-логика. И дальше возникнет вопрос: где её реализовывать? В контроллерах или моделях? Один из наиболее простых и удобных способов — использовать интеракторы и презентеры.

Тестирование бэкенда

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

Сваггер

Представьте, что вы начали разрабатывать фронтенд. Как понять, какие параметры и запросы отправлять на сервер? Смотреть в код бэкенда? Согласитесь, не лучшее решение. Лучше добавить поддержку сваггера — в идеале, если сваггер поддерживает генерацию через тесты, он поможет документировать API.

Фронтенд

Тут всё не так просто, так как фреймворков очень много. Сейчас в основном используют AngularJS, ReactJS, VueJS. У каждого есть свои достоинства и недостатки. Я бы выбрал ReactJS: он достаточно простой и гибкий.

Тестирование фронтенда

Для фронтенда есть два основных типа тестов — тесты на логику и тесты на отображение. Первые проверяют логическую реализацию функций и классов. Тесты на отображение отвечают за то, чтобы контент демонстрировался пользователю в задуманном виде. Можно использовать следующие фреймворки: Mocha, Chai, Jest, Ava, Enzyme, Jest.

Отслеживание качества контента

После создания сайта хочется понимать, насколько качественно он реализован. В этом может помочь Lighthouse — это автоматизированный инструмент с открытым исходным кодом для отслеживания качества вашего сайта. Система проводит аудит производительности и доступности веб-приложений, на основании этих данных можно в случае необходимости оптимизировать или доработать его.
Существует множество способов разработки веб-приложения. Одним из самых современных считается реализация фронтенда как SPA (single page application), где взаимодействие с бэкендом происходит через REST API. Рассмотрим каждый из компонентов этой схемы детально.

Бэкенд

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

На каком языке реализовывать

Тут всё не так однозначно. Если не так важна производительность, то можно реализовывать на NodeJS (фреймворки ExpressJS, KoaJS, GatsbyJS), Python (фреймворки Django, Flask), Ruby (фреймворки Ruby on Rails, Grape). Если важна скорость — используйте Golang (фреймворки Gingonic, Beego, Revel). Думаю, самое верное решение — писать на том языке, который знаете. Мне, например, очень нравится Ruby и фреймворк Ruby on Rails.

Как реализовывать

Придерживайтесь паттерна MVC, и в какой-то момент вы заметите, что усложняется бизнес-логика. И дальше возникнет вопрос: где её реализовывать? В контроллерах или моделях? Один из наиболее простых и удобных способов — использовать интеракторы и презентеры.

Тестирование бэкенда

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

Сваггер

Представьте, что вы начали разрабатывать фронтенд. Как понять, какие параметры и запросы отправлять на сервер? Смотреть в код бэкенда? Согласитесь, не лучшее решение. Лучше добавить поддержку сваггера — в идеале, если сваггер поддерживает генерацию через тесты, он поможет документировать API.

Фронтенд

Тут всё не так просто, так как фреймворков очень много. Сейчас в основном используют AngularJS, ReactJS, VueJS. У каждого есть свои достоинства и недостатки. Я бы выбрал ReactJS: он достаточно простой и гибкий.

Тестирование фронтенда

Для фронтенда есть два основных типа тестов — тесты на логику и тесты на отображение. Первые проверяют логическую реализацию функций и классов. Тесты на отображение отвечают за то, чтобы контент демонстрировался пользователю в задуманном виде. Можно использовать следующие фреймворки: Mocha, Chai, Jest, Ava, Enzyme, Jest.

Отслеживание качества контента

После создания сайта хочется понимать, насколько качественно он реализован. В этом может помочь Lighthouse — это автоматизированный инструмент с открытым исходным кодом для отслеживания качества вашего сайта. Система проводит аудит производительности и доступности веб-приложений, на основании этих данных можно в случае необходимости оптимизировать или доработать его.
Существует множество способов разработки веб-приложения. Одним из самых современных считается реализация фронтенда как SPA (single page application), где взаимодействие с бэкендом происходит через REST API. Рассмотрим каждый из компонентов этой схемы детально.

Бэкенд

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

На каком языке реализовывать

Тут всё не так однозначно. Если не так важна производительность, то можно реализовывать на NodeJS (фреймворки ExpressJS, KoaJS, GatsbyJS), Python (фреймворки Django, Flask), Ruby (фреймворки Ruby on Rails, Grape). Если важна скорость — используйте Golang (фреймворки Gingonic, Beego, Revel). Думаю, самое верное решение — писать на том языке, который знаете. Мне, например, очень нравится Ruby и фреймворк Ruby on Rails.

Как реализовывать

Придерживайтесь паттерна MVC, и в какой-то момент вы заметите, что усложняется бизнес-логика. И дальше возникнет вопрос: где её реализовывать? В контроллерах или моделях? Один из наиболее простых и удобных способов — использовать интеракторы и презентеры.

Тестирование бэкенда

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

Сваггер

Представьте, что вы начали разрабатывать фронтенд. Как понять, какие параметры и запросы отправлять на сервер? Смотреть в код бэкенда? Согласитесь, не лучшее решение. Лучше добавить поддержку сваггера — в идеале, если сваггер поддерживает генерацию через тесты, он поможет документировать API.

Фронтенд

Тут всё не так просто, так как фреймворков очень много. Сейчас в основном используют AngularJS, ReactJS, VueJS. У каждого есть свои достоинства и недостатки. Я бы выбрал ReactJS: он достаточно простой и гибкий.

Тестирование фронтенда

Для фронтенда есть два основных типа тестов — тесты на логику и тесты на отображение. Первые проверяют логическую реализацию функций и классов. Тесты на отображение отвечают за то, чтобы контент демонстрировался пользователю в задуманном виде. Можно использовать следующие фреймворки: Mocha, Chai, Jest, Ava, Enzyme, Jest.

Отслеживание качества контента

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

Чтобы написать хорошее приложение, его надо написать. Буквально — в блокноте, в формате основных идей о том, как оно должно работать и из каких логических частей состоять. Это не про «контроллер берёт данные из модели и отправляет на отрисовку». Это про то, какие логические части есть в приложении и как они друг с другом общаются.

Не советую бездумно гнаться за всем «модным и молодёжным»: не можете объяснить, зачем вам GraphQL и какие у него преимущества перед простым REST API из трёх запросов, — не используйте. Кажется, это очевидно, но я сам не раз попадал в эту ловушку. Подход «открыть awesome-лист и поставить всё» тоже не лучшее решение: наличие огромного количества сторонних зависимостей не делает проект круче.

Вопрос «какой фреймворк/ОРМ/админку использовать» решается просто: выбирайте тот инструмент, который лучше всего знаете. Ничего не знаете и не умеете — берите то, с чем быстрее и проще разобраться, где меньше всего «уличной магии». Например, из списка Yii/Laravel/Symfony я выберу Laravel. Из админок выберу AdminLTE, потому что она «ну вроде норм и работает». Ни один из авторов этих проектов до сих пор не заплатил мне за рекламу.

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

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

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

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

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

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

Говоря о контроле и тестируемости, уместно будет вспомнить известную истину, что возможность проверить работу приложения в различных условиях и с разнообразным набором данных — бесценна и не всегда достижима. Тем не менее, различные логи и механизмы оповещения, срабатывающие по определённым условиям, способны значительно облегчить тестирование и отладку.

Однако самой, наверное, неожиданной рекомендацией будет избегать любых сторонних библиотек и фреймворков всегда, когда это возможно. Это относится как к клиентской части приложения, так и к серверной. Приложение должно быть максимально компактным и потреблять минимальное количество ресурсов. Например, использование очень популярной библиотеки jQuery (или ей подобных) значительно замедляет работу клиентской части и требует немало ресурсов, что совершенно не обязательно. Абсолютно всё, что нужно, можно написать просто на JavaScript, а более быстрая загрузка и работа клиентской части будет высоко оценена заказчиком.

То же относится и к серверной части, а особенно к построению API для взаимодействия между ними. Для этой цели вполне достаточно использования устоявшихся протоколов CGI или WebSocket там, где это нужно. Различные фреймворки типа ORM несколько облегчают работу программиста ценой снижения эффективности приложения, да ещё и добавляют зависимость от этих библиотек и привносят в систему все их недоработки.

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

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

Чтобы написать хорошее приложение, его надо написать. Буквально — в блокноте, в формате основных идей о том, как оно должно работать и из каких логических частей состоять. Это не про «контроллер берёт данные из модели и отправляет на отрисовку». Это про то, какие логические части есть в приложении и как они друг с другом общаются.

Не советую бездумно гнаться за всем «модным и молодёжным»: не можете объяснить, зачем вам GraphQL и какие у него преимущества перед простым REST API из трёх запросов, — не используйте. Кажется, это очевидно, но я сам не раз попадал в эту ловушку. Подход «открыть awesome-лист и поставить всё» тоже не лучшее решение: наличие огромного количества сторонних зависимостей не делает проект круче.

Вопрос «какой фреймворк/ОРМ/админку использовать» решается просто: выбирайте тот инструмент, который лучше всего знаете. Ничего не знаете и не умеете — берите то, с чем быстрее и проще разобраться, где меньше всего «уличной магии». Например, из списка Yii/Laravel/Symfony я выберу Laravel. Из админок выберу AdminLTE, потому что она «ну вроде норм и работает». Ни один из авторов этих проектов до сих пор не заплатил мне за рекламу.

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

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

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

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

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

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

Говоря о контроле и тестируемости, уместно будет вспомнить известную истину, что возможность проверить работу приложения в различных условиях и с разнообразным набором данных — бесценна и не всегда достижима. Тем не менее, различные логи и механизмы оповещения, срабатывающие по определённым условиям, способны значительно облегчить тестирование и отладку.

Однако самой, наверное, неожиданной рекомендацией будет избегать любых сторонних библиотек и фреймворков всегда, когда это возможно. Это относится как к клиентской части приложения, так и к серверной. Приложение должно быть максимально компактным и потреблять минимальное количество ресурсов. Например, использование очень популярной библиотеки jQuery (или ей подобных) значительно замедляет работу клиентской части и требует немало ресурсов, что совершенно не обязательно. Абсолютно всё, что нужно, можно написать просто на JavaScript, а более быстрая загрузка и работа клиентской части будет высоко оценена заказчиком.

То же относится и к серверной части, а особенно к построению API для взаимодействия между ними. Для этой цели вполне достаточно использования устоявшихся протоколов CGI или WebSocket там, где это нужно. Различные фреймворки типа ORM несколько облегчают работу программиста ценой снижения эффективности приложения, да ещё и добавляют зависимость от этих библиотек и привносят в систему все их недоработки.

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

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

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

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

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

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

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

Говоря о контроле и тестируемости, уместно будет вспомнить известную истину, что возможность проверить работу приложения в различных условиях и с разнообразным набором данных — бесценна и не всегда достижима. Тем не менее, различные логи и механизмы оповещения, срабатывающие по определённым условиям, способны значительно облегчить тестирование и отладку.

Однако самой, наверное, неожиданной рекомендацией будет избегать любых сторонних библиотек и фреймворков всегда, когда это возможно. Это относится как к клиентской части приложения, так и к серверной. Приложение должно быть максимально компактным и потреблять минимальное количество ресурсов. Например, использование очень популярной библиотеки jQuery (или ей подобных) значительно замедляет работу клиентской части и требует немало ресурсов, что совершенно не обязательно. Абсолютно всё, что нужно, можно написать просто на JavaScript, а более быстрая загрузка и работа клиентской части будет высоко оценена заказчиком.

То же относится и к серверной части, а особенно к построению API для взаимодействия между ними. Для этой цели вполне достаточно использования устоявшихся протоколов CGI или WebSocket там, где это нужно. Различные фреймворки типа ORM несколько облегчают работу программиста ценой снижения эффективности приложения, да ещё и добавляют зависимость от этих библиотек и привносят в систему все их недоработки.

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

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

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

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

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

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

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

Говоря о контроле и тестируемости, уместно будет вспомнить известную истину, что возможность проверить работу приложения в различных условиях и с разнообразным набором данных — бесценна и не всегда достижима. Тем не менее, различные логи и механизмы оповещения, срабатывающие по определённым условиям, способны значительно облегчить тестирование и отладку.

Однако самой, наверное, неожиданной рекомендацией будет избегать любых сторонних библиотек и фреймворков всегда, когда это возможно. Это относится как к клиентской части приложения, так и к серверной. Приложение должно быть максимально компактным и потреблять минимальное количество ресурсов. Например, использование очень популярной библиотеки jQuery (или ей подобных) значительно замедляет работу клиентской части и требует немало ресурсов, что совершенно не обязательно. Абсолютно всё, что нужно, можно написать просто на JavaScript, а более быстрая загрузка и работа клиентской части будет высоко оценена заказчиком.

То же относится и к серверной части, а особенно к построению API для взаимодействия между ними. Для этой цели вполне достаточно использования устоявшихся протоколов CGI или WebSocket там, где это нужно. Различные фреймворки типа ORM несколько облегчают работу программиста ценой снижения эффективности приложения, да ещё и добавляют зависимость от этих библиотек и привносят в систему все их недоработки.

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

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

Чтобы написать хорошее приложение, его надо написать. Буквально — в блокноте, в формате основных идей о том, как оно должно работать и из каких логических частей состоять. Это не про «контроллер берёт данные из модели и отправляет на отрисовку». Это про то, какие логические части есть в приложении и как они друг с другом общаются.

Не советую бездумно гнаться за всем «модным и молодёжным»: не можете объяснить, зачем вам GraphQL и какие у него преимущества перед простым REST API из трёх запросов, — не используйте. Кажется, это очевидно, но я сам не раз попадал в эту ловушку. Подход «открыть awesome-лист и поставить всё» тоже не лучшее решение: наличие огромного количества сторонних зависимостей не делает проект круче.

Вопрос «какой фреймворк/ОРМ/админку использовать» решается просто: выбирайте тот инструмент, который лучше всего знаете. Ничего не знаете и не умеете — берите то, с чем быстрее и проще разобраться, где меньше всего «уличной магии». Например, из списка Yii/Laravel/Symfony я выберу Laravel. Из админок выберу AdminLTE, потому что она «ну вроде норм и работает». Ни один из авторов этих проектов до сих пор не заплатил мне за рекламу.

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

Чтобы написать хорошее приложение, его надо написать. Буквально — в блокноте, в формате основных идей о том, как оно должно работать и из каких логических частей состоять. Это не про «контроллер берёт данные из модели и отправляет на отрисовку». Это про то, какие логические части есть в приложении и как они друг с другом общаются.

Не советую бездумно гнаться за всем «модным и молодёжным»: не можете объяснить, зачем вам GraphQL и какие у него преимущества перед простым REST API из трёх запросов, — не используйте. Кажется, это очевидно, но я сам не раз попадал в эту ловушку. Подход «открыть awesome-лист и поставить всё» тоже не лучшее решение: наличие огромного количества сторонних зависимостей не делает проект круче.

Вопрос «какой фреймворк/ОРМ/админку использовать» решается просто: выбирайте тот инструмент, который лучше всего знаете. Ничего не знаете и не умеете — берите то, с чем быстрее и проще разобраться, где меньше всего «уличной магии». Например, из списка Yii/Laravel/Symfony я выберу Laravel. Из админок выберу AdminLTE, потому что она «ну вроде норм и работает». Ни один из авторов этих проектов до сих пор не заплатил мне за рекламу.

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

Алгоритм обучения у «Яндекса» до внедрения алгоритма MatrixNet выглядел примерно, таким образом: в ходе процедуры обновления поиск соответствующих конкретным запросам страниц производится роботом. А затем они проверяются на релевантность с точки зрения человека специальным лицом – асессором.

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

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

Было принято решение о том, чтобы научить компьютер частично учитывать критерии ранжирования в динамике, возложив на него обязанности поисковых асессоров. Именно так появился обновленный алгоритм обучения поисковых машин — «Алгоритм Matrixnet Yandex».
Описание алгоритма Matrixnet от поисковика Yandex

Первые сообщения об алгоритме MatrixNet появились вместе с введением нового алгоритма поиска в «Яндексе» — «Снежинск». Разработчики алгоритма Матрикснет стремились к увеличению числа используемых факторов ранжирования, чтобы, таким образом, сделать качество поиска в интернете более высоким.

Например, расчёты по специальным математическим формулам помогли сократить ошибочно оценённые важности различных факторов.

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

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

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

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

Внедрение «Яндексом» нового алгоритма машинного обучения под названием “MatrixNet” сделало выдачу этой поисковой системы ещё более релевантной, хоть и число страниц, анализируемых поисковым роботом, увеличилось в несколько тысяч раз.
Спасибо за подробный ответ, еще интересует как проводится обучение поисковых машин Matrixnet Yandex?
MatrixNet использует многослойную нейронную сеть с обратным распространением ошибок для обучения на данных. Нейронная сеть состоит из многих слоев, каждый из которых обрабатывает информацию и передает ее дальше. Входной слой принимает данные, а выходной слой генерирует результаты.

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

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

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

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

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

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

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

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

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

Поисковый индекс не является чем-то неизменным, а постоянно подвергается незаметным для пользователей обновлениям, которые в поисковой среде зовутся «апдейтами» (название произошло от английского слова “update”). Таким образом, результаты поиска формируются всегда на основе самого актуального индекса.

Заявка на услуги DST

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

Адрес

Ижевск, ул. Воткинское шоссе 170 Е.
Региональный оператор Сколково. Технопарк Нобель

8 495 1985800
Заказать звонок

Режим работы: Пн-Пт 10:00-19:00

info@dstglobal.ru

Задать вопрос по почте

Укажите ваше имя
Укажите ваше email
Укажите ваше телефон