Как стать автором
Обновить
53.43
Mindbox
Автоматизация маркетинга
Сначала показывать

Как развивать продукт и не сгорать от поддержки — опыт работы по Pipedrive Agile Framework

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров10K

На связи Антон Бевзюк и Дмитрий Кожевников, инженерные менеджеры Mindbox. 

В Mindbox большая команда, и мы долгое время искали способ, как масштабировать Agile. Пробовали Kanban, Scrum, XP, LeSS — все не то. Полгода назад перешли на Pipedrive Agile Framework и остались довольны: уменьшили количество рутинных задач, повысили уровень счастья среди разработчиков и стали быстрее выпускать фичи — реализовали обновления, которых клиенты ждали годами. Готовы поделиться опытом.

Статья будет полезна тем, кто хочет организовать работу команды из более чем 100 разработчиков и сбалансировать развитие продукта и поддержку. Мы подробно расскажем, какие сложности испытывали и как Pipedrive Agile Framework помог с ними справиться, какие ошибки допустили во время внедрения, поделимся советами, как их не повторить, и дадим подробные гайды по запуску фреймворка.

Читать далее

Распределенные транзакции между RabbitMQ и MS SQL

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

Однако, как только у нас появляется отдельная система для хранения очереди сообщений (мы используем RabbitMQ), сразу возникают проблемы с транзакционностью. Например, если мы хотим сохранить в БД отметку о том, что мы отправили сообщение в Rabbit, не так уж и просто гарантировать, чтобы отметка была сохранена только в случае успешной отправки сообщения. О том, как мы справлялись с этой проблемой читайте под катом.
Читать дальше →

Рост 100% в год и 400 тыс. RPM. Эволюция разработки 2018—2020: процессы, люди, техника и планы

Время на прочтение8 мин
Количество просмотров2.5K
Mindbox — два миллиона строк кода b2b бизнес-логики под нагрузкой. Наши продукты: CDP, программа лояльности, персонализация сайта, транзакционные и массовые рассылки — критичные по надежности и скорости работы элементы инфраструктуры бизнеса.

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

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

Трансляция запросов в SQL с использованием LinqToSql в тестах

Время на прочтение17 мин
Количество просмотров5.5K
Мы уже несколько лет делаем наш продукт автоматизации маркетинга, и пилить фичи с высокой скоростью нам помогает CI, а точнее — большое количество автоматических тестов.

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

Практически каждая транзакция в нашей системе связана с работой с MS SQL с использованием LinqToSql. Да, технология старенькая, но мигрировать с неё нам довольно сложно, и по бизнесу она нас вполне устраивает. Более того, как я уже писал раньше, у нас даже есть свой форк LinqToSql, где мы чуть-чуть чиним его баги и добавляем кое-какой функциональности.

Для того, чтобы делать запросы к БД, используя LinqToSql, нужно использовать интерфейс IQueryable. В момент получения Enumerator’а или выполнения Execute у QueryProvider’а построенное дерево выражений с помощью Extension-методов к IQueryable транслируется в SQL, который и выполняется на SQL Server.

Так как наша бизнес-логика сильно завязана на сущностях в базе данных, наши тесты много работают с базой данных. Однако в 95% тестов мы не используем реальную базу, так как это очень дорого по времени, а довольствуемся InMemoryDatabase. Она является частью нашей тестовой инфраструктуры, о которой можно написать отдельную статью, и на самом деле представляет из себя просто Dictionary<Type, List> для каждого существующего типа сущности. В тестах наш UnitOfWork прозрачно работает с такой базой, давая доступ к EnumerableQueryable, который просто получить из любого IEnumerable, вызвав у него AsQueryable().

Покажу пример теста для понимания происходящего:
Читать дальше →

Как разработчику использовать ChatGPT: разберемся, когда нейросеть помогает, а когда вредит

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров6.7K

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

В этой статье data scientist Mindbox, в прошлом преподаватель и научный сотрудник РАН, без лишнего философствования расскажет о работе нейросетей типа ChatGPT. На своем примере он покажет, как упрощать повседневную работу с помощью ChatGPT и подобных моделей. А в конце приведет ссылки на полезные статьи.

Читать далее

Data Science в обувном магазине: предсказали поведение клиентов и увеличили конверсию сайта на 16%

Время на прочтение6 мин
Количество просмотров3.7K
Российский производитель обуви Mario Berluchi автоматизировал маркетинг, внедрил привычные для интернет-магазинов механики, но не остановился на этом и запустил направление Data Science. Теперь магазин с помощью алгоритмов машинного обучения предсказывает действия клиента: что он сделает после добавления товара в корзину — купит или уйдет, а если уйдет, то когда вернется.

