пятница, 4 декабря 2009 г.

Органайзеры… Доколе!?!

  На RSDN.ru опять поднимаются вечные темы – поиск наилучшего органайзера. И опять традиционная картина: если б молодость могла, если б старость хотела :). И снова вечный скепсис: ниша дохлая. Ага… Щазз! Если люди годами ищут удобный органайзер, и так и не могут найти, какая ж это дохлая ниша? Рыба есть – ловить уметь надо!

Нельзя написать одну программу для всех задач, на все времена и подо все платформы… и одинаково хорошую для всех задач. Приложения для планирования задач неудобны для ведения заметок, а заметки не очень-то подходят для планирования. И уж точно: ни первое, ни второе не относится к напоминалкам. Зато можно написать несколько разных программ, каждую заточенную под свои задачи. Только вовсе не обязательно писать их все – все программы, как и стихи, уже давно написаны. Вполне достаточно научить их взаимодействовать.

Вы никогда не задумывались почему интеграционный софт это просто золотое дно!?! Все очень просто: допустим есть две программы, каждая из которых выполняет свои задачи на “вполне хорошо”. К примеру, Aml Pages для заметок, и LeaderTask для планирования. Можно попеременно пользоваться обоими – ОК, но это простая сумма двух слагаемых.

Хех, integration, в переводе с английского означает “объединение в одно целое”. К чему это? Если научить обе программы хоть немного взаимодействовать, то они начинают увязываться пусть хоть и в простую, но уже систему. А система это всегда больше, чем сумма слагаемых. У системы появляются новые аспекты поведения, которых нет у простой суммы (соседства на харде?) двух программ. Вот поэтому интеграционный софт и есть золотое дно – это создание новых возможностей, которых нет у обоих софтин по отдельности.

Поэтому и бесполезно создавать еще один комбайн, который будет делать всё. Невозможно создать инструмент, который делает всё одинаково хорошо. В принципе, и обухом топора можно забивать гвозди, но обычно для этого выбирают молоток. Абсолютно то же самое и с программой-комбайном. “Всё” не получится! Уж больно у каждой задачи разные цели, разные приоритеты, разные акценты.

Как-то писал почему в Aml Pages нет тайм-менеджмента? Да потому что, это не ее задача – Aml Pages это записная книжка, “записки на манжетах”, копилка для эврик, сохранялка для фрагментов веб страниц – да попросту оперативный блокнот под рукой. Какой там нафиг тайм-менеджмент – чего менеджить, и где там тайм? Это разные задачи вообще по своей сути.

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

Вот в этом и заключается вся извечная проблема написания очередных органайзеров. Все как один пытаются создать заново революционную систему, решающую абсолютно все проблемы. Ну-ну! Бог в помощь! Для молодости еще куда ни шло, но в старости пора повторять как мантру: “ложки серебряной пули нет, ее не существует” – можно конечно и топором забить гвоздь, и даже не один, но попробуйте подбить им сапоги…

“Совершенство – это когда не нечего добавить. Совершенство – это когда нечего убрать!” (© Антуан Сент-Экзюпери). В интеграционном софте нечего убирать, он обеспечивает только необходимое – возможность взаимодействия 2-ух софтин, и только. Убирать нечего – потому и совершенство.

