Projects Efficiency

No preview image

1 collaborator

Fab Fabio Baj (Author)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by the author
Model was written in NetLogo 5.0.3 • Viewed 329 times • Downloaded 38 times • Run 0 times
Download the 'Projects Efficiency' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


WHAT IS IT?

this model simulates project work in an organization where multiple paralllel project and task forces distrace resource from completed te assigned tasks

HOW IT WORKS

Rseources(workers) are modeled as Turtles. Activities or work items are modeled as patches. each work item has a priorty and a quantity of work-to-do .For example if work-to-to is equal to 10 a resource will take 10 days (ticks) to complete this work. Skills are modeled with colors. A blue resource can only do blue activities. The rule for a resource is simple: find the closest work-itme for your skill (your color). At each tick (= one working day) decrease the work to to for this work item patch. A work item with work to do = or less than zero becomes black. The algorithm to find the closest work item to work on depends on Distance AND priority. The importance of priority is driven by the parameter priority-weigth. If this parameter is set to zero a resource chooses always the closest work item (which is normally the same activtiy he is stting on). With this setting resources tend to stay on the same activity ntil it is completed. If priority-weitgh is high resources tend to jump around to the higher priority activities. Jumping from one activity to a onther one that is far away simulate a context switch. FOr example means moving from on client project to another. This context switch is assocated with an overhead. The overhead due to context switch creates additional work which is "not planned and therefore not paid". THe impact of overhead can be controlled with a slider. When overhead is set to zero there is no cost associated with jumping from one activity to another. Projects are represented with contiguous rectangles. In absence of dynamically changing priorities resources will tend to work on the same project until finished ,because of the lowset distance rule for selecting the next activity. MAintenance is represented by random single activities with high priority. Those activtes are generated daily (at each tick) according to the Ticket-Density parameter. This simulates the fact that maintenance ticket occurr randomly, are not predictable, and normalyy have high proiority because they are production incidents. When priority-weigth is not zero, resources will tend to temporarily abandon projects to go anf fix maintenance tickets. There is a switch called Dedicated-AMS meaning that maintenance ticket will be all of the same color (yellow). As a consequence the yellow resources become a team which is dedicated to work on maintencance tickets. See Scenario 4 in order to experiment the effect of a dedicated maintenance team on efficiency

HOW TO USE IT

There are some monitors and controls:

  • planned-effort: is the sum of the effort of all the activty items. When tickets appear, the planned effort is increased accordingly.

  • actual-effort is the actual work done by resources. THis is simply the number of resources multiplied by the number of ticks. THis means that idle resources will anyway increase the effort. This represents tht facts that resources sitting without an activities has to be payed anyway.

  • etc : estimate to completion: this is the remaining work to do at a given point of time.

  • billable-work-done is the work done by resources that will be paid because it was plnanned. Work done as a consequence of overhead will not be paid by the project, causing an ineffciency

  • efficiency: is the ratio between billable-work-done and actual-effort done. This is the most important KPI to be optimised, because is directly linked to the profitability of the team. In an ideal world with no overhead efficiency can reach level 1 with exact resources planning

-Ticket-Density :controls the probability of occurring of tickets every day

-

THINGS TO NOTICE

(suggested things for the user to notice while running the model)

THINGS TO TRY

Scenario 1: this is the simplest word. One tzpe of activity. No Overhead due to context switch. Work siye is fullz predictable. Given the number of resources we can exactlz predict how long the project will take. This model works well in manufacturing where and zou can have efficiencz equal to 1. If we want to to the work in half the time can simply double the resources. In this scenario try setting the random work switch to ON. In this case efficiency decreases because you can not predict exactly howl long a tas kwill last and you risk to have idle resources. Scenario 1 is the happy and predicable world of Accountants,CFOs, PMO ,and unfortunately also some Manager and Project Manager. From the maths point of view you can model it simply with rules like: Time = Total Work / Number of resources. The biggest mistake is to act and plan complex reality assuming that the laws of Scenario 1 will be still valid.

Scenario 2: This Scenario is a bit more complex that scenario 1. We have three parallel projects, each of them requires different resources. Each color represent a different skill. A red resource can only do red activities. Even f it seems more complex you can still model it with simple math. Now you have to consider a matrix of activities versus resources. Still you will be able to predict quite correctly time and costs. An excel spreadsheet will do the job. In many organizations this excel model will be the only instrument to try to model any situation. As we will see in the next scenarios this way of modeling the reality is intrinsically faulty and not adequate to have the situation under control. Wath to ty in scenario 2: initially you will see that the efficiency is low. You can notice that the blue resources finish their work very early and then tey are idle. But they are still on your payroll... try reducing the blue resourcs. Again the world is quite predictable. Once you have found a efficient sourcing mix, you can half the project duration by doubling the resources per each skill ,without loosing too much efficiency. (there is a magic combination of resources that gives efficiency = 1!!) try to find it... (solution is 10 13 17 by I will not tell which colors). You can make up your budget beginning of the year and plan exaclty how the revenues will be.

