Привет, Хабр! Меня зовут Олег Бондарь, я архитектор решений в CDEK. В этой статье расскажу о стандартах — сводах правил и требований, которые позволяют всем участникам процесса быть в общем контексте, действовать единообразно и совершать меньше ошибок. Кроме того делают взаимодействие между людьми и системами немного проще.

Статья будет полезна менеджерам проектов, разработчикам, тестировщикам, аналитикам и другим IT‑специалистам. Поговорим о способах выработки и применении стандартов, их влиянии на проектирование, разработку, тестирование и стабильность системы в целом. Для примера возьмем ERP CDEK, которая ежедневно обеспечивает работу десятков тысяч пользователей, нескольких сотен тысяч клиентов и позволяет нам обрабатывать до полумиллиона заказов в день.

Содержание

Атом вместо утки. Экскурс в историю стандартизации

Человечество задумывалось о стандартах с первых шагов современной цивилизации. В Древнем Египте при строительстве использовались кирпичи постоянного размера, а контролем соответствия размеров занимались специальные государственные служащие. Традиционные европейские системы измерения были унаследованы от древнеримских единиц, основанных на понятных каждому обывателю объектах: «палец» — дюйм, «ступня» — фут, «тысяча двойных римских шагов» — миля. Вес в древнем мире измерялся в волах, утках, зернах ячменя или пшеницы (например, один сикль равнялся весу 180 зерен ячменя).

Древний Египет. Взвешивание сердца умершего человека на суде Осириса. Источник
Древний Египет. Взвешивание сердца умершего человека на суде Осириса. Источник

С некоторыми единицами измерения происходили курьезные случаи. Например, английский ярд был введен королём Эдгаром и равнялся расстоянию от кончика носа Его Величества до кончика среднего пальца вытянутой в сторону руки. После смены престолодержателя величина ярда изменилась: новый король был более крупного телосложения, чем его предшественник. При следующей смене монарха ярд снова укоротился. Такие частые изменения единицы длины вносили путаницу.

В 19-м веке стандартизацией начали заниматься «в промышленных масштабах». Были предложены метрические единицы измерения сантиметр‑грамм‑секунда, появились прототипы эталонов метра и килограмма. В 20-м веке принята Международная система единиц (СИ), наиболее широко используемая в мире на сегодняшний день. В 2019 году единицы измерения СИ были полностью отвязаны от материальных эталонов и стали рассчитываться на основе физических свойств атома.

Важным этапом стало появление Международной организации по стандартизации (ISO), которая занимается выпуском стандартов. В 80-х годах прошлого века был организован Инженерный совет Интернета (IETF), оказывающий значительное влияние на современную IT‑отрасль.

Без стандартов в нашей жизни наступил бы хаос. Просто представьте, что болты и гайки одного размера от разных производителей физически не подходят друг к другу, а каждый производитель продуктов питания использует собственные единицы измерения вместо литра и килограмма. Без стандартов невозможно было бы производить самолеты, автомобили, компьютеры и большую часть привычных для нас вещей.

Для организации эффективного бизнес‑процесса (в том числе и процесса разработки ПО) применяются регламенты, технические требования и практические рекомендации, которые если и не названы стандартами, по сути, ими являются.

Чтобы показать важность и необходимость соблюдения единообразных требований и правил, приведу две важные, на мой взгляд, истории.

История первая. «Планёр Гимли»

В 1983 году Boeing 767–233 авиакомпании Air Canada выполнял внутренний рейс по маршруту Монреаль‑Эдмонтон с посадкой в Оттаве. Вскоре после вылета из Оттавы, на высоте 12,5 километров в кабине пилотов прозвучал сигнал «Отказ всех двигателей». В самолете отключилось электричество и большая часть приборов на панели перестала функционировать. Пилоты взяли курс на Виннипег, но из‑за неработающих двигателей приняли решение совершить аварийную посадку на военной авиабазе Гимли. При посадке у самолета сложилась передняя стойка шасси и начался небольшой пожар, который удалось потушить. 10 пассажиров получили травмы, но к счастью, серьёзно никто не пострадал.

Самолёт проехал передней частью по бетону во время аварийной посадки. Фото: Роберт Пирсон
Самолёт проехал передней частью по бетону во время аварийной посадки. Фото: Роберт Пирсон

