Для тех кто просто пролистывает дальше, краткое содержание: «google: freelance подписывайте контракт» спасибо за внимание.
Чуть более полное описание: Как я открыл для себя новые вершины менеджмента благодаря одному заказчику, при работе над совместным фриланс проектом.
Первые два акта по сути вступительные, кульминация действия и появление скелета в шкафу происходит в третьем акте. Те, кто любят смотреть только финал фильма, могут промотать сразу к третьей части.
Действие первое: терпимое
Действующие лица: Я, знакомый C, Компания X, CEO1.
Сентябрь:
— хочешь написать программу под андроид для X?
— давай, но мы не занимаемся ни разработкой дизайна, ни тестированием, ни административной частью, кстати давай напишем на React-Native.
Октябрь:
Переговорив с CEO1 мы обозначали сроки — ~3месяца, договорились как приложение будет выходить в релиз — изначально выдадим ограниченному количеству пользователей, если всё нормально — отдаём большому количеству, потом доделываем платежи, причёсываем дизайн и релизим, после релиза уже доделываем некий, не особо важный, опросник (тестирование пользователя по материалу). Всё заканчивает шестью месяцами поддержки. Немного обсудили технологию React-Native — CEO1 опасался, что технология новая, но мы заверили что в случае каких-то критичных проблем возьмём вину на себя, что может конечно повлиять на сроки. Опасения были напрасные, React-Native + Redux зарекомендовал себя с хорошей стороны. Идея того, что при этом можно заменить iOS приложение на одно тоже понравилась другой стороне, хотя эта задача выходила за рамки договорённостей.
Как только это было оговорено, то в течении пары недель мы выдали прототип, после которого заказчик неожиданно пожелал начать тестирование уже в декабре чтобы прийти в новый год уже с релизом. мы немного удивились, что ещё толком не начали, а сроки нам уже поджимают, но в любом случае затягивать не собирались и сказали что постараемся.
Ноябрь:
Наполняю приложение функционалом, не забывая и про красивую анимацию, даже беру несколько дней отпуска на основной работе чтобы успеть в срок, прикручиваю темы, чтобы впоследствии дизайн можно было менять быстро и удобно. На React-Native всё создаётся довольно легко и просто. В один момент всё же возникли проблемы с Redux, но, по итогам полутора дней разбирательства прихожу к выводу, что немного неправильно его приготовил — нельзя делать «страница с redux <=> много компонентов», а надо «страница <=> много компонентов с redux», всё начинает работать отлично, но с тех пор я начинаю переодически запускать приложение на Redmi-2 с 1GB памяти чтобы недопускать подобных случаев. Итог ноября — за несколько дней до начала декабря всё обещанное готово, приложение вполне функционально и его можно отдавать в первый круг тестирования.
Декабрь:
Около трёх недель другая сторона пытает составить список из 10 людей, которым можно отослать приложение, после этого вообще пропадает, в целом понять можно — новый год же скоро. Я исправляю мелкие проблемы, кое-что улучшаю и оптимизирую.
Январь:
Середина января. Приходит письмо что список готов и, наконец-то, рассылается первым тестерам. Приходит два довольно подробных отзыва, которые в целом положительно оценивают приложение, а некритичные замечания я тут же исправляю. Но что-то не так — начались жалобы что другие пользователи не могут зайти под своими логинами и паролями. Даже не особо задумываясь предполагаем, что проблема где-то на стороне тестового backend заказчика, а скорее всего данные на нём не совпадают с тем, что на основном сервере, в течении пары недель это выясняется и исправляется простой перезаливкой данных с prod на test.
Прикручиваю функционал платежей к google-play, хотя его реализации ещё нет на backend, взаимодействие делаю по аналогии с тем что есть в iOS-приложении для apple-store, пишу эмулятор backend'а для данного функционала, тестирую.
Действие 2: нарастающее.
Действующие лица: Я, знакомый C, менеджер CEO2, тестировщик T, директор Д.
Февраль:
Напомню, что уже начался февраль. А как же сроки?, зачем я торопился? Ну да ладно, этап пройден, а приложение, даже с задержкой, в любом случае лучше чем никакого. Ждём когда первую десятку попросят протестировать ещё раз, но повторная рассылка не происходит, как же так, удивляемся мы, ищем Д компании. Через пару недель приходит письмо о том, что CEO1 заменяют на CEO2, в голову не приходит ничего кроме банального «вот это поворот». Мы конечно киваем головами, думая что понимаем причины почему CEO1 убрали, и теперь всё, возможно, наладится. CEO2 приступит к работе в следующем месяце.
Март:
В середине месяца появляется новый CEO2, который, первую неделю, говорит в общем-то правильные вещи: приводит за собой тестера Т, говорит нам, что мы ни в коем случае вообще не должны тратить время ни на тестирование ни на настройку консоли ни на другие административные вещи, а всем этим будет заниматься тестировщик T. Главное, теперь у нас появляется общая JIRA для взаимодействия и координации. Хорошо и даже отлично, говорим мы, но сроки пропущены уже так значительно, а проект по сути задвинут в долгий ящик, что теперь, чтобы его оттуда вынуть, давайте обозначим какие-то сроки для обоих сторон + потом же его ещё надо поддерживать шесть месяцев. Хорошо, говорят нам, давайте первый день мая будем считать началом гарантийной поддержки и оплаты, даже если не зарелизимся к этому сроку. Нет проблем, отвечаем мы, давайте определимся что критическое нам осталось.
Через неделю-две выясняется что основных критических вещей три:
1) Почему-то первым оказался опросник, хотя до этого нам говорили что наименее важное из всего приложения.
2) Проверка валидации логина-email именно на стороне клиента.
3) Оплата, хотя она тоже должна была быть только после первого этапа тестирования.
4) логин через facebook, хотя в январе нас попросили его убрать.
В список блокеров и критикал проблем попадают такие вещи как:
4) Вертикальный разделитель между логином и паролем на странице регистрации.
5) Сворачивание клавиатуру на странице смены пароля в аккаунте пользователя при переходе между полями.
В течении недели делается пункт #1, паралельно, около трёх часов два раза в неделю обсуждается важность пункта #2, так как оказывается есть известные всем (кроме меня конечно) стандарты разработки приложений, я аккуратно всё же настаиваю что это не только не необходимо, но никаким значимым образом не влияет на backend, мало того это требует дублирования одинаковой логики на всех приложениях и сайте, мало того, в системе есть корпоративные пользователи, у которых логин не является email. Другая сторона говорит что разберётся в этом вопросе очень детально, по итогу после полутора недель появляется многостраничный документ, где описаны все варианты входа во всех приложениях и на сайте (причём они одинаковые), при этом как согласовать пункты для разных типов пользователя всё ещё не ясно. Пропущу детали, скажу только что по итогу многих часов другая сторона наконец соглашается на моё предложение. Наконец CEO-2 заводит имплементацию функционала оплаты #3 — google-play для backend.
Апрель:
Выполняю все critical, major и даже minor (даже те, которые в моём понимании такими не являются), так как не очень сложно — проще сделать чем обсуждать. Backend делает оплату, но она что-то не совсем то возвращает на одном из шагов, что в целом нормально для процесса разработки.
Тут поступает первый странный звоночек, CEO-2 неожиданно предлагает убедиться что приложение работает «максимально быстро», что такое максимально быстро я не очень понимаю, тестер Т говорит что в общем-то всё нормально, ни один предыдущий пользователь проблем с производительностью не упоминал, но я, вот же наивность, озвучиваю, что на самом старом телефоне что я нашёл, заметил, что выход из страницы поиска, когда на ней показаны все 300+ книг, происходит с задержкой, но для какого-то более актуального железа этой проблемы нет, так что критичного в этом ничего не вижу.
До начала следующего месяца остаётся две недели, сделано всё, что обещано на данном этапе ( по сути всё, кроме прилизывания дизайна, включая то, что не общали делать), и даже, как я считаю, намного больше — вытерплены часы бесполезных созвонов, вроде уже ничего не может случиться. Все, что было на мне в JIRA закрыто, но… начинаются блокировки телеграма, где у нас общий чат. В общем-то с перебоями, но видно что online появляются все участники, но не отвечают и не пишут только — CEO2 и Т, через неделю окончательно ясно, что что-то тут не так, и мы вновь ищем Д.
Действие третье: заключительное
Через неделю нам предлагают созвониться. Озвучивается что-то совсем новое о том, что приложение решили свернуть, так как у их backend якобы проблемы с производительностью, повод выглядит каким-то сомнительным, я всёже говорю что со своей стороны никаких проблем с backend не наблюдал, да и приложение всё кэширует, и на него это влиять тоже не может. Но нам предлагают оплатить только часть работ, хотя и при этом выясняется, что приложение уже отдали одному корпоративному клиенту. Признаться не понимаю с какой стати я должен соглашаться на часть, когда мы сделали всё что обещали, ни разу не сорвав никаких сроков, в отличие от ..., и ладно бы это произошло в январе, а это предлагается за несколько дней до намеченного дня оплаты. На что CEO-2 неожиданно заявляет, что и у приложения тоже проблемы с производительностью (какая удобная и универсальная причина оказывается), хотя две недели назад во время тестирования такое не озвучивалось ни разу. Но это не всё, тут же нам в вину предъявляют то, что при тестировании в январе, в приложение большинство пользователей вообще залогиниться не могли, я конечно напоминаю причину почему это было, но это как-то похоже не особо принимается во внимание. Д предлагает разобраться в деталях что реализовано, но просит не вдаваться в технические детали, не очень понятно как такое можно осуществить не вдаваясь в технические детали, но я делаю подробный отчёт с тем что реализовано по пунктам с затраченным временем, в дополнение, записываю видео как работает приложение и демонстрирую весь функционал, видео сопровождается логом приложения, чтобы были видны запросы и ответы с backend.
Через полторы недели нам выдаёт свой репорт CEO-2, от которого у меня немного пошевелились волосы на голове, а потом ещё и настроение упало — от того, что такое вообще бывает. Замечу это не какое-то непонимание или, смешно подумать, техническая наивность другой стороны, пару-тройку недель назад мы вполне говорили на понятном друг-другу языке.
Перечислю основные пункты:
— Логин facebook выдаёт то, что необходимо активировать тестовый токен для этого пользователя, о чём я писал в JIRA. Вывод другой стороны — функционала логина facebook нет.
— Регистрация через fb, не понятно что это вообще, пытаемся выяснить, и даже T согласен, что такого функционала в приложении нет, функционала нет, но пункт почему-то есть. Вердикт — не реализовано, только не очень ясно что именно.
— Производительность: Почему-то опять два пункта, в обоих случаях появляется телефон nexus 5x с android 8.0.0 (на 4pda и android-central много тем про это), и демонстрируется то, о чём я сам сказал по телефону — многократно заходится и выходится из поиска, при этом видно, что приложение переодически засвечивает белый экран, который в RN виден если с памятью совсем беда, чего я не наблюдал даже на 1gb памяти.
Но в целом это всё мелочи, которые можно было бы попытаться обсудить, но на фоне дальнейшего это не имеет смысла:
— Берётся старая версия приложения, которая ошибочно выдавала предложение о регистрации на основании наличия подписки, нажимается на кнопку «избранное», появляется сообщение «пожалуйста зарегистрируйтесь», делается вывод: функционала избранного нет. Тоже самое происходит на кнопке «отметить как прочитанное» и «напоминания», и вот это сообщение разрастается до пяти пунктов (из ~20 всего), некоторые из которых называются довольно глобально, не иначе как «выдача контента приложением».
— Напрочь отсутствует упоминание довольно большого функционала проигрывание аудио, но самое смешное что и нету и тестов по материалу, который нас так просили сделать в последнюю неделю.
— Оплата: с google-play нормально проходит, и уходит на backend, но в ответ, backend выдаёт что подписки нет. Другая сторона делает вид, что не понимает что такое их backend вообще, a просто заявляет что функционал, в результате их же тестирования, признан нереализованным, а остальное — не их проблемы. Странно, почему было просто не опустить backend и не сказать, что приложение ничего кроме «ошибка соединения» не выдаёт.
И кульминация:
— Несколько пунктов оплаты считаются не реализованными по тому, что в списке покупок нет подписок на 6, 9 и 12 и ещё сколько-то месяцев, которые берутся с google-play, они их там просто не ввели, хотя и говорили, что консолью заниматься будут сами.
Пункты каким-то непонятным образом перемножаются, я пробовал это делать разными способами, но такого результата никак не получил, и делается вывод, что мы должны быть счастливы если они оплатят работу на 40%. Как на такие аргументы реагирует Д, который вроде взялся разобраться? — никак — притворился рыбой.
Ну и финалом, после того как стало ясно, что больше выяснять и доказывать тут нечего, нам уже в прямой форме высказали, что то, о чём мы договаривались с раньше — это исключительно наши проблемы, а на то, что мы писали в JIRA и какие-то там статусы им тоже в общем-то плевать, так как разработка приложения сворачивается.
Признаться я первый раз сталкиваюсь с подобным хамством в IT. Я был готов доказывать свою правоту и даже признать неправоту в случае указания на неё, однако того, что я точно не ожидал от компании, которая позиционирует себя как продукт для профессиональных менеджеров и даже имела блог на хабре, — простого одурачивания.
Эпилог
Прошло прилично времени, решил поинтересоваться у backend знают ли они о свои проблемах с производительностью, оказывается нет — ничего такого им не сообщали. Решил поинтересоваться у тех, кто занимается iOS приложением, и тут, похоже, происходит аналогичный слив, но уже работающего приложения: всё что они в данный момент делают — меняют цвета теней и длину минимального пароля с 6 на 8 символов и обратно, при этом мне рассказали, что появилась проблема оплаты, которая требует срочного релиза, пользователи от этого закипают, оценка приложения летит вниз лопатой, но похоже, что релизить исправления CEO-2 не собирается. Я конечно поделился с ними своими трудностями, на что, мне сказали, что текущая ситуация у них не вызывают никакого удивления, и рассказали историю, про которую они знали от одного бывшего сотрудника:
Ещё давно в компании появился сотрудник, не имеющий отношения к разработке. Но, немного поработав, он решил что сайт (так как другого ничего тогда не было) надо переделать как ему кажется правильным (видимо чтобы всё было «максимально быстрым»), но, в итоге, похоже так и не сумел завершить начатое и его попросили на выход. Однако по прошествии нескольких лет, чему уже мы свидетели, после смены директоров, он опять появился в компации и продолжает активно пытаться внедрить свой, всё ещё недоделанный сайт. А так как у сайта, судя по всему, даже не имеется примитивного API для работы с приложениями, а лапша о его готовности уже повешена на уши новому руководству, то эти приложения тоже мешают осуществлению плану внедрения, и нужен предлог, чтобы от них надо избавиться и переделать уже под новый сайт.
В общем-то мозаика сложилась, одно не ясно — причём тут моя оплата. Так что вот на сдачу я и решил описать данное проишествие. Может быть кого-то просто повеселит, а кому-то поможет быть более бдительным (новым будущим разработчикам приложения под android вероятно :) ), ну и, наверное, просто хотелось высказаться и поставить точку в данной истории.
PS:
Если соберусь, то постараться ещё и про React-Native техническую статью написать, так как совсем не хочется только подобную желтизну из данной работы вынести.
Автор: inv2004