Tuesday, August 4, 2015

Пример выбора порядка выполнения подзадач при необходимости ответа заказчика


   Недавно у меня был такой случай. У одного разработчика было задание, которое мы разбили на 3 не связанные между собой подзадачи.
  • подзадача 1  - время выполнения 1/2 дня (`t_{1}=1d=8h`);
  • подзадача 2 - время выполнения 1 час (`t_{2}=1h`);
  • подзадача 3 - есть два несовместимых варианта решения :
    • вариант А  - пол дня (`t_{3}^A=1h`)
    • вариат - B  3 дня (`t_{3}^B=3d = 24h`). 
   Выбор за заказчиком. Заказчик может ответить в течении часа (`t_{reply}^{fast}=1h`), а может и затребовать день(`t_{reply}^{slow}=1d`). По нашим (с разработчиком) прикидкам с вероятностью 90% заказчик выберет вариант B (`P_{3}^B=90%`). На то чтобы сформулировать ему вопрос понадобится около получаса (`t_{email} = 1/2h`).

   Я бы работал по следующему плану:
  • отправил письмо заказчику;
  • подзадача 1;
  • подазача 2 ;
  • если не получен ответ то приступил бы к подзадаче 3, вариант Б.
  • по получении ответа либо продолжил бы делать вариант Б либо переключился на вариант А

   Разработчик же решил делать так:
  • отправил письмо заказчику;
  • подзадача 3, вариант Б (который 3 дня);
  • получил ответ от заказчика (угадал - т.е. вариант Б+)
  • подзадача 1;
  • подзадача 2;
   Откровенно говоря, я как-то и не подумал о том что существуют други подходы к планированию, чем "мой".

    Дальше для тех, кто любит математику:

    Сначала мой случай.
    Максимальное время на выполнение всего задания (худший случай) при моем подходе:

`T_{my}^{max} = t_{email,1,2} + max( (t_{reply}^{slow} - t_{email,1,2} + t_3^A), t_3^B ) =`
`= 1/2h + 4h+1h +max ((1d - 1/2h-4h-1h),3d) =`
`= 5 1/2h +max ((2 1/2h), 3d) = 29 1/2 h`,
   где `t_{email,1,2} = t_{email} + t_1 + t_2`;

   Минимальное время на выполнение всего задания (лучший случай) при моем подходе:

`T_{my}^{min}= t_{email,1,2} + min( (t_{reply}^{slow} - t_{email,1,2} + t_3^A), t_3^B ) = 8 h `

   Вероятность худшего случая при моем подходе :

`P_{my}^{max} = P_3^B = 90%`
    Мат. ожидание времени выполнения при моем подходе:

`E[T_{my}] = P_{my}^{max} * T_{my}^{max} + (1-P_{my}^{max}) * T_{my}^{min} = `
` = 90 % * 29 1/2 h + 10% * 8h = 27.35 h `


    Теперь подход разработчика.
     Максимальное время на выполнение всего задания (худший случай) при подходе разработчика:
`T_{dev}^{max}= t_{email}+max(t_{reply}^{slow} + t_3^A, t_3^B) + t_{1,2} =`
`= 1/2h + max(1d + 1/2d,3d) + 4h + 1h = 29 1/2 h`

    Минимальное время на выполнение всего задания (лучший случай) при подходе разработчика:

`T_{dev}^{min} = t_{email}+min(t_{reply}^{slow} + t_3^A, t_3^B) + t_{1,2} = 14h`

   Вероятность худшего случая при подходе разработчика:

`P_{dev}^{max} = P_{email}^{long}= 50%`

Мат. ожидание времени выполнения при подходе разработчика:
`E[T_{dev}] = P_{dev}^{max} * T_{dev}^{max} + (1-P_{dev}^{max}) * T_{dev}^{min} =`
` = 50 % * 29 1/2 h + 50% * 14h = 21.75 h `


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