PS: напоследок палю идеи. Обратите внимание на некоторые нюансы.

  1. По сути своей все напоминалки  напоминают периодически. Но почему это должен быть только текст? Открыть сайт, запустить приложение, открыть документ – это не почти ли то же самое? Взгляните на COM-интерфейс ITaskSheduler – все периодично, но что именно периодично можно описать в широких диапазонах. Можно заюзать и сам интерфейс. Не катит? Кто мешает воплотить ту же идею с нуля самому?
  2. Представим следующую ситуацию: вы с отладчиком наперевес уже почти с ногами залезли в окно кода и вовсе перестали реагировать на все внешние раздражители. И в этот момент любимая женщина вам говорит “дорогой, ты просил напомнить, что тебе надо позвонить Ивану”… Нет, нет – не отвлекает, а именно напоминает, привлекает Ваше внимания, но не требует вашей ежесекундной реакции. Не бывало такого?
    ОК, представили себе в уме, ну, а теперь к сути. Где вы видели у любимой кнопку “ОК”, которую нужно нажать чтобы хотя бы быстро закончить свои занятия?
    Так какого же хе… фига без конца показывать эти засранные MessageBox? Где необходимость сначала ответить на него, а только потом вернуться к своей задаче? Поверьте на слово – 30 минут размышлений, и решение находится – это действительно просто.
  3. Ну и последнее. Ни один вменяемый человек никогда не планирует что-то на через неделю ровно на 21:33. Нет, нет, конечно и такое бывает. Но это исключение. Чаще все значительно элементарнее: “завтра вечером”, “в пятницу после обеда”, “как протрезвею проснусь” и.т.д. Тогда на кой хрен, скажите мне, всё завязывать на точные элементы ввода вроде DateTimerPicker? Нарисуйте обычный статик со шкалой: слева утро, справа вечер. Подсветите его слева-направо цветами перехода от желтого (рассвет) к красному (закат) и позвольте пользователю выбирать кликом. Добавьте для наглядности снизу шкалу часов (дней). Пользователи не идиоты, поймут все с первого раза – образы всегда лучше воспринимаются. Очень надо? Ну, добавьте рядом этот DateTimePicker, и синхронизируйте его и выбор на шкале кликом - не помешает. Но поверьте, использоваться он будет исключительно как дополнительное средство и значительно реже.

Для начала, пожалуй, хватит. Авось кому и пригодится высказанное, кого-то вдохновит!?! Один фиг, у меня по-моему никогда не дойдут руки до реализации, особо если учесть что это не последние идеи – их есть у меня…

среда, 2 декабря 2009 г.

Про баги: падать или не падать

Здравствуй, дорогой и горячо любимый Access Violation Елена Сагалаева начала серию статей “Искусство отладки” и даже уже опубликован первый пост “Как предупредить появление багов”. Тема конечно же глубинная. Ре-хех, чуется да будет драка… Да чего уж там, судя по комментариям “гнать из команды”, “не пишем код и не будет багов” – драка уже началась! Ну, как говорится: “amen. понеслася!”. Но посты прелюбопытнейшие, даже порой заглядываю перечитать и поразмышлять. Чего уж тут!?! Достали меня уже в ноль анализы засранных бизнес-требований (сами не знают, чего хотят), бесконечные флеймы в форуме технической поддержки, и все прочие маркетинги-и-иже-с-ними. Давайте-ка лучше маленько подебажим :)

Хех, баги есть, были и всегда будут. А кончатся? Не пропадем – съездим к трем вокзалам и возьмем наплодим новых! Когда баги вползли по невнимательности, ну или по банальной опечатке (такое бывает: начинаю уже тихо материться на автозавершение кода (autocompletion), о  сколько багов оно наплодило в моем коде) - с этим более менее понятно как бороться: code review, нормальные комментарии, assertions где только возможно. В общем, все понятно: баги подобного рода нужно максимально переловить на стадии альфа (бета) релиза.

Но ведь бывает и иначе: “Ты суслика видишь? Нет… А он есть!”. То бишь, ну неоткуда багу взяться, хоть тресни неоткуда и всё тут! Но он есть. И хорошо, если четко диагностируемый и постоянный, а если мигающий да зависящий от конфигурации!?! Imho, в альфа-версиях лучше уж пусть софтина рухнет, грохнется с самым поганым Access Violation, погребя под собою весь процесс вместе с пользовательскими данными заодно. Ну и ладно, зато проблема станет явной.

Буквально последние дни доделываю новую фичу в Aml Pages. Фича весьма неслабая. Мало того, что вовсю используются виртуальные списки (SysListView), когда данные в одном месте, а визуализация их происходит по мере прокручивания списка пользователем. Дык там еще и сами данные выдергиваются многопоточно (а юзер – нет, ну вот зараза какая – старается еще и изменить данные уже в третьем треде). Лично по мне, пусть вся Aml Pages рухнет с треском в релизной сборке, если где-то вдруг у нас порою закрался баг. Всё лучше, чем кряхтя и поднатужившись продолжит выполнение, непонятно в какой винегрет превращая пользовательские данные.

