Friday, January 26, 2007

ProgressBar и индикаторы выполнения процесса

Любое приложение, содержащее длинные операции (в которых время выполнения может превышать 1 минуту), должно иметь ProgressBar. Причем не просто "бегунок" который показывает что процесс идет, но по которому не понятно сколько выполнилось и сколько еще осталось и вообще работает приложение или "подвисло", а хороший ProgressBar с индикатором % выполнения операции и, желательно, показом сколько времени осталось до окончания выполнения. Такие длинные операции содержатся в большинстве систем работающих с данными и в вычислительных задачах. И, я думаю, большинство разработчиков постоянно сталкивается с ProgressBar-ами.

Что должен содержать ProgressBar и индикаторы процесса выполнения (в логическом порядке, а не в порядке важности):

  • 1. Количественный показатель (в штуках, в байтах и т.д.) общего объема данных, которые требуется обработать.
  • 2. Количественный показатель обработанных данных.
  • 3. Количественный показатель данных, которые осталось обработать.
  • 4. Время, потраченное на обработку данных (из п.2).
  • 5. Ориентировочное время обработки оставшихся данных.
  • 6. Визуальное отображение % обработанных данных (собственно сам ProgressBar).
  • 7. Скорость обработки данных.

В большинстве случаев, для операций, не превышающих нескольких минут, хватает одного ProgressBar-а - по нему пользователь может сам оценить, сколько времени осталось до окончания выполнения операции, плюс по нему наглядно видно, что процесс движется. Для очень длинных операций одного ProgressBar-а не достаточно т.к. процесс движется медленно и картинка процесса на долго "застывает" в одном состоянии, так что кажется что процесс "завис". Количество обработанных данных и данных, оставшихся для обработки, тут позволят показать, что процесс все-таки идет, а временные показатели покажут, насколько долго еще процесс будет длиться. Причем индикатор ориентировочного времени обработки оставшихся данных просто необходим (показательный жизненный пример: в метро пассажиру интересно, когда подойдет следующий поезд, а не когда ушел предыдущий).

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

  • 1. Заранее не известно, сколько данных должно быть обработано. Эта проблема очень часто возникает при запросах к базе данных, когда заранее не известно, сколько данных должно быть возвращено базой. Так же не редка ситуация, когда в вычислительных задачах перебор элементов делается по большому набору критериев, в результате чего заранее точно не известно, сколько данных надо перебрать. В обоих случаях оценить общее количество данных все-таки можно выполнив предварительные вычисления или предварительный запрос к базе. Это, конечно, займет лишнее время, но в большинстве случаев это окупается, т.к. информированный пользователь - удовлетворенный пользователь, а неинформированный будет злиться на "глупую программу" которая повисла и не понятно чего там делает. Минус такого решения - оно не подходит для задач, критичных к общему времени выполнения. Второй минус - появляется дополнительный процесс предварительного подсчета, которому так же может потребоваться свой ProgressBar.
  • 2. В процессе выполнения операции невозможно (или можно, но с серьезной дополнительной нагрузкой на систему) узнать процент выполнения операции. Тут все зависит от архитектуры системы и вопрос возвращения данных для показа прогресса надо закладывать еще в момент проектирования. Встраивание этого функционала в уже готовую систему может быть очень сложным и может потребовать "перекраивания" взаимодействия классов и модулей системы. Более-менее стандартные решения: при запросах к базе данных отдавать информацию постранично; в задачах, работающих в основном потоке поднимать события обрабатывающим классом; в задачах, работающих в отдельном потоке периодически опрашивать поток или посылать сообщения из потока.
  • 3. Процесс состоит из набора подпроцессов. Здесь есть, где разгуляться фантазии.
    1. Можно сделать единый ProgressBar и показывать пользователю только сколько времени осталось до конца обработки всех процессов.
    2. Можно к единому ProgressBar-у добавить индикатор наименования выполняющегося процесса.
    3. Можно сделать отдельный ProgressBar для каждого процесса. Это хорошо когда процессов всего 2, иначе в окне будет слишком много информации, что будет путать пользователя.
    4. Можно показывать один ProgressBar, но перезапускать его для каждого процесса. Дополнительно к нему будет полезен лог с законченными и незаконченными процессами.
    5. Можно объединить первый и предыдущий варианты и показывать один общий ProgressBar, и второй перезапускаемый для каждого процесса.
  • 4. Выполняется параллельно несколько процессов. Раньше эта проблема появлялась не часто и, в основном, при закачке данных. Для вычислительных задач распараллеливание процесса вычисления при одноядерном процессоре большого смысла не имела, т.к. одна задача занимала весь ресурс процессора (ну или столько, сколько ей отводилось системой) и запуск второй, параллельной, задачи пропорционально тормозил выполнение первой. Сейчас при появлении CoreDuo и Core2Duo (а в дальнейшем ядер, похоже, будет все больше и больше) можно и нужно пускать параллельные процессы в разных потоках, соответственно вопрос отображения в одном ProgressBar-е нескольких операций выполняющихся в разных потоках становится очень актуальным. Если единицы измерения количественных данных всех параллельных операций одинаковые и операции имеют единую логическую базу – можно показывать единый ProgressBar с суммарными данными. Что делать с операциями, логически не совместимыми, покажет будущий опыт, а пока у меня красивого решения для такой ситуации нет.