Эта авария произошла в то время, когда Канада переходила на метрическую систему. Наземная команда ошиблась при заправке самолета — неправильно рассчитала массу топлива (использовала коэффициент для британского имперского фунта вместо килограмма), из‑за чего вместо 20 тысяч литров было заправлено всего 5 тысяч.

История вторая. «Mars Climate Orbiter»

В 1998 году NASA проводило миссию по исследованию марсианского климата. Их космический аппарат Mars Climate Orbiter, запущенный в декабре, в течение года должен был выйти на орбиту Марса для исследования атмосферы и фотосъемки поверхности. 23 сентября 1999 года аппарат начал заходить на запланированную орбиту и после прохождения с обратной стороны планеты должен был выйти на связь. Однако больше никаких сигналов от спутника не поступало.

В ходе расследования первопричин аварии NASA сообщило, что субподрядчик в ПО аппарата использовал единицы измерения СИ, в то время как в центре управления на Земле использовались британские единицы. Предполагается, что аппарат прошел над поверхностью Марса на высоте 57 км вместо расчетных 110 км и распался в атмосфере. Данная ошибка привела к потере 327,6 миллионов долларов США, согласно оценкам NASA.

Эти истории наглядно показывают, что даже при наличии стандартов может возникать путаница между ними. А небольшие, в общем‑то, недочеты могут привести к серьезным последствиям. Хотя в большинстве случаев автоматизации бизнеса ошибки не приводят к падению самолётов или остановке работы компании, они могут привести к неудобствам для клиентов, пользователей сервисов и даже к финансовым потерям.

Одно из самых понятных направлений стандартизации — формулировка требований к данным. Данные — одна из главных ценностей любой компании и напрямую влияют на бизнес‑процессы. От качества данных в конечном итоге зависит выживание и развитие бизнеса. Решения, принимаемые на основе некорректных данных, не могут быть эффективными. Система, в которой данные не согласованы и не подчиняются общим требованиям, склонна к непредсказуемому поведению.

Стандарты? Не, не слышали

На момент моего прихода в CDEK, в 2019 году, в компании происходил отказ от морально устаревшей монолитной ERP‑системы, написанной на C++. Активно разрабатывалась новая версия с применением микросервисной архитектуры. На тот момент уже работало несколько десятков сервисов, написанных на Java (большая часть ядра системы), PHP (в основном витрины и интеграции) и JavaScript (фронт). При этом какая‑либо стандартизация хранения, обработки и обмена данными по большей части отсутствовала. Поэтому разработчики руководствовались в работе собственным опытом и интуицией, не применяя на практике унифицированный подход к данным.

Одной из самых распространенных проблем был подход к работе с датами и временем. Приведу небольшой список констант из уже вышедшей из употребления корпоративной Java‑библиотеки, которая использовалась для преобразования даты со временем в строку и обратно:

String SERVER_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
String VIEW_DATETIME_FORMAT_STRING = "d.MM.yyyy H:mm:ss";
String VIEW_DATESHORTTIME_FORMAT_STRING = "d.MM.yyyy H:mm";
String ORACLE_DATETIME_FORMAT_STRING = "dd.MM.yyyy HH:mm:ss";
String NSPCMAIL_DATETIME_FORMAT_STRING = "dd.MM.yyyy HH:mm:ss";
String ELASTIC_DATETIME_FORMAT_STRING = "yyyy-MM-dd'T'HH:mm:ss.SSS";
String ELASTIC_DATE_FORMAT_STRING = "yyyy-MM-dd'T'HH:mm:ss";
String FILE_NAME_DATE_FORMAT_STRING = "dd.MM.yyyy-HH_mm_ss";
String VIEW_DATETIME_SHORT_FORMAT_STRING = "dd.MM.yyyy HH:ss";

Принцип использования достаточно простой: при конвертации данных (например, из строки в JSON объекте) по очереди перебирались все возможные варианты представления и при некоторой доле везения, результат записывался в типизированную переменную. При этом, например, в Java использовался безнадежно устаревший тип java.util.Date.

Легко заметить, что во всех приведённых форматах даты и времени отсутствует указание временной зоны. Фактически значение могло быть указано как в локальной таймзоне, так и неявно в UTC, по Московскому или Новосибирскому времени. Иногда формат и временная зона указывалась в комментарии к полю объекта или столбцу БД. Чаще всего приходилось выяснять это проводя натурные эксперименты, разбираясь в коде проекта. Или же искать ответственного за данный объект разработчика.

Валюты идентифицировались в ERP‑системе пятью способами: внутренний числовой идентификатор системы, уникальный идентификатор (uuid), цифровой и буквенный коды ISO 4217, причем как в верхнем, так и нижнем регистрах. Глядя на строковое поле, содержащее код валюты в произвольном обменном объекте, решительно невозможно было понять: в каком именно формате будет представлена валюта на самом деле. Это мешало не только разработке, но и анализу инцидентов. Просто представьте, что просматривая логи, вы видите 1000 единиц в валюте № 14 или 500 у.е. в валюте с идентификатором 18117342-cff4-4fa4-a2cf-c3d332c27330.

Коды языков, локалей и стран могли быть представлены в произвольном, иногда выдуманном разработчиками виде. Например, Беларусь появлялась в виде кода BR, относящегося в ISO 3166 к Бразилии. А в списке языков мог появиться казахский с кодом «kz», которого вовсе не существует в стандарте ISO 639.

Номера телефонов были полностью непригодны для автоматической обработки, поскольку даже для РФ они имели любой из префиксов «7», «+7», «8» (или не имели его вовсе). Сервисы обрастали «костылями» для обработки номеров телефонов с подсчетом цифр и подменой префиксов. Алгоритмы выглядели монструозно и были ненадёжны.

Более того, данные форматы «просочились» даже в БД, где и хранились в виде сериализованных строк, а не в виде специализированных типов. В одном объекте или таблице БД могли использоваться разные варианты сериализации одного и того же типа.

Надо ли говорить, что это значительно усложняло разработку и приводило к неожиданным багам, которые иногда обнаруживались лишь на проде…

Как мы пришли к стандартизации

Для меня, как для специалиста, более 8 лет проработавшего с банковским ПО, где использовалась строгая типизация, а для обмена данными — стандартизированные протоколы вроде SOAP, такой подход оказался весьма неожиданным. Было жаль времени и сил специалистов, которые вместо эффективного решения бизнес‑задач вынуждены тратить время на разрешение неоднозначностей нашей системы.

Примерно так выглядел типичный разработчик, пытавшийся понять, как работать с нашими данными. Источник
Примерно так выглядел типичный разработчик, пытавшийся понять, как работать с нашими данными. Источник

Проанализировав ситуацию, я понял, что проблему можно решить, если описать и внедрить общие правила для работы с данными. Итогом стала объемная статья на основе стандарта ISO 8601 и строгой типизации с использованием классов java.time.*. В статье описал принципы и примеры работы с датой и временем, особенности применения временных зон и смещений, подходы к хранению, документированию и межсистемному обмену.

Затем были выработаны стандарты, призванные сделать и другие данные компании однозначными и единообразными:

  • Стандарт номеров телефонов — был разработан на основе ITU‑T E.164, преследует целью унификацию представления телефонных номеров (всегда указывается полностью, обязательно начинается с «+» и кода страны, не содержит разделителей);

  • Стандарт валют — основным идентификатором выбран код ISO 4217 Alpha-3, который однозначен и человекопонятен;

  • Стандарт финансовых и монетарных значений — с главной идеей сформулировать неотделимость суммы от валюты; в момент написания этой статьи мне встретился код, где складываются суммы из разных объектов без учета валюты!

  • Стандарт локалей — за основу взято представление локали в Java (страна ISO 639-1 и язык ISO 3166-1 Alpha-2, разделенные подчеркиванием);

  • Стандарт языков — согласно стандарту ISO 639-3;

  • Стандарт временных зон — на основе IANA Timezone Database.

И множество других, касающихся проектирования и документирования сервисов, хранения данных и взаимодействия с использованием Rest API и брокеров очередей.

Профит