Scenario 3: As said this approach works well in manifacturing, where a resource will do exactly the same sequence of actions throughout the year. Reality of IT project is less predictable. You may estimate that programming a feature will cost exactly 2 days but in reality this is only an approximation. Bugs, errors, compilation problems, unit testing can only partially be predicted. For this reason we introduce a random component (estimates-deviation) in the work estimates. This makes more difficult to exactly know how many resources we need. It is still teoretically possible to reach efficency = 1, but normally when we do high level plan we do not plan activities of 10.2 or 9.7 man days, we will plan for 10. In scenario 3 the estimates-deviation is set to 10%

3 parallel project with scarsity of blue resources. Effect: delay in completion of projects and cost overrun due to idle resources

Scenario 4: AMS Tickets are generated along the zear. Trz using the "Dedicated AMS team" swithc. In one case resources for fixing tickets are taken out from projects. In the other case there is a dedicated team all tickets are Zellow). Depending on the level of overhead due to context switch te Dedicated AMS team approach looks more efficient

EXTENDING THE MODEL

(suggested things to add or change in the Code tab to make the model more complicated, detailed, accurate, etc.)

NETLOGO FEATURES

(interesting or unusual features of NetLogo that the model uses, particularly in the Code tab; or where workarounds were needed for missing features)

RELATED MODELS

(models in the NetLogo Models Library and elsewhere which are of related interest)

CREDITS AND REFERENCES