Развлекаемся...

Развлекательные посты - замечательный способ продвижения даже для серьезных сообществ.

Richard Quick, freelance web designer, в своем блоге про дизайн написал забавный пост "How to fake a Web 2.0 logo", который читается именно как развлечение. Пост попал на головную страницу Digg.com, в результате рост посетителей за день с 555 до 47501 захода. Трафик, конечно, обеспечил Digg.com, а вот попадание поста на Digg.com обеспечили, скорее всего, название (тут сразу и Web2.0, и How to, и fake) и хороший развлекательный тон.

Сейчас на головной странице Digg.com 2 первых поста: "Porn-Infected PC Crazy Woman Faces 40 Years - True Story" (с pcworld.com между прочим) и "10 Amazing Things You Didn't Know about Animals".

Еще за одним примером далеко ходить не надо. На ITBlogs по посещениям с большим отрывом лидирует пост "Слухи...", несущий в своем названии явно развлекательную направленность. На втором месте пост "Чего громим? Кого мочим? (Читаем версии в обсуждении)" тоже с не особо серьезным названием.

Т.е. пост на серьезную тему прочтут не все, а те, кому тема интересна и в данный момент есть время на осмысление. Пост с развлекательным заголовком прочтут все (или, как минимум, откроют).

PS: Кстати в тему пост "Buzz titles" о том как составить привлекательное название для статьи или книги по IT, ну и для постов тоже.



Monday, January 22, 2007

Блого-зависимость

10 дней практически без интернета явно продемонстрировали отрицательные стороны постоянной "включенности".

  1. Желание что-нибудь почитать (блоги или новости) близко к наркотической зависимости. Рука тянется к иконке броузера, хотя мозг знает, что интернета нет.
  2. В связи с тем, что броузер ничего не показывает, резко возросла производительность труда. Через дней 5 трудотерапия начала оказывать благотворное влияние и рука почти перестала тянуться к иконке броузера.
  3. Появилось много идей по поводу решения тактических вопросов. Похоже, излишнее увлечение блогосферой стимулирует мысли стратегического направления (наверное из-за того, что обсуждается много тем не затрагивающих текущих задач, но рождающих новые идеи "на будущее"), и за этими думами "о высоком" решение текущих проблем становится "текучкой", что отражается на качестве принимаемых решений.
  4. Одинаковые мысли приходят в голову разным людям практически одновременно. Может количество идей (а не ума) величина постоянная при постоянно растущем количестве людей? Окончательно убедилась в том, что если появилась мысль, о которой хочется написать – писать надо сразу же, иначе об этом напишет кто-то другой. При ежедневном прочтении лент это не так заметно, т.к. можно поучаствовать в обсуждении. Но если прошло уже несколько дней, то обсуждение уже закончилось, а поднимать заново тему смысла не имеет т.к. все желающие уже высказались.
  5. Новые блоги, которые хочется почитать, появляются слишком часто. Старые при этом так же читаются. В результате за 10 дней более 200 непрочитанных постов! А ведь если бы интернет был, я бы их прочла. Причем действительно полезной информации в этом потоке очень мало.

