В данном топике я постараюсь перемешать реальную историю с функциональным описанием системы. И даже попытаться объяснить что, как и почему так получилось.
Чуть больше года назад я начал разрабатывать систему OTMS. Сперва это был простенький opensource helpdesk. Работал я тогда системным администратором-разработчиком. Системный администратор в провинциальном городишке — сотрудник, который выполняет много различных IT работ, зачастую даже не относящихся к системному администрированию. По-простому это называется — компьютерщик-программист. Основной моей работой была поддержка серверов: DNS,
Объекты и Задачи
Объекты — любые ресурсы, которыми управляет компания в ходе своей работы. Ну самое простое применение объекта — клиент. Почти любая компания строит свою работу вокруг понятия «клиент». К клиенту привязываются задачи, для клиента оказываются услуги и т.д. Также объектами могут служить и другие ресурсы, например, сервера. Сервер ломается, над сервером ведутся работы, сервера меняются. Всё это задачи. Вокруг такой структуры «объект — задача» у меня и появилось куча идей, как можно было бы далее развивать систему. И даже то, что существовали другие решения: redmine, jira, otrs и прочие меня не испугало. В любом случае эти решения выполняли немного другие задачи, всё это системы ведения и управления проектами. Да это тоже helpdesk-и, но с другой спецификой.
Кстати, OTMS — object and task management system. Я не стал долго ломать голову над названием.
Почтовый клиент
Когда основная работы над функционалом была закончена, пришло время попытаться реализовать следующие задумки. Первая задумка — это почта. Но не просто почтовый клиент, а клиент связанный с существующими в системе объектами и задачами. Примером для меня была работы службы технической поддержки. В техподдержку на почтовый ящик support@domen.com приходит письмо. Да у каждого сотрудника есть личный почтовый ящик (имя.фамилияdomen.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/ выложено достаточно старое видео (от апреля), где можно посмотреть без технических сложностей, что из себя представляет простейший БП.
Рисунок из видео. Монтажники получают мессадж.
Бронь
Ресурсы (объекты) могут бронироваться — быть занятыми на определенный срок. Бронирование нужно, чтобы другие сотрудники могли видеть объекты, которые заняты или будут заняты в будущем. Бронировать можно комнаты, номера. Менеджеры могут бронировать клиентов, не допуская ситуации, когда несколько менеджеров работают с одним клиентом. Бронь можно просматривать как на календаре за целый месяц, так и более детально на день: видеть в какие часы будет занят ресурс. Например, сотрудник указал, что с 14:00 до 18:00 будет в Воркуте. Его непосредственный начальник может назначить все задачи относительно Воркуты по такому случаю.
API и командная строка
Для системы начинающий программист под Android пробует написать клиент. Для удобного взаимодействия был создан отдельный модуль, который по определённым командам забирал нужные данные. Такая схема несколько раз менялась и в последнем своём состоянии API — модуль, который предоставляет «интерфейс» для работы с моделями (Model в MVC) приложения. Т.е. теоретически на стороннем приложении можно сделать теже действия, что и в самой системе. Так как работать с API посредством JSON не самый удобный способ в разработке и отладки был создан ещё один модуль — командная строка. В командной строке можно выполнть обычные действия: закрывать задачи, смотреть время работы сотрудников в системе и прочие, а также выполнять действия на более низком уровне с модулями и моделями, получая весь вывод на экране.
P.S. Да, в мае я попытался бросить всё это дело и снова устроиться на работу. Найти более-менее приличное рабочее место опять же оказалось не сложно. Московская компания, разработчик игр, за весьма неплохую зпт предложили мне место веб-разработчика. Разработка онлайн-магазина, внутренних игровых порталов и т. д. Но почему-то, у меня не получается работать в спокойном месте и получать деньги. Местное начальство практически сразу дало согласие на приём меня на работу, но предложили подождать несколько дней пока вышестоящее руководство ознакомится с моим резюме, статьями на хабре и проектами на github, чтобы дать окончательный ответ. Но естественно за несколько недель (не дней) я нашёл новые заказы и предложения и, когда мне предложили место в компании, я уже занимался новыми делами.
В планах — развивать систему, пытаясь создать удобный внутрикорпоративный портал, который свяжет все процессы управления информационными потоками в компании. В настоящее время я снова нахожусь в состоянии неопредёлённости: компания, с которой я якобы разрабатываю систему совместно кроме денег на разработку не может помочь ни в разработке, ни в дизайне, ни в идеях. Но люди там хорошие и работать совместно, оставив на них организаторские функции скинув их с себя, я всё же хочу. Цель топика — выслушать мнения и попиарится (хотя на бесплатную разработку уже не соглашусь).
Автор: Zazza