{
(set: $months = 1)
(set: $noReleases = 0)
(set: $noMentors = (random: 2,5))
<!-- Company controlled -->
(set: $origin = (random: 1, 3))
(if:$origin is 1) [
(set: $companyA = (random: 5, 15))
(set: $companyB = 0)
(set: $companyC = 0)
(set: $independant = 0)
(set: $committerBar = 12)
(set: $interest = 20)
]
<!-- Collaboration -->
(else-if:$origin is 2) [
(set: $companyA = (random: 0, 7))
(set: $companyB = (random: 0, 7))
(set: $companyC = 0)
(set: $independant = (random: 0, 2))
(set: $committerBar = 6)
(set: $interest = 10)
]
<!-- Github project -->
(else:) [
(set: $companyA = (random: 0, 3))
(set: $companyB = (random: 0, 3))
(set: $companyC = (random: 0, 3))
(set: $independant = (random: 0,3))
(set: $committerBar = 3)
(set: $interest = 5)
]
(set: $noCommitters = $companyA + $companyB + $companyC + $independant)
(set: $activeCommitters = $noCommitters)
(set: $activeContributors = 0)
(set: $noUsers = 0)
(set: $newCommitters = 0)
(set: $codeProgress = 0)
(set: $noBugs = (random: 5,20))
(set: $addToCompanyA = False)
(set: $addToCompanyB = False)
(set: $addToCompanyC = False)
}
''Welcome to the Incubator game''
The object to graduate as a top level project, to do that you'll need to add 3 committers and make 3 releases.
You can perform various activities to increase interest in your project, work towards making a release and adding new committers. You should check what advice your mentors have for your project.
Internally the game tracks:
- Interest in the project
- Company committer membership. You'll note the starting message is slightly different depending on the company contributor mix you have.
- Active committers
- Active contributors
- Progress towards the next release
- Bugs in the code base
- Number of interested users
- Length of incubation
All of these have some impact on what happens.
Possible endings for the incubator game include:
- Having no users
- Having no active committers
- Retiring due to lack of interest in the project
- Graduation to a top level project
If you fail to graduate, don't worry and just try again. Some games are harder than others, particularly ones where all the committers all come from one company.
Let us start on your incubator journey. Your (if:$origin is 1)[company's](else-if:$origin is 2)[collaborative](else:)[github] project has been accepted by the IPMC and you have just set up your mailing list, github and initial website.
[[Begin -> ChooseActivities]]
{
<!-- Contributor interest wanes over time unless you make them committers -->
(if:$interestTimer > 0) [
(set:$interestTimer = $interestTimer - 1)
(if:$interestTimer is 0) [
(set: $activeContributors = $activeContributors - 1)
(set:$interest = $interest - 2)
A contributor has lost interest in your project.
]
]
<!-- Last one to leave please turn off the lights -->
(if:$activeCommitters is 0)[(goto:"NoCommitters")]
<!-- Committer interest wanes over time -->
(set: $rand = (random: 1, 100))
(if: $rand < 10) [ (set:$interest = $interest - 1)(set: $activeCommitters = $activeCommitters - 1)A committer has lost interest in your project.
{
(if: $companyA > 0) [ (set: $companyA = $companyA - 1)]
(elseif: $companyB > 0) [(set: $companyB = $companyB - 1) ]
(elseif: $companyC > 0) [(set: $companyC = $companyC - 1) ]
(else:)[(set:$independant = $independant -1)]
}
]
<!-- One controlling company reduces interest -->
(if: $companyA > ($companyB + $companyC + $independant)*2)[(set:$interest = $interest - 1)]
(else-if: $companyA > ($companyB + $companyC + $independant))[(set:$interest = $interest - 0.5)]
<!-- Company changes direction -->
(set: $rand = (random: 1, 100))
(if: $rand < 5) [
(if: $companyA > 0) [(set: $loss = $companyA)(set: $activeCommitters = $activeCommitters - $companyA) (set:$interest = $interest - 20)(set: $companyA = 0) A company is no longer contribiting to your project and you lost $loss committers. ]
(elseif: $companyB > 0) [ (set:$interest = $interest - 10)(set: $loss = $companyB)(set: $activeCommitters = $activeCommitters - $companyB)(set: $companyB = 0) A company is no longer contribiting to your project and you lost $loss committers. ]
(elseif: $companyC > 0) [ (set:$interest = $interest - 5)(set: $loss = $companyC)(set: $activeCommitters = $activeCommitters - $companyC)(set: $companyC = 0) A company is no longer contribiting to your project and you lost $loss committers. ]
]
<!-- New company shows interest -->
(if: $companyA is 0 or $companyB is 0 or $companyC is 0)[
(set: $rand = (random: 1, 100))
(if: $rand < $interest/20) [ (set:$interest = $interest + 5)(set: $companyContribitors = (random:1,5))(set: $activeContributors = $activeContributors + $companyContribitors)A company has shown interest in contributing to your project.]
(if: $companyA is 0)[(set: $addToCompanyA = True)]
(else-if: $companyB is 0)[(set: $addToCompanyB = True)]
(else-if: $companyC is 0)[(set: $addToCompanyC = True)]
]
<!-- Mentor interest wanes over time -->
(set: $rand = (random: 1, 100))
(if: $rand < 5) [(set: $noMentors = $noMentors - 1) One of your mentors has left.]
<!-- User interest wanes over time -->
(if: $noUsers > 0 and $rand < 5) [(set: $noUsers = $noUsers - (random:1,5))]
<!-- Long lived project loose interest --->
(if: $months > 30) [ (set:$interest = $interest - 2)(set:$noUsers = $noUsers - (random:1,5)) You have been incubating for a long time and people are loosing interest.]
(if: $months > 45) [ (set:$interest = $interest - 4)(set:$noUsers = $noUsers - (random:1,5))]
(if: $months > 60) [ (set:$interest = $interest - 8)(set:$noUsers = $noUsers - (random:1,5))]
(if:$interest < 0)[(goto:"Retire")]
(if:$noUsers < 0)[(goto:"NoUsers")]
(set:$time=(round: $months))
(set:$reportTime = $time % 4)
(if: $time is 1 or $time is 2 or $time is 3 or $reportTime is 0)
[(set:$needToReport = True)(set:$reported = False)]
(else:)
[(set:$needToReport = False)]
}
<!-- Bugs cause users to loose interest -->
(if: $rand < $bugs/2) [(set: $noUsers = $noUsers - (random:1,3))Users are complaining that the software has a lot of bugs.]
You have been incubating for $time month(if: $time is not 1)[s].
Your project has $noCommitters committer(if: $noCommitters is not 1)[s].
You have added $newCommitters committer(if: $newCommitters is not 1)[s].
You have made $noReleases release(if: $noReleases is not 1)[s].
{
(if:$activeCommitters < 3)[There's not a lot of coding activity in your project.<br />]
(if:$interest < 10)[There's not a lot of interest in your project. What can you do to improve this?<br />]
}
What do you want to do next?
{
''Code''<br />
[[Work on new features -> Development ]]<br />
[[Work on fixing bugs -> FixBugs ]]<br />
(if:$codeProgress > 30)[ [[ Make a Release -> Release ]]<br />]
''Community''<br />
[[Answer user question -> Answer ]]<br />
[[Make it easer to build your project -> Build]]<br />
[[ Improve the website -> Website ]]<br />
[[ Improve the documentation -> Documentation ]]<br />
[[ Write a blog post -> BlogPost ]]<br />
[[Submit a talk to a conferance -> Conferance ]]<br />
[[Project Analysis ->Analysis]]<br />
''Governance''<br />
(if:$reported is False and $needToReport is True)[[[Submit Incubator report -> Report ]]<br />]
(if:$noMentors > 0)[[[ Discuss the project with your mentors -> Mentors ]]<br />]
(if:$noMentors < 2)[[[ Ask IPMC for another mentor -> NewMentors ]]<br />]
[[Lower committer bar -> LowerBar]]<br />
[[Raise committer bar -> RaiseBar]]<br />
(if:$activeContributors > 0 and (random:1,100) > $committerBar*5) [[[ Vote in a commmiter -> Committer]]<br />]
(if:$noReleases > 2 and $newCommitters > 2 and $months > 11) [[[ Graduate -> Graduate ]]<br />]
}
You work on improving the website.
{
(set: $interest = $interest + 5)
(set: $noUsers = $noUsers + (random: 1, 10))
(set: $rand = (random: 1, 100))
(if: $rand < $interest) [(goto:"NewContribitor")]
(set: $months = $months + 0.5)
}
[[ Next -> ChooseActivities]]You work on improving the documenation.
{
(set: $interest = $interest + 2)
(set: $noUsers = $noUsers + (random: 1, 10))
(set: $rand = (random: 1, 100))
(if: $rand < $interest) [(goto:"NewContribitor")]
(set: $months = $months + 0.5)
}
[[ Next -> ChooseActivities]]
You write more code.
{
(set: $interest = $interest + 1)
(set: $noUsers = $noUsers + (random: 1, 5))
(set: $noBugs = $noBugs + (random:1,10))
(set: $codeProgress = $codeProgress + $activeCommitters + $activeContributors/2 )
(set: $months = $months + 1)
(set: $rand = (random: 1, 100))
(if: $rand < $interest) [(goto:"NewContribitor")]
}
[[ Next -> ChooseActivities]]You make a release.
{
(set: $interest = $interest + 5)
(set: $noUsers = $noUsers + (random: 1, 10))
(set: $months = $months + 1)
(set: $noReleases = $noReleases + 1)
(set: $codeProgress = 0)
(set: $rand = (random: 1, 100))
(if: $rand < $interest) [(goto:"NewContribitor")]
}
[[ Next -> ChooseActivities]]You vote in a committer.
{
(set: $interest = $interest + 2)
(set: $noCommitters = $noCommitters + 1)
(set: $activeCommitters = $activeCommitters + 1)
(set: $newCommitters = $newCommitters + 1)
(set: $activeContributors = $activeContributors - 1)
(set: $months = $months + 0.2)
(set: $rand = (random: 1, 100))
(if: $addToCompanyA) [
(set:$companyA = $companyA + 1)
]
(if: $addToCompanyB) [
(set:$companyB = $companyB + 1)
]
(if: $addToCompanyC) [
(set:$companyC = $companyC + 1)
]
(else-if:$origin is 1) [
(if: $rand < 50) [(set:$companyA = $companyA + 1)]
(else:) [(set:$independant = $independant + 1)]
]
(else-if:$origin is 2) [
(if: $rand < 33 or $addToCompanyA) [(set:$companyA = $companyA + 1)]
(else-if: $rand < 66 or $addToCompanyB) [(set:$companyB = $companyB + 1)]
(else:) [(set:$independant = $independant + 1)]
]
(else:) [
(set:$independant = $independant + 1)
]
(if: $activeCommitters is 0) [
(set: $addToCompanyA = False)
(set: $addToCompanyB = False)
(set: $addToCompanyC = False)
]
}
[[ Next -> ChooseActivities]]You improve your build system
{
(set: $interest = $interest + 3)
(set: $rand = (random: 1, 100))
(if: $rand < $interest) [(goto:"NewContribitor")]
(set: $months = $months + 0.5)
}
[[ Next -> ChooseActivities]]{
(set: $rand = (random: 1, 100))
}
You submit talk to a conferance (if: $rand < $interest*2)[and it was accepted.](else:)[and it was rejected.]
{
(if: $rand < $interest*2)
[
(set: $interest = $interest + 5)
(set: $noUsers = $noUsers + (random: 1, 20))
(set: $months = $months + 0.2)
]
(else:)
[
(set: $months = $months + 0.1)
]
}
[[ Next -> ChooseActivities]]
Someone is interested in your project.
{
(set: $activeContributors = $activeContributors + 1)
(set: $interestTimer = $commmiterBar)
}
[[ Next -> ChooseActivities]]You write a blog post.
{
(set: $interest = $interest + 1)
(set: $noUsers = $noUsers + (random: 1, 5))
(set: $rand = (random: 1, 100))
(if: $rand < $interest/2) [(goto:"NewContribitor")]
(set: $months = $months + 0.1)
}
[[ Next -> ChooseActivities]]You have $noMentors mentors.
(if: $committerBar > 10)[You have a high committer bar.](else-if: $committerBar > 5)[You have a medium committer bar.](else:)[You have a low committer bar.]
{
(set:$advice = 0)
(set: $months = $months + 0.1)
(if:$interest < 50)[(set:$advice = 1)You need to generate interest in your project.<br />]
(if:$newCommitters < 1)[(set:$advice = 1)You need to add committers to your project.<br />]
(if:$noReleases < 1)[(set:$advice = 1)You need to make a release.<br />]
(if:$companyA > $noCommitters/2)[(set:$advice = 1)You need to diversify your committer base.<br />]
(else-if:$companyA+$companyB+$companyC > 3*$noCommitters/4)[(set:$advice = 1)You need to diversify your committer base.<br />]
(if: $months > 24) [(set:$advice = 1)Due to the length of incubator people are less interested in this project.<br />]
(if: (min:$noReleases,4) + (min:$newCommitters,4) > 4)[(set:$advice = 1)You are close to considering graduation.<br />]
(if: $activeCommitters < $noCommitters/2)[(set:$advice = 1)Less than half of your committers are active.<br />]
(if: $activeCommitters < 4) [(set:$advice = 1)You need more active committers on the project.<br />]
(if: $noUsers < 100)[(set:$advice = 1)You need to get more users interested in your project.<br />]
(if: $committerBar > 6)[(set:$advice = 1)You may want to consider lowering your committer bar.<br />]
(if: $noBugs > 50)[(set:$advice = 1)You may want to consider fixing some bugs.<br />]
}
(if:$advice is 0)[Your project is going well]
[[ Next -> ChooseActivities]]Congratulations you are now a top level project.
{
(if:$companyA > $noCommitters/2)[There is some concerns abut the diversity of your committer base.]
(if: $activeCommitters < 5) [There is some concerns about the number of active committers.]
(if: $noUsers < 100)[You still need to get more users interested in your project.]
(if: $committerBar > 6)[There are some concerns about your high committer bar.]
}Sadly you did not attract enough interst in your project and the project has retired.Sadly you have no active committers on your project and the project retires.You submitted your report.
{
(set:$reported = True)
}
[[ Next -> ChooseActivities]]You ask the IPMC for another mentor.
{
(set: $noMentors = $noMentors + 1)
}
[[ Next -> ChooseActivities]]You answer a user's question on the mailing list.
{
(set: $interest = $interest + 1)
(set: $noUsers = $noUsers + 1)
(set: $rand = (random: 1, 100))
(if: $rand < $interest/2) [(goto:"NewContribitor")]
(set: $months = $months + 0.1)
}
[[ Next -> ChooseActivities]]
You fix some bugs.
{
(set: $interest = $interest + 1)
(set: $noBugs = $noBugs - (random: 1,10))
(if:$noBugs < 0)[(set:$NoBugs = 0)]
(set: $codeProgress = $codeProgress + ($activeCommitters + $activeContributors/2)/3 )
(set: $months = $months + 0.25)
}
[[ Next -> ChooseActivities]]Sadly the project users has lost interest in it and the project, while the project could continue there is not much point in doing so.You make it earier for people to become a committer.
{
(set: $interest = $interest + 5)
(set: $months = $months + 0.1)
(set: $committerBar = $committerBar * 0.5)
}
[[ Next -> ChooseActivities]]You make it harder for people to become a committer.
{
(set: $interest = $interest - 5)
(set: $months = $months + 0.1)
(set: $committerBar = $committerBar * 1.5)
}
[[ Next -> ChooseActivities]]Project Analysis
{
(set: $percentA = 10*(round:$companyA/$noCommitters*10))
(set: $percentB = 10*(round:$companyB/$noCommitters*10))
(set: $percentC = 10*(round:$companyC/$noCommitters*10))
(set: $percentI = 10*(round:$independant/$noCommitters*10))
(set: $percentCommitters = 10*(round: $activeCommitters/$noCommitters*10))
(set: $percentInterest = 10*(round:$interest/100*10))
(set: $progress = 10*(round:$codeProgress/30*10))
(set: $roughUsers = 10*(round:$noUsers/10))
(set: $roughBugs = 5*(round:$noUsers/5))
}
Project Interest: $percentInterest%
Committers are from:
{
(if: $companyA > 0)[Company A: $percentA%<br />]
(if: $companyB > 0)[Company B: $percentB%<br />]
(if: $companyC > 0)[Company C: $percentC%<br />]
(if: $independant > 0)[Independent: $percentI%<br />]
}
Active committers: $percentCommitters%
Active contributors: $activeContributors
Active users: $roughUsers
Release progress: $progress%
Bugs: $roughBugs
[[ Next -> ChooseActivities]]