Когда то "телевизор нам природу заменил", теперь, похоже, "интернет нам телевизор заменил".

Чуть больше года назад у нашего телевизора сломался пульт. Сразу же были выявлены симптомы нашей зависимости от телевизора – рука хватала пульт автоматически и начинала переключать каналы. Телевизор при этом не включался. Мозг останавливал руку только на 2-3-м нажатии. При этом до поломки пульта мы были уверены, что телевизор практически не смотрим. Оказалось это не так. После этого новый телевизор решили не покупать т.к. нервное щелканье пультом в поисках интересных программ – пустая трата времени. В результате мы уже год не смотрим телевизор.

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

Sunday, January 07, 2007

Чем бы заняться стартапу

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

На текущий момент основная идея успешного стартапа гласит: Делайте нужное, новое, уникальное и будет вам счастье (если повезет).

Пройдемся по пунктам.

1. Нужное

С первым постулатом про нужное все более-менее ясно. Хорошо бы только определиться кому нужное, но это уже детали, а сам по себе постулат вопросов не вызывает.

2. Новое

Второй постулат про новое сильно связан с третьим про уникальное, и тут начинаются вопросы.

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

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

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

2.1. Повторение - не уникальное и не новое

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

2.2. Новое, но не уникальное

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

3. Уникальное

А теперь самый экстремальный вариант – новый уникальный продукт. Создатели должны очень сильно верить в то, что то, что они делают хоть кому-то нужно. Но даже если это действительно очень нужный продукт, надо о нем сначала как-то известить потенциальных пользователей. Тут ситуации очень сильно отличаются в зависимости от рынка.

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

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

Sunday, December 31, 2006

Бэта должна выглядеть как бэта, а не как готовый продукт

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

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

Клиенты воспринимают степень готовность ПО по степени готовности интерфейса.

Картинка из поста "Don't make the Demo look Done"

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

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

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

Конечно, можно сказать: "А на что history list? Все изменения можно посмотреть там". Но нравится / не нравится - это эмоция, которая возникает не зависимо от того, что написано в history list. Да и сам history list даже профессионалы при использовании сторонних продуктов не всегда читают. Обычные пользователи практически никогда ничего не читают - все должно быть понятно из интерфейса.

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

Готовность интерфейса должна соответствовать функциональной готовности продукта.

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

Новых вам интересных и успешных проектов в наступающем 2007 году!

Friday, December 22, 2006

Автоматизатор, автоматизируй себя сам

Среди более чем 400 примеров внедрения продуктов Microsoft исчезающе мало внедрений в сфере IT и среди них, в основном, телекоммуникационные компании.

Konstantin Starovoytov дал ссылку на Конкурс внедренческих проектов на iOne.ru. 39 компаний, в основном производственные, но нет ни одной IT компании-разработчика.

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

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

Мне очень нравится проект виртуального офиса компании СладКо (описание на microsoft.com, описание на iOne). Первый раз я о нем прочитала примерно года 2 назад. Первой мыслью было – звучит очень заманчиво и слишком красиво чтобы быть правдой. А второй мыслью было – почему это сделала кондитерская компания, а не IT? Т.е. возможно есть крупные IT компании, существующие без офиса, но я о них, к сожалению, не слышала.

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

Отсутствие офиса снимает не только финансовую нагрузку на его аренду, но и сложность поиска нужных специалистов в одном месте. Например, Sergey Rozovik написал что в Дубну начали стекаться IT компании в связи с чем там резко подскочили зарплаты, но проблема не в этом, а в том что квалифицированных специалистов там не много, а спрос растет и, как мне кажется, основной проблемой там скоро станут кадры. Компании, не привязанной к офису, искать специалиста можно не в каком-то конкретном месте, а по всему русскоговорящему сообществу (а если нет ограничений по языку – то вообще во всем мире).

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

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

Wednesday, December 20, 2006

Меняет ли Web2.0 модель формирования нашего мнения?

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

Но как влияет Web2.0 на тех, кто все-таки постоянно "подключен" (на нас)?