Предсказание помогает в нужный момент побуждать клиента к покупке или, наоборот, не трогать его, если он купит и так. В рамках AB-теста механика персонализации сайта на основе предсказания помогла увеличить конверсию интернет-магазина на 16,5% и ARPU на 35,7% относительно контрольной группы.

Азамат Тибилов, директор по маркетингу Mario Berluchi, рассказывает о механике с предсказанием, измерении результатов, истории запуска направления Data Science и делится советами для интернет-магазинов, которые тоже хотят растить выручку за счет полезного и основанного на данных маркетинга.

Mario Berluchi — российский производитель обуви, сумок и аксессуаров с пятью офлайн-магазинами в Москве и онлайн-магазином.

Масштаб. 200 тысяч посетителей сайта в месяц.

ИТ. Сайт на Bitrix, бэк-офис на «1С», платформа клиентских данных Mindbox.

Задача. Повысить выручку за счет работы с накопленными данными.

Результат. Рост конверсии сайта на 16,5% в рамках AB-теста, рост ARPU на 35,7%, снижение доли брошенных корзин на 17,2%.

Читать дальше →

Как мы написали еще один алгоритм RFM-анализа

Время на прочтение5 мин
Количество просмотров14K

КДПВ Недавно мы рассказали, почему придумали свой RFM-сегментатор, который помогает сделать RFM-анализ за 20 секунд, и показали, как использовать его результаты в маркетинге.


Теперь рассказываем, как он устроен.


Читать дальше →

Про опыт обучения в OKademy

Время на прочтение9 мин
Количество просмотров5.7K

Вместо вступления


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

Читать дальше →

Слой кэширования поверх Linq to SQL

Время на прочтение10 мин
Количество просмотров7.9K
За последний год мы перенесли внушительную часть настроек DirectCRM в базу данных. Множество элементов промо-кампаний, которые мы до этого описывали исключительно кодом, теперь создаются и настраиваются менеджером через админку. При этом получилась очень сложная структура БД, насчитывающая десятки таблиц.

Однако, за перенос настроек в базу данных пришлось расплачиваться. Об архитектуре, позволяющий кэшировать редко меняющиеся Linq to SQL сущности, смотрите под катом.
image
Читать дальше →

Новый микрофронтенд за 20 минут вместо часа: как работает система автоматической сборки

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров4.9K

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

Чтобы ускорить сборку, разработали систему из шаблона и CLI утилиты. Теперь новый микрофронтенд со всей обвязкой создается за 20 минут. В статье — подробное решение для тех, кто захочет повторить.

Читать далее

Как джуну отрастить софты: советы и реальные истории. Часть 3. Развиваться

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров2.9K

Привет! На связи Митя Кожевников и Юра Соколов из Mindbox, и это третья, финальная часть гайда по софтам для джунов. В первой части мы говорили о том, что значит «приносить пользу» в разработке. Во второй — об ориентации на результат. В этой части речь пойдет о развитии: что делать, чтобы расти быстрее. 

О гайде. Этот гайд — внутренний документ разработчиков Mindbox. Его писали не один год, опираясь на ошибки тех, кто давно стал мидлами и синьорами. И хотя Mindbox — продуктовая компания с особенной культурой, большинство советов из гайда подойдут и для работы в других командах. 

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

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

Читать далее

Стоит ли переходить с Powershell DSC на Ansible и как это сделать

Время на прочтение11 мин
Количество просмотров6K
Об IaC под Windows пишут мало, потому что DevOps/SRE ассоциируется в основном c Linux и Kubernetes. Мы решили исправить эту ситуацию и сравнить инструменты, которыми можно управлять IaC на базе Windows. Статья будет полезна разработчикам, которые работают с Windows-инфраструктурой и выбирают способы управления, и тем, кто уже внедрил Powershell DSC или Ansible, но сомневается в своем решении. Ниже поделимся опытом и расскажем:
  • как устроен Powershell DSC и чем он отличается от Ansible при управлении инфраструктурой на Windows;
  • почему мы перешли на Ansible;
  • с какими проблемами столкнулись и как их решали;
  • как соотносятся ожидания и реальность после перехода на Ansible;
  • кому стоит выбрать Powershell DSC, а кому — Ansible.
Читать дальше →

Структурировали бэклог, теперь внедряем 80% разработок вместо 20%

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров4.1K