Нет, нет! Никто не собирается вывалить все эти баги на пользователя. Ни в коем случае. В коде уже очень многое предусмотрено: и контроль индексов, и корректная обработка висячих указателей, и проверка на deadlock при многопоточной обработке. Но все это будет задействовано только в первом публичном бета-релизе. В альфа-версии фиг – все максимально сбое-вероятно, пусть уж лучше мой код покажет свое истинное нутро.

Всё просто: проблема не в баге  - проблема в том, откуда он вообще взялся. Если написано, что индекс должен быть от массива “А”, то именно для него он и должен быть, и причем валидным, а не для соседнего. А коль индекс не валидный, то вынуть по нему данные все равно не получится. Выкрутиться можно, но вот вынуть данные корректно, это фиг. В публичном релизе будет и такая страховка. Но проблема в данном случае, не в том что пытаемся вытащить данные по кривому индексу, а в том, откуда такой кривой индекс вообще взялся.

Если весь алгоритм сразу проектировался так, что даже взрыв ядреной бомбы за окном не может повредить индексы, то кривой индекс означает только одно: ядреная бомба где-то в коде. И уж пусть софтинка рухнет намертво – зато проблема станет явной, и явной именно сейчас, в стадии альфа-версии, а не в финальном релизе на машине пользователя. Сиди потом, медитируй на тему “ё-маё, что ж  я сделал, и как они пытаются это использовать”.

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

  1. Банальное переименование некоторых функций. Причина проста: семантически параметры некоторых функций изменились, но не изменились синтаксически. То бишь надо все эти, а желательно еще и соседние, моменты проверить. Но компилятор сам такие ляпы не поймает, т.к. ну нет никакого ляпа с его точки зрения. И что делать? Шерстить глазами? Дык не годится – человеку, и его глазам в частности, свойственно ошибаться. А коли свойственно, то ошибка допущена будет.
    Делаем просто: переименуем старую функцию, ну скажем, GetDataByIndex в нечто вроде GetDataByIndex2 и перекомпилируемся. Компилятор, ясное дело ругается на все вызовы функции по старому имени. Аккуратно просматриваем всю “ругань”, не спеша и тщательно проверяя семантику параметров. Приводим код в полную работоспособность. Ну и под конец, не грех переименовать GetDataByIndex2 во что-нибудь более говорящее, вроде GetDataByArrayIndex чтобы в будущем не путать, что за индекс.
  2. Везде где можно применяются assertions: т.е. проверяется истинность почти всего подряд: висячесть указателей, выход индексов за пределы массива, pre- и post-условия выполнения. В отладочном коде при неверности условия, будет отрабатывать отладочный код, а хоть бы и жутко “матерный” MessageBox. В релизной сборке таких проверок нет, и тем более нет этого “матерного MessageBox`а”. Но даже если что-то было и упущено, то в релизной сборке программа просто рухнет, и проблема станет явной. Чего и добивались – чтобы найти решение проблемы, о ней хотя бы нужно знать. 

Собственно всё! Уже только этих два приема сходу выловили с пяток косяков точно. Остальные ждём-с в релизной сборке – нехай падает.
Имхо, в тестовых версиях баг это благо – он повод задуматься “а с какого-такого перепуга”. Качество и надежность кода – это задача финальных версий. Но без вопроса “с какого перепуга” эта самая пресловутая надежность кода никогда не будет достигнута. Нет вопроса – не будет и ответа.

PS: в комментариях к первому посту Елены упоминал книгу Роббинса по отладке – собственно вот она на Books.ru. К сожалению, в свое время, так и не удалось найти самую первую “отладку” Роббинса. Но, у него есть еще одна любопытная книга: “Отладка Windows приложений” – тоже вещь впечатляющая, а главное и актуальная по сей день. Имхо, must have обе. Но… блин, первую отладку похоже не скоро переиздадут, а жаль – солидное чтиво – мозги на нужный лад настраивает.

PPS: стоп! А как же самый главный пост-скриптум!?! Елене отдельное СПАСИБО за интереснейший цикл статей. Так держать!

пятница, 27 ноября 2009 г.

Немцы, сабмит и проклятие выбора

Задумал заказать сабмит у Руденко… А я тут намедни аккурат переписал аглицкое и испанское описания Aml Pages. То бишь аглицкое переписал сам, а испанское мне пользователь перевел. Уж не знаю, то ли так хорошо новое аглицкое, то ли действительно последние версии удались, да только после летнего провала продаж на Запад, вдруг что-то да заколыхалось.

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

Вот и что теперь делать!?! Если напрячь память, то – о удивительно – вспоминается, что когда-то я безуспешно изучал немецкий язык, и может рискнуть и перевести все самому? С другой стороны, с немецким я последний раз имел дело лет 100 назад. Веб-серфинг по немецким серверам не считается – там старание в зачет идет, и сказывается мое, ставшее уже легендарным умение, пудрить мозги моей слегка сумасшедшей вузовской “немке”, что я мол якобы знаю немецкий (а что вы хотели? Зачет-то блин нужен, сессия как известно не тимошка, хочешь пить медовуху учиться дальше, умей вертеться).

С одной стороны: немец без разговоров переведет лучше, да причем еще и в разы лучше. С другой стороны, конец года не за горами – тянуть с сабмитом явно не стоит. С третьей стороны, наша вузовская “немка” тетка была реально сумасшедшая, и если она что-то вбивала в голову, то уж это на века. Может рискнуть, и попробовать самому? Ввязаться так сказать в переводческий бой, а там уж видно будет!?! С четвертой стороны – это же немцы: они одни покупают столько же, сколько все остальные вместе взятые – то бишь на кону солидный куш.

И почему я не прапорщик? Чего думать? Прыгать надо! © Вот он чертов маркетинг! И тут проклятие выбора – а проектировании софта хоть известно что делать: нет ответа, отложи – чем позже, тем лучше. А здесь что делать? Вот куда теперь бедному крестьянину податься!?!

PS: может стоит заказать перевод описания где-то на стороне… Но не за 100 же американских рублев? Это ни в какие ворота: там текста всего одна страница, 2000 символов. Да и потом, упомянутого немца я знаю, именно он переводил пользовательский интерфейс – и качество более чем впечатляет. А что на стороне напереводят, еще бабка надвое сказала! Вот задачка-то блин возникла: поспешать или дни терять, зато потом, как говорится, “за час долететь”?

вторник, 17 ноября 2009 г.

Все сразу получить невозможно

AVL начал переводы “97 Things Every Software Architect Should Know”. Это подборка статей об архитектуре программного обеспечения. Статьи небольшие: одна статья – один аспект, поэтому читается легко, здесь вам не академические мануалы в стиле Фаулера.

Как и обещал AVL, все сразу получить невозможно. Но… Можно даже сказать но! AVL слово держит и новые переводы выдает более чем регулярно: буквально каждые 2-3 дня появляется новый перевод, причем 2-3 дня перерыва это максимум, частенько и по одному переводу за день!

Во-первых, переводы действительно весьма качественного уровня. Что уже само по себе ценно. Во-вторых, может быть “старички” и не так уж много найдут нового в этих статьях – но все же приятнее находить на могучем и богатом. Ну, и в третьих повторение мать учения – иногда не лишним будет и перелистать эти статьи. Отрезвляет, знаете ли…

PS: давно собирался написать про инициативу AVL`а. Но как-то руки все не доходили! А тут аккурат последний перевод “Все сразу сделать невозможно” привел в чуйство от излишнего запала в разработке некоторых новых фич в Aml Pages, ибо нехер нефиг (а то чую, определенный нездоровый троллизм начал меня доводить до ползучего фичеризма).

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

