- PVSM.RU - https://www.pvsm.ru -
В данном топике я постараюсь перемешать реальную историю с функциональным описанием системы. И даже попытаться объяснить что, как и почему так получилось.
Чуть больше года назад я начал разрабатывать систему OTMS [1]. Сперва это был простенький opensource helpdesk. Работал я тогда системным администратором-разработчиком. Системный администратор в провинциальном городишке — сотрудник, который выполняет много различных IT работ, зачастую даже не относящихся к системному администрированию. По-простому это называется — компьютерщик-программист. Основной моей работой была поддержка серверов: DNS, , почта. Radius и биллинг сервера к тому времени я благополучно сбросил с себя на другого сисадмина. Вторым моим занятием была разработка интернет-магазина [3]. Разработка закончилась ничем, так как заказчик-директор потерял всяческий интерес к продолжению разработки. И тогда же я начал делать OTMS. Для начала я переделал уже существующий ранее мною же написанный helpdesk к более современному виду, добавив MVC паттерн. Далее самым главным решением было добавить объекты.
Объекты — любые ресурсы, которыми управляет компания в ходе своей работы. Ну самое простое применение объекта — клиент. Почти любая компания строит свою работу вокруг понятия «клиент». К клиенту привязываются задачи, для клиента оказываются услуги и т.д. Также объектами могут служить и другие ресурсы, например, сервера. Сервер ломается, над сервером ведутся работы, сервера меняются. Всё это задачи. Вокруг такой структуры «объект — задача» у меня и появилось куча идей, как можно было бы далее развивать систему. И даже то, что существовали другие решения: redmine, jira, otrs и прочие меня не испугало. В любом случае эти решения выполняли немного другие задачи, всё это системы ведения и управления проектами. Да это тоже helpdesk-и, но с другой спецификой.
Кстати, OTMS — object and task management system. Я не стал долго ломать голову над названием.
Когда основная работы над функционалом была закончена, пришло время попытаться реализовать следующие задумки. Первая задумка — это почта. Но не просто почтовый клиент, а клиент связанный с существующими в системе объектами и задачами. Примером для меня была работы службы технической поддержки. В техподдержку на почтовый ящик support@domen.com приходит письмо. Да у каждого сотрудника есть личный почтовый ящик (имя.фамилияdomen [4].com) и общий, настроенный у каждого в почтовике — support@domen.com. Чаще всего начальник отдела технической поддержки координирует работу сотрудников, распределяя кто будет выполнять задачу. Проблема решается и ответ пишет уполномоченный сотрудник из своего почтового клиента.
Мне же хотелось, чтобы входящее письмо автоматически стало задачей, было привязано к клиенту (например, в его истории), переписку с клиентом мог бы увидеть любой сотрудник, а если комментарий был отправлен обратно клиенту — увидеть факт отправки.
Продолжу пример на той же самой компании. Есть общие файлы, которые должны быть доступны всем сотрудникам — обычные (не секретные) хранятся на сетевом (share) диске. Более важные (секретные) — на компьютере у одного сотрудника с разрешеннём доступом тем, кому можно иметь туда доступ. Говорить в сто первый раз о важности резервного копирования — не буду. Часть файлов была случайно утеряна. И, кстати, политика в компании была построена так, что системному администратору эти файлы были не нужны, а значит и доступа к ним давать было не нужно. Да и разного рода начальников и прочих умных лиц хватало для того, чтобы самим решить, как поступать с этой информацией.
Файловый менеджер — следующая часть системы. Он должен хранить все состояния и изменения файлов, т. е. иметь возможность загрузить файл в любом его состянии на определённую дату. Ограничивать права доступа к файлам и директориям для сотрудников и отделов. Иметь возможность писать заметки к файлам. Иметь возможность восстанавливать файл, если он был удалён по неосторожности или умышленно каким-либо сотрудником.
Несмотря на то, что часть системы к тому времени была уже написана и я получал заработную плату (нормальную и обычную для провициального городка) сидя на одном месте и занимаясь практически одним делом. Мне этого было мало, да и, грубо говоря, не сильно интересно. В голове моей уже давно зрела мысль оформить ИП и под этим самым ИП продожлать работу. В качестве ИП — права на разработку будут принадлежать только мне и я смогу искать новых клиентов, чтобы содержать семью и спонсировать разработку. Да, все права на разработку тогда уже принадлежали мне, о чём я успел позаботится и отдавать их работодателю я был не должен. Жить без денег идеи не было, поэтому я поговорил с директором компании и мы решили, что я точно также буду продолжать разработку для их компании, за что буду получать деньги, единственное буду сидеть не в их офисе, ну и оформим договор как аутсорс услуги.
В январе 2012 года я стал работать в качестве ИП. И был всячески рад переменам. Но, если всё стало бы так просто — было бы не интересно, да и судьба обязательно сделает так, чтобы мы из каждого поступка извлекли какой-то урок. Проще говоря ни в январе, ни в феврале договор подписан не был. Почему? Я до сих пор точно не знаю. Тот самый директор решил развиваться и взял на работу, где было и так мало человек, несколько новых — ещё директоров. Исполнительного директора и коммерческого. Идея ясна — скинуть с себя часть обязаностей и всячески улучшить дела в компании. Содержание каждого нового сотрудника, а тем более директора, конечно, требует денег. И, как мне кажется, денег на меня просто не осталось. Поэтому отказа мне никто не дал, сказали: «через неделю, точно». А чтобы я верил в то, что всё обязательно будет хорошо для системы родился новый модуль.
Новый коммерческий директор принял такое решение, что совещания раз в неделю это полезно, но иногда нужно чаще общаться и обсуждать идеи и планы. А это всё можно делать и без личной встречи и есть такая супер-разработка: MS Messanger. Там можно создавать груповые чаты и общаться в них. То, что групповые чаты есть и в skype и в icq и jabber, он наверное, не знал. Да и другие сотрудники, в частности тех. специалисты не очень радужно приняли идею ставить ещё одно не всеми любимое приложение. А некторые, так вообще пользуются linux-ами.
Чтобы мне было чем заняться, я обдумал идею и создал подобный клиент в OTMS. Главная идея создавать «комнаты», куда будут приглашены требуемые люди. К тому же управление пользователями в OTMS позволяло организовать древовидную структуру: отдел-подотдел-сотрудник. Т.е. выбрав нужный отдел можно создать комнату только для нужных сотрудников.
Наступил конец января, а дело не двигалось, я слышал всё то же: «позвони в понедельник, обязательно нужно встретится». Вобщем я обновил резюме в HH и начал поиски работы. Найти работу удалось достаточно быстро, даже не смотря на мою небольшую проблему — я физически не могу работать целый рабочий день в 8 часов. Но судьба, она, как я уже сказал хитра и видимо она распорядилась так, чтобы я не устроился на работу. Эта новая компания, недавно переехала в новый офис и у них не хватало мебели, а потому мне нужно было подождать недельку, когда привезут стол, стул и рабочий ноутбук. У меня выдалось время позаниматься OTMS.
За эту неделю я переделал систему из MVC в более удобную HMVC. Иначе говоря, я выделил «движок» и отдельными модулями сделал подсистемы: объекты-задачи, чат, почта, фм. На то время я продолжал распространять систему как opensource на github. Система разрабатывалась уже с апреля прошлого года. Я успел пообщаться уже более чем со ста пользователями системы, в основном через github и почту. Так как система была opensource совершенно ни у кого не возникало мысли, что доработка предпологает оплату, поэтому небольшие правки я вносил бесплатно, за большие получал раздосадованного пользователя, который очень удивлялся, как так opensource и деньги? Находились ещё и люди которые хотели заказать разработку или совместно взяться за проект. Но в итоге они только ограничивались разговорами на тему, как можно создать такой бизнес-процесс или как красиво и правильно сделать системы для реализации их потребностей.
В конце февраля мне позвонил так долго динамивший меня директор и изъявил желание встретится. При встрече всячески извинялся за задержки и предложил больше не тянуть время, подписать договор и приступить к работе. Конечно же, это были мои планы и я взялся за работу, сразу после подписания договора и оплаты месяца разработки. С той новой работой, куда я так пока и не успел устроиться, я пообщался, извинился и распрощался.
Основой для разработки на начальном этапе было написание модуля «Контакты», для менеджеров, учёта ещё не клиентов, но уже изъявивших заинтересованность людей и разработки модуля для гибкого создания бизнес-процессов. Паралелльно с разработкой я поглощал информацию по всяким существующим BPM (business process modeling) системам, ERP, CRM и разным приёмам ITIL.
В тоже время я узнал, что в январе-феврале директор той же компании с новым исполнительным директором много и усиленно общались с представителями 1С, которые могут сделать абсолютно всё, но как оказалось очень дорого. И сумма в 1 млн. рублей, повторяю для провинциального города, оказалась шокирующей для этого самого директора. Насчёт качества систем на базе 1С говорить можно много, кто-то их очень любит, а кто-то ненавидит. Моя точка зрения, что (большинству) начальников, а не IT -специалистов (опять же большинству) продукция от 1С полностью удовлетворит во всех планах. А за такую сумму иначе быть и не может.
Кончился март, разработка шла, а новой оплаты (по договору помесячной) не было. В апреле захотелось кушать и я решил, что можно попробовать поискать клиента на фрилансе. И да, клиента мы нашли (я и супруга, которая бухгалтер, рекламист, дизайнер и даже немного юрист) достаточно быстро, получили оплату и внедрили систему. Договор заключили обычный лицензионный на предосталение системы ему в пользование. Что не мешало ему, в течении двух месяцев без дополнительной оплаты придумывать, чего ещё я должен ему «доработать». Урок для меня: всегда чётко нужно обговаривать, а ещё лучше описать в договоре с будущим клиентом последующую разработку.
В конце апреля поступила оплата от моего первого клиента за следующий (2) месяц разработки. Дальше немного перемотаю время на конец весны — начало лета. В мае я договорился о совместной разработке системы с московской компанией. На данный момент они оказывают спонсорскую помощь в развитии.
Мой первый клиент также продолжает задерживать оплату, хотя в договоре, заключённым с ними и написанным моей супругой рекламистом по образованию — написано чётко, что мне должны оплачивать разработку ежемесячно, а я грубо говоря ничего не должен. Договор подписан и проверен юристами той компании. Кстати, нашему знакомому юристу договор очень понравился. Несмотря на всё, исполнительный директор оказался раздасадован, так как они платят как могут (с его слов), а я отвлекаюсь на какие-то посторонние заказы, и вообще он хочет кнопки большие и в середине экрана, а у меня маленькие и серые (jquery grid, jquery ui), а бизнес-процессы он составлять не будет и не сможет, так как я должен чётко «захардокдить» БП в коде. Вобщем работу мы приостановили на месяц, до июля. С надеждой на заключение нового договор, который для нас чётко укажет, что мы должны работать только после оплаты, по тех заданию составленного нам. Уже август, договора нет и проблема, не в том, что они опять общаются с 1С, просто составить грамотное тех.задание — это задача очень сложная. Да и вообще компании в провинциальных городках не любят спешить, а тем более летом.
Весной, дабы что-то делать, а не сидеть и киснуть, мы успешно пообщались на startuppoint-е. Главный вывод, который мы вынесли для себя: я не маркетолог и нормально объяснить чем я занят не могу. Систему нужно переименовать.
С названием мы мудрили опять же не долго — Time To Work. Насколько это благозвучнее, чем OTMS я думать даже не буду, для меня это всё буквы и сути не передаёт. Хотя да, я не маркетолог :)