Выкатили новую фичу, но клиенты не используют, потому что хотели её под Новый год, а сейчас — июнь. Реализовали улучшение, а оно не востребовано, потому что мы не подумали, как клиенты будут его использовать. Так мы работали в стол, а потом задумались, почему так происходит, и построили иерархию задач. Теперь четыре из пяти внедренных фич получают высокую оценку клиентов. Показываем, как так получилось, и делимся шаблоном. 

Читать далее

Релизный цикл без компромиссов: надежно для клиентов, удобно для разработки

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров5K

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

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

О том, какой путь проходит релиз и какие инструменты обеспечивают его надежность, расскажет engineering manager Mindbox, Бадал.

Читать далее

Ближайшие события

Как уменьшить размерность метрик в Prometheus, если вы не DevOps

Время на прочтение5 мин
Количество просмотров4.7K
Иногда команда разработки сталкивается с задачей, в которой у неё мало экспертного опыта, и через пробы и ошибки она находит неочевидное решение. Так произошло и с нами, когда понадобилось перенести сбор метрик из Infux в Prometheus. Их итоговая размерность оказалась 1,5 миллиона, и мы решили ее уменьшать. Инфраструктуру по сбору метрик (Prometheus, k8s, деплой через Helm) создавали DevOps-инженеры из другой команды, у которых не было ресурсов для нашей задачи. Поэтому мы заручились их советами, изучили документацию и решили снижать размерность метрик силами разработки.

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

  • как в два шага уменьшить размерность метрик с помощью двух ServiceMonitor,
  • какой есть эталонный способ уменьшить размерность метрик без «костылей»,
  • почему не стоит тратить время на снижение размерности метрик с помощью Pushgateway.
Читать дальше →

Как мы разрабатываем персональные товарные рекомендации

Время на прочтение8 мин
Количество просмотров8.1K

image
Наши клиенты-магазины хотят делать крутой маркетинг. Чтобы люди больше покупали, они регулярно шлют им email-рассылки. И каждый раз думают: “Что же написать в письме?”.




Можно писать просто: “Покупайте у нас почаще!”, но это не очень-то работает. Идея получше — вставлять в письмо рекламу товаров. Желательно, рекламу товаров, которые заинтересуют покупателей.


Дальше расскажу о том, как мы с нуля делали настоящие персональные рекомендации.

Читать дальше →

RFM-анализ одной кнопкой или как мы облегчили клиентам жизнь

Время на прочтение6 мин
Количество просмотров14K

image
С тех пор как в компании Mindbox впервые произнесли Machine Learning, общей целью стала Большая Зеленая Кнопка. Это такая кнопка во весь экран, при нажатии на которую всё работает само и приносит прибыль.


В аналитическом проекте «RFM» цель менее амбициозная — Маленькая зеленая кнопка. Нажимаешь, и база автоматически делится на сегменты, по которым запускается отправка писем (например).




Чтобы добиться цели, мы написали автоматический RFM-сегментатор и разработали специальный отчет, чтобы наглядно представлять результаты.


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

Читать дальше →

Хаос-тесты: ломаем прод, чтобы он не ломался

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров1.7K

Меня зовут Михаил Новиков, я архитектор в команде, которая развивает один из пользовательских сервисов. В статье расскажу, зачем мы за 5,5 недель внедрили хаос-тесты, что учли при их настройке и почему ломаем прод Mindbox. 

Читать далее

Слышать клиентов и решать их задачи вовремя: гайд по управлению бэклогом B2B-продукта

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров1.4K

Всем привет! Меня зовут Марина, я product manager в Mindbox — сервисе автоматизации маркетинга.

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

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

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

Читать далее

Как масштабировать разработку при 400 000 RPM и не надорваться

Время на прочтение10 мин
Количество просмотров3.8K
Если бизнес идет вверх, то запросы и нагрузка на разработку увеличиваются в разы. Рано или поздно каждый управленец сталкивается с выбором из двух крайностей: встать на сторону бизнеса, двигать продукт и демотивировать разработчиков бесконечным техдолгом или дать свободу разработке и потерять контроль над задачами бизнеса.

Mindbox 15 лет развивает B2B-продукт и вырос с 3 до 70 человек в разработке. Мы тестировали разные подходы к масштабированию и готовы поделиться опытом, чтобы вам не пришлось наступать на те же грабли. Ниже расскажу, как попробовали полную автономию команд и централизацию, роняли надежность, демотивировали команды, как в результате с этим справились и выработали свою систему масштабирования.

По материалам выступления на Agile Days 2021:


Информация

Сайт
www.mindbox.ru
Дата регистрации
Дата основания
2006
Численность
201–500 человек
Местоположение
Россия