Русский
Русский
English
Статистика
Реклама

Кейсы

Redis на практических примерах

18.06.2020 10:17:09 | Автор: admin
Redis достаточно популярный инструмент, который из коробки поддерживает большое количество различных типов данных и методов работы с ними. Во многих проектах он используется в качестве кэшируещего слоя, но его возможности намного шире. Мы в ManyChat очень любим Redis и активно используем его в нашем продукте для решения огромного количества задач. Про некоторые интересные кейсы использования этой in-memory key-value базы данных я расскажу на примерах. Надеюсь, вам они будут полезны, и вы сможете применить что-то в своих проектах.

Рассмотрим следующие кейсы:
  • Кэширование данных (да, банально и скучно, но это классный инструмент для кэширования и обойти стороной этот кейс, кажется будет не правильно)
  • Работа с очередями на базе redis
  • Организация блокировок (mutex)
  • Делаем систему rate-limit
  • Pubsub делаем рассылки сообщений на клиенты

Буду работать с сырыми redis командами, чтобы не завязываться на какую-либо конкретную библиотеку, предоставляющую обертку над этими командами. Код буду писать на PHP с использованием ext-redis, но он здесь для наглядности, использовать представленные подходы можно в связке с любым другим языком программирования.



Кэширование данных


Давайте начнем с самого простого, один из самых популярных кейсов использования Redis кэширование данных. Будет полезно для тех, кто не работал с Redis. Для тех, кто уже давно пользуется этим инструментом можно смело переходить к следующему кейсу. Для того, чтобы снизить нагрузку на БД, иметь возможность запрашивать часто используемые данные максимально быстро, используется кэш. Redis это in-memory хранилище, то есть данные хранятся в оперативной памяти. Ещё это key-value хранилище, где доступ к данным по их ключу имеет сложность O(1) поэтому данные мы получаем очень быстро.

Получение данных из хранилища выглядит следующим образом:

public function getValueFromCache(string $key){    return $this->getRedis()->rawCommand('GET', $key);}

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

public function setValueToCache(string $key, $value){    $this->getRedis()->rawCommand('SET', $key, $value);} 

Таким образом, мы запишем данные в Redis и сможем их считать по тому же самому ключу в любой нужный нам момент. Но если мы будем все время писать в Redis, данные в нем будут занимать все больше и больше места в оперативной памяти. Нам нужно удалять нерелевантные данные, контролировать это вручную достаточно проблематично, поэтому пускай redis занимается этим самостоятельно. Добавим к нашему ключу TTL (время жизни ключа):

public function setValueToCache(string $key, $value, int $ttl = 3600){    $this->getRedis()->rawCommand('SET', $key, $value, 'EX', $ttl);}

По истечении времени ttl (в секундах) данные по этому ключу будут автоматически удалены.

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

public function dropValueFromCache(string $key){    $this->getRedis()->rawCommand('DEL', $key);}


Также редис позволяет получить массив значений по списку ключей:

public function getValuesFromCache(array $keys){    return $this->getRedis()->rawCommand('MGET', ...$keys);}

И соответственно массовое удаление данных по массиву ключей:

public function dropValuesFromCache(array $keys){    $this->getRedis()->rawCommand('MDEL', ...$keys);}


Очереди


Используя имеющиеся в Redis структуры данных, мы можем запросто реализовать стандартные очереди FIFO или LIFO. Для этого используем структуру List и методы по работе с ней. Работа с очередями состоит из двух основных действий: отправить задачу в очередь, и взять задачу из очереди. Отправлять задачи в очередь мы можем из любой части системы. Получением задачи из очереди и ее обработкой обычно занимается выделенный процесс, который называется консьюмером (consumer).

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

public function pushToQueue(string $queueName, $payload){    $this->getRedis()->rawCommand('RPUSH', $queueName, serialize($payload));}

Тем самым мы добавим в конец листа с названием $queueName некий $payload, который может представлять из себя JSON для инициализации нужной нам бизнес логики (например данные по денежной транзакции, данные для инициализации отправки письма пользователю, etc.). Если же в нашем хранилище не существует листа с именем $queueName, он будет автоматически создан, и туда попадет первый элемент $payload.

Со стороны консьюмера нам необходимо обеспечить получение задач из очереди, это реализуется простой командой чтения из листа. Для реализации FIFO очереди мы используем чтение с обратной записи стороны (в нашем случае мы писали через RPUSH), то есть читать будем через LPOP:

public function popFromQueue(string $queueName){    return $this->getRedis()->rawCommand('LPOP', $queueName);}

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



Тем самым мы вычитываем по одному сообщению из очереди. В случае если листа не существует (он пустой), то мы получим NULL. Каркас консьюмера мог бы выглядеть так:

