Проектирование
                     как процесс решения проблем
Владислав Балин
Инвестиционный холдинг «ФИНАМ»
Зам. руководителя IT-департамента по R&D
Разработка ПО – это
    производство?
Проведем правильную аналогию
Разработка устройства
Конструкторское бюро
                               Испытания и                 Испытания и             100
  Проектирование
                               правки РКД                  правки РКД            изделий


                              10      Исправленная        10      Исправленная
            РКД
                           образцов       РКД          образцов       РКД

Фабрика
              Производство                   Производство                Производство
                опытных                        опытных                   установочной
                образцов                       образцов                     партии

                   месяц                       месяц                       месяц




•  Производство – ответственный и затратный этап
•  Его не перепутать с проектированием
Hardware	
  People	
  
                                                Готовность
                                             к производству:
                    Проектирование
  Ключевые                                 - Рабочие изделия
 требования и       непрерывный процесс    - Прохождение
характеристики                             испытаний
                    постановки и решения   - Комплект РКД (для
                          проблем          производства)




 •  Логистика важна на этапе проектирования
 •  Развита дисциплина работы с документацией
 •  Явный фокус на решении проблем
    •  В ТЗ только ключевые требования и ТТХ
    •  РКД - не более чем средство
Куда девалась фабрика?
Компьютер разработчика ПО

  Разработка                   Отладка                   Отладка       Дистрибутив


        Исходный                 Исправленный               Исправленный
           код           EXE          код          EXE           код


               Компиляция и              Компиляция и              Компиляция и
                  сборка                    сборка                    сборка

                минуты                    минуты                    минуты




•  Наша технология производства – верх совершенства
•  Настолько, что мы не склонны его замечать
So-ware	
  People	
  
                 "Промышленная"        Программный код:
Технические        разработка
                                       - Проходит тесты
требования
                  процесс написания    - Соответствует
                    и отладки кода     требованиям




•  Главный результат – отлаженный код
•  «Заказчик никогда не знает, что он хочет»
•  Упорная аналогия с конвейерной сборкой
    •  нет Ватерфолу, да здравствует Канбан!
Разработка – непрерывный
 процесс проектирования
   Проектирование – процесс
      решения проблем
Проблема	
  имеет	
  много	
  решений	
  
     ?
  Проблема

                  Так?
                Ага!   Пространство
                         решений
…которые	
  ставят	
  новые	
  проблемы	
  

     ?
 Проблема

                   Так?
                 Ой!   Пространство
                         решений

    ?!
…и	
  мы	
  перебираем	
  решения	
  
   ?
Проблема

                Так?
              Ой!    Пространство
                       решений

   ?!           Или так?




                       ?
…чтобы	
  найти	
  оптимальное.	
  
    ?
 Проблема

                 Так?         Теплее!


               Ой!   Пространство
                       решений      А может,
                                     вообще
                                    вот-так?
    ?!          Или так?



    Э-э-э...
                        ?
«Требования	
  меняются»	
  
«Заказчик	
  не	
  знает,	
  что	
  он	
  хочет»	
  

         А	
  так-­‐ли	
  хорошо	
  люди	
  умеют	
  
           разделять	
  проблемы,	
  и	
  их	
  
                           решения?	
  
«Добавьте в эту табличку
вот такое поле,
считающееся вот-так».

«Брокерская комиссия
должна рассчитываться
секунда в секунду по всем
клиентам!»
«Необходимо слить ваши
системы в одну, с единой
базой!».

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

«Необходимо слить ваши      Процесс выдачи наличных –
системы в одну, с единой    неудобен, требует
базой!».                    дублирования операций в
                            разных системах.
«Надо переписать риск-      В риск-сервере есть порядка 10
сервер!»                    неприятных ошибок, которые
                            давно пора исправить.
Пользователь	
  прекрасно	
  
осознает	
  свои	
  проблемы.	
  
Но	
  почему-­‐то	
  не	
  считает	
  нужным	
  о	
  
             них	
  говорить.	
  
«Требования»	
  –	
  решение	
  проблемы	
  
      Проблема
    пользователя



                   Функции
                   системы
…которое	
  ставит	
  частные	
  проблемы	
  
      Проблема
    пользователя



                    Функции
                    системы




                                     Как
     Как будет     Как будет
                                 отобразятся
    выглядеть?     работать?
                                 на систему?




                   Алгоритмы и    Структура
    Внешний вид
                    структуры      модулей,
        UI
                     данных      классов, и пр.



  …имеющие множество возможных решений
