snowman

IT-аллегория

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

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

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

Покончив с анализом, я приступил к реализации проекта. Описывать это неинтересно, потому что здесь, в целом, всё прошло гладко. Из-за нехватки времени некоторые возможности пришлось оставить до следующей версии, но, главное, их было легко добавить, ничего не ломая. Самое интересное произошло спустя месяц, в финальной стадии разработки. Первым неладное почуял дизайнер, которому предстояло облагородить внешний вид прототипа. Ему показалось, что на рукоятке «отвёртки» слишком много кнопок. Я рассказал ему, зачем эти кнопки нужны, и показал, как пользоваться инструментом в различных режимах. Тогда дизайнер поинтересовался, а почему было не сделать, как у всех, просто горстку сменных насадок. Я объяснил, что фиксированный набор сменных насадок никогда не сравнится по широте возможностей с универсальной рабочей головкой, и был, после продолжительных дебатов, понят, однако затем аналогичную серию вопросов задал редактор технической документации, а вслед за ним — сотрудник отдела QA. Пришлось созвать совещание с участием начальника, главного аналитика проекта и других официальных лиц.

В ходе совещания выяснилась одна важная «мелочь». Оказывается, потенциальному покупателю не нужно работать со всем разнообразием головок и шлицев крепёжных деталей. Ему нужно откручивать и закручивать от силы две-три разновидности шурупов, но, вдобавок к этому, клиент хочет забивать гвозди. Тем же инструментом. Положение осложняется тем, что, по данным маркетинговых исследований, среднестатистический покупатель не понимает разницы между гвоздем и шурупом или понимает её неверно. Что же касается числа кнопок на рукоятке, то их, в связи со спецификой целевой аудитории, должно быть никак не больше двух.

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

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

Почему я выбрал такой путь? Ведь очевидно, что простенькая конструкция, которую я смог сколотить за трое суток, не обладает ни гибкостью, ни расширяемостью, ни масштабируемостью. Да вот только переделанный под новую задачу старый прототип едва ли мог бы этим похвастаться. Он гибок, но не в ту сторону; он расширяем, но не в том направлении; он масштабируем, но не по тем параметрам. Это естественно, поскольку Вообще Универсальную систему построить невозможно. Если нужно сделать что-либо универсальное, нужно сперва ответить на вопрос: что нужно охватить этой универсальностью? Неправильный (или впоследствии оказавшийся неправильным) ответ на этот вопрос приведёт к бесполезной потере времени и усилий. Попытка же использовать систему, являющуюся универсальной в одной плоскости, для охвата задач из другой плоскости приводит к потере всех преимуществ данной системы как универсальной, а в качестве бонуса приносит увеличенную сложность всей конструкции в целом. Раз уж нет возможности сделать правильно, лучше сделать неправильно, но просто, чем неправильно и сложно. То, что сделано за трое суток, в случае необходимости и переделать можно.

А первый прототип и теперь лежит у меня в ящике стола. Может, когда-нибудь ещё будет случай сдунуть с него пыль?

In English: IT Allegory
  • Current Music: J-J Goldman - Envole-moi
Tags:
есть такая фигня
(Anonymous)
в нашей работе всегда приходится идти на компромиссы...
порой даже чаще чем хотелось бы...

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

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

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

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

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

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

Если это тебя утешит - ты такой не первый. И не один такой. И вообще - все через это проходят.

Здесь стоит одна проблема - определить, что нужно юзеру.

Если определил неправильно - продукт идет на помойку. Вместе со всеми красивыми и правильными решениями (ибо сами по себе они никому не нужны).

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

Забавно, что в масса реально популярного ПО была слеплена кривыми руками "из того, что было". Да, сделано херово, но оно делает то, что нужно юзеру. А есть масса красивых в реализации проектов, которые оказались не нужны. И оказались на упомянутой помойке.

Интересно, нельзя ли совместить точный маркетинг с хорошей реализацией??

Есть мнение, что очень трудно найти менеджера, который

1) сечет в технической части
2) сечет в маркетинге
3) имеет достаточно власти, чтобы свои умения применить.
Ну собственно да.

В зависимости от того, кто из 1) и 2) (в реальности это разные люди) главный - то и получаем. :) Тогда вопрос в грамотной кооперации.
Re: Reply to your post...
Дельный комментарий, но при чём здесь маркетинг? Надо поставить вопрос
так: можно ли совместить качественный анализ задачи с хорошей реализацией?
Можно. Есть много бесплатного софта, совмещающего то и другое. Основным
условием, обеспечивающим этим проектам такую возможность, на мой взгляд,
является отсутствие временного прессинга. Другое дело, что
затягивающиеся сроки выхода новых версий негативно влияют как раз на
популярность продукта, то есть на то, чем в коммерческих продуктах
занимается маркетинг.
Re: Reply to your post...
Дельный комментарий, но при чём здесь маркетинг?
Гм. А как же? Собственно задача определения того, чего хочет юзер, имеет самое непосредственное отношение именно к маркетингу. Под выражением "точный маркетинг" имелось ввиду именно точное маркетинговое позиционирование. То есть для кого - этот продукт (или его модуль). Для тех, кому нужна "универсальная рабочая головка" или для тех, "кому нужны 2-3 сменных насадки + возможность забивать гвозди".

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

много бесплатного софта, совмещающего то и другое.
Боюсь, этот софт немного из другой песни.

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

Ты же сам понимаешь, что отсутствие временного прессинга крайне не характерно для коммерческого софта. Если нас интересует результат, а не процесс - то есть временной прессинг. Замечу, что результат, полученный не своевременно, в коммерческом софте за результат засчитан никак не будет.
Re: Reply to your post...
>> можно ли совместить качественный анализ задачи с хорошей реализацией?
> О каком именно анализе ты говоришь? Хотя ... пожалуй, совместить можно в любом случае. В теории.

Я говорю именно о выяснении того, какую задачу мы решаем. OK, я перепутал маркетинг вообще со сбытом в частности.

>> много бесплатного софта, совмещающего то и другое.
> Боюсь, этот софт немного из другой песни.

В упор не вижу, чем принципиально отличается в том аспекте, который мы обсуждаем.
Re: Reply to your post...
Есть много бесплатного софта, совмещающего то и другое.

Я не знаю ни одной хорошей бесплатной программы.
Прежде чем делать универсальную систему,
надо проанализировать все варинты её
использования :)
Re: Reply to your post...
Чтобы проанализировать все варианты использования, нужно о них знать.
Re: Reply to your post...
это задумывалось как шутка.

впрочем, положа руку на сердце, не возникало ли с самого начала
у тебя мысли что наш, эээ, контингент именно как раз и хочет
"3 стандартных насадки + возможность забивать гвозди"?

а ещё лучше, конечно, добиться таки от
наших коллег (начальства в первую очередь)
предварительного обсуждения.
У меня, правда, до сих пор не получалось этого.