Как мы разработали первое мобильное приложение для студентов и какие выводы сделали по работе с вузами

На дворе было начало 2013 года. Apple тогда еще во всю продвигала скевоморфизм, а до представления Google'ом Material Design оставалось ещё полтора года. Мы - команда инициативных первокурсников самого крупного университета Южного Урала захотели оставить после себя что-то действительно важное и ценное. А так как учились на Приборостроительном факультете, это что-то должно было иметь техническую направленность. И вот в рамках конкурса "Студенческий лидер 2013" мы подумали: А почему бы нам не сделать мобильное приложение для студентов, где можно было бы удобно получать информацию о расписании занятий? Сказано - сделано! Мы нашли добровольца из числа студентов, который ради практики согласился разработать сие приложение и двинулись в бой!

В закладки

Сама идея лежала на поверхности. Каждое высшее учебное заведение на официальном сайте должно иметь расписание занятий. Так почему бы его не взять и не поместить в удобном виде в приложение? Оказалось не все так просто. Расписание на сайте было в виде картинок рукописного расписания, никаких централизованных баз данных не было, не было даже инструмента для заполнения расписания (эксель не в счёт). Всё это необходимо было создать.

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

Фоткаем листы А0 с рукописным расписанием, чтобы потом сесть за ноутбук и перенести инфу с фотографии в программу.

На протяжении трёх дней перед началом семестра 20 активистов нашего факультета по 12 часов в день сидели за ноутбуками и заполняли расписание. Я по сей день благодарен этим людям. Они - лучшие! Абсолютно бесплатно, пропуская последние выходные перед началом семестра, без каких-либо оплачиваемых обедов они делали свою "работу". В конечно итоге было заполнено что-то около 500 групп из 1500. Это все было необходимо для оценки трудозатрат, чтобы пересмотреть должностные обязанности сотрудников диспетчерской. В течение двух лет еще система выходила на стабильные рельсы и только в начале 2017 года расписание стало более менее стабильным. Вы думаете, что мы сейчас живём в 2к19 и дела обстоят лучше? Как бы ни так. Забегая вперед скажу, что большинство университетов до сих пор по старинке заполняют расписание в Microsoft Excel, а на сайт выгружают PDF-файлы.

В конечном итоге были выпущены версии приложений для iOS и Android. Всё основывалось на студенческой инициативе и, оглядываясь назад, до сих пор не верится, что программисты абсолютно безвозмездно на протяжении почти 4 лет поддерживали проект. Да, одни программисты выпускались и уходили, мы находили других и так три раза по кругу.

Так выглядели приложения в марте 2014 года.

Мы понимали, что действительно качественный продукт на одной студенческой инициативе долго не вытянет. Четыре года - это и так огромный срок. У нас уже был опыт в разработке подобных приложений, мы разработали уникальную систему, куда можно было вписать расписание любого вуза в стране, сложилась стабильная команда и создать свою компанию по разработке мобильных приложений для студентов было самое логичное продолжение. Начать мы решили с родного университета. Мы предложили руководству вуза услуги по поддержке мобильного приложения на коммерческой основе. Переговоры шли на протяжении восьми месяцев. Ситуация осложнялась системой госзакупок, по которой обязан работать любое государственное учреждение, в том числе и вуз. Мы смогли договориться о конечной стоимости приложения, но разбили ее на несколько частей. Одну часть в 2017 году и четыре части поэтапно в следующем году. Составили договор на эту одну часть, сделали ТЗ, подписали, руки пожали и пошли разрабатывать абсолютно новое приложение, с новой архитектурой, API и дизайном. В ТЗ были описаны этапы внедрения приложения и какой функционал должен соответствовать каждому этапу.

Мы были абсолютно уверены в завтрашнем дне и ничто не предвещало беды. В течение трех месяцев мы сделали полностью работоспособный продукт. Еще в течении нескольких месяцев форсировали этапы, чтобы пользователи смогли насладиться всеми функциями, которые мы описали в ТЗ. Наш стэк был самый что ни на есть профессиональный: Golang, Vue.JS, Swift, Kotlin, Nginx, Docker и тд. Приложение выдалось действительно хорошим - 99,9% сессий без сбоев и на iOS, и на Android. Всего в университете учится 16 000 студентов. Активно пользовались приложением 13 500 человек каждый месяц. Эти юзеры генерировали 1 707 000 входов в приложение в месяц. Рейтинг в обоих магазинах 4.8 звезды с более чем 1500 отзывами. Для локального продукта вполне себе внушительные результаты. К этому моменту решились все вопросы и с получением расписания. Брали мы его по официальному API с серверов университета.

Приложение имело следующий функционал:

  • Расписание академических групп
  • Расписание преподавателей
  • Локальный редактор расписания
  • Пуш уведомления об изменении в расписании
  • Новостная лента
  • Список вакансий для трудоустройства студентов
  • Пуш уведомления о новостях и вакансиях
  • Анкета соискателя для поиска работы
  • Просмотр информации о свободных местах в общежитии
  • Виджет для просмотра расписания на рабочем столе
Виджет с расписанием для Android

Наступил 2018 год. Мы, опираясь на положительный опыт использования приложения студентами, с предвкушением ожидали пролонгации договора и получения еще одной части из намеченной суммы. Однако, как вы могли догадаться, чудо не произошло. Мы со своей стороны подготовили очередную кипу документов, провели бессчётное количество встреч с руководством, но ответ был один - финансирование закончилось, денег нет. Но как же так? Вы же заплатили только пятую часть? Но ответ был тот же самый. Денег нет, но вы держитесь. Также руководство в письменном виде предложило коммерциализировать проект самостоятельно при помощи рекламы для студентов. Это было возмутительно! Официальное приложение крупного вуза не должно в себе иметь рекламы. Это неуважение к своим же студентам!

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

