1 Introduction
2 Related work
2.1 Open source developers’ life cycle
2.2 Developers’ turnover and disengagement
3 Research framework
-
RQ1. To what extent can our method identify developers’ breaks?
-
RQ2. How often do core developers take breaks?
-
RQ3. How long do core developers’ breaks last?
-
RQ4. How common are the transitions between states?
4 Phase I - modeling developers’ activities and breaks
4.1 Evaluation of the preliminary model
4.2 The revised model of inactivity
5 Phase II - evaluation of the revised model and characterization of the phenomenon
5.1 Data collection and sampling
Organization | #repos | Selected project |
---|---|---|
github | 349 | linguist |
atom | 256 | atom |
ionic-team | 257 | ionic-framework |
nodejs | 172 | node |
facebook | 162 | react |
rails | 98 | rails |
aseprite | 64 | aseprite |
jekyll | 53 | jekyll |
laravel | 56 | framework |
jquery | 45 | jquery |
MinecraftForge | 40 | MinecraftForge |
JabRef | 41 | jabref |
SpaceVim | 35 | SpaceVim |
flutter | 34 | flutter |
fastlane | 32 | fastlane |
crystal-lang | 25 | crystal |
BabylonJS | 21 | Babylon.js |
elixir-lang | 9 | elixir |
Project | Progr. language | Age | #contributors | LOC | #pull reqs | #stars |
---|---|---|---|---|---|---|
linguist* | Ruby; C | 8 | 760 | 191 k | 2.7 k | 6.8 k |
atom* | JavaScript | 8 | 430 | 196 k | 4.4 k | 48.9 k |
ionic-framework* | TypeScript | 4 | 328 | 115 k | 2.9 k | 38.2 k |
node | JavaScript; C++ | 10 | 2471 | 5.9 M | 17.8 k | 61.9 k |
react | JavaScript | 6 | 1295 | 191 k | 8 k | 130.8 k |
rails* | Ruby | 15 | 3825 | 328 k | 23.5 k | 43.3 k |
aseprite | C++ | 12 | 40 | 227 k | 185 | 7.4 k |
jekyll | Ruby | 11 | 874 | 41 k | 3.6 k | 39.2 k |
laravel/framework* | PHP | 6 | 1962 | 115 k | 16.4 k | 17.5 k |
jquery | JavaScript | 13 | 278 | 38 k | 2.5 k | 52.7 k |
MinecraftForge | Java | 8 | 320 | 82 k | 3.2 k | 3.5 k |
JabRef* | Java | 15 | 213 | 138 k | 2.8 k | 1.3 k |
SpaceVim | Vim | 3 | 186 | 221 k | 1.6 k | 12.6 k |
flutter* | Dart | 5 | 399 | 487 k | 12.9 k | 66.8 k |
fastlane | Ruby | 5 | 1016 | 561 k | 5.6 k | 27.5 k |
crystal | Crystal | 7 | 347 | 15 k | 3.5 k | 14.1 k |
Babylon.js | JavaScript; TypeScript | 6 | 256 | 2.6 M | 5.5 k | 1.5 k |
elixir* | Elixir | 8 | 849 | 47 k | 5.3 k | 15.4 k |
5.1.1 Identifying Core developers and their pauses
Project | Devs | TF | Core | % TF in Core |
---|---|---|---|---|
nodejs/node | 2031 | 15 | 115 | 87% |
rails/rails | 3834 | 13 | 93 | 100% |
laravel/framework | 1979 | 1 | 74 | 100% |
facebook/react | 1301 | 4 | 33 | 100% |
fastlane/fastlane | 958 | 3 | 19 | 100% |
elixir-lang/elixir | 851 | 1 | 13 | 100% |
jekyll/jekyll | 846 | 2 | 17 | 100% |
github/linguist | 765 | 3 | 89 | 100% |
atom/atom | 431 | 4 | 11 | 25% |
flutter/flutter | 402 | 7 | 28 | 100% |
ionic-team/ionic-framework | 331 | 3 | 8 | 100% |
crystal-lang/crystal | 327 | 2 | 6 | 50% |
MinecraftForge/MinecraftForge | 289 | 3 | 6 | 100% |
jquery/jquery | 263 | 3 | 9 | 100% |
BabylonJS/Babylon.js | 231 | 2 | 7 | 100% |
JabRef/JabRef | 204 | 7 | 8 | 71% |
SpaceVim/SpaceVim | 158 | 1 | 1 | 100% |
aseprite/aseprite | 37 | 1 | 1 | 100% |
Tot. | 75 | 538 |
5.1.2 Identifying Core developers’ inactivity periods
5.1.3 Labeling breaks and transitions
6 Phase II - results
6.1 RQ1 – Evaluation of the model and identification method
ID | Project | Age | Gender | # other projects in the org. They contribute to |
---|---|---|---|---|
D-01 | nodejs/node | 50 | Male | – |
D-02 | rails/rails | 30 | Male | 1 |
D-03 | rails/rails | 32 | Male | 1 |
D-04 | rails/rails | 47 | Male | 0 |
D-05 | rails/rails | 45 | Male | 2 |
D-06 | rails/rails | 23 | Male | 7 |
D-07 | rails/rails | 32 | Male | 1 |
D-08 | rails/rails | 32 | Male | 2+ |
D-09 | rails/rails | 37 | Male | 0 |
D-10 | laravel/framework | 21 | Male | 4 |
D-11 | laravel/framework | 28 | Male | 3 |
D-12 | JabRef/jabref | 33 | Male | 1 |
D-13 | JabRef/jabref | 33 | Male | 0 |
D-14 | elixir-lang/elixir | 41 | Male | 0 |
D-15 | facebook/linguist | 40 | Male | 0 |
D-16 | flutter/flutter | 39 | Male | all |
D-17 | flutter/flutter | 38 | Male | 2+ |
Breaks | Total | Agreements (%) | Disagreements (%) | Other (%) |
Gone | 5 | 1 (20%) | 4 (80%) | 0 (0%) |
Inactive | 39 | 29 (74.4%) | 7 (20.5%) | 2 (5.1%) |
Non-coding | 44 | 32 (72.7%) | 9 (20.5%) | 3 (6.8%) |
Tot. | 88 | 62 (70.5%) | 21 (23.9%) | 5 (5.7%) |
Transitions | Total | Agreements (%) | Disagreements (%) | Other (%) |
Back-to-coding | 40 | 33 (82.5%) | 5 (12.5%) | 2 (5%) |
Reactivation | 40 | 30 (75%) | 8 (20%) | 2 (5%) |
Comeback | 5 | 4 (80%) | 1 (20%) | 0 (0%) |
Tot. | 85 | 67 (78.8%) | 14 (16.5%) | 4 (4.7%) |
Category (%) | Reason (%) | Examples |
---|---|---|
Personal-related (78.3%) | Professional (21.7%), Life event (14.5%), Financial (21.7%), Change of interest (20.3%) | Analysis/design work, job change, learning a new technology, student assignment, Vacation/holidays, needed time to relax, child birth, sickness, death in the family, Need more time at work, end of financial support, Grew uninterested, migration to a new community |
Community-related, (21.7%) | Not the right time to contribute (2.9%), Social (2.9%), Changes in the project (2.9%), Role change (13%) | Did not feel responsible, others took over Problems with other members, lack of feedback/recognition Technical, organizational (governance) Becoming a project manager, mentoring |
Category (%) | Reason (%) | Examples |
---|---|---|
Personal-related (82.5%) | Professional (50%), Life event (4.3%), Financial (13%), Interest in OSS (15.2%) | Needed to fix something, work duties, job change End of vacation/holidays, Doing paid work. Wanted/found opportunity to contribute |
Community-related, (17.5%) | Sense of responsibility (13.1%), Changes in the project (2.2%), Role change (2.2%) | Commitment, exclusive knowledge, feeling dependable, Wanted to catch up, Onboarding |
RQ1 – Evaluation of the model | |
---|---|
– Almost all of the surveyed Truck Factor developers (94%) agree with our state model of inactivity, either strongly (47%) or moderately (47%). | |
– Respectively, 71% and 79% of the surveyed developers acknowledge their breaks and state transitions. | |
– The names chosen for the active and non-coding states can be misleading as they may unintentionally imply that developers are not actively participating unless they are coding. | |
– Most of the cited reasons among core developers for taking breaks as well as returning are personal ( 80%) rather than related to the interaction within the community ( 20%). | |
– The most common personal reasons for taking breaks are professional, financial, or lack of interest. | |
– The most common personal reason for returning to contribute are professional and the sense of responsibility toward the project. |
6.2 RQ2 – Break frequency
# developers who have been | # developers | |||
---|---|---|---|---|
Organization | Non-coding | Inactive | Gone | Gone during data collection |
nodejs | 112 (97%) | 101 (88%) | 24 (21%) | 16 (14%) |
rails | 92 (99%) | 93 (100%) | 60 (65%) | 38 (41%) |
aseprite | 1 (100%) | 1 (100%) | 0 (0%) | 0 (0%) |
jekyll | 16 (94%) | 15 (88%) | 8 (47%) | 8 (47%) |
laravel | 72 (97%) | 71 (96%) | 23 (31%) | 11 (15%) |
MinecraftForge | 6 (100%) | 6 (100%) | 1 (17%) | 0 (0%) |
JabRef | 8 (100%) | 7 (88%) | 4 (50%) | 3 (38%) |
SpaceVim | 1 (100%) | 0 (0%) | 0 (0%) | 0 (0%) |
fastlane | 17 (89%) | 17 (89%) | 12 (63%) | 9 (47%) |
crystal-lang | 6 (100%) | 6 (100%) | 0 (0%) | 0 (0%) |
BabylonJS | 7 (100%) | 7 (100%) | 1 (14%) | 1 (14%) |
elixir-lang | 13 (100%) | 13 (100%) | 5 (38%) | 2 (15%) |
github | 68 (76%) | 64 (72%) | 79 (89%) | 66 (74%) |
atom | 10 (91%) | 11 (100%) | 6 (55%) | 5 (45%) |
ionic-team | 8 (100%) | 8 (100%) | 1 (13%) | 1 (13%) |
facebook | 33 (100%) | 33 (100%) | 10 (30%) | 7 (21%) |
jquery | 9 (100%) | 8 (89%) | 4 (44%) | 3 (33%) |
flutter | 27 (96%) | 25 (89%) | 5 (18%) | 3 (11%) |
Avg. | 97% | 89% | 33% | – |
RQ2 – Break frequency | |
---|---|
– Almost all core developers take breaks, as 97% and 89% of them have been in the non-coding and inactive states at least once, respectively. | |
– Almost all core developers take breaks, as 97% and 89% of them have been in the non-coding and inactive states at least once, respectively. | |
– About one third of the developers analyzed (33%) have been gone at least once and disengaged completely from a project for one year or longer. | |
– Non-coding periods occur more frequently than inactive breaks within organizations; gone breaks are by far the least common. |
6.3 RQ3 – Break length
RQ3 – Break length | |
---|---|
– On average, inactive breaks last longer than non-coding breaks (65 vs. 32 days). | |
– This difference is, however, statistically significant only for three organizations (atom, crystal-lang, and MinecraftForge). |
# developers who have been | ||||||
---|---|---|---|---|---|---|
Organization | non-coding | inactive | both | W | adjusted p | Cliff’s j_j |
Organization | non-coding | inactive | both | W | adjusted p | Cliff ‘s |δ| |
nodejs | 112 | 98 | 98 | 502 | 0.3875 | 0.5146 |
rails | 92 | 93 | 92 | 168 | 1.0 | 0.6832 |
laravel | 72 | 71 | 70 | 132 | 0.3875 | 0.5527 |
github | 68 | 64 | 60 | 20 | 0.9375 | 0.7594 |
facebook | 33 | 33 | 33 | 45 | 1.0 | 0.5914 |
flutter | 27 | 24 | 23 | 73 | 1.5905e-10* | 0.2949 |
fastlane | 17 | 17 | 17 | 7 | 1.0 | 0.6678 |
jekyll | 16 | 15 | 15 | 6 | 1.0 | 0.6533 |
elixir-lang | 13 | 13 | 13 | 12 | 0.1719 | 0.4142 |
atom | 10 | 11 | 10 | 8 | 1.2379e-09* | 0.4800 |
jquery | 9 | 8 | 8 | 14 | 3.0262e-13* | 0.1250 |
ionic-team | 8 | 8 | 8 | 11 | 0.0103 | 0.1719 |
BabylonJS | 7 | 7 | 7 | 1 | 1.0 | 0.5306 |
JabRef | 8 | 7 | 7 | 0 | 0.1719 | 0.9592 |
crystal-lang | 6 | 6 | 6 | 6 | 0.0038* | 0.6111 |
MinecraftForge | 6 | 6 | 6 | 3 | 7.2804e-10* | 0.5556 |
aseprite | 1 | 1 | 1 | N/A | N/A | N/A |
SpaceVim | 1 | 1 | 1 | N/A | N/A | N/A |
6.4 RQ4 – State transition probabilities
RQ4 – State transition probabilities | |
---|---|
– Most core developers have a steady rhythm of code contributions, as the average probability of remaining in the active state is 60%. | |
– Most core developers who pause their code contributions and transition into the non-coding and inactive states resume coding and go back to active (on average 67% and 55%, respectively). | |
– On average, about 8% of inactive developers remain so for over a year and eventually become gone, disengaging from the organization. | |
– On average, more than a half of gone developers never come back ( 54%), whereas the remaining half is equally distributed between those who resume coding (i.e., active, 26%) and those who resume collaborating without contributing code (i.e., non-coding, 21%). | |
– No transition into the gone state was observed for smaller projects, counting on 1-3 Truck Factor developers and up to 6 Core developers. | |
– As compared to Low-level contributors, for High-level contributors the odds of disengaging from a project at least once decrease by 61%. |
Confidence Interval | |||
---|---|---|---|
Core devs (n = 538) | OR | 2.5% | 97.5% |
Intercept) | 1.276 | 1.090 | 1.618 |
Intercept) | 1.276 | 1.090 | 1.618 |