Внедрение стандартов:

  • значительно снизило количество ошибок (количество массовых сбоев уменьшилось на порядок в том числе благодаря внедрению единого подхода к данным);

  • облегчило расследование инцидентов (взаимодействие между сервисами стало проще, а логи — очевиднее);

  • ускорило разработку, тестирование и внедрение задач (время на выпуск бизнес‑фич сократилось до 14 дней);

  • улучшило аналитику, BI (качественные исходные данные — качественный результат);

  • оказало заметное положительное влияние на основной бизнес компании в целом.

Вам нужны стандарты. С чего начать?

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

Если говорить об унификации данных, в первую очередь нужно проанализировать существующие общемировые и общепринятые стандарты, например: ISO, IETF RFC, ICANN, ITU‑T. Для начального ознакомления подойдут и статьи Википедии.

Для создания некоторых стандартов легче и эффективней использовать практическую документацию. Например, для корпоративной стандартизации HTTP‑заголовков вместо исходного RFC 4229 допустимо использовать документацию MDN Web Docs, которая проще для понимания и содержит практические примеры.

К сожалению, не все общепринятые стандарты подходят для решения всего спектра задач, стоящих перед компанией. Например, стандарт ISO 3166, определяющий коды стран, основывается на бюллетене ООН и поэтому не содержит кодов непризнанных государств. В этом случае в корпоративном стандарте указывают либо кастомные, несуществующие в исходном стандарте идентификаторы, либо используют собственные (главное, чтобы это было задокументировано).

Стандарты выработаны — что дальше?

А дальше начинается самое сложное. Недостаточно просто сформулировать стандарт — нужно добиться его внедрения. Для этого существует два подхода: административный и технический.

При административном подходе создаются инициативы в корпоративном баг‑трекере и ставятся задачи перед командами. Большинство таких пунктов реализуются в рамках времени, выделенного на техдолг.

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

Иногда внедрение происходит «со скрипом». В сервисах, в которых изначально использовались подходы, сильно отличающиеся от стандарта, возникает большое количество техдолга и проблем с обратной совместимостью. Обычно в таких случаях помогает разговор с командой (ура, созвон!) с аргументами, показывающими необходимость принятого решения и способы его реализации.

Конечно, стандарты применяются не только в работе с данными. Возможно стандартизировать любые бизнес‑процессы (в этом случае они к тому же проще автоматизируются), процессы разработки (взять за основу хотя бы Agile) и даже количество котиков в офисе в расчете на квадратный метр.

Глядя на опыт японской IT-корпорации Ferray, разрешающей сотрудникам держать кошек в офисе, подумываю, не внедрить ли и у нас подобный стандарт, регламентирующий их обязательное наличие и количество. Источник
Глядя на опыт японской IT-корпорации Ferray, разрешающей сотрудникам держать кошек в офисе, подумываю, не внедрить ли и у нас подобный стандарт, регламентирующий их обязательное наличие и количество. Источник

Если в процессе работы вы постоянно сталкиваетесь с проблемой «неоднозначности» и «неочевидности» (неважно — в данных или процессах разработки или бизнеса), то самое время подумать о стандартизации: выбрать объект и сформулировать к нему общие правила и требования. Даже если это не принесёт результата в моменте, со временем вы обязательно почувствуете накопленный эффект и положительное влияние на процессы и бизнес компании в целом.

А какие стандарты применяете вы? Как они влияют на процессы в вашем случае и приходилось ли сталкиваться с проблемами при их внедрении? Буду благодарен, если поделитесь своим опытом в комментариях.

Комментарии (23)


  1. NinaGor
    21.03.2024 11:27
    +1

    Спасибо за статью, очень интересно!


  1. Didimus
    21.03.2024 11:27
    +4

    Планируется ли отказ от уведомлений через всякие в контакты, воцаппы и тп? Почему нельзя использовать традиционные каналы?


    1. ywstsc
      21.03.2024 11:27

      А традиционные каналы - это какие? И чем Вам watsapp не угодил, можете кейс написать?


      1. Didimus
        21.03.2024 11:27
        +7

        Традиционные это те, которые я сам указал для связи. Но сдэк берёт и без спроса отправляет уведомление не на емейл, а на непонятный вконтакт. Хорошо, что я туда случайно зашёл и увидел


        1. Squoworode
          21.03.2024 11:27
          +1

          Я там таких блокирую и отправляю жалобу на спам.

          А когда жду посылку, трекаю её в отдельном приложении.


        1. fatue
          21.03.2024 11:27
          +2

          У сдэка есть моя почта и телефон, но уведомления присылает только на email и в приложение. Вот только для авторизации в приложении через телефон прислали код в вайбер, а не смс, но это просто способ сэкономить.

          Сейчас историю вайбера посмотрел - с июля 2022 года не получаю там уведомления о заказах. Может потому что приложение установлено тогда было?


      1. Borz
        21.03.2024 11:27

        Я бы уточнил - хотелось бы указать через что меня уведомлять, а не "через что нам удобнее, через то и уведомим".
        Например, мне тоже удобнее не через VK получать уведомления, а, к примеру, как PUSH в приложение CDEK


        1. ywstsc
          21.03.2024 11:27
          +2

          Тогда у вас должно быть установлено мобильное приложение и вы должны в нем быть авторизованы. PUSH всегда в приоритете, в стратегии отправки


  1. Frechet
    21.03.2024 11:27
    +2

    Вы указали, что была по итогу создана подробная статья для стандартизации подходов. Есть возможность её опубликовать в открытом источнике и поделиться?


    1. obondar Автор
      21.03.2024 11:27
      +3

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

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

      Уже сейчас понятно, что задача не тривиальная. Например, в PHP, кроме типа DateTimeImmutable, представляющего собой аналог ZonedDateTime в Java, отсутствуют типы локальных даты и времени, что усложняет расчеты. В Python, хотя и существуют типы date, time и datetime, но из-за необязательности указания таймзоны, работа с ними также иногда приводит к ошибкам.

      Вообще, я заметил, что любая неоднозначность в трактовке, почти гарантированно приводит к ошибкам. Вот один из примеров, когда стандартное представление даты и времени со смещением все равно ведет к двусмысленности: 2024-03-21T19:56:30+05:00. Казалось бы, что может пойти не так? Но один из разработчиков воспринял дату и время слева от плюса как будто они указаны в нулевом смещении UTC (т.е. что смещение +5 часов нужно прибавить дополнительно), а другой, что дата и время уже указаны в смещении +5 часов (а это верный вариант).

      Поэтому я мог бы написать статью на Хабре, о том, как вести расчеты с датой и временем (на всех трёх языках программирования), как хранить такие данные в БД PostgreSQL и MySQL и некоторых NoSQL базах данных: ElasticSearch, MongoDB. Ну и, конечно, привести примеры распространенных ошибок, которые совершают разработчики.

      Как вам идея?


  1. betax
    21.03.2024 11:27
    +2

    Планируется ли в CDEK отказ от глупости предъявления паспорта при получении заказа и, вместо этого, подтверждение получения посылки через смс?

    Опишу ситуацию: Сестра сделала заказ на сайте Максидома нескольких товаров и попросила его забрать меня. Доставка у них только через CDEK, оплата при получении, указывается имя заказавшего и мобильный номер телефона. На телефон приходит смс, что заказ прибыл в пункт CDEK. Кодов для получения, как в других сервисах доставки, у CDEK, почему-то нет.

    Прихожу в пункт выдачи, называю номер заказа, собираюсь оплатить и забрать.

    Говорят: давайте паспорт.

    А смысл? ФИО у меня другое, чем у сестры. Говорю, давайте оплачу да пойду, или ей позвоните подтвердите, телефон указан в заказе.

    Говорят: Нет, выдаем только по паспорту, правила компании. Или пусть она установит приложение, введет туда свои паспортные данные, там проверят, потом она сможет в приложении сгенерировать код, который сможет сообщить вам, и вы по этому коду сможете получить неоплаченный заказ из магазина. Занавес. Другие сервисы доставки сообщают в смс код получения или высылают его при получении в пункте выдачи.

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


    1. ClayRing
      21.03.2024 11:27

      А как СДЭК должен узнать что сестра вам разрешила получать её посылку? Вдруг вы решили получить её посылку втайне от неё?


      1. betax
        21.03.2024 11:27
        +2

        А откуда бы я узнал пункт выдачи и № заказа, который приходит ей в смс? И откуда я узнал бы код получения, если бы СДЭК отправлял его на имеющийся в заказе её номер телефона при получении в отделении СДЭК?

        И еще раз повторю - это _неоплаченная_ посылка с _магазинными_ товарами из Maxidom, а не пакет с документами.


      1. Borz
        21.03.2024 11:27
        +3

        так же, как на той же Почте России сделано - оригинальному получателю присылается код подтверждения, он его сообщает тому, кто сейчас в отделении получает посылку и тем самым подтверждает, что ему разрешили забрать посылку.
        Для этого правда надо сперва подключить ПочтаID (получение без паспорта) или как она там называется путём написания заявления, но и у CDEK для этого есть CDEK ID же


        1. betax
          21.03.2024 11:27
          +1

          Да, только для CDEK ID надо сдать свои паспортные данные, которые будут храниться где-то в какой-то БД, и где им приделают ноги.

          Но что мешает CDEK просто выслать Код получения в СМС по указанному в заказе номеру, если это банальная магазинная покупка? Ни Яндекс, ни Озон, ни Wildberries, ни Почта, ни прочие платформы не додумались до такой фигни с паспортами.

          И да, от заказа пришлось отказаться, он отправился обратно в магазин. С таким сервисом и политикой, СДЕК походу лишится клиентов.


          1. snakers4
            21.03.2024 11:27

            Ответ очевиден - так можно собрать больше информации. И плевать им на вашу безопасность.


          1. Borz
            21.03.2024 11:27

            Да, только для CDEK ID надо сдать свои паспортные данные

            У Почты РФ аналогично, если что. По крайней мере, его проверяли в момент, когда я заявление писал. А вот писал ли я реально паспортные данные в заявлении не помню за давностью времён

            Озвученный вами Ozon/Wildberries привязываются к вашему номеру телефона - да, не паспорт, но тоже кладётся "в какую-то БД".

            И суть моего коммента выше была не в том, как привязаться (второй абзац), а в первом абзаце


    1. nureinname
      21.03.2024 11:27
      +2

      Для оплаченных заказов, по-моему, тоже правила безопасности у CDEK странные. Ситуация: оплаченный заказ в интернет-магазине из соседнего города, доставка CDEK должна быть самой быстрой из возможных вариантов. Заказываю доставку в постамат, удобно для меня расположенный. Через несколько дней, судя по трекингу, заказ почти доехал до постамата, но "курьер не смог его доставить", и заказ уезжает в ПВЗ, который мне не удобен ни по расположению, ни по времени работы. Звоню в поддержку, объясняю ситуацию, оператор соглашается, что произошла какая-то ошибка и меняет место назначения снова на нужный мне постамат. И так, если не ошибаюсь, 7 (семь) раз. Т.е. каждый раз заказ якобы привозили в постамат, происходило что-то непредвиденное, и его упорно доставляли в ПВЗ. После моих звонков опять меняли пункт назначения на постамат и все повторялось. Почему так происходит, никто объяснить не мог. Никаких проблем, принципиально не позволяющих положить посылку в постамат (т.е. размер и содержимое), не было. Версии операторов были разные - постамат сломался, постамат вообще убрали, моя ошибка при оформлении, ошибка магазина при оформлении, курьер что-то перепутал (ага, 7 раз). Постамат все это время был доступен для выбора на сайте, если что. Оформлен заказ был правильно и отправлен магазином правильно. В конце концов, после примерно трех недель скитаний, когда срок хранения подходил к концу, оказалось, что лимит на изменение пункта доставки для заказа исчерпан и теперь ни в какой постамат доставлять не получится, только идти и забирать в ПВЗ. Т.е. да, мной-то никакие изменения не выполнялись, это проблемы СДЭК-а, но "к сожалению, по-другому никак". В весьма раздраженном настроении в выходной топаю в этот ПВЗ, в котором выясняется, что без внесения моих паспортных данных в их базу заказ мне не отдадут, потому что таковы правила для оплаченных заказов. Т.е. нужно не просто показать паспорт на месте, а именно сохранить паспортные данные. И это для заказа, который должен был быть получен в постамате по коду из сообщения и который так и не привезли в нужное место. Не только мне, кстати, не привезли, сотрудники ПВЗ сказали, что не в курсе проблемы с постаматом, но очень много заказов перенаправляют к ним. Мне проще и быстрее было самовывозом забрать из магазина, еще и бесплатно. В общем, понимаю, что мои паспортные данные уже есть в самых разных базах, но после стольких недель выяснений и часов общения с поддержкой (впервые в жизни все минуты по тарифу были израсходованы) впредь не хотелось вообще никак со СДЭК-ом пересекаться и тем более оставлять информацию о себе. Из магазина к тому времени уже звонили и спрашивали, почему не забираю, и были в курсе ситуации. В итоге без копирования паспорта заказ мне не отдали, он вернулся в магазин, а оттуда уже приехал курьер - в назначенное время и место, безо всяких проволочек.
      Почему оплаченный заказ по регламенту можно положить в постамат и получить по коду, но нельзя по такому же коду выдать в ПВЗ - большой вопрос.


  1. nv13
    21.03.2024 11:27
    +4

    Никто не любит стандарты - ни пользователи, ни продажники, ни поддержка, ни программисты, особенно когда уже что то накриативили. Хороший пример с +7 и 8, особенно когда номер используется как логин.

    Мне довелось участвовать в интернациализации телефонии одного продукта , так на это ушло года 3 в 3 или 4 релизах; и хотя требование о её введении было с самого верха нашей конторы, практически все пытались откосить от участия - внедрения. БД забита старыми номерами, пользователям неудобны номера с плюсом, операторы не поддерживают международную нумерацию (хотя сами могут прислать звонок в таком формате), какая то библиотека не парсит +, клиент имеет базу номеров с 8, тестеры не знают как сгенерировать номерной план, часть клиентов вообще не хочет что то у себя менять. Поддержка требует сделать чтобы нормально работало как раньше, продажники её поддерживают и эскалируют в менеджмент, тот их тоже поддерживает, пока не вспоминает про требование трёхлетней давности. Телефонисты предлагают сделать всё на их сисках и больше ничего не ломать.

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


    1. obondar Автор
      21.03.2024 11:27

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

      Понятно, что к формулировке стандарта нужно подходить очень аккуратно, чтобы не навредить. Не нужно подходить к стандартизации с точки зрения «у вас тут не красиво/не правильно», обязательно нужно взвешивать плюсы и минусы принимаемых решений и четко понимать их необходимость, решаемые задачи и отрицательный эффект (который нужно постараться минимизировать). Стандарты должны быть спроектированы так, чтобы быть удобными тем, кто их использует (включая клиентов, пользователей системы, менеджеров и технических специалистов). Это сделать не просто, но, в принципе, возможно. Для этого важно собрать качественную обратную связь от всех заинтересованных.

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

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


  1. snakers4
    21.03.2024 11:27

    Честно говоря, с учетом специфики работы компании СДЭК с данными клиентов, эта статья кажется форменным издевательством.


    1. obondar Автор
      21.03.2024 11:27
      +2

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

      Первое, что хотелось бы сказать, что это не специфика работы компании CDEK. Например в 2022–2023 годах в России зафиксировано более 400 случаев yтечек из многих компаний, в том числе и банковского сектора, который, казалось бы, не должен вообще допускать такого. Во‑вторых, я считаю, что систему характеризует не факт ошибки, а реакция на неё. Мы проанализировали и свой кейс и проблемы наших коллег по индустрии, сделали соответствующие выводы и приняли соответствующие решения. Сейчас мы ежедневно работаем, в том числе над тем, чтобы максимально снизить вероятность таких событий в будущем.


      1. snakers4
        21.03.2024 11:27

        В сумме с выдачей по паспорту и навязыванием СДЭК id выглядит как двойное издевательство и лицемерие.

        И не надо рассказывать про защиту пользователей - давно существуют одноразовые ключи, 2FA, криптография - и всё без дополнительного сбора персональной информации (которая утекает террористам) и навязывания ненужных экосистем.

        Так что анти человеческие практики применяются вашей компанией целенаправленно. Зачем клиентам при получении какой-то фигни увеличивать базу, которая будет передана террористам - непонятно.

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

        Хорошо, что закон про оборотные штрафы приняли, но мне лично кажется, что в случае таких массовых сливов или какое-то звено руководства работает с террористами, или административной ответственности категорически недостаточно.