a quantitative study of the ringelmann effect in software … · 2016. 12. 7. · a quantitative...
TRANSCRIPT
A Quantitative Study of the Ringelmann Effect inSoftware Development Teams
Ingo Scholtes
Chair of Systems Design, ETH Zurichwith Pavlin Mavrodiev and Frank Schweitzer
Computational Social Science
SocialSciences
Computer Science
data miningsocial network analysismodeling & simulation
data mining & simulationextract knowledge from (noisy)data on social systems
micro- and macro-level simulationsof social systems
⇒ new ways to test hypothesesdrawn from sociological theory
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 2 / 8
Computational Social Science
SocialSciences
Computer Science
social aspects in system design
data miningsocial network analysismodeling & simulation
data mining & simulationextract knowledge from (noisy)data on social systems
micro- and macro-level simulationsof social systems
⇒ new ways to test hypothesesdrawn from sociological theory
social aspects in system designregain control of socially-embedded(cyber-physical) systems
better understand & managedevelopment processes
⇒ improve modeling, design andcontrol of technical systems
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 2 / 8
Context: Collaborative Software Engineering
technical aspects: programminglanguage, architecture, codecomplexity, support tools. . .
social aspects: developmentprocess, team composition,
communication, coordination, . . .
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 3 / 8
Challenge: Understanding team productivity
software economics: how productiveare software development teams?
“Adding manpower to a latesoftware project makes it later.”
Fred Brooks (1975)
Ringelmann effect in social psychology:larger teams are less productive
1 motivational factors: “social loafing”2 overhead of coordination
research questions:1 does the Ringelmann effect apply to Open
Source communities?2 can we detect the underlying mechanisms?
Fred Brooks
image: CC-BY-SA SD&M
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 4 / 8
Challenge: Understanding team productivity
software economics: how productiveare software development teams?
“Adding manpower to a latesoftware project makes it later.”
Fred Brooks (1975)
Ringelmann effect in social psychology:larger teams are less productive
1 motivational factors: “social loafing”2 overhead of coordination
research questions:1 does the Ringelmann effect apply to Open
Source communities?2 can we detect the underlying mechanisms?
Maximilien Ringelmann(1861-1931)
image: CC-by-SA Bart Derksen
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 4 / 8
Challenge: Understanding team productivity
software economics: how productiveare software development teams?
“Adding manpower to a latesoftware project makes it later.”
Fred Brooks (1975)
Ringelmann effect in social psychology:larger teams are less productive1 motivational factors: “social loafing”2 overhead of coordination
research questions:1 does the Ringelmann effect apply to Open
Source communities?2 can we detect the underlying mechanisms?
Maximilien Ringelmann(1861-1931)
0
0.2
0.4
0.6
0.8
1
1 3 5 6 7 8Forc
e pe
r tea
m m
embe
r
Team size
Ringelmann effect (Maximilien Ringelmann, 1913)
2 4
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 4 / 8
Challenge: Understanding team productivity
software economics: how productiveare software development teams?
“Adding manpower to a latesoftware project makes it later.”
Fred Brooks (1975)
Ringelmann effect in social psychology:larger teams are less productive1 motivational factors: “social loafing”2 overhead of coordination
research questions:1 does the Ringelmann effect apply to Open
Source communities?2 can we detect the underlying mechanisms?
Empirical Software Engineering,Vol. 21, No. 2, April 2016
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 4 / 8
Data Science approach: commit log analysis
time
range = [1:n]result = {}for i in range: n1 = str(s[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:m]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:100]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=0
range = [1:200]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
commit 1 commit 2 commit 3 commit 4 commit 5v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return dat
v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return clean(dat)
range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
x = ‘ASC‘dat = []
dat = getData()dat = sort(dat,x)
return clean(dat)
commit 6 commit 7 commit 8x = ‘DESC‘dat = []
dat = getData()dat = sort(dat,x)c = clean(dat)
return s
commit 9 commit 10range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n2 result[key]=1
data: GHTorrent gitHub dump (~1.5 TB)
identi�ed 58 most active OpenSource projects 580,000 commits 30,000 developers > 10 years of commit history
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 5 / 8
Data Science approach: commit log analysis
time
range = [1:n]result = {}for i in range: n1 = str(s[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:m]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:100]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=0
range = [1:200]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
commit 1 commit 2 commit 3 commit 4 commit 5v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return dat
v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return clean(dat)
range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
x = ‘ASC‘dat = []
dat = getData()dat = sort(dat,x)
return clean(dat)
commit 6 commit 7 commit 8x = ‘DESC‘dat = []
dat = getData()dat = sort(dat,x)c = clean(dat)
return s
commit 9 commit 10range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n2 result[key]=1
data: GHTorrent gitHub dump (~1.5 TB)
identi�ed 58 most active OpenSource projects 580,000 commits 30,000 developers > 10 years of commit history
Q1: What is the team?>> active developers inreasonable time window
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 5 / 8
Data Science approach: commit log analysis
time
range = [1:n]result = {}for i in range: n1 = str(s[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:m]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:100]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=0
range = [1:200]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
commit 1 commit 2 commit 3 commit 4 commit 5v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return dat
v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return clean(dat)
range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
x = ‘ASC‘dat = []
dat = getData()dat = sort(dat,x)
return clean(dat)
commit 6 commit 7 commit 8x = ‘DESC‘dat = []
dat = getData()dat = sort(dat,x)c = clean(dat)
return s
commit 9 commit 10range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n2 result[key]=1
data: GHTorrent gitHub dump (~1.5 TB)
identi�ed 58 most active OpenSource projects 580,000 commits 30,000 developers > 10 years of commit history
Q1: What is the team?>> active developers inreasonable time windowQ2: What is productivity?>> Levenshtein distancebetween commits
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 5 / 8
Data Science approach: commit log analysis
team size: 2
time window 1
time
range = [1:n]result = {}for i in range: n1 = str(s[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:m]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:100]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=0
range = [1:200]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
commit 1 commit 2 commit 3 commit 4 commit 5v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return dat
v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return clean(dat)
range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
x = ‘ASC‘dat = []
dat = getData()dat = sort(dat,x)
return clean(dat)
commit 6 commit 7 commit 8x = ‘DESC‘dat = []
dat = getData()dat = sort(dat,x)c = clean(dat)
return s
commit 9 commit 10range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n2 result[key]=1
code contributions
75 characters
89 characters
mean contribution: 82
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 5 / 8
Data Science approach: commit log analysis
time
range = [1:n]result = {}for i in range: n1 = str(s[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:m]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:100]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=0
range = [1:200]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
commit 1 commit 2 commit 3 commit 4 commit 5v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return dat
v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return clean(dat)
range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
x = ‘ASC‘dat = []
dat = getData()dat = sort(dat,x)
return clean(dat)
commit 6 commit 7 commit 8x = ‘DESC‘dat = []
dat = getData()dat = sort(dat,x)c = clean(dat)
return s
commit 9 commit 10range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n2 result[key]=1
time window 2
code contributions
45 characters
17 characters
29 characters
16 characters
team size: 4mean contribution: 26.75
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 5 / 8
Data Science approach: commit log analysis
time
range = [1:n]result = {}for i in range: n1 = str(s[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:m]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:100]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=0
range = [1:200]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
commit 1 commit 2 commit 3 commit 4 commit 5v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return dat
v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return clean(dat)
range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
x = ‘ASC‘dat = []
dat = getData()dat = sort(dat,x)
return clean(dat)
commit 6 commit 7 commit 8x = ‘DESC‘dat = []
dat = getData()dat = sort(dat,x)c = clean(dat)
return s
commit 9 commit 10range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n2 result[key]=1
time window 2
code contributions
45 characters
17 characters
29 characters
16 characters
team size: 4mean contribution: 26.7510−2
10−1100101102103104105106107
100 101 102 103
Team size
Mea
n co
de c
ontr
ibut
ion
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 5 / 8
Data Science approach: commit log analysis
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 5 / 8
Data Science approach: commit log analysis
time
range = [1:n]result = {}for i in range: n1 = str(s[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:m]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:100]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=0
range = [1:200]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
commit 1 commit 2 commit 3 commit 4 commit 5v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return dat
v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return clean(dat)
range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
x = ‘ASC‘dat = []
dat = getData()dat = sort(dat,x)
return clean(dat)
commit 6 commit 7 commit 8x = ‘DESC‘dat = []
dat = getData()dat = sort(dat,x)c = clean(dat)
return s
commit 9 commit 10range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n2 result[key]=1
Mea
n co
de c
ontr
ibut
ion
102
103
100 101 102 103
Team size
100
101
102
103
104
105
101 102
Team size
Project B
productivity coefficientα=-0.12 ±0.07, r2=0.23
productivity coefficientα=-1.9 ±0.2, r2=0.47
Project A
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 5 / 8
Coordination networks and productivity
time
range = [1:n]result = {}for i in range: n1 = str(s[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:m]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:100]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=0
range = [1:200]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
commit 1 commit 2 commit 3 commit 4 commit 5v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return dat
v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return clean(dat)
range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
x = ‘ASC‘dat = []
dat = getData()dat = sort(dat,x)
return clean(dat)
commit 6 commit 7 commit 8x = ‘DESC‘dat = []
dat = getData()dat = sort(dat,x)c = clean(dat)
return s
range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n2 result[key]=1
commit 9 commit 10
network of coordinationrequirements
time window 2
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 6 / 8
Coordination networks and productivityProject B
keithbsmileyheroims
elie.toubiana
chrism sergeizenchenko
clay.allsopp
dodikk88.reg
iromero
hffmnn
me
sharrikk
me
simonsm2 denis
vgrichina
dkasper
larromba
nick
reynaldo
fabian.canas
m1entus kzdornyy
chroman16
horacek.eric
liubiqu
frankodwyer
javier.apiclaus
bryan.irace
mbowman
cedric
billwang1990
dustin.barker
tworona
ben
dustin.steele
plusbryan
blake.schwendiman gabrielh
alexh
roboteti
boztalay
francis
contactkishikawakatsumi
dromaguirre
m.tuerck
lsh32768bruno.furtado
me
sam
tech1jon
jesse.d.squires
roland_tecson
ninjin
inamiy
ptower
chris
github.maks3wmic.gallego
matthew
me
pieter
david
denixport
cgmartin
chris
antoine
padraic.brady
adam
mhujer
adamlundrigan
njcalugar
ralph.schindler
allo.vince
theman
jacob
alex_pogodin
marc−bennewitz
intiilapa−zfsaschaprolic
rob
koen
jmikola
jurian
yanick.rochon
martinmeredith
ocramius
zoeslam
enrico
walter.tamboer
padraic
sasezaki
fritz.gerneth
me
duke.ejoom.com
sascha.howe
time
range = [1:n]result = {}for i in range: n1 = str(s[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:m]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:100]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=0
range = [1:200]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
commit 1 commit 2 commit 3 commit 4 commit 5v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return dat
v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return clean(dat)
range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
x = ‘ASC‘dat = []
dat = getData()dat = sort(dat,x)
return clean(dat)
commit 6 commit 7 commit 8x = ‘DESC‘dat = []
dat = getData()dat = sort(dat,x)c = clean(dat)
return s
commit 9 commit 10range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n2 result[key]=1
Project A
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 6 / 8
Coordination networks and productivity
time
range = [1:n]result = {}for i in range: n1 = str(s[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:m]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=1
range = [1:100]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = (n1, n2) result[key]=0
range = [1:200]result = { 0:0 }for i in range: n1 = str(t[0]) n2 = str(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
commit 1 commit 2 commit 3 commit 4 commit 5v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return dat
v_list = []dat = []
dat = getData()dat = sort(dat)dat = clean(dat)
return clean(dat)
range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n1 result[key]=0
x = ‘ASC‘dat = []
dat = getData()dat = sort(dat,x)
return clean(dat)
commit 6 commit 7 commit 8x = ‘DESC‘dat = []
dat = getData()dat = sort(dat,x)c = clean(dat)
return s
commit 9 commit 10range = [1:200]result = { 0:0 }for i in range: n1 = int(t[0]) n2 = int(t[1]) l.append(n1) l.append(n2) key = n2 result[key]=1
Project B
100
101
0 20 40 60
100
101
0 20 40 60
Mea
n de
gree
Team size Team size
densification coefficientβ=0.007 ±0.005, r2=0.036
densification coefficientβ=0.035 ±0.007, r2=0.24
Project A
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 6 / 8
Coordination networks and productivity
key �nding:
statistically signi�cant relationbetween densi�cation of coordination
networks and decrease in productivity as teams grow in size
Den
si�c
atio
n co
e�ci
ent β
Productivity coe�cient α
−0.05
0.00
0.05
0.10
0.15
0.20
−3 −2 −1 0
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 6 / 8
Take-away messages
1 we provide quantitative evidence for theRingelmann effect in Open Sourcesoftware development teams
2 we uncover coordination overhead asone mechanism behind the observedscaling behavior of team productivity
3 we show that social science theoriesprovide actionable insights intosoftware engineering processes
Empirical Software Engineering,
Vol. 21, No. 2, April 2016
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 7 / 8
Take-away messages
1 we provide quantitative evidence for theRingelmann effect in Open Sourcesoftware development teams
2 we uncover coordination overhead asone mechanism behind the observedscaling behavior of team productivity
3 we show that social science theoriesprovide actionable insights intosoftware engineering processes
Empirical Software Engineering,
Vol. 21, No. 2, April 2016
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 7 / 8
Take-away messages
1 we provide quantitative evidence for theRingelmann effect in Open Sourcesoftware development teams
2 we uncover coordination overhead asone mechanism behind the observedscaling behavior of team productivity
3 we show that social science theoriesprovide actionable insights intosoftware engineering processes
Empirical Software Engineering,
Vol. 21, No. 2, April 2016
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 7 / 8
Thank You!I Scholtes, M Strohmaier, F Schweitzer: Is Computer Science becoming a Social Science?,Under review, October 2016
I Scholtes, P Mavrodiev, F Schweitzer: From Aristotle to Ringelmann: A large-scale analysisof productivity and coordination in Open Source Software projects, Empirical SoftwareEngineering, Vol. 21, No. 2, April 2016
I Scholtes: Understanding Complex Systems: When Big Data meets Network Science, it -Information Technology, Vol. 57, No. 4, pp. 252-256, July 31 2015
MS Zanetti, I Scholtes, CJ Tessone, F Schweitzer: The Rise and Fall of a Central Contributor:Centralization and Performance in the Gentoo Community, Cooperative and Human Aspectsin Software Engineering, San Francisco, CA, USA, May 2013
MS Zanetti, I Scholtes, CJ Tessone, F Schweitzer: Categorizing Bugs with Social Networks: ACase Study on Four Open Source Software Communities, 35th International Conference onSoftware Engineering (ICSE ’13), pp. 1032-1041, San Francisco, CA, USA, May 2013
@ingo s
http://www.ingoscholtes.net
Systems Design A Quantitative Study of the Ringelmann Effect in Software Development Teamshttp://www.sg.ethz.ch Ingo Scholtes CSS Wintersymposium Cologne, DE 01/12/2016 8 / 8