четверг, 12 ноября 2009 г.

Распространение софта студенческим телеграфом

Заходил к гости к родному дедуле: как дела, покалякать о том - о сём, да и вообще. Пока закипал коньячок чаек, меня тут же прислонили к делу - с фигов ли девелопер простаивает – приводили в чувство капризный Microsoft`овский офис.

Пока подогревался чаек, дедуля наворачивал какую-то красоту в своем любимом Excel. Я, собственно, рядом. Ну, и хочешь, не хочешь, и мой взор периодически падает на экран. И вдруг… Оп-па! Вижу до боли знакомый курсор с флагом активного языка. Присматриваюсь, и правда, курсор знакомый, и ведет себя точь в точь как и моя Aml Maple – то бишь в текстовом курсоре в любом месте показывается активный язык ввода (раскладка клавиатуры).

Спрашиваю деда: че мол за нах, че за красота?
Прослушал лекцию (дед-то у меня профессор), что это мол “оно само” и очень удобная штука, показывает мол язык ввода. Ну, думаю, приплыли – здрасти вам конкуренты. Шмыг сюда по винде, шмыг туда – упс, действительно работает моя Мапля, только версия постарее.

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

PS: пререкались с дедом на тему копирайта минут пять, а то и десять. Я деду мол, “хех, моя ведь софтина”. А он ни в какую: мол оно само, и ты тут не причем, и вообще “ври больше”. Убедить его удалось: только “секретными” ключами командной строки для быстрой визуализации Мапли, и гордо красующимся на экране диалогом “О программе”. Иначе б не в жисть не поверил бы.
Вот так собственный же софт и уходит в народ, наворачивает кружок другой  - используя студенческий телеграф - и возвращается к авторам же. Призадумаешься однако…

пятница, 6 ноября 2009 г.

Умное меню

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

  • наблюдаем на экране команды меню. Пока вроде все обычно, не правда ли!?!
  • Щелкаем по командам меню. Опять же, не что-то из ряда вон выходящее. Знаем, плавали!

И вдруг, вуаля! Команды меню реагирует на щелчки мыши, но меню автоматически не закрывается. См. скриншот ниже.

Умное меню: команды реагируют на щелчок, но меню НЕ закрывается автоматом!

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

Но! Стандартное меню в винде такого делать не позволяет. Не верите? Попробуйте такое закодить! Традиционно подобный выбор реализуется через отдельный диалог, но любой диалог изначально уже само по себе полное гавно! не лучшее решение. Здесь же реализовано просто зергутно: и диалога никакого нет, и наглядность соблюдена, и меню всегда под рукой, и наконец решена главная проблема меню – сделан этот самый множественный выбор без закрытия.

Как увидел, аж позеленел от зависти и губы сами начали произносить “сцуки… но умные!” (есть мнение что иногда в этом блоге бывал и автор этой софтины, и уж скриншот-то свой , он узнает… Иван, в данном случае это комплимент – решение на пятерку с плюсом).

В прошлом посте аккурат писал про отложенные фичи в Aml Pages. Дык вот одна из отложенных фич – категории, аккурат и уперлась в возможность множественного выбора. В прошлых версиях выбор как раз был одиночным, и под него было написано ух какое умное меню: все из себя owner-draw, с иконками, с цветами, шрифтами и все такое. И меню это решало свои задачи выбора на раз, пользователи были вполне довольны. Возможность же выбрать несколько элементов одновременно в проблему пользовательского интерфейса и уперлась. В бизнес-логике никаких проблем с этим нет, все продумано, все написано. Но вот UI… Весь прошлый одиночный выбор был завязан именно на меню, а меню мульти-выбора не дает. Так что оставалось перепроектировать пользовательский интерфейс, причем достаточно объемную его часть. А это задачка не простая и не быстрая – поведение-то поменяется напрочь, надо полностью переанализировать требования пользователя. На этом-то все и застряло.

А тут на тебе такое-растакое меню :) И если удастся его сделать – то не придется переписывать мерено-немеренно пользовательского интерфейса, а просто доточить уже имеющееся до ума, тем более, что этим меню пользователям как раз довольны. Тут только два варианта: или все же сделать аналог, или разочароваться в себе и запить с тоски, причем надолго.

Но у этого меню есть нюансы: так хитро реагирует на щелчки только само подменю “столбцы”. Все остальное меню ведет себе стандартно – клик и закрылось. Выглядит “умное” подменю, точно также, как и все остальные. А это очень не просто эмулировать внешний вид полностью, всегда есть 33 нюанса, какой-нибудь да будет упущен. Так что для полного сходства остается только одно – не подменять бутафорским муляжом, а делать именно меню. Вот тогда и будет выглядеть все идентично безо всяких лишних усилий.

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

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

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

среда, 4 ноября 2009 г.

Одна фича – один релиз!

Уф, дело к ночи – готовь калачи! Сбылась мечта девелопера – русский релиз новой версии Aml Pages упал на сайт! А то, чуялось мне всё, мерещилось, что уже попер “ползучий фичеризм”. А боюсь я его пуще огня и багов кромешных. Нет тюрьмы, хуже чем в своей голове. А П.Ф. это не проста тюрьма, это прям Алькатрасс эдакий :)

Очень давно наблюдаю один и тот же эффект. Чем больше впихивается фич в одну версию, тем тяжелее релиз. Мозги начинают разбрасываться вразнобой, и вместо того чтобы сосредоточить все силы на вылизывании кода, начинаешь кидаться из стороны в сторону. А в результате – один большой комбайн, который делает многое. И всё это “многое” одинаково херово нехорошо.

  • Фича одна и только одна: сосредотачиваемся на единственной фиче и уж делаем ее – так делаем. Пусть не всем нужна именно эта фича, но кому нужна – получают ее в доведенном до ума виде.
  • Use-case подход: сосредоточение на единственной фиче позволяет максимально использовать use-case аналитику. Больше внимания тратим не на херь техническую нюансы решения, а на use-case анализ. Продумываем и делаем до конца пусть один, но вполне четкий сценарий использования софтины. И клиент получает не набор бессвязных приблуд, а некоторый, вполне конкретный способ решения своих вполне конкретных задач (следует читать: “некоторый, вполне конкретный стимул поделиться денюжками”).
    К слову говоря, вот именно сейчас отложил пару наиклевейших идей, только потому, что никак толком не вырисовывалась ясность в вопросе: как и зачем это будет использоваться юзерами. А главное: пока мужественно забил на эти клевые придумки – а это было непросто, потому как клёвые - и в голове идеи доточились, и варианты решений появись. А рванул бы как на сто метров – точно делов бы наворотил.
  • Быстрый релиз равно быстрый feedback: при быстром релизе пользователи раньше получают финальную версию. Все просто: несомненно бету качают значительно меньше, чем финальную версию. Поток возрастет – возрастет и feedback. А все таки сотни и тысячи пользователей наверняка смогут предложить любопытных мыслей больше, чем десятки хоть и маститых бета-тестеров.
  • Быстрый релиз равно быстрый баг-фикс: фичи фичами, но от багфикса в новой версии никуда не деться. А значит, старинные пользователи получат и более быстрый баг-фикс. Чем плохо?
  • Огонь и движение: ударим новой версией по бездорожью и конкурентам. Пусть версия и не революционная, но все равно – “а шоб не дремали”. Пока новая версия “прикрывает нас огнем”, можно спокойно “окопаться” и поразмышлять над будущим движением вперед.
  • Как так? Нарушаем-с? если не отметить, то все написанное будет полуправдой (что есть “наглая ложь”). Сколько раз нарушал это правило быстрого релиза, вот ровно столько раз в жопе ней самой и сидел. Ни разочка меня расплата не миновала. Неспроста же!?!

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

P.S. просто не могу молчать: убить мало этот пилять Сбербанк! С кризисом они мать-иво борются! Платеж от 29 июля… Знаете когда деньги пришли? Седьмого сентября! Нормально, да!?!
Ладно, продолжаем разговор – “Адские клоуны. Часть вторая”. Платеж от 5 октября, сегодня 4-ое ноября. Как вы думаете, пришли денюжки!?! Может убрать их из способов платежей нах!?!