…которые	
  можно	
  по	
  разному	
  
       реализовать	
  
     Проблема
   пользователя



                   Функции
                   системы




                                    Как
     Как будет    Как будет
                                отобразятся
    выглядеть?    работать?
                                на систему?




                  Алгоритмы и    Структура
   Внешний вид
                   структуры      модулей,
       UI
                    данных      классов, и пр.


                                          ?     ?   Исходный код
                                      ?       ? ?
…но	
  кое-­‐что	
  ограничивает	
  пространство	
  решений	
  
                                     Каковы                           Как в целом
           Проблема
                                    ключевые                           устроена
         пользователя
                                      ТТХ?                             система?


                                                          Базовые
                         Функции
                                                         технологии
                         системы
                                                         и принципы




                                                   Как
           Как будет    Как будет
                                               отобразятся
          выглядеть?    работать?
                                               на систему?




                        Алгоритмы и             Структура
         Внешний вид
                         структуры               модулей,
             UI
                          данных               классов, и пр.


                                                         ?     ?      Исходный код
                                                     ?       ? ?
«Наше С++ приложение
будет мелко нарезано на
изолированные COM-
объекты»
«Исходный код торговых
роботов будут храниться в
базе данных»
«Будем все писать на
Дельфи».
«Необходимо все
переписать на .NET!»

«Необходимо переписать
этот кривой, как турецкая
сабля, код!».
Решение                      Проблема
«Наше С++ приложение        Наше приложение должно уметь
будет мелко нарезано на     на чем-то скриптоваться. Лень
изолированные COM-          думать, пусть это будет Visual
объекты»                    Basic. И точка.
«Исходный код торговых      Я сходил на недельные курсы по
роботов будут храниться в   MS SQL, и не могу держать это
базе данных»                знание внутри себя.
«Будем все писать на        Ничего кроме Delphi не умеем, и
Дельфи».                    изучать не хотим.
«Необходимо все             Нам очень не нравится Дельфи,
переписать на .NET!»        изучения которого надо
                            избежать.
«Необходимо переписать      Этот код не мой. Я ничего в нем
этот кривой, как турецкая   не понимаю, и панически боюсь
сабля, код!».               его.
Разработчик	
  прекрасно	
  
осознает	
  свои	
  проблемы	
  
Но	
  почему-­‐то	
  не	
  считает	
  нужным	
  
           о	
  них	
  говорить.	
  
Поэтому,	
  мы	
  выбираем	
  
   решения	
  наугад!	
  




   И	
  да	
  поможет	
  нам	
  Ag:)e.	
  
Нам	
  поможет	
  Методология	
  Х?	
  

    Или,	
  может,	
  стоит	
  осмысленно	
  
            выбирать	
  решения?	
  
«Чеклист	
  детектива»	
  
•  Выяснить	
  проблему	
  
•  Определить	
  критерии	
  успешного	
  решения	
  
•  Рассмотреть	
  несколько	
  
   «версий»	
  (вариантов	
  решения)	
  
•  Отработать	
  все	
  версии,	
  собирая	
  факты	
  и	
  
   «улики»	
  
•  «Отбросьте	
  невозможное,	
  и	
  останется	
  
   истина».	
  ШХ.	
  
                                                               	
  
Проектирование	
  супер-­‐ЭВМ	
  
Отбор кандидатов


  Вариант 1     Вариант 2   Вариант 3   Вариант 4   Вариант 5



Глубокая проработка


                      Эльбрус-2    БЭСМ-10



Детальное проектирование

                            Эльбрус-2
Цикл	
  «гипотеза-­‐эксперимент»	
  
•  Умение	
  выдвигать	
  разумные	
  гипотезы,	
  и	
  
   проверять	
  их	
  логически	
  
•  Умение	
  ставить	
  эксперименты,	
  и	
  делать	
  из	
  
   них	
  правильные	
  выводы	
  
•  Необходимо	
  умение	
  отделять:	
  
   –  Факты	
  от	
  предположений	
  
   –  Проблемы	
  от	
  решений	
  
   –  Цели	
  от	
  задач	
  
Группа	
  эффективнее	
  одиночки	
  в	
  
 выработке	
  и	
  проверке	
  гипотез	
  
  Группа	
  должна	
  быть	
  организована,	
  
       чтобы	
  быть	
  эффективнее	
  
Сессия	
  проектирования	
  
•  Собираем	
  проектную	
  группу	
  
