Проект. Трекер обращений
Контекст
Около семи лет я трудился в одной крупной компании в должности дежурного ИТ-специалиста. Работа была сменная, в т. ч. с ночными сменами, и заключалась в технической поддержке диспетчеров, которые тоже работали круглые сутки. Обычная техподдержка тоже существовала, но ребята там работали в обычном графике 5/2 и общались преимущественно с такими же обычными пользователями.
Работа техподдержки осуществлялась в системе управления пользовательскими обращениями или «Сервис Деск». Это такой сайт, где любой пользователь мог создавать обращения о своих проблемах с ИТ. Потом эти обращения назначались на исполнителей, решались и оставались в системе для накопления опыта и знаний. Удобная штука по заветам ITSM и KM. Но не когда ты дежурный.
Проблема
На смене должно быть двое дежурных, каждый со своим набором обязанностей. Каждый человек периодически занимал место одного из дежурных, а общий штат составлял десять человек. Ну, то есть должности две, а личностей у каждой должности — десять. Обязанности из суток в сутки одни и те же, а вот исполнитель разный…
Дежурные активно использовали «Сервис Деск» для фиксации и решения проблем. Но была проблемка: в системе нельзя было авторизоваться как дежурный, только через личную учётную запись. И получается, что нельзя получить или создать список обращений, к которому бы имели доступ все ребята в смене и только они.
Обращения — важный источник информации, они должны быть всегда под рукой и актуальные. А решаться обращения могут годами. И как же решалась данная «проблемка»? Правильно — гениально. Дежурные вели список важных обращений в «Ворде» и просто раз в смену актуализировали список. Или нет — я же говорю, личности разные…
Идея
Решить вопрос расширением функционала «Сервис Деска» не удалось, т. к. вещь это покупная и вообще «кто вы тут такие, шоб мы тратили на вас своё время и деньги»… В общем, было принято решение вытаскивать себя из болота прямо за волосы. Вместе с коллегами.
Идея проста: нужно место хранения списка обращений с возможностью добавлять, актуализировать и удалять эти самые обращения. Естественно, веб.
Дизайн*
* Осмысленное проектирование
Самая первая версия (MVP) представляла из себя:
- поле для ввода номера (ID) обращения;
 - таблицу с обращениями;
 - пару кнопок «Добавить» и «Удалить».
 
Дизайна не было от слова «совсем», но идея работала. Настоящий proof of concept. Изображений того «чуда», естественно, не осталось…
После получения рабочего прототипа пришло время задуматься о дизайне приложения. К этому моменту я уже знал, что, например, для таблицы буду использовать библиотеку DataTables и сразу заложил её в дизайн. Технологический стек у меня был ограничен корпоративными стандартами и представлял из себя Astra Linux, PostgreSQL, nginx, C#, HTML/CSS/JavaScript и различные js-библиотеки.
Работать всё должно было примерно так:
- У каждого дежурного своя «Главная страница» с таблицей с обращениями и своя «Корзина».
 - Чтобы добавить обращение в таблицу, надо было ввести номер обращения в поле и нажать кнопку «Внести». Данные запрашивались через API «Сервис Деска». Вводить можно сразу несколько номеров через пробел.
 - Обращения в таблице появлялись в свёрнутом состоянии для экономии места, но с самой важной информацией.
 - Если выбрать несколько обращений, то можно их все обновить кнопкой «Обновить» или удалить кнопкой «В корзину». Настроить автоматическое обновление информации по изменению в «Сервис Деске» не удалось.
 - Если надо обновить все обращения в таблице, предусмотрена особая кнопка «Обновить всё». Так как это считается «дорогой» операцией, то и кнопка не простая, а «дорогая»: она имеет вид слайдера, который надо протянуть, чтобы кнопка сработала.
 - Удалять всё в «Корзину» задачи не стояло, поэтому такая кнопка отсутствовала.
 - Из «Корзины» можно любое обращение вернуть с помощью кнопки «Вернуть» или удалить с помощью «дорогой» же кнопки «Удалить».
 
Таким я видел сайт на варфреймах:
Варфрейм «Главная страница» — Варфрейм «Корзина» — Почеркушки
Финал
Спустя некоторое время мне удалось решить все поставленные задачи и получить полноценное веб-приложение:
Главная страница — Корзина
В пути по просьбе коллег в «Корзину» была добавлена кнопка «Удалить всё» на случай заметания следов. Шучу: просто тогда разработчиком я был начинающим, и при количестве обращений в таблице в несколько сотен интерфейс начинал «подтупливать». Эту проблему я решил таким вот образом, а другие уже не успел, т. к. уволился, но это уже совсем другая история…