class Consumer {    private string $queueName;    public function __construct(string $queueName)    {        $this->queueName = $queueName;    }    public function run()    {        while (true) { //Вычитываем в бесконечном цикле нашу очередь            $payload = $this->popFromQueue();            if ($payload === null) { //Если мы получили NULL, значит очередь пустая, сделаем небольшую паузу в ожидании новых сообщений                sleep(1);                continue;            }            //Если очередь не пустая и мы получили $payload, то запускаем обработку этого $payload            $this->process($payload);        }    }    private function popFromQueue()    {        return $this->getRedis()->rawCommand('LPOP', $this->queueName);    }}

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

public function getQueueLength(string $queueName){    return $this->getRedis()->rawCommand('LLEN', $queueName);}

Мы рассмотрели базовую реализацию простых очередей, но Redis позволяет строить более сложные очереди. Например, мы хотим знать о времени последней активности наших пользователей на сайте. Нам не важно знать это с точностью вплоть до секунды, приемлемая погрешность 3 минуты. Мы можем обновлять поле last_visit пользователя при каждом запросе на наш бэкенд от этого пользователя. Но если этих пользователей большое количество в онлайне 10,000 или 100,000? А если у нас еще и SPA, которое отправляет много асинхронных запросов? Если на каждый такой запрос обновлять поле в бд, мы получим большое количество тупых запросов к нашей БД. Эту задачу можно решать разными способами, один из вариантов это сделать некую отложенную очередь, в рамках которой мы будем схлопывать одинаковые задачи в одну в определенном промежутке времени. Здесь на помощь нам придет такая структура, как Sorted SET. Это взвешенное множество, каждый элемент которого имеет свой вес (score). А что если в качестве score мы будем использовать timestamp добавления элемента в этот sorted set? Тогда мы сможем организовать очередь, в которой можно будет откладывать некоторые события на определенное время. Для этого используем следующую функцию:

public function pushToDelayedQueue(string $queueName, $payload, int $delay = 180){    $this->getRedis()->rawCommand('ZADD', $queueName, 'NX', time() + $delay, serialize($payload))}

В такой схеме идентификатор пользователя, зашедшего на сайт, попадет в очередь $queueName и будет висеть там в течение 180 секунд. Все другие запросы в рамках этого времени будут также отправляться в эту очередь, но они не будут туда добавлены, так как идентификатор этого пользователя уже существует в этой очереди и продублирован он не будет (за это отвечает параметр 'NX'). Так мы отсекаем всю лишнюю нагрузку и каждый пользователь будет генерить не более одного запроса в 3 минуты на обновление поля last_visit.

Теперь возникает вопрос о том, как читать эту очередь. Если методы LPOP и RPOP для листа читают значение и удаляют его из листа атомарно (это значит, что одно и тоже значение не может быть взято несколькими консьюмерами), то sorted set такого метода из коробки не имеет. Мы можем сделать чтение и удаление элемента только двумя последовательными командами. Но мы можем выполнить эти команды атомарно, используя простой LUA скрипт!

public function popFromDelayedQueue(string $queueName){    $command = 'eval "        local val = redis.call(\'ZRANGEBYSCORE\', KEYS[1], 0, ARGV[1], \'LIMIT\', 0, 1)[1]        if val then            redis.call(\'ZREM\', KEYS[1], val)        end        return val"';    return $this->getRedis()->rawCommand($command, 1, $queueName, time());}

В этом LUA скрипте мы пытаемся получить первое значение с весом в диапазоне от 0 до текущего timestamp в переменную val с помощью команды ZRANGEBYSCORE, если нам удалось получить это значение, то удаляем его из sorted set командой ZREM и возвращаем само значение val. Все эти операции выполняются атомарно. Таким образом мы можем вычитывать нашу очередь в консьюмере, аналогично с примером очереди построенной на структуре LIST.

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

Блокировки (Mutex)


Mutex (блокировка) это механизм синхронизации доступа к shared ресурсу нескольких процессов, тем самым гарантируя, что только один процесс будет взаимодействовать с этим ресурсом в единицу времени. Этот механизм часто применяется в биллинге и других системах, где важно соблюдать потоковую безопасность (thread safety).

Для реализации mutex на базе Redis прекрасно подойдет стандартный метод SET с дополнительными параметрами:

public function lock(string $key, string $hash, int $ttl = 10): bool{    return (bool)$this->getRedis()->rawCommand('SET', $key, $hash, 'NX', 'EX', $ttl);}

где параметрами для установки mutex являются:
  • $key ключ идентифицирующий mutex;
  • $hash генерируем некую подпись, которая идентифицирует того, кто поставил mutex. Мы же не хотим, чтобы кто-то в другом месте случайно снял блокировку и вся наша логика рассыпалась.
  • $ttl время в секундах, которое мы отводим на блокировку (на тот случай, если что-то пойдет не так, например процесс, поставивший блокировку, по какой-то причине умер и не снял ее, чтобы это блокировка не висела бесконечно).


Основное отличие от метода SET, используемого в механизме кэширования это параметр NX, который говорит Redis о том, что значение, которое уже хранится в Redis по ключу $key, не будет записано повторно. В результате, если в Redis нет значения по ключу $key, туда произведется запись и в ответе мы получим 'OK', если значение по ключу уже есть в Redis, оно не будет туда добавлено (обновлено) и в ответе мы получим NULL. Результат метода lock(): bool, где true блокировка поставлена, false уже есть активная блокировка, создать новую невозможно.

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

public function tryLock(string $key, string $hash, int $timeout, int $ttl = 10): bool{    $startTime = microtime(true);    while (!this->lock($key, $hash, $ttl)) {        if ((microtime(true) - $startTime) > $timeout) {            return false; // не удалось взять shared ресурс под блокировку за указанный $timeout}usleep(500 * 1000) //ждем 500 миллисекунд до следующей попытки поставить блокировку    }    return true; //блокировка успешно поставлена}

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

public function releaseLock(string $key, string $hash): bool{    $command = 'eval "        if redis.call("GET",KEYS[1])==ARGV[1] then            return redis.call("DEL",KEYS[1])        else            return 0        end"';    return (bool) $this->getRedis()->rawCommand($command, 1, $key, $hash);}

Здесь мы пытаемся найти с помощью команды GET значение по ключу $key, если оно равно значению $hash, то удаляем его при помощи команды DEL, которая вернет нам количество удаленных ключей, если же значения по ключу $key не существует, или оно не равно значению $hash, то мы возвращаем 0, что значит блокировку снять не удалось. Базовый пример использования mutex:

class Billing {    public function charge(int $userId, int $amount){        $mutexName = sprintf('billing_%d', $userId);        $hash = sha1(sprintf('billing_%d_%d'), $userId, mt_rand()); //генерим некий хэш запущенного потока        if (!$this->tryLock($mutexName, $hash, 10)) { //пытаемся поставить блокировку в течение 10 секунд            throw new Exception('Не получилось поставить lock, shared ресурс занят');}        //lock получен, процессим бизнес-логику        $this->doSomeLogick();        //освобождаем shared ресурс, снимаем блокировку        $this->releaseLock($mutexName, $hash);}}


Rate limiter


Достаточно частая задача, когда мы хотим ограничить количество запросов к нашему апи. Например на один API endpoint от одного аккаунта мы хотим принимать не более 100 запросов в минуту. Эта задача легко решается с помощью нашего любимого Redis:

public function isLimitReached(string $method, int $userId, int $limit): bool{    $currentTime = time();    $timeWindow = $currentTime - ($currentTime % 60); //Так как наш rate limit имеет ограничение 100 запросов в минуту, //то округляем текущий timestamp до начала минуты  это будет частью нашего ключа,//по которому мы будем считать количество запросов    $key = sprintf('api_%s_%d_%d', $method, $userId, $timeWindow); //генерируем ключ для счетчика, соответственно каждую минуту он будет меняться исходя из $timeWindow    $count = $this->getRedis()->rawCommand('INCR', $key); //метод INCR увеличивает значение по указанному ключу, и возвращает новое значение. //Если ключа не существует, он будут инициализирован со значением 0 и после этого увеличен    if ($count > $limit) { //limit достигнут        return true;    }    return false;} 

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

class FooController {    public function actionBar()    {        if ($this->isLimitReached(__METHOD__, $this->getUserId(), 100)) {            throw new Exception('API method max limit reached');        }        $this->doSomeLogick();    }}


Pub/sub


Pub/sub интересный механизм, который позволяет, с одной стороны, подписаться на канал и получать сообщения из него, с другой стороны отправлять в этот канал сообщение, которое будет получено всеми подписчиками. Наверное у многих, кто работал с вебсокетами, возникла аналогия с этим механизмом, они действительно очень похожи. Механизм pub/sub не гарантирует доставки сообщений, он не гарантирует консистентности, поэтому не стоит его использовать в системах, для которых важны эти критерии. Однако рассмотрим этот механизм на практическом примере. Предположим, что у нас есть большое количество демонизированных команд, которыми мы хотим централизованно управлять. При инициализации нашей команды мы подписываемся на канал, через который будем получать сообщения с инструкциями. С другой стороны у нас есть управляющий скрипт, который отправляет сообщения с инструкциям в указанный канал. К сожалению, стандартный PHP работает в одном блокирующем потоке; для того, чтобы реализовать задуманное, используем ReactPHP и реализованный под него клиент Redis.

Подписка на канал:
class FooDaemon {    private $throttleParam = 10;    public function run()    {        $loop = React\EventLoop\Factory::create(); //инициализируем event-loop ReactPHP        $redisClient = $this->getRedis($loop); //инициализируем клиента Redis для ReactPHP        $redisClient->subscribe(__CLASS__); // подписываемся на нужный нам канал в Redis, в нашем примере название канала соответствует названию класса        $redisClient->on('message', static function($channel, $payload) { //слушаем события message, при возникновении такого события, получаем channel и payload            switch (true) { // Здесь может быть любая логика обработки сообщений, в качестве примера пускай будет так:                case \is_int($payload): //Если к нам пришло число  обновим параметр $throttleParam на полученное значение                    $this->throttleParam = $payload;                    break;                case $payload === 'exit': //Если к нам пришла команда 'exit'  завершим выполнение скрипта                    exit;                default: //Если пришло что-то другое, то просто залогируем это                    $this->log($payload);                    break;            }        });        $loop->addPeriodicTimer(0, function() {            $this->doSomeLogick(); // Здесь в бесконечном цикле может выполняться какая-то логика, например чтение задач из очереди и их процессинг        });        $loop->run(); //Запускаем наш event-loop    }}

Отправка сообщения в канал более простое действие, мы можем сделать это абсолютно из любого места системы одной командой:

public function publishMessage($channel, $message){    $this->getRedis()->publish($channel, $message);}

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



Итог


Мы рассмотрели 5 примеров использования Redis на практике, надеюсь что каждый найдет для себя что-то интересное. В нашем стэке технологий Redis занимает важное место, мы любим этот инструмент за его скорость и гибкость. Мы используем Redis в продакшене уже много лет, и он зарекомендовал себя как очень крутой и надежный инструмент, который лежит в основе многих частей нашего продукта. Наш небольшой кластер Redis серверов обрабатывает около 1 миллиона запросов в секунду. А как вы используете Redis в своем проекте? Делитесь опытом в комментариях!
Подробнее..

Из песочницы Почему MVP вашего продукта может привести к краху идеи? Или как тестировать продукт на сформированном рынке

03.11.2020 12:06:29 | Автор: admin
MVP(Minimum Viable Product) или Минимально Жизнеспособный Продукт достаточно популярный термин среди стартапов. Но мало кто знает, что даже успешный MVP может потерпеть крах, поскольку не только качество MVP влияет на успешность проекта, но и ряд других факторов.

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

Успешные примеры использования MVP


Spotify


image

Создатели проекта изначально разработали приложение с единственным функционалом потоковая передача музыки. Благодаря большому кол-ву пользователей, команда смогла подписать контракты с крупными лейблами и получить финансирование. Сейчас Spotify оценивается в $26.5 млрд.

Wildberries


image

Татьяна Бакальчук, основательница маркетплейса, начала с закупки женской одежды, затем создала сайт и запустила рекламу своего интернет магазина на платформе Passions.ru, в первый же день получила несколько заказов. Непременно на начальном этапе развития были проблемы, но это совсем другая история. Сейчас Wildberries является самым крупным маркетплейсом в России с оборотом в 223.5 млрд рублей.
К сожалению не нашел фотографии первой версии маркетплейса.

Dropbox



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

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

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

Когда рынок устоявшийся и на нем уже присутствуют игроки, которые решают данную потребность, вы не можете выйти с тем же базовым продуктом. Для примера можно вспомнить проект Basecamp для работы с проектами: какой вау-эффект был во второй половине нулевых, а теперь это никому не интересно. Сейчас клиентам нужен продукт, которым можно пользоваться. Также, Павел Дуров, выпуская продукт Telegram, запустил быструю версию WhatsApp, со всеми базовыми функциями которые были на тот момент. Он не сделал user experience хуже, чем в современных мессенджерах, которым пользовались многие люди, а это уже не MVP. Данный метод работает во многих сферах бизнеса. Вы не можете запустить MVP и сказать Ребята используйте пока так, но мы скоро допилим продукт и он будет нормальным. Только ваши друзья могут потерпеть, а клиенты запомнят какой плохой продукт и вряд ли вернутся, чтобы протестировать его еще раз после полноценного запуска. Сейчас рынку нужна хотя бы бета-версия на небольшую аудитория, либо совсем небольшой продукт без лишних фич.

Успешные проекты, которые запустились без MVP, но добились успеха:


Beru


image

Маркетплейс Beru.ru не запускался поэтапно, его выпустили с уже имеющимся продуктами и полезными фичами. Также, сделали крутые маркетинговые акции. Что было бы если бы это был такой же проект, как Wildberries? Или же вообще, с таким же начальным функционалом, с которым начинал Wildberries? Я думаю, проект сразу закрылся бы.

Binance.com


image

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

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

Яндекс.Такси


image

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

Zoom


image

Основатель Zoom Эрик Юань ушел из компании WebEx, чтобы запустить собственный продукт, напрямую конкурирующий с вчерашним работодателем. Когда запускался Zoom, на рынке уже существовали такие игроки как Skype, Google Hangouts и другие. Главным драйвером роста для Zoom были привлекательные условия с заметно лучшим качеством связи. Когда остальные продавали видеоконференции за 30-70 долларов в месяц. Zoom предложил 40 минут бесплатного общения, либо безлимит всего за 15 долларов.

MonoBank


image

Мобильный банк, созданный бывшими топ менеджерами ПриватБанк. Когда ребята запускали Mono Bank, они по сути создали лучшую версию ПриватБанка. Главной фишкой нового банка стал кэшбек. На данный момент, банк имеет более 1.3 млн клиентов.

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

Давайте рассмотрим примеры проектов, которые не смогли добиться успеха, так как их продукт проигрывал конкурентам по user experience.

Стартапы с хорошей идей, но с провальным MVP


Социальная сеть Аура


image

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

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

Браузер Амиго


image

Интернет браузер Амиго от IT гиганта Mail.ru был запущен в 2011 году, но так и не добился успеха. Кроме того, что браузер не особо выделялся среди своих конкурентов, так он еще и заработал плохую репутацию за счет агрессивного маркетинга. Пользователи жаловались, что браузер устанавливается без их разрешения. Здесь та же история с user experience.

Мессенджер ICQ


image

Достаточно популярный мессенджер в начале нулевых со временем стал никому не нужным, т.к. на рынке появились конкуренты, которые предложили решение той же потребности с лучшим user experience и дополнительными фишками.

Flatora


image

Это российский аналог проекта Airbnb. Проект привлек порядка $750 000 в 2012 году, но закрылся уже в мае 2013 года. Причиной закрытия стал тот факт, что некоторые функции не работали: не было возможности проводить транзакции и ряд финансовых операций. Проект вышел на конкурентный рынок с сырым продуктом, который не смог дать пользователям сервис, решающий хотя бы те же потребности, которые решает Airbnb.

Travelmenu


image

Онлайн-турагентство Travelmenu получило инвестиции в размере $1.6 млн от фонда Almaz Capital и Runa Capital в мае 2011 года, но не смогло занять свою позицию на рынке и закрылось в апреле 2013. Основными конкурентами, на тот момент, были Anywayanyday и Booking.com. Главной причиной закрытия стало решение отложить выход на B2C рынок, вместо этого сервис начал с B2B.

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

Всем желаю успехов и много денег.
Подробнее..

Digital-трансформация завода CRM для ERP, роботизация БП и оживление железа, ЛК, чат-боты и dream team (ч. 1)

18.01.2021 12:13:17 | Автор: admin

Часть 1: CRM для ERP (в этой публикации)

Часть 2: Роботизация бизнес-процессов и оживление железа

Часть 3: Личные кабинеты, чат-боты и dream team

Текущий уровень автоматизации: 2 года назад

Ситуация на момент моего прихода в компанию на должность CIO:

  • Коротко о заводе: круглосуточное производство, круглосуточная отгрузка продукции

  • Необновляемая с 2014 года ERP 2 и платформа 1С, пресс-релиз о внедрении

  • Бизнес-процессы компании, оторванные от бизнес-процессов в ERP, и как следствие:

    • Параллельная вселенная в виде файлов Excel, Google-таблиц и облачных хранилищ

    • Присутствие журналов и реестров для ручного заполнения сотрудниками

    • Много бумажного документооборот, в т.ч. с контрагентами

  • Минимум данных в ERP-системе и исторические "костыли" в разработке

  • Скромный сайт компании без какого-либо функционала и интеграций

  • Штат ИТ не укомплектован, процессы в дирекции толком не выстроены

  • Огромный список "зависших" текущих задач, начиная с 2016 года

  • Поддержка: 2 сисадмина и 1 помощник, консультант 1С и консультант-программист начального уровня на ГПХ

  • Один договор с одной местной компанией "1С:Франчайзи" на оказание услуг

  • Авральный режим работы пользователей и бесконечное "тушение" пожаров службой ИТ

  • Большое желание руководства компании выйти на новый уровень автоматизации

Первая smart-задача: "сделать CRM за 3 месяца!"

Мои попытки уточнить детали задачи, ее рамки и требуемые результаты - не увенчались успехом. В коммерческой дирекции ассоциации с CRM были весьма размытые, опыта никто не имел.

К счастью, с CRM-системами я был хорошо знаком

Еще с 2016 года, когда я был руководителем проектов внедрений в ИТ-компании, у меня уже были клиенты, которым мы продавали и настраивали 1C:CRM.

В 2018 году я возглавил новое направление в этой же ИТ-компании по внедрению популярных CRM-систем (1C:CRM, amoCRM, Битрикс24.CRM).

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

"Коробочная" CRM для исторической ERP: это реально!

Неожиданная новость: у нас уже заключен договор на разработку CRM

За 2 месяца до прихода в компанию, мой предшественник заключил договор на разработку CRM-системы (именно разработку новой CRM "с нуля", а не внедрения существующих).

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

Тщательный аудит и проверка работ на соответствие ТЗ показала, что это была попытка "срубить бабла". Фактически в ERP была включена функциональная опция встроенной подсистемы CRM (набивалка) и настроены статусы документа "Сделка" в качестве "воронки" продаж.

Самое интересное, что ТЗ было написано подрядчиком и весьма не плохо, но до разработки так и не дошло.

Договор был расторгнут по причине невыполнения ТЗ.

Далее по совокупности критериев, здравого смыла, и сохранения режима "одного окна" в ERP для менеджеров по продажам - принято решение встроить "коробочный" модуль 1C:CRM 3.

Первая сложность: актуальный модуль 1C:CRM 3 подходил только для ERP 2.4, а у нас редакция 2.1.

Вторая сложность: историческая ERP сильно кастомизирована, местами очень "криво".

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

Лайфхак: Facebook спешит на помощь

Мой 12-летний опыт внедрения различных конфигураций 1С говорил о том, что эти сложности решаемые, и модуль можно интегрировать с ERP.

Хотя подобных кейсов в интернете и на технических форумах я не нашел, обратился к разработчикам через партнерскую группу в Facebook:

  • Разработчики честно ответили, что на их практике такого не было, но гипотетически это возможно, если перенести часть БСП из ERP 2.4 в ERP 2.1 (после чего попробовать интегрировать сам модуль).

  • Один из партнеров с Украины ответил положительно. На их практике было 2 успешных внедрения, когда они встраивали модуль 1C:CRM 3, только в ERP 2.2.

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

Через месяц модуль 1С:CRM 3 был встроен в нашу ERP 2.1.

Еще месяц ушел на интеграцию CRM с почтой, офисной АТС в "облаке" и сервисом отправки SMS.

Еще около месяца ушло настройку новой подсистемы, "воронки" продаж, портрета клиента, обучения менеджеров по продажам.

Smart-задача выполнена в срок.

После запуска в эксплуатацию, CRM получила развитие:
  • Новый сайт компании, интегрированный с ERP (подробнее во второй части)

  • Интеграция ERP с Wialon и ЭТРАН

  • SMS-робот и Email-робот

Ноу-Хау: Самый краткий CRM-отчет для оценки KPI

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

Отчет в CRM для оценки KPI менеджеров по продажамОтчет в CRM для оценки KPI менеджеров по продажам
  1. По данным ERP

  2. По данным звонков и писем с контактным лицам клиентов в CRM

  3. По данным CRM

  4. По данным звонков, сайта и почты в CRM

  5. По данным ERP

  6. По данным ERP

  7. По данным CRM

  8. По данным CRM

Внимание!

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

Этот отчет мотивирует менеджера по продажам:

- Поддерживать актуальную контактную информацию по всем клиентам.

- Звонить и вести переписку с клиентами с корп. SIM и корп. почты.

- Добиться от ИТ, чтобы CRM работала корректно.

Факты: Фиксация всех входящих и исходящих звонков в ВАТС и CRM

Связка "ВАТС + номер 8-800 + корп.SIM + Софтфон + CRM" иногда сбоила и некоторые звонки не фиксировались. Для решения всех проблем с корп.SIM и номером 8-800 потребовалось около трех месяцев плотной работы с саппортом Мегафон и Рарус.

Мы добились выпуска нескольких обновлений и 100% фиксации звонков в CRM.

Все звонки в ВАТС (8-800, корп. SIM, офисная АТС)Все звонки в ВАТС (8-800, корп. SIM, офисная АТС)Все звонки в CRM (входящие, исходящие, пропущенные)Все звонки в CRM (входящие, исходящие, пропущенные)
Пример: Воронка продаж, портрет клиента, потенциальные сделки

Основные инструменты менеджера по продажам в CRM для работы с клиентами:

Портрет клиента в CRM (детальный)Портрет клиента в CRM (детальный)Воронка продаж в CRM (канбан менеджера)Воронка продаж в CRM (канбан менеджера)Потенциальная сделка в CRM (история взаимодействий)Потенциальная сделка в CRM (история взаимодействий)

Мы также нашли способ автоматической фиксации фактов встреч менеджеров с клиентами в CRM по данным GPS и мобильной сети (не реализовали только из-за отсутствия полноценного API со стороны сервисов, а ручной режим нам не нужен).

Ниже пример стандартных отчетов в CRM:

Анализ источников привлечения клиентов
Анализ источников привлечения в CRMАнализ источников привлечения в CRM
Причины потерь потенциальных сделок (клиентов)
Анализ потерь интересов в CRMАнализ потерь интересов в CRM

SMS-робот и Email-робот для автоматических уведомлений

Модуль 1C:CRM для ERP уже содержал в себе функционал для подключения к SMS-провайдеру и электронной почты, поэтому мы реализовали только автоматические уведомления по SMS и Email, и интеграции с другими сервисами:

  • Клиентов об отгрузке продукции со складов в автомобили и вагоны (через интеграцию ERP с промышленными весами, подробнее во второй части).

  • Клиентов об убытие машины с территории завода со ссылкой-треком для отслеживания на карте (через интеграцию ERP с Wialon).

  • Клиентов о приближение машины у пункту разгрузки (через интеграцию ERP с Wialon).

  • Клиентов о прибытие вагонов на ЖД станцию для выгрузки (через интеграцию ERP с ЭТРАН).

  • Клиентов о необходимости разместить заказ (по расписанию для контактного лица).

  • Менеджеров по продажам о новых заявках клиентов, поступивших в нерабочее время.

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

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

  • Перевозчиков о штрафах по опозданиям на погрузку и выгрузку (через интеграцию ERP с Wialon).

Как выглядят сообщения SMS-робота в ERP
СМС-робот в ERP для уведомленийСМС-робот в ERP для уведомлений

Все SMS отправляются с символьного имени, от лица компании.

Как выглядят письма Email-робота в ERP

Письма с вложениями и без:

  • Вложения - это отчеты в формате Excel, автоматические сформированные в ERP.

  • Формы отчетов Excel сразу адаптированы для печати на принтере.

  • Тексты писем адаптированы для чтения в смартфоне и ПК.

  • Письма в ERP синхронизованы с почтовым сервером.

Почтовый робот в ERP для уведомленийПочтовый робот в ERP для уведомлений

Интеграция ERP с Wialon: автоматический сбор данных по GPS

  1. Изначально, стояла задача реализовать автоматическое уведомление клиентов о статусе доставки продукции в режиме онлайн.

  2. Затем мы расширили интеграцию с Wialon и начали использовать сервис для автоматического фиксирования фактического времени прибытия машин на выгрузку.

Это набор готовых сервисов, связанный в единую подсистему. Срок реализации 2 месяца.

Пример SMS-сообщений показан на скриншоте выше.

Схема интеграции сервисов и данных для SMS-уведомлений клиентов о статусе доставки продукцииСхема интеграции сервисов и данных для SMS-уведомлений клиентов о статусе доставки продукции

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

Пример автоматического отчета для контроля прибытия машин на погрузку и выгрузку

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

Такая система, в связке с личным кабинетов перевозчика и чат-ботом для водителей (подробнее в третьей части):

  • Дисциплинирует перевозчиков и водителей соблюдать сроки погрузки и доставки

  • Повышает лояльность клиентов и гарантирует своевременные поставки точно в срок

Спасибо, что дочитали до конца!

Задавайте вопросы, постараюсь на все ответить.

Подробнее..

Как с помощью UiPath внедрить process mining в компании

31.12.2020 18:20:33 | Автор: admin

Вызовы цифровой трансформации


image

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

  1. Обнаружить проблему
  2. Внедрить изменения
  3. Отслеживать решение
  4. Реагировать на отклонения

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

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

Инструмент process mining позволяет захватить реальные данные из популярных ERP-, CRM-систем и баз данных сквозных бизнес-процессов в закупках, финансах, управлении претензиями, контакт-центрах и т.д. (SAP, Oracle, Salesforce, ServiceNow), визуализировать их для обнаружения узких мест, неэффективности использования ресурсов и исключений; и, наконец, мониторить изменения в процессе после его оптимизации, в том числе с помощью автоматизации.

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

image
Фото с ресурса: http://personeltest.ru/aways/habr.com/ru/post/257563/

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

Кейсы process mining и автоматизации


Аудит и улучшение существующих метрик


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

На основе инсайтов UiPath Process Mining компания скорректировала автоматизацию контакт-центра. Это повысило качество и скорость связи с клиентами, а также позволило сильно сократить время ожидания клиентом оператора. В целом оказалось, что 80% всех работ можно было стандартизировать, и за счет этого снизить затраты контакт-центров на 568 тыс. евро.

Поддержка оперативных решений


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

После внедрения UiPath Process Mining производителю удалось достичь полной прозрачности закупок: получить новое понимание главных причин задержек, неэффективности и потенциальных аудиторских рисков. Он нашел новые способы улучшения результатов закупок на нескольких заводах и определил истинные затраты, которые повлекли определенные управленческие решения. Это побудило топ-менеджмент задуматься и оценить возможные эффекты от реорганизации и оптимизации производства.

Data mining и глубокое понимание процессов


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

Крупной телеком-компании из Нидерландов требовалось повысить прозрачность своих корпоративных закупок. Имея 6,3 миллиона абонентов фиксированной телефонной связи, более 33 миллионов абонентов мобильной связи и более 2 миллионов интернет-клиентов в пяти странах, они хотели найти решение для контроля рисков и определения путей снижения затрат.

Оператор развернул UiPath Process Mining для получения информации
и устранения интуитивной оценки процессов, а также ручной передачи данных. Он использовал UiPath Process Mining для оценки более чем 200 000 различных позиций, в том числе заказов на покупку и счета-фактуры.

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

Опыт заказчиков


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

Екатерина Сабельникова, консультант по инновациям Philips рассказывает в своем блоге на LinkedIn о главных уроках, извлеченных при использовании process mining в компании.

Сфокусироваться на главном

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

Определить заинтересованных лиц

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

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

Обеспечить поддержку и одобрение высшего руководства

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

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

Наконец, руководство может позиционировать process mining как инструмент, помогающий достигать целевых показателей KPI. Стимулировать вовлечение в изменения всех уровней организации и использование интеллектуального анализа процессов в качестве ежедневного инструмента управления.

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

Как и у любой системы, у process mining существует ряд ограничений:

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

С этими ограничениями мы столкнемся на практике, когда далее на примере UiPath Process Mining будем разбирать весь процесс внедрения аналитики бизнес процессов в организацию.

image
UiPath process mining помогает принимать основанные на фактах рекомендации для улучшения критических процессов

Гайд по развертыванию UiPath Process Mining


Формируем журнал событий

Для создания журнала событий необходимо определить источники данных для него, как правило их бывает не более 2-3. Даже если у компании есть SAP в UiPath и свой ETL, в реальном мире этим не даст воспользоваться принятая в компании стратегия интеграции и наличие КХД/КШД/DataLake или иных решений, которые управляют потоками данных.

Исходные данные получаем из хранилища данных или реплик БД и принятыми в компании средствами ETL, затем собираем/упрощаем их и помещаем в staging area для UiPath. UIPath может брать данные из любой реляционной БД, у которой есть ODBC драйвер. Затем уже из staging таблиц мы собираем журнал событий, с которым будут работать сами алгоритмы UiPath.

После того как создан журнал событий необходимо проработать логику его структуры и собрать все данные в одном месте.

Проводим сборку журнала событий

Технически сборка журнала событий это просто select/insert из кучи таблиц в одну или две (две, когда есть атрибуты, которые не меняются от шага к шагу процесса). Неочевидная часть, связанная с проектированием структуры такого журнала: как преобразовывать смену статусов объекта или факт изменения значения какого-то атрибута в конкретный шаг. Это задача бизнес-аналитика, тут нет универсальной методики, есть шаблон вендора и ноу-хау у интегратора.

Важно понимать, что некорректно выбранный состав шагов и уровень детализации процесса не даст решить задачи анализа или поддержки решений. И еще 100% цифровизации процесса нет нигде. Значит часть шагов, которые в процессе есть, вы не отразите в журнале. Если помнить, что вы решаете задачи увеличения показателей, а не получения красивой картинки это не страшно. А если не помнить, то можно решить, что process mining бесполезное внедрение.

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

Конфигурируем Process Mining UiPath

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

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

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

Проводим аналитику отчетов

Анализировать отчеты технически легко, а вот интерпретировать их результаты совсем не просто это сфера ответственности аналитика. Методика drag-and-drop UiPath значительно упрощает его работу: вытащил виджет, настроил и смотришь данные. Что именно и как анализировать зависит от целей анализа. С технической точки зрения важно, что визуализацию для аналитика готовит дизайнер отчетов, а дальше уже начинается его работа.


Создаем дашборды

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

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

Настраиваем оперативный контроль

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

Результат работы функции можно использовать в дашбордах чтобы метить подозрительные случаи или отсылать в UiPath Action Center, чтобы там записать процедуру по ее устранению. Кстати, так же работает и интеграция с ML можно вызывать программы на R или Python, передавая им на вход данные и записывая результаты работы.

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

Здесь есть техническая проблема как организовать верстанный контроль. Тут у UiPath с самого начала все правильно: конфигурация настроек и дашбордов живет в git. Можно в локальном, можно в корпоративном, можно хоть на gituhub. В других решениях где-то версионности вообще нет (например, конфигурация модели данных), а где-то она достигается старым добрым способом допиши дату или номер версии в название файла. Технически очень много головной боли при наличии верстанного контроля уходит и длительность спринта сокращается.

Продуктовые решения UiPath позволяют проводить внедрение process mining в компании комфортно и легко. Критерием успеха проекта будет методология которая позволит пройти путь от определения целей и границ анализа до выявления причин негативных тенденций в характеристиках процесса и создания инструмента поддержки принятия оперативных решений.

Инструментами платформы UiPath может пользоваться любой конечный пользователь с базовыми скиллами разработчика. Второй критерий успеха process mining проектов сильная экспертиза процессных аналитиков. Максимальный эффект от оптимизации процессов получают не от формирования рекомендаций, а от системного следования им, а инструменты UiPath же помогут здесь с технической реализацией process mining в компании.

Корпорация Everest Group ежегодно оценивает вендоров технологий process mining на основе их влияния на рынок, видения и возможностей их продуктов. В последнем исследовании 2020 года UiPath признали лидером в сфере process mining среди других крупнейших вендоров.

image

Выводы


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

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

Лекционный вечер по геймдизайну

30.03.2021 10:05:43 | Автор: admin

21 апреля 2021 года (среда) в Центре развития компетенций в бизнес-информатике Высшей школы бизнеса НИУ ВШЭ состоится Лекционный вечер по геймдизайну.

C 19:00 и до 22:00 наши преподаватели, эксперты игровой индустрии, будут делиться с гостями мероприятия своим опытом.

На мероприятии вас ждут три лекции:

  1. Как сделать интересную и прибыльную игру (Константин Сахнов, совладелец издательства JustForward).

  2. Как сделать интересную игровую механику (Владимир Агарев,креативный продюсер в компании Gaming Point).

  3. Как делается геймдизайн масштабной российской рпг (Юлия Черненко, гейм-дизайнер в Owlcat Games)

    Начало регистрации: 18:30. Начало мероприятия: 19:00

    Мероприятие пройдет в смешанном формате. Посетить его можно как очно, так и дистанционно. Если вы не сможете прийти очно или находитесь не в Москве, то сможете подключиться к лекциям в онлайн-формате: Zoom + трансляция нанашем канале на youtube.

    Более подробная информация и регистрация на мероприятие здесь>>>

Подробнее..

Как IT-компании постят кейсы, которых не было, и как написать отличный кейс, даже если хвастаться особо нечем

14.02.2021 00:15:35 | Автор: admin

Она хотела бы жить на Манхеттене, но есть только офис в Житомире и полтора джуна

Всем привет, меня зовут Ярослав, я работаю Full-Stack девелопером в SaaS-компании, сейчас живу в Болгарии.

В дополнение к основной работе я руковожу IT-отделом международной контент-редакции и провожу экспертизу статей.

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

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

Почему так делать не нужно?

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

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

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

Что делать, если вообще нет впечатляющих проектов как правильно собрать кейс, чтобы авторы его интересно написали?

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

Даже историю о том, как у вас сгорел сарай с серверами, можно упаковать в интересный, полезный, а главное уникальный кейс безо всякого воровства у конкурентов.

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

Как построить процесс написания топового кейса на нужном языке?

1. Обозначить цель кейса

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

2. Выбрать рассказчика

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

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

ВАЖНО: этим человеком не должен быть маркетолог или пиарщик! Только реальный сотрудник, максимально погруженный во внутреннюю кухню.

Для кейсов нужны инсайды, индивидуальные особенности построения продукта, небольшие цепляющие детали: контекст процессов, реакция клиентов. Поднимите переписки, отчеты, пересмотрите Zoom-собрания. Отнеситесь к вашему проекту как к отдельной вселенной с персонажами, где каждый живой человек со своей суперсилой и слабыми сторонами.

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

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

3. Интервью с исполнителями

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

ВАЖНО: убедитесь, что с авторами материала у вас согласовано NDA, иначе ваш кейс запросто угонят любители рерайта из Пало-Альто.

Если у вас есть толковые инхаус-автор и нейтив-редактор, этот шаг можно пропустить: экспертом выступит и сам рассказчик. Если вы хотите разместить кейс не у себя в блоге, а на каком-то внешнем ресурсе (СМИ), обязательно обговорите площадку размещения до написания текста. Так автор и дизайнер смогут точнее попасть в стиль выбранного блога, а материал разместят быстро и без правок.

ВАЖНО: если вы решили публиковать кейс не у себя в блоге, а где-то на внешнем ресурсе, укажите эту площадку при составлении брифа, еще до передачи на написание. Если текст будет сделан не под конкретную площадку, то он может не пройти по редполитике сайта, тогда редактор СМИ может его не принять или отправить на глобальную переработку.

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

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

4. Бриф

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

ВАЖНО: в брифе не допускайте пустых маркетинговых фраз, избитых клише. Приведите точные данные по проекту, убедитесь, что в кейс не включено ничего лишнего, а процессы будут четко и понятно отражены в тексте.

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

5. Написание

Автор пишет текст по брифу, уточняя все вопросы по проекту у эксперта.

ВАЖНО: качественно рассказанная история может собирать аудиторию многие годы после публикации. Старайтесь не привязываться без необходимости к текущим событиям в мире, иначе уже на момент выхода статьи она может протухнуть.

6. Редактура

Текст от автора крайне желательно показывать нейтив-редактору (пруфридеру) из страны вашей целевой аудитории.

ВАЖНО: любому автору нужен редактор, даже если пишет невероятный литератор с грамотой Русский медвежонок.

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

7. Финальная экспертиза

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

Как выйти в топ трендов без уловок?

Бессменно лучшая тема для IT-контента это решение повседневных задач бизнеса средствами софта. Или, по-простому, как мы разработали/купили продукт X и все резко стало хорошо. Усилиями интеграторов ERP-системрынок перенасыщается однообразными статьями крупный бизнес КоторыйНельзяНазывать недавно подключился к нашей системе, и у них теперь работники сами даже по выходным приходить стали за пол-зарплаты.

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

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru