воскресенье, 13 января 2019 г.

Что не так с качеством?

Я не очень понимаю, в какой момент произошел слом в массовом сознании, но я его наблюдаю регулярно и систематически.
Но то что слом произошел, причем совсем недавно, и не только в России, это факт. Как вам вот такие два определения качества:
1. ИСО 8402—86: Качество — совокупность свойств и характеристик продукции или услуги, которые придают им способность удовлетворять обусловленные или предполагаемые потребности потребителя.
2. ГОСТ Р ИСО 9000-2015: Качество — степень соответствия совокупности присущих характеристик объекта требованиям.
Видите разницу, под катом мои мысли на эту тему.

Ключевая разница этих определений в том, что в 86 году под качеством понимали удовлетворение потребностей потребителя, в 2015 соответствие требованиям.
И вот уже в голове голосом Райкина звучит:
-У вас к пуговицам претензии есть?
- Нет, к пуговицам претензий нет, пришиты намертво.
Аналитик отвечает только за то, чтобы в TFS (или какая у вас там система управления требованиями) появились пользовательские истории для Scrum или требования для остальных методологий. Ой, простите, Скрам это не методология, это всего лишь фреймворк, который, кстати, тоже не про удовлетворение потребностей потребителя, а про ритуальные действия, которые должны выполняться строго в соответствии с требованиями. Но не суть, аналитики написали некий текст, разработчик в соответствии с этим текстом написал функционал, инженер по тестированию проверил, все работает так, как написано в требовании. Пришиты намертво, не оторвешь. Вот только пользоваться этим нельзя. Например, по тому, что никто не подумал о реальной ситуации где это будет работать. Об обрывах связи, о больших наборах данных, о том, что пользователя выбесит вводить одно и то же значение 100 раз подряд. А это ведь я рассказываю про идеальный сценарий, с выделенной аналитикой, разработкой и тестированием.
Мы все забываем про потребителя. Причем даже не обязательно вешнего. Рассмотрим самый ужасающий пример такой забывчивости: программиста. Кто является потребителем продукта за качество которого отвечает программист? Остановитесь, подумайте. Кто? Пользователь? Отлично, если программист когда пишет код думает о пользователе, о том как будут пользоваться системой, в каком окружении она будет работать, что можно сделать, чтобы если уж не облегчить жизнь пользователю, то хотя бы не усложнить. Но в большинстве случаев нет даже этого. Ну вот в требовании написано реализовать А. Ну и что, что то что написано не удобно, ломает логику системы, да и использоваться не будет пока не сделают Б, которого даже в планах пока нет. Надо сделать А, вот и сделаю как понял, а там хоть трав.. Ну в смысле а там коммит, ревью, пуш, закрыть задачу и пойти налить кофе.
А ведь кроме несчастного пользователя потребителями труда программиста являются: инженеры по тестированию, специалисты по внедрению, специалисты технической поддержки и ПРОГРАММИСТЫ!!! И ладно, тестировщиков не жаль, админы пусть мудохаются с развертыванием как хотят, тех. поддержка? А это вообще кто такие? Но блин, как можно не думать про себя любимого? Как можно писать методы на сотни строк кода? Ты что, завтра увольняешь и больше не будешь пытаться разобраться в этом спагетти? Как можно в сложной лямбде, находящейся внутри другой лямбды, которая находится по соседству с третей лямбдой использовать имя переменной параметра i (при этом тип сущностей в итерируемой коллекции пусть будет Персона)? Ну а писать catch внутри которого ничего нет, это вообще как? Это что, желание подольше искать неуловимую ошибку?
В Кайдзен есть очень правильный постулат: "Следующий процесс – это потребитель. Вся работа представляет собой ряд процессов, и в каждом процессе имеется свой потребитель и свой поставщик. Большинство работающих в организациях людей имеют дело с внутренним потребителем. Никогда не передавайте бракованные запасные части или неверную информацию людям, участвующим в следующем процессе.".  У каждого кто занимается разработкой программного обеспечения должна постоянно в голове быть мысль: не передавать брак или неверную информацию дальше. Ведь следующий по цепочке это и ты в том числе. Сделал плохо сегодня, придется переделывать завтра. Не предусмотрел сегодня, придется переделывать завтра. Как и с любым принципом, не надо перегибать палку. Не надо доводить мысль до абсолюта, вот пока не доведу до хрустального совершенства, на следующий этап не пущу. Но надо делать максимально хорошо, уверяю вас, плохо оно само получится.
P.s. Сорри за такую сумбурную портянку текста, наболело что-то...

2 комментария:

  1. Звучит очень оптимистично. Да, делать хорошо очень нужно, сам стараюсь всегда предусмотреть возможность поддержки функцианала, удобного его использования клиентом и максимально очевидного для прогарммиста кода, но это блин ДОРОГО! Дорого писать очень хороший код когда ты делаешь фичу для одного-двух клиентов, которые едва ли будут ее использовать, но ОЧЕНЬ СИЛЬНО ЕЕ ХОТЯТ. А с такими фичами как обычно бывает: 1 из 10 выстреливает, ей начинают пользоваться не те двое, а совсем другие коентык, и используют ее вообще не для тех целей, для которых она была предназначена. Появляются задачи доработать этот функционал таким образом, чтобы изначально разработанный, скажем, стул или стол начал очень изящно подносить кофе в постель. В такой момент приходится просто взять и все переписать. Ибо YAGNI же, да и на начом этапе речи не было совсем.

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

    Очень рад, что я работаю в одной из таких:) TL, привет!

    А вам, Алексей, больше спасибо! Просто захотелось излить мысли, так сказать.
    Пришел сюда из YouTube уроков по WPF, очень понравилось, что у вас получается концентрироваться на основной теме, не вливаясь в ненужные, усложняющие подобности. Для преподавателя это, пожалуй, самый важный навык, очень хочу его получить)
    Удачи вам!

    ОтветитьУдалить
    Ответы
    1. Есть разные миры. Есть мир внутренней автоматизации. Когда за код платит один заказчик. Делая не то, что этому заказчику нужно, а то, что он по неопытности или в силу каких-то еще причин написал в требовании, мы заставляем его платить дважды. А он и так в одиночку оплачивает труд программистов. В продуктовой разработке ситуация иная, там платит много, и, да, скорость реализации фич может рулить. За счет большого количества клиентов, как правило, есть возможность ставить эксперименты и по нескольку раз переписывать. Заказная разработка, это вообще отдельная сказка. Поэтому каждый раз надо включать голову и смотреть, так ли мы поняли заказчика, сделали ли мы в рамках текущих обстоятельств максимально хорошо, не стыдно ли нам перед следующим этапам? Я больше про это хотел сказать.

      Удалить