•  Вводная:	
  
   –  Проблема	
  пользователя	
  
   –  Очевидные	
  варианты	
  решений	
  
   –  «Что	
  нам	
  мешает	
  сделать	
  это	
  прямо	
  сейчас?»	
  
•  Дополняем	
  список	
  вариантов	
  решений	
  
•  Составляем	
  список	
  открытых	
  проблем	
  
   –  Что	
  мы	
  не	
  знаем,	
  и	
  должны	
  узнать	
  
Список	
  открытых	
  проблем	
  
•  Главный	
  предмет	
  совещания	
  
•  Виден	
  всей	
  группе	
  на	
  маркерной	
  доске	
  
•  Всегда	
  актуален	
  
•  Должен	
  меняться	
  со	
  временем	
  
   – Количество	
  проблем	
  высшего	
  порядка	
  
     должно	
  уменьшаться,	
  сменяясь	
  
     частными	
  
Правила	
  проверки	
  решений	
  
•  «Это	
  неправильно»	
  «Как	
  ваше	
  решение	
  
   будет	
  работать	
  вот	
  в	
  такой	
  ситуации?»	
  
•  Давление	
  на	
  авторитеты	
  Ссылки	
  на	
  
   конкретный	
  опыт	
  с	
  примерами	
  
•  Убеждения	
  В	
  инженерии	
  все	
  можно	
  
   обосновать	
  логически	
  
•  Это	
  будет	
  так!	
  «В	
  закон	
  Ома	
  верю.	
  Все	
  
   остальное	
  надо	
  проверять»	
  
Хорошо	
  известные	
  вам	
  вещи..	
  
  –  Прототипы	
  
  –  Дизайн-­‐ревью	
  
  –  Код-­‐ревью	
  
  –  Тесты	
  
	
  
     …являются не «практиками», а
	
  
 средствами проверки «гипотез»
«-­‐	
  Ты	
  должен	
  мне	
  поверить!	
  
-­‐	
  Ты	
  кто	
  -­‐	
  Иисус	
  Христос,	
  чтобы	
  
                       тебе	
  верить?»	
  
                                  	
   Главный	
  
                 А.	
  М.	
  Степанов.	
  
      программист	
  первого	
  советского	
  
             комплекса	
  ПВО.	
  
Роль	
  руководителя	
  
•  Организует	
  и	
  ведет	
  совещание	
  
•  Поддерживает	
  список	
  открытых	
  проблем	
  
•  Отвечает	
  за	
  логику	
  и	
  формат,	
  разрешая	
  
   конфликты,	
  оставляя	
  креатив	
  подчиненным	
  
•  Направляет	
  процесс,	
  выдавая	
  задания	
  
   (схема	
  «научного	
  семинара»)	
  
•  Вникает	
  в	
  проблемы,	
  которые	
  не	
  
   меняются	
  
Для	
  одного	
  программиста	
  
•  Периодически	
  подходить	
  к	
  
   программисту	
  
•  Беседовать	
  о	
  текущих	
  проблемах	
  
•  Отмечать	
  те,	
  что	
  не	
  меняются	
  
•  Вникать	
  только	
  в	
  них,	
  и	
  разбираться,	
  
   почему:	
  
   –  Человеку	
  может	
  быть	
  нужна	
  помощь	
  
   –  Выдумывать	
  проблемы	
  тяжело	
  
Спасибо	
  за	
  внимание!	
  

Владислав	
  Балин	
  
hrp://gaperton.livejournal.com	
  

