Эта история построена на ряде удачных совпадений, в которых нам, как нам кажется, удалось распознать правильную тенденцию и создать продукт, который может подойти многим похожим на нас. Потому, что… впрочем, обо всем по порядку.
Итак, мы – компания, оказывающая своим клиентам высокотехнологичные услуги – аутсорсинг ИТ-экспертизы, удаленное сопровождение, разработка ПО на заказ и т.д. и т.п. Как и для любой другой компании, для нас актуален вопрос соблюдения трудовой дисциплины и контроля присутствия наших высококвалифицированных сотрудников на рабочем месте. Задачи такого рода относительно успешно решаются в тех случаях, когда сотрудники а) работают по строгому графику в офисе и б) их отношением к тому, что за ними следят, можно пренебречь. То есть можно установить на входе в офис традиционные СКУД, поставить следящее ПО на офисные компьютеры и спокойно реализовывать функции Большого Брата. Но в случае работы с экспертной командой все эти меры сработают скорее в минус, и вот почему.
Во-первых, типичный сотрудник высокотехнологичной компании (далее назовем его «эксперт») – это человек, который работает не только на работе и не только в традиционное рабочее время. Это связано… это может быть много с чем связано – с фактической необходимостью осуществлять какие-то работы ночью, с разницей часовых поясов с клиентами, в конце концов с тем, что пик производительности нашего гениального разработчика приходится на интервал между 23-00 и 4-00, и в это время он творит чудеса. Соответственно, необходимо учитывать не пребывание в непосредственной близости от рабочего компьютера, а фактическую работу на нем (возможно, и удаленно из дома).
Во-вторых, эксперт – это свободолюбивое существо. Сама мысль, что какая-то программа занимается исключительно тем, что контролирует его деятельность, действует на него демотивирующе, подрывает дух инновационных команд и, соответственно, негативно влияет на производительность труда.
В-третьих, эксперт — это эксперт, со своими профессиональными амбициями. Существование софта, который ему (эксперту) противодействует, может направить таланты этого человека на борьбу с этим софтом. Таким образом, наш эксперт на своем рабочем месте в свое рабочее время будет тратить силы… на борьбу с системой учета рабочего времени! Согласитесь, что-то тут не так =).
Ну и, в-четвертых, к программам, собирающим данные пользователя, с подозрением относятся сами высокотехнологичные компании. Мало ли куда потом эти данные уплывают…
В общем, мы проблему для себя осознавали, но, как настоящий «сапожник без сапог», решать ее для себя не спешили. Пока с такой же проблемой к нам не обратился наш Клиент. Вот отсюда начинаются ранее анонсированные совпадения.
Так вот, наш клиент — компания, оказывающая своим клиентам высокотехнологичные услуги. А именно, стартап, специализирующийся на услуге Dedicated Developers Team (когда программистов сдают в аренду заказчику). Понемногу количество программистов у клиента разрослось, и встал вопрос о трудовой дисциплине и контроле рабочего времени. А традиционными средствами пользоваться клиент не хотел, по причинам, полностью совпадающим с описанными выше. Так что совпадение потребностей было стопроцентное. С предложением решить для него эту задачу клиент обратился к нам, и мы с энтузиазмом (предчувствуя как минимум двойную пользу =) ) принялись исследовать вопрос.
Оказалось, что наш клиент, как и мы, работает преимущественно под Windows. И приложения, с которыми он (как и мы!) работает, довольно тяжеловесные, типа SharePoint. На обычном домашнем ноутбуке, и уж тем более на IPad, не поработаешь. Поэтому сотрудники используют свою рабочую машину даже когда работают из дома – они подключаются к ней через службу удаленного рабочего стола RDG (Remote Desktop Gateway). Все, как у нас!
Далее выяснилось, что и мы, и заказчик используем в качестве и офисной АТС, и универсального средства коммуникаций Skype for Business (бывший MS Lync). Эта программа, кроме своих непосредственных обязанностей, выполняет еще одну – она в любой момент времени может сообщить статус присутствия пользователя в системе. Итак, сотрудник всегда для работы пользуется рабочим компьютером – на нем всегда стоит Skype for Business – Skype всегда знает статус присутствия пользователя… Небольшое умственное усилие – и идея сбора истории изменения статусов и получения на основе нее графика работы прочно обосновалась в нашем коллективном разуме. Осталось только ее реализовать, к чему мы и приступили.
Естественно, сбор статистики с клиента не имел большого смысла, т.к. не видно на каком устройстве в данный момент работает сотрудник. Следовательно, надо было смотреть на содержимое баз данных Skype серверов (речь, конечно же, о корпоративных серверах Skype4B). Соответствующая информация о структуре БД серверов Skype4B, хоть и не была документирована, но доступ к ней не потребовал каких-то операций по дешифрованию или декомпиляции. Под катом немного технических подробностей для заинтересованных.
- Базы данных Skype For Business сервера.
- База rtcdyn:
- Понятие клиент в rtcdyn.
- Извлекаем клиентов. Таблица [RegistrarEndpoint].
- Работаем с изменениями статусов клиентов. Таблица [PublishedInstance].
- Статусы клиентов. Колонка Availability.
- Журнал логов присутствия.
Базы данных Skype For Business сервера
Существует две базы данных, с которыми мы работаем при мониторинге изменения статусов:
[rtc] – содержит статические сведения, которые не меняются с течением времени. В данной базе находятся сведения о пользователях, контактных данных, фотографий профиля, статусных сообщений и т.п.
[rtcdyn] – содержит динамическую информацию, касательно изменения статусов клиентов(программ) которые подключены к серверу Skype For Business.
База rtcdyn
Как было сказано выше, данная база данных содержит динамическую информацию касательно изменения статусов клиентов(программ) которые подключены к серверу Skype For Business.
Понятие клиент в rtcdyn
Прежде всего следует условится с понятием «клиент». Это прежде всего программа или веб браузер с которого происходит коннект к серверу Skype For Business. «Клиент» для соединения требует логин и пароль пользователя и предоставляет дополнительные сведения касательно устройства, часовой зоны. Важно понимать, что собираемая информация по «Клиенту» касается только «Клиента», а не реального пользователя. Т.е. сведения которые мы будем собирать зависят от того, где пользователь запустит «Клиент».
Рассмотрим пример:
- Пользователь А может запустить клиент внутри Remote Desktop сессии, и следовательно его клиент будет передавать серверу Skype For Business сведения о компьютере внутри Remote Desktop сессии.
- Пользователь А может запустить клиент на мобильном телефоне, и следовательно аналогично будут передаваться данные касательно мобильного телефона.
Все сведения от «клиентов» независимы друг от друга.
Извлекаем клиентов. Таблица [RegistrarEndpoint]
После коннекта к базе rtcdyn мы видим несколько таблиц. Среди них можно найти таблицу RegistrarEndpoint. Попробуем извлечь некоторую информацию из данной таблицы.
select top 5 ContactInfo
from [rtcdyn].[dbo].[RegistrarEndpoint];
После преобразования полученной информации, мы можем увидеть сведения об источнике подключения к серверу Skype For Business.
Например:
P;sip:212.3.112.68:51024;transport=tls;ms-opaque=b68b30d990;ms-received-cid=608500;] ;;sip:lyncedge1-uk.point.local:5061;transport=tls;opaque=state:Ee.ag8rxSddCvwU5-K8q7K742RAAA;lrbwbyztosJ7NpwKGhwBHTHlngAA70f2c5f712 <sip:lyncedge1-uk.point.local:5061;transport=tls;opaque=state:Ee.ag8rxSddCvwU5-K8q7K742RAAA;lrbwbyztosJ7NpwKGhwBHTHlngAA70f2c5f712>
Из данной строки можно извлечь IP адрес устройства с которого идет подключение «клиента».
Аналогично можно извлечь сведения из колонки ClientApp. В данной колонке находится информация про приложение из которого происходит сам коннект к серверу Skype For Business.
Примеры значений которые могут содержаться в ClientApp приведены ниже:
UCCAPI/15.0.4753.1000 OC/15.0.4753.1000 (Skype for Business)
RTCC/5.0.0.0 OWA/15.00.1076.009
На основании ClientApp можно определить название, тип клиента и его версию.
Работаем с изменениями статусов клиентов. Таблица [PublishedInstance]
Таблица PublishedInstance заполняется автоматически при поступлении информации об изменении статуса (Activity) «Клиента». Среди всех столбцов особенно интересны:
PublisherId – идентификатор аккаунта пользователя который подключается к Skype For Business;
LastPubTime – дата и время при котором произошло изменение статуса «Клиента»;
Data – основная часть сведений по измененному статусу. Позволяет понять что именно произошло со статусом в конкретный промежуток времени. Более подробное описание сведений которые могут находиться в столбце можно найти в Chapter 6 книги Enhanced Presence Lync 2010.
Мы же извлекаем из Data только информацию про Availability, TimeZoneBias, Device и PublisherId.
Отдельно следует сказать про BoundEndpointId. Этот столбец указывает на идентификатор сессии, которая устанавливается при каждом подключении «клиента» к серверу Skype For Business. По данному идентификатору мы можем определить дополнительные сведения по устройству, с которого подключается «клиент». Это позволяет вести изменения статусов индивидуально для каждого устройства.
В итоге, после применения выборки из столбца Data, группировки и сортировки мы получаем вот такой результат:
Статусы клиентов. Колонка Availability
Все статусы в базе пишутся только номерами, и Microsoft не дает информации, какой статус что означает. Есть только общие сведения по диапазонам, которые зарезервированы под различные Activity.
Например 15500 – away, mobile. Или 6700 – busy, presenting.
Пришлось потратить время на исследование и сбор статистики для составления таблицы-справочника диапазонов Activity:
В данном случае на основе справочника и колонки isav определяется – засчитывается ли время в активное или нет.
Журнал логов присутствия
Новая поступающая информация по статусам сохраняется в отдельную базу, которая никак не связана с базами rtc и rtcdyn. Параллельно мы обсчитываем общие сведения за прошедшие дни для ускорения вывода отчетов активного и неактивного времени «клиента». Сохранение логов производится с помощью TimerJob, либо в случае использования SQL Express с помощью Windows расписания.
В результате мы имеем полную информацию о том, когда и как менялся статус пользователя, и об устройстве с которого был получен этот статус (нас в нашем конкретном случае интересовали только офисные компьютеры, но включать фантазию еще никто никому не мешал).
Используя эту информацию, можно получать сведения о графике работы. В данный момент с большой достоверностью мы получаем:
- Время прихода в офис.
- Время начала и окончания обеденного перерыва.
- Время ухода.
- Сколько всего часов было отработано.
- Работал ли сотрудник вечером из дома.
Фактуры достаточно, чтобы построить полноценную систему контроля рабочего времени, но с привязкой к реальному рабочему месту труженика интеллектуального фронта – программиста или саппорт-инженера. Собственно, такую систему мы и реализовали, чем спешим похвастаться.
Можно получать, например, такие отчеты:
- Среднее и максимальное опоздание за период.
- Всю историю отсутствий с указанием на наличие согласия руководителя.
- Время внеурочной работ.
- Работа из дома — система получает информацию со шлюзов RDG и можно видеть, зашел ли сотрудник на компьютер локально или из дома.
Как и во всех подобных системах, есть график отпусков, больничные, разрешения менеджеров на работу из дома и прочие плюшки.
Еще одной особенностью является личный кабинет сотрудника, и рассылка отчетов на почту. То есть система позиционирует себя не как «шпион» (будем тайно собирать о тебе информацию, а потом вычтем из зарплаты), а как «помощник» (покажем тебе, что статистика ведется, и дадим возможность проанализировать эту статистику и сделать для себя выводы). Эта функция оказалась очень полезной — даже несмотря на то, что все наши сотрудники и сотрудники заказчика довольно ответственные люди, после начала рассылки отчетов среднее время присутствия сотрудника на рабочем месте повысилось.
Реализация со скринами системы:
Можем констатировать – с задачей мы справились. Наш заказчик доволен, мы (пользуясь сами этой системой) довольны, сотрудники, деятельность которых контролируется… ну, как минимум, не недовольны, а некоторые, как уже сказано выше, и благодарны системе за структурированные отчеты о графике работы и другие сотрудник-ориентированные фичи. Пожалуй, систему не стоит использовать для ведения табеля или начисления зарплат, но в качестве инструмента, предоставляющего менеджеру оценочную информацию о работе сотрудника, она очень эффективна. Еще она является неоценимым подспорьем сотруднику-администратору, ведущему информацию об отгулах и отпусках. Такая ситуация, как — сотрудник в отпуске, начальник попросил его полдня поработать из дома, а потом взять это время в отгул — теперь легко отслеживается. А возможности настройки гибких условий типа «если в 9:15 не на работе значит прогул» или даже «можно опаздывать не чаще двух раз в неделю и если ночью работал с заказчиком, то можно поспать до обеда, а после поработать из дома» сделали возможным использовать систему для ИТ-компаний, где обычные СКУД практически не применимы. Ну и факт отсутствия «шпионского» ПО на компьютерах сотрудников благоприятно отражается на атмосфере в коллективе. А хорошая рабочая атмосфера – это, «по данным британских ученых», до 80% успеха работы =)
P.S. Да, конечно, было бы неплохо и смотреть статистику работы в интернет, и собирать список установленных программ, но это совсем другой уровень шпионажа, чреватый потерей лояльности коллектива. Кроме того, в нашей практике такие изощренные обманщики встречаются крайне редко, и они все же довольно быстро выявляют себя низкой производительностью или низким качеством работы – так что награда все равно находит героев.
Комментарии (23)
hazard2
09.12.2015 10:39+5А в скайпе разве нельзя поставить зафиксировать статус «в сети»?
Кроме того, было бы интересно посмотреть на человека, который был «благодарен системе за структурированные отчеты о графике работы».hardpoint
09.12.2015 11:07+2перед системой не стоит задача тотального контроля, больше на доверие.
но все же, если сотрудник запретил изменение статуса, и вдруг ему звонит менеджер, и сотрудник недоступен, то вопрос честности вызывает вопрос.
Oxoron
09.12.2015 11:10+1было бы интересно посмотреть на человека, который был «благодарен системе за структурированные отчеты о графике работы».
Можете глянуть на мой профиль. :)
Подобные системы пользуются определенным спросом. Для кого-то это удобный инструмент самоконтроля, Я использую toggl для упрощения оценки времени выполнения задачи (правда, работает лишь при наличии однотипных задач).
MazayZaycev
09.12.2015 13:24+2Статус в клиенте и у сервера Skype for Business это разные вещи, статус в клиенте поставить можно, но на сервере Inactive (5000-5999) или Away(15000-15999) все равно появятся. Например во время разговора приходит статус “in a call inactive” 5000
Можно поставить время через которое клиент отправит информацию о не активности, но как уже отмечалось выше это легко ловится.
Sergey-S-Kovalev
09.12.2015 12:18+14Я всегда думал, что эксперты, это те кто у кого работа на результат, а не на «от звонка до звонка».
Для тех кто не любит контроль со стороны линка по присутствию:
Кладёте листок напротив выхлопа из ноутбука, под него авторучку под углом и сверху ставите мышку.
Выхлоп почти незаметно трепыхает мышь, оптика мыши реагирует, курсор движется. для системы Вы на рабочем месте :)
зыю не помогает если нужно лочить комп.hardpoint
09.12.2015 12:39+6для обхода привязывают к мышке электробритву или зубную щетку, но это видно
hardpoint
09.12.2015 15:44+2У нас никто никого не “тыкает носом” в количество отработанных часов. Менеджер и так имеет представление кто есть кто в команде (особенно если в команде меньше 15 человек). Систему можно рассматривать как помощника. Если есть сомнения в сотруднике – посмотри на отчёты. В каком режиме человек работает, сколько раз за день он бегает покурить, чай попить, а может быть и на собеседования ходит. Уходит ровно в 18:00 или нет (если все время ровно, может быть проект человеку не интересен, а может ему предложить на 10 минут раньше уходить, потому что как выясняется он на автобус опаздывает?). Можно увидеть, ходят ли сотрудники на обед вместе или каждый за себя? И таких вопросов накапливается много.
К тому же есть и психологический момент: мало кто любит чувствовать себя лузером, особенно в команде (если конечно команда есть). Если у меня за день (неделю) явно не доработки и к тому же на митинге сказать нечего, то может я на часик-другой задержусь.
michael_vostrikov
09.12.2015 12:54+1> после начала рассылки отчетов среднее время присутствия сотрудника на рабочем месте повысилось.
Немного непонятно, а это как? Сначала работали с 9 до 18, а стали с 9 до 19?FractalizeR
09.12.2015 14:28+1Наверное, в туалет стали меньше ходить. Хочется, но ведь время система все равно посчитает. Так что — терпеть! :)
hardpoint
09.12.2015 15:28+1рабочий день с 9 до 18, никогда не бывает 8 часов рабочих и 1 час обед. В жизни (по крайней мере у нас в компании) время работы в среднем составляет 07:25 – 07:40. А у отстающих было и меньше 7 часов, сейчас ситуация значительно выровнялась.
michael_vostrikov
09.12.2015 18:08Ясно, спасибо. Кстати, а есть какие-то границы, на которые сотрудник может ориентироваться — типа «среднее время должно быть 7 часов в день»?
MazayZaycev
09.12.2015 18:23За 1 день нет, а за период отображается в отчётах для менеджера и в личном кабинете сотрудника. Например, за неделю запланировано 40 часов, в рабочее время 38:42, сверхурочное — 03:36, итого on-line 42:18.
frst
10.12.2015 11:36+1не понимаю зачем конторе, у которой деятельность не привязана к реальному времени иметь такой античеловеческий график, утром в 9 все пробки собираешь, вечером в 18 все пробки собираешь, и так весь город, набиваются в маршрутки как селёдки, коллективное сумасшествие
hardpoint
11.12.2015 17:08система позволяет вести гибкий график без необходимости пользователю его отмечать или менятью
qw1
09.12.2015 15:18+2Вася, можешь подойти посмотреть, у меня что-то не компилируется.
Не могу, у меня рабочее время перестанет считаться.hardpoint
09.12.2015 15:22+2вы слишком утрируете, это в первую очередь инструмент «для себя». В нормальной команде ПМ будет смотреть в отчет только в случае если вопросы к сотруднику
Alliceinwonders
Как система учитывает вариант «запустил клиент и ушел на два часа пить чай» или превращение удаленной работы требующей 20 минут в полтора часа за счет работающего клиента?
serjdag
На прошлой работе было… Если сотрудник не блокировал компьютер покидая рабочее место, то с легкой руки проходящего мимо админа все его коллеги, а иногда и вообще все сотрудники компании, «приглашались» на пиво/в ресторан/кафе/боулинг и т.д., за счет сотрудника, после чего сообщение удалялось из Отправленных и из Корзины
FractalizeR
И долго такие сотрудники работали после этого в компании? :)
serjdag
долго), но мотивировало к блокировке компьютера
guestfromEarth
Это как в «Место встречи...», когда Шарапов дело на столе оставил)
bebop
сотруднику надо было экран выключать перед уходом :)
intet
Есть еще вариант 20 минут работы 60 минут чтения хабра, для повышения учтенного рабочего времени.