К тому времени система уже содержала новые модули.
Бизнес процесс это алгоритм выполнения большой и сложной задачи. Вот здесь: bitboom.ru/ttw/ [5] выложено достаточно старое видео (от апреля), где можно посмотреть без технических сложностей, что из себя представляет простейший БП.

Ресурсы (объекты) могут бронироваться — быть занятыми на определенный срок. Бронирование нужно, чтобы другие сотрудники могли видеть объекты, которые заняты или будут заняты в будущем. Бронировать можно комнаты, номера. Менеджеры могут бронировать клиентов, не допуская ситуации, когда несколько менеджеров работают с одним клиентом. Бронь можно просматривать как на календаре за целый месяц, так и более детально на день: видеть в какие часы будет занят ресурс. Например, сотрудник указал, что с 14:00 до 18:00 будет в Воркуте. Его непосредственный начальник может назначить все задачи относительно Воркуты по такому случаю.
Для системы начинающий программист под Android пробует написать клиент. Для удобного взаимодействия был создан отдельный модуль, который по определённым командам забирал нужные данные. Такая схема несколько раз менялась и в последнем своём состоянии API — модуль, который предоставляет «интерфейс» для работы с моделями (Model в MVC) приложения. Т.е. теоретически на стороннем приложении можно сделать теже действия, что и в самой системе. Так как работать с API посредством JSON не самый удобный способ в разработке и отладки был создан ещё один модуль — командная строка. В командной строке можно выполнть обычные действия: закрывать задачи, смотреть время работы сотрудников в системе и прочие, а также выполнять действия на более низком уровне с модулями и моделями, получая весь вывод на экране.
P.S. Да, в мае я попытался бросить всё это дело и снова устроиться на работу. Найти более-менее приличное рабочее место опять же оказалось не сложно. Московская компания, разработчик игр, за весьма неплохую зпт предложили мне место веб-разработчика. Разработка онлайн-магазина, внутренних игровых порталов и т. д. Но почему-то, у меня не получается работать в спокойном месте и получать деньги. Местное начальство практически сразу дало согласие на приём меня на работу, но предложили подождать несколько дней пока вышестоящее руководство ознакомится с моим резюме, статьями на хабре и проектами на github, чтобы дать окончательный ответ. Но естественно за несколько недель (не дней) я нашёл новые заказы и предложения и, когда мне предложили место в компании, я уже занимался новыми делами.
В планах — развивать систему, пытаясь создать удобный внутрикорпоративный портал, который свяжет все процессы управления информационными потоками в компании. В настоящее время я снова нахожусь в состоянии неопредёлённости: компания, с которой я якобы разрабатываю систему совместно кроме денег на разработку не может помочь ни в разработке, ни в дизайне, ни в идеях. Но люди там хорошие и работать совместно, оставив на них организаторские функции скинув их с себя, я всё же хочу. Цель топика — выслушать мнения и попиарится (хотя на бесплатную разработку уже не соглашусь).
Автор: Zazza
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/rabota/12367
Ссылки в тексте:
[1] OTMS: https://github.com/Zazza/otms
[2] хостинг: https://www.reg.ru/?rlink=reflink-717
[3] интернет-магазина: http://tushkan.com/
[4] domen: http://habrahabr.ru/users/domen/
[5] bitboom.ru/ttw/: http://bitboom.ru/ttw/
Нажмите здесь для печати.