Меняет ли быстрый доступ к информации и большому количеству мнений модель формирования и изменения нашего собственного мнения?

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

  • на основании своего опыта, а он (так уж обычно бывает), бывает глубоким в очень небольшом количестве областей
  • на основании чужого мнения, которому доверяешь.

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

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

Web2.0 изменил способы генерации и доставки информации. Но потребитель остался таким же, каким и был.

Friday, December 15, 2006

Неудачные опыты с мобильным офисом

Переезд в теплые края закончен.

В связи с переездом появилось новые мироощущения и отпали начавшие прорезаться надежды:

Надежда (это та, которая умирает последней). Засунуть все рабочие данные в интернет, не держать ничего на локальном компе и ноуте, не таскать за собой массу информации и дистрибутивов при переездах, не мучиться с синхронизацией данных между компом и ноутом, и, в конце концов, перестать бегать с ноутом по интернет-кафе. На текущий момент одни только сервисы гугла уже практически покрывают основные потребности: почта – Gmail; офисные документы - Google Docs & Spreadsheets; RSS Reader - Google Reader; изображения – PicasaWeb. Есть еще масса сервисов от закладок до построения диаграмм и бэкапов. Все это очень красиво звучит, и некоторые уже так живут. И даже можно отбросить паранойю по поводу утекания приватных данных. Но есть проблемы, которые в очередной раз были испытаны на собственном опыте:

Во первых, интернет есть не везде, даже если он "условно" есть в каком-то интернет-кафе он может быть такого ужасного качества, что даже gmail грузиться отказывается.

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

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

Ну и в четвертых, работать по 6 часов в интернет-кафе абсолютно не комфортно плюс никаких денег не напасешься.

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

Новое мироощущение же можно выразить так – прогресс sucks, оставьте все как было. Т.е. раньше у меня было устойчивое мнение, что если появляется что-то новое то оно приживается только если удобно потребителям. Покупка нового ноута и его дальнейшее использование опровергло это мнение напрочь. Ноут покупался с Core 2 Duo и в процессе выбора выяснилось что все свежие модели идут с зеркальной матрицей, исключение составляют (похоже временно) только дорогие Lenovo и HP. За ноутом с зеркальной матрицей работать невозможно – бликует и очень слепит. После часа работы глаза начинают болеть. Антибликовая пленка помогает несильно, плюс ее наклеить – это отдельная история. Но производители переходят на зеркальные мониторы т.к. они хорошо продаются. Они очень красивые, яркие, блестящие с сочными цветами и очень красиво выглядят на витринах. Производителю главное – продать, а то, что за таким ноутом работать невозможно его уже не интересует, это проблемы потребителя. Или, возможно еще не достаточно времени прошло и производители одумаются?

Wednesday, December 06, 2006

И снова о SOA

Так что же такое SOA. Сервисно-ориентированная архитектура. Вроде бы очень говорящее словосочетание. Но большинство копий в обсуждениях на ITBlogs поломались, по моему, о слово архитектура (не то, чтобы слово архитектура встречалось часто, но смысл баталий именно вокруг этого).

Что имеется ввиду? Я вижу 2 варианта и они очень разные.

  • Архитектура как подход к проектированию системы
  • Архитектура как подход технической реализации.

С точки зрения SOA как технической реализации, система проектируется как раньше, и реализуется как набор отдельных компонентов (они же сервисы). В данном случае, как мне кажется, SOA – это buzzword. Раньше это называлось модулями и интеграцией отдельных систем. Т.е. и раньше можно было взять системы разных производителей (если это было оправдано) и интегрировать их у себя. Система при этом не становится наборной, она остается единой, но собранной из отдельных модулей. Сейчас такие системы называют SOA. Почему? Просто потому что модный термин?

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