(a reference to the model's URL on the web if it has one, as well as any other necessary credits, citations, and links)

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

patches-own [work-to-do priority]

globals [skills effort planned-effort etc billable-work-done efficiency context-switch scenario-descr]

to setup
  clear-all
 reset-ticks
 setup-project
 setup-resources 
;; if ams-tickets [gen-ams-tickets]  
 set planned-effort sum [work-to-do] of patches with [member? pcolor skills]
 describe
end 

to describe
   if scenario = 1
   [ set scenario-descr "Scenario 1:  simple word: one skill type repetitive activity"]
   if scenario = 2   
   [ set scenario-descr (word "Scenario 2:  in this scenario we have three \n" 
                         "parallel projects  \n" 
                         "TRY: change the number of resources that optimizes efficiency  \n" 
                         "" 
                         "")]
    
    
    clear-output
     output-print scenario-descr  
end 

to setup-project
  if scenario = 2
  [set skills  [red  blue  orange ]
      if not override-scenario [set estimate-deviation 0]
 draw-proj  [[blue 0.2][ red 0.3 ][orange 0.5]] 100 -25 10  10 10   
   draw-proj  [[blue 0.3][ red 0.5 ][orange 0.2]] 200 -25 0  10 7   
  draw-proj  [[blue 0.5][ red 0.4 ][orange 0.1]] 100 -25 -10  10 7
  if not override-scenario [set blue-resources   20   set red-resources 10   set orange-resources 15  set AMS-Tickets false]
  ]
  
  
  if scenario = 1[
    set skills  [ blue  ]
     if not override-scenario [set blue-resources   2    set red-resources 0    set orange-resources 0 set yellow-resources 0  
                 set overhead 0 set estimate-deviation 0] ]
   draw-proj  [[blue 0.2]] 100 -25 10  10 10
   

  if scenario = 3
  [set skills  [red  blue  orange]
    if not override-scenario [set estimate-deviation 10]
  draw-proj  [[blue 0.2][ red 0.3 ][orange 0.5]] 100 -25 10  10 10   
   draw-proj  [[blue 0.3][ red 0.5 ][orange 0.2]] 200 -25 0  10 7   
  draw-proj  [[blue 0.5][ red 0.4 ][orange 0.1]] 100 -25 -10  10 7
  if not override-scenario [set blue-resources   13   set red-resources 17   set orange-resources 10  set AMS-Tickets false]
  ]
      

  if scenario = 4
  [set skills  [red  blue  orange yellow]
    if not override-scenario [set estimate-deviation 10]

  draw-proj  [[blue 0.2][ red 0.3 ][orange 0.5]] 100 -25 10  30 10   
   draw-proj  [[blue 0.3][ red 0.5 ][orange 0.2]] 200 -25 0  30 7   
  draw-proj  [[blue 0.5][ red 0.4 ][orange 0.1]] 100 -25 -10  30 7
  if not override-scenario [set blue-resources   12   set red-resources 16  set yellow-resources 10 set ticket-density 11
                            set orange-resources 9  set overhead 0.20 set AMS-Tickets true set dedicated-AMS false]
  ]
  
  if scenario = 5 ;; ams only
  [set skills  [red  blue  orange yellow]
    gen-ams-tickets
  if not override-scenario [set blue-resources   13 set yellow-resources   15   
                             set red-resources 17   set orange-resources 10
                             set estimate-deviation 10 set AMS-Tickets true set overhead 0.25]
  ]
    
    
  ;;ask patches [if (pycor < 18) and (pycor > -2) and (pxcor < -12) and (pxcor > -18)[set pcolor one-of skills   set work-to-do 1 + random 9 set priority random 10]]

  ;; ask patches [if (pycor < 17) and (pycor > 4) and (pxcor < 18) and (pxcor > 4)[set pcolor one-of skills  set work-to-do 1 + random 9  set priority random 10] ]
  ask patches [if (pycor < -17) [ set pcolor green ] ]
end 

to setup-resources

  
  create-turtles orange-resources[ setxy random-xcor random-ycor
    set color  orange
     set shape "persona" ]
  
   create-turtles red-resources [ setxy random-xcor random-ycor
    set color  red
     set shape "persona" ]
   
   create-turtles blue-resources [ setxy random-xcor random-ycor
    set color  blue
     set shape "persona" ]
     
     create-turtles yellow-resources [ setxy random-xcor random-ycor
    set color  yellow
     set shape "persona" ]
  
  
  
  ask turtles [ let pool one-of patches with  [ pcolor = green  and not any? turtles-here]
  if pool != nobody [
     set xcor [pxcor] of pool 
     set ycor [pycor] of pool]]
end 

to find-activity ;; turtle preocedure
  let skill  color
  let new-activity one-of (patch-set
                           patches with [pcolor = skill and not any? turtles-here ] (patch-set patch-here) with [pcolor = skill]) 
                   with-min [prio-dist myself] 
                          
  if new-activity != nobody [
     ;; [pcolor] of patch-here != black mease thatt only when you interrupt an activity due to higer prio is considered context switc context switch
     if new-activity != patch-here  and [pcolor] of patch-here != green   [      ;;project startup is not considere context switch
       ask new-activity [set work-to-do work-to-do + (distance myself * overhead)];; overhead due to context switc
       set context-switch context-switch + 1
      
       ] ;; count context switc. If 
     set xcor [pxcor] of new-activity  ;; move turtle to new activity
     set ycor [pycor] of new-activity]
end 

to go
 if count  patches with [member? pcolor skills] = 0 [stop]
 if ticks >= 365 [stop]
  
 if ams-tickets [gen-ams-tickets]  
 
       
 ;; ask all resources to find and activity to do based on priority and distance
 ask  turtles [find-activity] 
 ;; in this case a resource finishes the asssigned activity before lookin for new activity
 
  
  ;; work on prject activity i tick
  ask patches with [member? pcolor  skills and any? turtles-here] [
      set work-to-do work-to-do - 1
      if work-to-do <= 0 [set pcolor black]
      ]      
   set effort effort + count turtles
   set etc sum [work-to-do] of patches with [member? pcolor skills]

   set billable-work-done (planned-effort - etc)
   set efficiency billable-work-done / effort
   
   
 ;; resources that have finished work go back to pool
  ;;ask  turtles-on patches with [ (pcolor = black)] [back-to-pool]
  
  tick
end 

to-report prio-distance [ x y x1 y1]  ;; nmeric reporterre
 report sqrt((x - x1)^ 2 + (y - y1)^ 2)
end  

to-report prio-dist   [tur]
    ;; patch procedure
    let result sqrt ( (priority   * priority-weigth ) ^ 2 + (distance tur) ^ 2)
 
 report result
end  

to back-to-pool ;; turtle preocedure
  let pool one-of patches with  [ pcolor = green  and not any? turtles-here]
  if pool != nobody [
     set xcor [pxcor] of pool 
     set ycor [pycor] of pool]
end 

to gen-ams-tickets-old
  let sk skills
  if dedicated-ams [set sk [yellow]]
  ask patches with [pcolor = black and random (100 / ticket-density) = 0]
     [set pcolor  one-of sk set work-to-do 1 + random 9
       set priority 1 ]
end 

to gen-ams-tickets
let sk skills
  if dedicated-ams [set sk [yellow]]
ask patches with [pcolor = black and random (10000 / ticket-density) = 0]
     [set pcolor  one-of sk set work-to-do 1 + random 9
       set planned-effort  planned-effort + work-to-do
       set priority 1 ]
end   

to  gen-task-force
  ask patches [if (pycor < -10) and (pycor > -15) and (pxcor < 25) and (pxcor > 10)[
      set pcolor one-of skills   
      set work-to-do 1 + random 9 
      set priority  1
      set planned-effort  planned-effort + work-to-do]
  ]
end 

to draw-proj [skill-list  proj-size x y  wrk prio]
     
     let h 3  ; means the bar is thick k2 patches
     let yy y
     foreach skill-list [
       let pair ?
       set yy yy + 2
       let c item 0 pair
       let p item 1 pair
       let b (proj-size * p) / 2 + 1 
       ask patches [if (pycor > yy) and (pxcor > x) and (pycor < yy + h)and (pxcor < x + b) 
        [ set pcolor c set work-to-do  realistic-work wrk set priority  prio] 
           
        ] 
      ] 
end 

to-report realistic-work [ work] ;; returns work plus or minus 10%
   let w     work + ( random  estimate-deviation - random estimate-deviation) * work / 100
  ;; print w 
   report w 
end 

There is only one version of this model, created over 12 years ago by Fabio Baj.

Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.