Текущее исполнение рекламного баннера

Еще до начала работ по разработке баннеров мы понимали, что нужно будет урегулировать с университетом вопрос о получении расписания. Так как если мы будем зарабатывать на отрытых данных, это может не понравится проверяющим органам. Тогда опять же таки руководство подсказало, как можно решит этот вопрос. Университет имеет право зарабатывать на продаже вычислительных мощностей своего суперкомпьютера. Идея была в том, что мы будем покупать не вычислительную мощность, а доступ к API, исчисляемый количеством обращений на сервер. Такую практику широко используют такие компании как Google и Яндекс. Проанализировав калькуляцию и собрав очередной пакет документов, мы пошли это дело все подписывать. И что бы вы думали? Нам их не подписали! По указанию того человека, кто некоторое время назад сам порекомендовал коммерциализировать проект с помощью рекламы. Мотивация была ну очень так себе. Мы используем небезопасную передачу данных при авторизации. Предоставленный SSL сертификат и HTTPS трафик никого не смутил. А также отображаем ФИО преподавателей, которые проводят занятие. Это расценивается как раскрытие персональных данных. (Бред!) В конечном итоге нам заблокировали доступ к API для получения расписания, а это самая главная функция в приложении. Но самое интересное только впереди!

Мы парни не из робкого десятка и дошли до самого ректора! Притом встречались с ним 3 раза. На последней встрече с ректором и его помощниками в IT направлении было окончательно утверждено решение забрать у нас доступ к API, то бишь к актуальному расписанию занятий. Также помощники доложили, что в ближайшее время будет запущено официальное мобильное приложение, разработанное сотрудниками IT отдела университета. И о чудо! Через пару дней приложение действительно появилось в Google Play, но это было наше же приложение, которое просто переназвали и выключили часть функций, которые были завязаны на наш сервер (вакансии, новости, пуш уведомления). Нашему возмущению не было предела! Суть была в том, что по договору, по которому прошла оплата, функционал приложения должен был быть сильно меньше, чем мы сделали. Мы всё делали наперёд, чем и поплатились. Так же мы по доброте душевной одному из сотрудников дали доступ к нашему репозиторию. Мы с ним на тот момент работали уже 5 лет и когда он попросил доступ исключительно из любопытства, у нас и мысли не было, что всё может оказаться настолько грустно.

Скриншоты оригинального приложения в Google Play
Скриншоты приложения IT отдела университета

Но самое обидное было с функционалом редактирования расписания. Над ним мы работали дольше всего. Реализовали редактор с помощью технологии Drag'N'Drop, сделали симпатичное обучение редактирования, потому что сразу и не поймешь, что пару нужно просто перетаскивать с одного дня недели в другой. Университет же не стесняясь выдал это за своё ноу-хау.

По факту сложилась следующая ситуация:

  • Мы разработали полный функционал по ТЗ
  • Нам оплатили 1/5 от общей суммы
  • Нам закрыли доступ для получения расписания
  • Под видом собственной разработки выпустили наше же приложение в Google Play
  • Грозились судом за использование названия вуза в названии приложения

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

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

  • Денег нет на разработку приложения
  • У нас нет расписания в электронном виде
  • Мы не хотим, чтобы нашим студентам показывалась реклама. Вдруг вы будете рекламировать другие вузы?
  • Мы боимся конкурировать с другими вузами. Вдруг наши студенты увидят расписание другого вуза в нашем городе и по названию дисциплин он им больше понравится и они переведутся?

Из 70-ти вузов, лишь один согласился опробовать систему, у которого было электронно расписание, не было собственного приложения и кто не боялся рекламы для студентов. Ждём первое сентября. Уж очень интересно, как студенты отреагируют на наше приложение.

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

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Александр Берестов", "author_type": "self", "tags": ["\u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b","\u0441\u0442\u0430\u0440\u0442\u0430\u043f","\u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435","\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f","\u0432\u0443\u0437"], "comments": 4, "likes": 1, "favorites": 7, "is_advertisement": false, "subsite_label": "tribuna", "id": 81033, "is_wide": false, "is_ugc": true, "date": "Fri, 30 Aug 2019 08:09:59 +0300", "is_special": false }
0
{ "id": 81033, "author_id": 340334, "diff_limit": 1000, "urls": {"diff":"\/comments\/81033\/get","add":"\/comments\/81033\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/81033"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199116, "last_count_and_date": null }
4 комментария
Популярные
По порядку
0

Довольно таки печально что если в вашем универе в 2019 до сих пор используют PDF, у Carnegie есть модуль moodls, который позволяет создавать расписание, что то вроде конструктора сайта.

Ответить
0

Поверь, таких вузов большинство в России. Я с этим лично столкнулся.

Ответить
0

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

Ответить
0

Большое спасибо за пост!
Чёрт, аж адреналин в крови поднялся. Не поверите, но мы с товарищем встали на очень сходный вашему путь, только без всей этой романтики с оцифровыванием.
В нашем случае API уже было, но приложений не было. Мы сделал успешную android-версию, начали думать о продаже её своему ВУЗу или эволюцию в продуктовую компанию и масштабирование на другие.
Теперь об этом думать, пожалуй, не станем.
Искренне жаль, что вам довелось испытать такой опыт. Очень круто, что вы им поделились.
Если хотите привлечь к проблеме общественный резонанс - можно было бы сделать классный пост на пикабу. Хотя чего этим можно добиться - неясно. Только если подать реальный иск про использование чужой интеллектуальной собственности и таким образом обратить на него внимание, может быть, местных правозащитников.

Ответить
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ] { "page_type": "default" }