Подобный подход в проектировании системы удобен

  • Для сервисов, рассчитанных на конечного пользователя, когда каждый следующий сервис решает еще одну проблему пользователя и интегрирован с предыдущими сервисами. В основном это web сервисы, но могут быть и desktop приложения, дополняющие друг друга.
  • Для небольших мобильных компаний, сфера деятельности которых позволяет быстро подстраиваться под изменяющуюся ситуацию. Таким компаниям не нужны крупные ERP, им нужны сервисы, которые можно быстро ввести в строй и начать использовать и так же быстро от них отказаться. Эти компании, в первую очередь, сам же IT сектор, а далее практически весь непроизводственный бизнес (услуги, торговля). Но, в любом случае остается ограничение по размеру компании (по количеству людей). Каким бы простым сервис ни был нужно время на обучение сотрудников, а с внедрением, растянутым на длительное время, теряются вышеописанные плюсы.

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


Sunday, December 03, 2006

Agile Testing

Очень интересные доклады по Agile методологиям на Google Video. Их довольно много. Вот некоторые (ссылки на остальные видны справа при просмотре):

  • Agile Testing (Elisabeth Hendrickson)
  • Scrum et al. (Ken Schwaber)
  • Kent Beck: Ease At Work (В 7-и частях, к сожалению 1-ю не нашла, эта вторая. При просмотре рядом ссылки на остальные части)

Я пока осилила только Agile Testing. Очень зажигательная докладчица. Elisabeth Hendrickson является консультантом по software testing, основателем Quality Tree Software. На сайте Quality Tree Software есть документы с советами по тестированию продуктов и по набору тестировщиков. Ну и, конечно же, Элизабет ведет блог - Ruminations.

Разработка, идущая от тестирования, для меня, наверно, самая близкая из agile техник.

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

А разработка конечнопользовательских продуктов может идти от тестирования с самого начала. Здесь приложение решает проблему (или набор проблем) пользователя и нет четких рамок как это должно происходить – главное, что бы проблема решалась наиболее удобным для пользователя способом. Т.ч. проект сразу начинает жить подстраиваясь и видоизменяясь.

На текущий момент отдельные части кода, объекты и функциональные модули тестируются с помощью UnitTest-ов (которые встроены сейчас практически во все среды разработки). Практика эта довольно распространенная, хотя к порядку использования UnitTest-ов есть вопросы – кто и в какой последовательности должен писать тесты к коду? Должны ли сначала писаться по спецификациям тесты, а потом код? Должен ли сам программист писать тесты к своему коду? У меня пока нет универсального ответа, пробовались разные варианты и у всех есть свои недостатки.

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

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


technorati tags:

Thursday, November 30, 2006

Хаос наступает

IT стремится к хаосу. SOA – хаос в архитектуре систем. Agile (XP и, особенно, Scrum) – хаос в производстве систем.

Причем хаос - это не мое видение. SOA и Agile позиционируются как методологии жизни в хаосе.

Новые методологии отрицают планирование, никаких планов развития. Они все сиюминутны.

Все это выгодно разработчикам и продавцам систем. Если у бизнеса нет планов развития и четкого понимания как и в чем его IT система даст преимущества перед конкурентами не только сейчас, то и в дальнейшем, то с вероятностью, приближающейся к 100% завтра бизнесу потребуется совсем не то, что сделали сегодня. И завтра разработчики легко смогут продать что-то новое.

Чем методология разработки более гибкая тем больше ее сейчас любят. Каждая следующая методология оставляет все меньше места планированию и контролю. Roy Osherove, agile консультант, пишет что Scrum продается лучше чем XP в основном потому, что Scrum более настраиваемый, требует меньше управления и не содержит страшного слова "Extreme". Т.е. разработчик наслушавшись как все может быть хорошо с agile, где ему не надо ни за что отвечать ведется и хочет применить это на себя. Причем выбирает методологию – чем проще звучит тем лучше.

Все аgile методологии построены на очень активном участии заказчика, вплоть до того, что заказчик фактически напрямую ставит задачу команде разработчиков (архитекторы, аналитики, технологи – все лишние). Это, опять же, очень выгодно разработчику. Зачем долго выяснять что надо заказчику, потом это согласовывать с десятками отделов, если можно привлечь заказчика к разработке и получать изменения и дополнения от каждого отдела отдельно. Никакой головной боли с противоречием требований. В результате можно сказать – вы именно это и хотели. Если же заказчик начинает понимать к чему может привести этот хаос ему приходится самому внутри себя создавать команду, которая утрясает все требования и разногласия между отделами и уже выдает разработчикам спланированные данные, т.е. разработчик сбрасывает с себя задачу планирования (а с ней и ответственность) на заказчика.