Gaperton - Software People 2012

  • 1.
    Проектирование как процесс решения проблем Владислав Балин Инвестиционный холдинг «ФИНАМ» Зам. руководителя IT-департамента по R&D
  • 2.
    Разработка ПО –это производство? Проведем правильную аналогию
  • 3.
    Разработка устройства Конструкторское бюро Испытания и Испытания и 100 Проектирование правки РКД правки РКД изделий 10 Исправленная 10 Исправленная РКД образцов РКД образцов РКД Фабрика Производство Производство Производство опытных опытных установочной образцов образцов партии месяц месяц месяц •  Производство – ответственный и затратный этап •  Его не перепутать с проектированием
  • 4.
    Hardware  People   Готовность к производству: Проектирование Ключевые - Рабочие изделия требования и непрерывный процесс - Прохождение характеристики испытаний постановки и решения - Комплект РКД (для проблем производства) •  Логистика важна на этапе проектирования •  Развита дисциплина работы с документацией •  Явный фокус на решении проблем •  В ТЗ только ключевые требования и ТТХ •  РКД - не более чем средство
  • 5.
    Куда девалась фабрика? Компьютерразработчика ПО Разработка Отладка Отладка Дистрибутив Исходный Исправленный Исправленный код EXE код EXE код Компиляция и Компиляция и Компиляция и сборка сборка сборка минуты минуты минуты •  Наша технология производства – верх совершенства •  Настолько, что мы не склонны его замечать
  • 6.
    So-ware  People   "Промышленная" Программный код: Технические разработка - Проходит тесты требования процесс написания - Соответствует и отладки кода требованиям •  Главный результат – отлаженный код •  «Заказчик никогда не знает, что он хочет» •  Упорная аналогия с конвейерной сборкой •  нет Ватерфолу, да здравствует Канбан!
  • 7.
    Разработка – непрерывный процесс проектирования Проектирование – процесс решения проблем
  • 8.
    Проблема  имеет  много  решений   ? Проблема Так? Ага! Пространство решений
  • 9.
    …которые  ставят  новые  проблемы   ? Проблема Так? Ой! Пространство решений ?!
  • 10.
    …и  мы  перебираем  решения   ? Проблема Так? Ой! Пространство решений ?! Или так? ?
  • 11.
    …чтобы  найти  оптимальное.   ? Проблема Так? Теплее! Ой! Пространство решений А может, вообще вот-так? ?! Или так? Э-э-э... ?
  • 12.
    «Требования  меняются»   «Заказчик  не  знает,  что  он  хочет»   А  так-­‐ли  хорошо  люди  умеют   разделять  проблемы,  и  их   решения?  
  • 13.
    «Добавьте в этутабличку вот такое поле, считающееся вот-так». «Брокерская комиссия должна рассчитываться секунда в секунду по всем клиентам!» «Необходимо слить ваши системы в одну, с единой базой!». «Надо переписать риск- сервер!»
  • 14.
    Решение Проблема «Добавьте в эту табличку Менеджеру надо знать вот такое поле, актуальный остаток денег на считающееся вот-так». счете, чтобы оформить клиенту выдачу наличных. «Брокерская комиссия Менеджеру надо знать должна рассчитываться актуальный остаток денег на секунда в секунду по всем счете, чтобы оформить клиентам!» клиенту выдачу наличных. «Необходимо слить ваши Процесс выдачи наличных – системы в одну, с единой неудобен, требует базой!». дублирования операций в разных системах. «Надо переписать риск- В риск-сервере есть порядка 10 сервер!» неприятных ошибок, которые давно пора исправить.
  • 15.
    Пользователь  прекрасно   осознает  свои  проблемы.   Но  почему-­‐то  не  считает  нужным  о   них  говорить.  
  • 16.
    «Требования»  –  решение  проблемы   Проблема пользователя Функции системы
  • 17.
    …которое  ставит  частные  проблемы   Проблема пользователя Функции системы Как Как будет Как будет отобразятся выглядеть? работать? на систему? Алгоритмы и Структура Внешний вид структуры модулей, UI данных классов, и пр. …имеющие множество возможных решений
  • 18.
    …которые  можно  по  разному   реализовать   Проблема пользователя Функции системы Как Как будет Как будет отобразятся выглядеть? работать? на систему? Алгоритмы и Структура Внешний вид структуры модулей, UI данных классов, и пр. ? ? Исходный код ? ? ?
  • 19.
    …но  кое-­‐что  ограничивает  пространство  решений   Каковы Как в целом Проблема ключевые устроена пользователя ТТХ? система? Базовые Функции технологии системы и принципы Как Как будет Как будет отобразятся выглядеть? работать? на систему? Алгоритмы и Структура Внешний вид структуры модулей, UI данных классов, и пр. ? ? Исходный код ? ? ?
  • 20.
    «Наше С++ приложение будетмелко нарезано на изолированные COM- объекты» «Исходный код торговых роботов будут храниться в базе данных» «Будем все писать на Дельфи». «Необходимо все переписать на .NET!» «Необходимо переписать этот кривой, как турецкая сабля, код!».
  • 21.
    Решение Проблема «Наше С++ приложение Наше приложение должно уметь будет мелко нарезано на на чем-то скриптоваться. Лень изолированные COM- думать, пусть это будет Visual объекты» Basic. И точка. «Исходный код торговых Я сходил на недельные курсы по роботов будут храниться в MS SQL, и не могу держать это базе данных» знание внутри себя. «Будем все писать на Ничего кроме Delphi не умеем, и Дельфи». изучать не хотим. «Необходимо все Нам очень не нравится Дельфи, переписать на .NET!» изучения которого надо избежать. «Необходимо переписать Этот код не мой. Я ничего в нем этот кривой, как турецкая не понимаю, и панически боюсь сабля, код!». его.
  • 22.
    Разработчик  прекрасно   осознает  свои  проблемы   Но  почему-­‐то  не  считает  нужным   о  них  говорить.  
  • 23.
    Поэтому,  мы  выбираем   решения  наугад!   И  да  поможет  нам  Ag:)e.  
  • 24.
    Нам  поможет  Методология  Х?   Или,  может,  стоит  осмысленно   выбирать  решения?  
  • 25.
    «Чеклист  детектива»   • Выяснить  проблему   •  Определить  критерии  успешного  решения   •  Рассмотреть  несколько   «версий»  (вариантов  решения)   •  Отработать  все  версии,  собирая  факты  и   «улики»   •  «Отбросьте  невозможное,  и  останется   истина».  ШХ.    
  • 26.
    Проектирование  супер-­‐ЭВМ   Отборкандидатов Вариант 1 Вариант 2 Вариант 3 Вариант 4 Вариант 5 Глубокая проработка Эльбрус-2 БЭСМ-10 Детальное проектирование Эльбрус-2
  • 27.
    Цикл  «гипотеза-­‐эксперимент»   • Умение  выдвигать  разумные  гипотезы,  и   проверять  их  логически   •  Умение  ставить  эксперименты,  и  делать  из   них  правильные  выводы   •  Необходимо  умение  отделять:   –  Факты  от  предположений   –  Проблемы  от  решений   –  Цели  от  задач  
  • 28.
    Группа  эффективнее  одиночки  в   выработке  и  проверке  гипотез   Группа  должна  быть  организована,   чтобы  быть  эффективнее  
  • 29.
    Сессия  проектирования   • Собираем  проектную  группу   •  Вводная:   –  Проблема  пользователя   –  Очевидные  варианты  решений   –  «Что  нам  мешает  сделать  это  прямо  сейчас?»   •  Дополняем  список  вариантов  решений   •  Составляем  список  открытых  проблем   –  Что  мы  не  знаем,  и  должны  узнать  
  • 30.
    Список  открытых  проблем   •  Главный  предмет  совещания   •  Виден  всей  группе  на  маркерной  доске   •  Всегда  актуален   •  Должен  меняться  со  временем   – Количество  проблем  высшего  порядка   должно  уменьшаться,  сменяясь   частными  
  • 31.
    Правила  проверки  решений   •  «Это  неправильно»  «Как  ваше  решение   будет  работать  вот  в  такой  ситуации?»   •  Давление  на  авторитеты  Ссылки  на   конкретный  опыт  с  примерами   •  Убеждения  В  инженерии  все  можно   обосновать  логически   •  Это  будет  так!  «В  закон  Ома  верю.  Все   остальное  надо  проверять»  
  • 32.
    Хорошо  известные  вам  вещи..   –  Прототипы   –  Дизайн-­‐ревью   –  Код-­‐ревью   –  Тесты     …являются не «практиками», а   средствами проверки «гипотез»
  • 33.
    «-­‐  Ты  должен  мне  поверить!   -­‐  Ты  кто  -­‐  Иисус  Христос,  чтобы   тебе  верить?»     Главный   А.  М.  Степанов.   программист  первого  советского   комплекса  ПВО.  
  • 34.
    Роль  руководителя   • Организует  и  ведет  совещание   •  Поддерживает  список  открытых  проблем   •  Отвечает  за  логику  и  формат,  разрешая   конфликты,  оставляя  креатив  подчиненным   •  Направляет  процесс,  выдавая  задания   (схема  «научного  семинара»)   •  Вникает  в  проблемы,  которые  не   меняются  
  • 35.
    Для  одного  программиста   •  Периодически  подходить  к   программисту   •  Беседовать  о  текущих  проблемах   •  Отмечать  те,  что  не  меняются   •  Вникать  только  в  них,  и  разбираться,   почему:   –  Человеку  может  быть  нужна  помощь   –  Выдумывать  проблемы  тяжело  
  • 36.
    Спасибо  за  внимание!   Владислав  Балин   hrp://gaperton.livejournal.com