Без отсутствия изначальных требований к разрабатываемой системе (а аgile отрицает любые планы далее чем на одну итерацию) нельзя оценить результат разработки. Никто не сможет сказать сделали ли то, что было нужно или не то. В любом случае разработчик не виноват – он только выполнял пожелания заказчика.

Disclamer: Не бейте меня сильно! Описание ситуации немного утрировано, но, иногда, карикатурная утрированность помогает взглянуть на ситуацию по новому.


technorati tags: , , ,

Wednesday, November 29, 2006

Microsoft тоже хочет мой номер телефона

Пару недель назад Google придумал как выманивать номера телефонов у пользователей.

Microsoft решил не отставать.

Кликните по картинке для увеличения

Но у Google была уловка, и для использования сервисов Google указание телефона не обязательно. Microsoft же теперь без указания номера телефона в Live ID не пускает к данным на их сервере. Хотела посмотреть презанташку на www.microsoft.com/rus, но с таким подходам мне эта презенташка не нужна.

Как то мне совсем не нравится такая тенденция.


technorati tags:

Sunday, November 26, 2006

Жизнеобеспечение проекта. Часть 3.

Про обещанного аналитика, и еще про технолога.

Предыдущие части: Часть 1 (введение), Часть 2 (про службу поддержки).

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

Кликните по картинке для увеличения

Аналитик анализирует новый требующийся функционал (check function overview) и возможные технические проблемы проекта (check possible bug), выявленные пользователями и службой поддержки. Т.е. неформализованную информацию из Help Desk. На основе этого он составляет технические задания (technical project) для разработчиков. ТЗ, как и вся информация по проекту, складывается в Wiki. Задания разработчикам записываются в Bug Tracking со ссылками на источник задания в Help Desk и на ТЗ в Wiki.

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

  • Если в проекте есть закрепление модулей за разработчиками, то роль аналитика заканчивается на принятии решения, в какой модуль проекта будет встраиваться новый функционал. Это возможно, когда за каждый модуль отвечает
    • один разработчик,
    • команда, возглавляемая ведущим разработчиком (который принимает решения по реализации функционала внутри модуля),
    • команда, сама принимающая решения (например Agile team).
  • Если же в проекте нет явного закрепления модулей за разработчиками, то аналитик пишет детальное ТЗ для конкретных разработчиков, с детализацией вплоть до интерфейсов классов.
  • Если для реализации нового функционала принимается решение использовать новые технологии или появляется область задач, ранее в проекте не реализовывавшаяся, то на аналитике лежат задачи по сбору информации по нововведению и по обеспечению разработчиков справочными материалами и рекомендациями к реализации.

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

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

    Кликните по картинке для увеличения

    Технолог – главный специалист в своей предметной области (subject area). Он работает на неформализованном уровне проекта. Всю информацию, которая требуется для решения конкретной задачи технолог кладет в Wiki и ставит на нее ссылку из Ticket-а Help Desk.

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

    В следующей части - Project Manager.

    В начало


    technorati tags: ,

    Wednesday, November 22, 2006

    Крамольный прогноз развития корпоративных IT систем

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

    Историческое обоснование:

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

    На смену им пришли универсальные ERP, которые было гораздо быстрее внедрять и они проще адаптировались и масштабировались. Но со временем системы начали дорожать, а главное, сильно подорожала стоимость внедрения (консультантов). При этом жизнь сейчас меняется быстрее чем 10-15 лет назад и к моменту внедрения ERP системы она уже устаревает.

    Теперь пришли SOA и SaaS. SaaS не рассматриваю т.к. он хотя и сервисный, но, скорее, метод распространения. А вот SOA является явной альтернативой крупным и дорогим ERP. Она выигрывает и по скорости и по стоимости внедрения. Но скоро всплывут все проблемы использования разномастных приложений. Плюс опять же начнет дорожать стоимость внедрения – модные специалисты всегда дорожают.

    И тут (прогноз) в качестве альтернативы опять появятся самописные системы, только на более высоком уровне чем первое поколение. Как эволюционировали языки и среды разработки от "кирпичного" до "панельного строительства", так и корпоративные системы будут собираться из готовых крупных программных блоков.


    technorati tags:

    Крамольная мысль

    У меня появилась крамольная мысль почему идея SOA так популярна в корпоративном сегменте и так активно пиарится.

    Исхожу из 2-х посылок:

    1. SOA (сервисно-ориентированная архитектура) - это набор небольших сервисов, которые, как предполагается, должны быть замечательно друг с другом интегрированы.
      Какие плюсы корпоративной SOA рекламируются:
      1. Сервисы небольшие они "лучше продуманы и реализованы оптимальнее чем соответствующие модули крупных ERP систем".
      2. Если нужен новый сервис его просто встроить в "конструктор" SOA, чем в крупную ERP.
      3. Если у вас уже есть много разных систем, то с помощью SOA они начнут работать слажено.
    2. Корпоративные информационные системы продаются вендорами, которым надо сначала убедить что их система самая-самая, потом внедрить систему (своими силами или с помощью сторонней компании) и потом бороться с просачиванием негативной информации о системе и результатах ее внедрения (а у любой крупной системы будут негативные отзывы какая бы она ни была реально).

    Итак крамольная мысль: Вся шумиха вокруг SOA в корпоративных системах очень выгодна вендорам.

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

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

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

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

    P.S.: К идее SOA я отношусь хорошо, но, imho, она, в основном, полезна не для корпоративных систем, а для конечнопользовательских наборов сервисов и продуктовых линеек.


    technorati tags: ,

    Стандарт по проектированию UI для Vista

    Стандарт здесь.

    Мне нравится подход Microsoft к проектированию приложений (правда далеко не все приложения MS соответствуют их же рекомендациям). Начинается все не с самого проектирования UI, а с моделирования поведения пользователя. Даны общие рекомендации, рекомендации как сделать UI более простым в использовании, описаны стандартные ошибки.

    Вообще меня Vista порадовала новым интерфейсом. Он стал не проще, но наглядней. Одно визуальное сворачивание приложения в taskbar чего стоит! Например, многим знакомая ситуация, когда приложение, запускаемое при старте, пользователь нечаянно сворачивает и потом не может его найти. После чего изнервничавшийся пользователь звонит в службу поддержки и выматывает нервы ей. С Vista подобных проблем должно стать меньше. Однако разработчикам (особенно на Delphi) еще придется попотеть чтобы все эти приятные нововведения заработали в их приложениях.

    Т.к. стандарт для Vista то есть раздел с общими рекомендациями того, как по мнению разработчиков Vista должно быть спроектировано приложение, и, конечно же, есть отдельный раздел о Aero Aesthetics - как должно выглядеть приложение, соответствующее Aero Aesthetics.

    Так же не забыты рекомендации по применению контролов. Например, советуют чтобы объектов в RadioGroup было от 2 до 7 (раньше, кажется, было до 5). И напоминают, что если в выпадающем списке есть пустое значение, то запись не надо оставлять пустой, а надо ее пометить специальным значением (например (none)).

    А еще (спасибо Алексею Копылову) рекомендации по тому как должна вести себя иконка в трее.

    И еще много всего разного.


    technorati tags: , , ,

    Tuesday, November 21, 2006

    Новые технологии и Модные термины

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

    Появляется что-то новое, и сразу же все начинают стараться применить это на себя или "впарить" потребителю.

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

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

    Т.ч. идти надо не от технологии, а от нужд бизнеса.

    А вообще по поводу места IT технологий в бизнесе хорошо написано у Джима Коллинза в книге "От хорошего к великому" (глава 7 «Технологии как акселераторы»).


    technorati tags: ,

    Sunday, November 19, 2006

    Жизнеобеспечение проекта. Часть 2.

    Начало здесь.

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

    Кликните по картинке для увеличения

    Одна из основных функций Help Desk – поддержка пользователей (user support). Если у пользователя возникает проблема, он обращается в службу поддержки (request for support). Служба поддержки отвечает на запрос пользователя (reply for request). Довольно часто пользователи обращаются с однотипными проблемами. Для оптимизации ответов службы поддержки на однотипные проблемы удобно использовать шаблоны ответов (templates for support), хранящиеся в Wiki.

    Основное предназначение Wiki – база знаний (knowledge base) проекта. На данном этапе интересны 2 "части" базы знаний – Help и технические особенности реализации (technical specifications). Разделение на части условно т.к. все должно храниться вместе, но разграничиваться на уровне прав доступа к статьям и частям статей.

    При ответе пользователю в нестандартных ситуациях служба поддержки использует help и, если служба поддержки "технически подкована", информацию об особенностях реализации. Если в службу поддержки идут обращения с одной и той же проблемой, решение которой не описано в хэлпе, то служба поддержки добавляет в хэлп (update help) описание решения проблемы, если возможно с примерами.

    Разумно организованный, постоянно обновляющийся и дополняющийся online help поможет снизить количество обращений пользователей в службу поддержки. Организация Wiki очень удобна для хэлпа т.к. перекрестные ссылки позволяют избежать дублирования информации в разных разделах. Однако классическую организацию wiki удобно дополнить иерархической структурой меток (tags), соответствующей разделам хэлпа, и каждую статью помечать соответствующими метками. Это поможет пользователю быстрее находить нужную информацию в хэлпе.

    Если пользователь хочет новый функционал, информацию об этом служба поддержки передает (inform about request for new function) управляющему проекта (его роль будет рассмотрена позднее).

    Если служба поддержки выявляет проблемы в функционировании проектом, то она информирует о ней (inform about bug) аналитика. При этом, если проблема была выявлена при разборе запроса пользователя, должна быть связь между ticket-ом запроса пользователя и ticket-ом бага. Почему служба поддержки для информирования о проблеме использует Help Desk, а не добавляет новую задачу сразу в Bug Tracking? Делается это для четкого разделения работы с неформализованной и формализованной частями проекта. Help Desk содержит неформализованные задачи по проекту, Bug Tracking – формализованные. Связью между ними является аналитик. О роли аналитика в следующей части.


    technorati tags: ,

    Thursday, November 16, 2006

    Это уже было в Симпсонах

    Офтоп.

    Жизнь:
    Недавно в Нью-Йорке у статуи Вашингтона украли голову.

    "The Simpsons":
    Барт украл голову у статуи основтеля города (The Telltale Head (1990) - Season 1, Episode 8)

    Ну что тут еще можно сказать? Это уже было в Симпсонах! ("South Park" The Simpsons Already Did It (2002) - Season 6, Episode 7)


    technorati tags: , ,

    Tuesday, November 14, 2006

    Жизнеобеспечение проекта. Часть 1.

    Жизнь проекта поддерживает много людей. И состояние (качество жизни) проекта напрямую зависит от того, насколько хорошо организована коммуникация между этими людьми.

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

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

    • Help Desk
    • Bug Traking
    • Source Repository
    • Wiki
    • CRM

    Реализаций этих приложений огромное множество. Но появляется сложная проблема выбора:

    • Каждое приложение должно быть наиболее удобно в своем классе.
    • Должна быть обеспечена интеграция приложений друг с другом.

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

    Без диаграмм вариантов использования тут не обойтись :-) (для проектирования использовался бесплатный oss продукт StarUML)

    Первое приближение. Определяем набор ролей в команде и взаимодействие между приложениями.

    Кликните по картинке для увеличения

    Итак.

    Интеграция приложений:

    Help Desk использует CRM для получения данных об обращающемся пользователе и продукте, который использует пользователь. (CRM ID - идентификатор записи в CRM)

    Так же Help Desk использует Bug Tracking для отслеживания реализаций задач. (BT ID - идентификатор задачи в Bug Tracking)

    Bug Tracking, в свою очередь, использует Help Desk для отслеживания источника задач. (HD ID - идентификатор Ticket-а в Help Desk. Извиняюсь, не могу подобрать хороший русский аналог к Ticket)

    Еще Bug Tracking использует Source Repository для определения, в какой версии файла исходника хранится изменение, внесенное для решения конкретной задачи. (SR ID - ссылка на версию файла исходника в Source Repository)

    Роли:

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


    technorati tags: ,