{
(set: $community = $community + 1)
(set: $contribution = $contribution + 1)
(set: $hoursWorked = $hoursWorked + 1)
}
You provide an answer to a user on the mailing list.
{
(if: $coc is False and (random:1,100) < 20)[(set: $community = $community - 2) Your email has offended someone on the mailing list.]
(if: (random:1,100) > $knowledge*10)[(set: $community = $community - 1)(set: $knowledge = $knowledge + 1)You didn't understand the question enough to provide a good answer, but a project member has provided a better answer, and you have learnt something in the process.]
(else:)[(set: $community = $community + 1)A user thanks you for your answer.]
}
[[Select Next Task -> SelectTask]]{
(set: $community = $community + 0.5)
(set: $hoursWorked = $hoursWorked + 0.25)
}
You send a polite email to the email list asking if anyone has an answer.
{
(if: (random:1,100) > $community*15)[You get no feedback.]
(else:)[(set: $community = $community + 1)(set:$outstandingQuestion = False)(set: $contribution = $contribution + 1)Your question has been answered.]
}
[[Select Next Task -> SelectTask]]{
(set: $community = $community + 0.5)
(set: $hoursWorked = $hoursWorked + 0.25)
}
You send a polite email to the email list asking for someone to review your pull request.
{
(if: (random:1,100) > $community*15)[You get no feedback.]
(else:)[(set:$outstandingPR = False)(set: $community = $community + 1)(set: $contribution = $contribution + 5)Your PR is reviewed and merged into the codebase. Congratulations!]
}
[[Select Next Task -> SelectTask]]{
(set: $community = $community + 0.5)
(set: $hoursWorked = $hoursWorked + 0.5)
}
You ask a question on the mailing list.
{
(if: $coc is False and (random:1,100) < 10)[(set: $community = $community - 2) Your email has offended somone.]
(if: (random:1,100) > $community*10)[(set: $outstandingQuestion = True)No-one replies to your email.]
(else:)[(set: $knowledge = $knowledge + 1)You receive a answer that helps you.]
}
(if:$outstandingQuestion)[[What do you do about your outstanding question? -> OutsandingQuestion]]
[[Select Next Task -> SelectTask]]{
(set: $community = $community + 10)
(set: $knowledge = $knowledge + 5)
(set: $attendConf = False)
}
You attend a conference and meet other people involved in the project. This takes a week.
[[[Go to next week -> NextWeek]]]{
(set: $knowledge = $knowledge + 1)
(set: $coc = True)
(set: $hoursWorked = $hoursWorked + 0.5)
}
You read the code of conduct and get a good idea of what is allowed and how you should behave on the mailing list.
[[Select Next Task -> SelectTask]]{
(set: $knowledge = 0)
(set: $hours = 4)
(set: $outsideHours = 4)
(set: $company = 1)
}
You work for a company and they allow you $hours hours a week to week on open source projects related to their business. You can also work $outsideHours a week in your own free time.
[[Select Project->SelectProject]]{
(set: $community = $community + 2)
(set: $knowledge = $knowledge + 2)
(set: $contribution = $contribution + 5)
(set: $hoursWorked = $hoursWorked + 2)
}
You review the release and provide detailed feedback.
(if: (random:1,100) < $knowledge*5 and (random:1,100) < 50)[(set: $contribution = $contribution + 5)(set: $community = $community + 5)You find a serious bug in the release and a new release candidate needs to be created.]
(else:)[(set: $contribution = $contribution + 2)(set: $community = $community + 2)You find no issues with the release.]
[[Select Next Task -> SelectTask]]{
(set: $community = $community + 1)
(set: $knowledge = $knowledge + 1)
(set: $hoursWorked = $hoursWorked + 8)
}
You submit a talk to a conference.
{
(set:$chance = ($knowledge+$community)*2.5 - $activeCommitters*5)
(if:$committer)[(set:$chance = $chance + 20)]
(if:(random:1,100) < $chance)[(set: $community = $community + 5)(set: $attendConf = True)Your talk got accepted. ]
(else:)[Your talk was not accepted, better luck next time.]
}<br />
[[Select Next Task -> SelectTask]]{
(set: $knowledge = $knowledge + 1)
(set: $guide = True)
(set: $hoursWorked = $hoursWorked + 0.5)
}
You read the contribution guide and get a good understanding of how to make contributions to the project.
[[Select Next Task -> SelectTask]]{
(set: $knowledge = $knowledge + 1)
(set: $community = $community + 1)
(set: $contribution = $contribution + 1)
(set: $outstandingPR = False)
(set: $fixBug = False)
(set: $hoursWorked = $hoursWorked + (random:1,4))
}
You submit a pull request.
{
(if: $guide is False and (random:1,100) < 20)[(set: $community = $community - 1) You've not followed the contribution guide and a project member asks you to read it before providing more feedback. ]
(if: $coc is False and (random:1,100) < 20)[(set: $community = $community - 2) Your PR has offended someone.]
(if: (random:1,100) > $knowledge*5)[(set: $community = $community
+ 0.5)(set: $knowledge = $knowledge + 1)You didn't understand the code enough and another project member has improved your fix. Your modified PR has been accepted. ]
(else-if: (random:1,100) > $community*10)[(set: $outstandingPR = True)You get no feedback.]
(else:)[(set: $community = $community + 1)(set: $contribution = $contribution + 5)Your PR have been reviewed and merged into the codebase. Congratulations!]
}
[[Select Next Task -> SelectTask]]{
(set: $community = $community - 3)
(set: $hoursWorked = $hoursWorked + 0.25)
}
The committer is annoyed that you contacted them off the mailing list.
[[Select Next Task -> SelectTask]]{
(set: $community = $community + 2)
(set: $knowledge = $knowledge + 1)
(set: $hoursWorked = $hoursWorked + 2)
}
You improve the documentation.
{
(if: $guide is False and (random:1,100) < 20)[(set: $community = $community - 1)You've not followed the contribution guide and a project member asks you to read it before making more changes. ]
(if: (random:1,100) > $community*10)[You recieve no feedback.]
(else:)[Someone thanks you for your contribution.]
}
[[Select Next Task -> SelectTask]]{
(set: $community = $community + 2)
(set: $knowledge = $knowledge + 1)
(set: $hoursWorked = $hoursWorked + 2)
}
You improve the website.
{
(if: $guide is False and (random:1,100) < 20)[(set: $community = $community - 1)You've not followed the contribution guide and a project member asks you to read it before making more changes. ]
(if: (random:1,100) > $community*10)[You recieve no feedback.]
(else:)[Someone thanks you for your contribution.]
}
[[Select Next Task -> SelectTask]]{
(set: $community = $community + 1)
(set: $introduction = True)
(set: $hoursWorked = $hoursWorked + 0.5)
}
You introduce yourself on the mailing list, giving a bit of your background and why you are interested in the project. A couple of project members respond with a welcome meassge and point you to the project contribution guide and code of conduct.
[[Select Next Task -> SelectTask]]{
(set: $community = $community + 5)
(set: $knowledge = $knowledge + 5)
(set: $hoursWorked = $hoursWorked + 3)
}
You attend a meetup and meet some people involved in the project.
[[Select Next Task -> SelectTask]]{
(if:$hoursWorked is 0)[(set:$overwork = $overwork - 2) (set:$community = $community - 5)]
(else-if:$hoursWorked > $hours + $outsideHours + $tempHours)[(set:$overwork = $overwork + ($hoursWorked + $tempHours)/($hours + $outsideHours + $tempHours))You have worked overtime this week.]
(else:)[(set:$overwork = $overwork - 1)]
(if:$overwork < 0)[(set:$overwork = 0)]
(set: $hoursWorked = 0)
(set: $weeks = $weeks + 1)
(set: $holidays = $holidays + 1/13)
(set: $tempHours = 0)
(set: $lastBugs = $lastBugs + 1)
(if:$lastBugs > 3)[(set:$lastBugs = 3)]
(set: $lastPRs = $lastPRs + 1)
(if:$lastPRs > 3)[(set:$lastPRs = 3)]
(set: $lastMail = $lastMail + 1)
(if:$lastMail > 3)[(set:$lastMail = 3)]
(if:(random:1,100) < 20)[(set: $activeCommitters = $activeCommitters + (random:0,2) - 1)]
}
Another week passes.
[[Select Next Task -> SelectTask]]{
(set: $knowledge = 0)
(set: $hours = 20)
(set: $outsideHours = 0)
(set: $company = 3)
}
You are hired by a company to work on an open source project, and they allow you $hours hours a week to work on open source projects related to their business. You have a family and can't work on open source outside of work hours.
[[Select Project->SelectProject]]No-one has responded to your PR. What do you do?
[[Directly email a committer -> DirectEmail]]
[[Ask on the mailing list for somone to fix it-> AskForHelpPR ]]
[[Select Next Task -> SelectTask]]No-one has responded to your question. What do you do?
[[Directly email a committer -> DirectEmail]]
[[Ask on the mailing list for if anyone knows an answer -> AskForHelpEmail ]]
[[Select Next Task -> SelectTask]]''Project A''
{
(set: $commitBar = 150)
(set: $activeCommitters = 5)
(set: $users = 1000)
(set: $project = 1)
}
Project A is a mature project, but it still has contributors involved and has a large user base.
[[Get Started -> SelectTask]]''Project B''
{
(set: $commitBar = 500)
(set: $activeCommitters = 20)
(set: $users = 5000)
(set: $project = 2)
}
Project B is an active project with a large user base, but it's hard to become a committer.
[[Get Started -> SelectTask]]''Project A''
{
(set: $commitBar = 50)
(set: $activeCommitters = 10)
(set: $users = 100)
(set: $project = 3)
}
Project C is a new project. Not many people use it and they welcome new contributions.
[[Get Started -> SelectTask]]{
(set: $knowledge = $knowledge + 1)
(if:$users <= 100)[(set: $hoursWorked = $hoursWorked + 0.5*$lastBugs)]
(else-if:$users <= 1000)[(set: $hoursWorked = $hoursWorked + 1*$lastBugs)]
(else:)[(set: $hoursWorked = $hoursWorked + 1.5*$lastBugs)]
(set: $lastBugs = 0)
}
You read the issue list. (if:$knowledge < 20)[A lot of the issues you don't understand and are not able to provide a fix.](if:$users*$lastBugs > 1000)[There are a lot of issues and you can't read them all.]
{
(if:$outstandingPR)[[What do you do about your outstanding PR? -> OutsandingPR]]<br />
[[Create a PR that fixes a user's issue -> CreatePR]]<br />
}
[[Select Next Task -> SelectTask]]{
(set: $knowledge = $knowledge + 1)
(set: $hoursWorked = $hoursWorked + 2)
}
You read some of the code. (if:$knowledge < 10)[A lot of it you don't understand.]
[[Create a PR that fixes an issue -> CreatePR]]
[[Select Next Task -> SelectTask]]{
(set: $knowledge = $knowledge + 2)
(set: $hoursWorked = $hoursWorked + 2)
}
You read the documentation. (if:$knowledge < 10)[It's not making a lot of sense to you.]
[[Select Next Task -> SelectTask]]{
(set: $knowledge = $knowledge + 1)
(if:$users <= 100)[(set: $hoursWorked = $hoursWorked + 1*$lastMail)]
(else-if:$users <= 1000)[(set: $hoursWorked = $hoursWorked + 2*$lastMail)]
(else:)[(set: $hoursWorked = $hoursWorked + 3*$lastMail)]
(set: $lastMail = 0)
}
You read the mailing list. (if:$knowledge < 10)[A lot of the issues you don't understand and are not able to provide a fix for.](if:$users*$lastMail > 1000)[There are a lot of messages and you can't read them all.]
[[Ask a question -> AskQuestion]]
[[Answer a users question -> AnswerQuestion]]
[[Create a PR that fixes an issue -> CreatePR]]
[[Select Next Task -> SelectTask]]{
(set: $knowledge = $knowledge + 1)
(if:$users <= 100)[(set: $hoursWorked = $hoursWorked + 0.5*$lastPRs)]
(else-if:$users <= 1000)[(set: $hoursWorked = $hoursWorked + 1*$lastPRs)]
(else:)[(set: $hoursWorked = $hoursWorked + 1.5*$lastPRs)]
(set: $lastPRs = 0)
}
You read through the list of Pull Requests. (if:$knowledge < 10)[A lot of the PRs you don't understand.](if:$users*$lastPRs > 1000)[There are a lot of PRs and you can't read them all.]
[[Review an easy PR -> ReviewEasyPR]]
[[Review a PR -> ReviewPR]]
[[Select Next Task -> SelectTask]]{
(set: $community = $community + 5)
(set: $contribution = $contribution + 5)
(set: $knowledge = $knowledge + 5)
(set: $hoursWorked = $hoursWorked + 8)
}
It's a lot of Work, but you create a new release.
[[Select Next Task -> SelectTask]]{
(set: $knowledge = $knowledge + 0.5)
(set: $contribution = $contribution + 1)
(set: $hoursWorked = $hoursWorked + 0.5)
}
You review an easy pull request adding some feedback.
{
(if: $guide is False and (random:1,100) < 20)[(set: $community = $community - 1) You've not followed the contribution guide and a project member asks you to read it before providing more feedback. ]
(if: $coc is False and (random:1,100) < 20)[(set: $community = $community - 2) Your feedback has offended the person who submitted the request.]
(if: (random:1,100) > $knowledge*25)[(set: $community = $community - 1)(set: $knowledge = $knowledge + 1)You didn't understand the code enough and a project member has corrected you, but you have learnt something in the process.]
(else:)[(set: $community = $community + 0.5)You are thanked for your feedback.]
}
[[Select Next Task -> SelectTask]]{
(set: $knowledge = $knowledge + 1)
(set: $contribution = $contribution + 2)
(set: $hoursWorked = $hoursWorked + 1)
}
You review a pull request adding some feedback.
{
(if: $guide is False and (random:1,100) < 20)[(set: $community = $community - 1)You've not followed the contribution guide and a project member asks you to read it before providing more feedback. ]
(if: $coc is False and (random:1,100) < 20)[(set: $community = $community - 2) Your feedback has offended the person who submitted the request.]
(if: (random:1,100) > $knowledge*10)[(set: $community = $community + 0.5)(set: $knowledge = $knowledge + 1)You didn't understand the code enough and a project member has corrected you, but you have learnt something in the process.]
(else:)[(set: $community = $community + 1)You are thanked for your feedback.]
}
[[Select Next Task -> SelectTask]]You review the release.
[[Vote +1 on the release -> VoteRelease]]
[[Do a comprehensive review -> ComprehensiveRelease]]
[[Select Next Task -> SelectTask]]{
(set: $community = $community + 1)
(set: $hoursWorked = $hoursWorked + 2)
}
You review the project's report.
[[Select Next Task -> SelectTask]]''What do you want to do?''
You have been on the project for $weeks weeks. (set:$total = $hours+$outsideHours+$tempHours)You can work $total hours a week on this project. You have worked (round:$hoursWorked) hours this week. (if: $fixBug)[Work has asked you to fix an urgent bug.]
(if:$pmc)[You are a PMC member and help set the direction of the project.](else-if:$committer)[You are a committer on the project and now part of the community.]
(if:$overwork > 8)[(goto:"OverWorked")](else-if:$overwork > 6)[You are feeling burnt out. You need a holiday or a break. ](else-if:$overwork > 3)[You are feeeling stressed.]
{
(if: $community + $contribution > $commitBar and not $committer)[
(if: $company is 1) [(set: $committer = True)(set: $hours = $hours * 2)(set: $activeCommitters = $activeCommitters + 1)Congratulations, you have been accepted as a committer on the project! Now that you are a committer, your work will let you work for $hours hours a week on this project.<br />]
(else-if: $company is 2)[(set: $committer = True)(set: $outsideHours = $outsideHours * 1.5)Congratulations, you have been accepted as a committer on the project! Now that you are a committer, you decide you can spend $outsideHours hours a week on this project.<br />]
(else-if: $company is 3)[(set: $committer = True)Congratulations, you have been accepted as a committer on the project!<br />]
]
(if: $community + $contribution > $commitBar*2 and not $pmc)[(set: $pmc = True)Congratulations, you have been accepted as a PMC on the project!<br />]
(if:$community > 20 and not $communityOnce)[(set:$communityOnce = True)You feel like you are part of the community in this project.<br />]
(if:$contribution > 20 and not $contributionOnce)[(set:$contributionOnce = True)You feel your contributions to this project are valued.<br />]
(if:$knowledge > 20 and not $knowledgeOnce)[(set:$knowledgeOnce = True)You understand some of the project's code base.<br />]
(if:$knowledge > 40 and not $knowledgeOnceII)[(set:$knowledgeOnceII = True)You understand the project's code base.<br />]
(if: $company is 1 or $company is 3)[
(if: $committer and (random:1,100) < 30)[(set:$tempHours = $tempHours + 2)(set:$fixBug = True)Work has asked you to fix a bug.<br />]
(else-if: (random:1,100) < 15)[(set:$tempHours = $tempHours + 2)(set:$fixBug = True)Work has asked you to fix a bug.<br />]
]
(if: not $fixBug)[[[Go to next week -> NextWeek]]]<br />
(if:$holidays > 2)[[Take a holiday -> TakeHoliday]]<br />
(if:$committer and (random:1,100) < 5)[[[Job Offer->JobOffer]]<br />]
(if: $pmc and (random:1,100) < $activeCommitters*5/($commitBar/10))[[[Vote on New Committer -> VoteCommitter]]<br />]
(if: $pmc and (random:1,100) < $activeCommitters*5/($commitBar/10))[[[Vote on New PMC Member -> VotePMC]]<br />]
(if: $pmc and (random:1,100) < 20)[[[Review Board Report -> ReviewReport]]<br />]
(if: $lastBugs > 2)[You haven't looked at the issue list in a while. <br />]
(if: $lastPRs > 2)[You haven't looked at the PR list in a while. <br />]
(if: $lastMail > 2)[You haven't looked at the email list in a while. <br />]
(if:(random:1,100) < 10)[The project is planning a release.<br>[[Help review release -> ReviewRelease]]<br />
(if: $committer)[[[Offer to be release manager -> ReleaseManager]]<br />]]
(if:$introduction is False)[[[Introduce Yourself -> Introduction]]<br />]
(if:$guide is False)[[[Read Contribution Guide -> ContributionGuide]]<br />]
(if:$coc is False)[[[Read Code of Conduct -> CodeofConduct]]<br />]
(if: $fixBug)[[[Fix work bug -> CreatePR]]<br />]
[[Look at the code -> ReadCode]]<br />
[[Read the mailing list -> ReadList]]<br />
[[Read the documentation-> ReadDocs]]<br />
[[Look through the pull requests -> ReadPRs]]<br />
[[Look through outstanding issues -> ReadBugs]]<br />
[[Improve the documentation -> ImproveDocs]]<br />
[[Improve the website -> ImproveWebSite]]<br />
(if:(random:1,100) < 10)[[[Attend a meetup -> Meetup]]<br />]
(if:(random:1,100) < 10)[[[Submit a conference talk -> ConferanceTalk]]<br />]
(if:$attendConf or (random:1,100) < 10)[[[Attend a conferance -> AttendConferance]]<br />]
}{
(set: $holidays = $holidays - 2)
(set: $overwork = 0)
(set: $weeks = $weeks + 2)
(set: $community = $community - 10)
(set: $knowledge = $knowledge - 10)
}
You take two weeks off and relax.
[[Select Next Task -> SelectTask]]{
(set: $knowledge = 20)
(set: $hours = 0)
(set: $outsideHours = 8)
(set: $company = 2)
}
You work for a company that doesn't allow you to work on open source projects during work hours. You are familiar with the OS technology. You can, however, work $outsideHours a week in your own free time.
[[Select Project->SelectProject]]{
(set: $community = $community + 1)
(set: $hoursWorked = $hoursWorked + 1)
(set: $activeCommitters = $activeCommitters + 1)
}
You vote in a new committer.
[[Select Next Task -> SelectTask]]{
(set: $community = $community + 1)
(set: $hoursWorked = $hoursWorked + 1)
}
You vote in a new PMC member.
[[Select Next Task -> SelectTask]]{
(set: $community = $community + 0.5)
(set: $contribution = $contribution + 0.5)
(set: $hoursWorked = $hoursWorked + 0.5)
}
You vote on the release.
(if: (random:1,100) < 25)[(set: $community = $community - 0.25)The release contains a bug and a new release candidate needs to be created.]
[[Select Next Task -> SelectTask]]{
(set: $hours = 20)
(set: $company = 3)
}
You start your new job.
[[Start work -> SelectTask]]A company involved in your OS project has sent you a job offer. (if:$company is 1 or $company is 2)[This will allow you more time to work on the project.] It also offers more pay.
[[Accept the offer->AcceptJob]]
[[Turn down the offer-> SelectTask]]{
(set:$overwork = 0)
(set:$weeks = $weeks + 4)
(set: $community = $community - 20)
(set: $knowledge = $knowledge - 20)
}
Your boss calls you in for a meeting and tells you that your performance has not been great in recent weeks. You are spending too much time on the open source project and need to take a break for a while. You take a four weeks break from the project.
[[Select Next Task -> SelectTask]]''Choose Who You Are''
{
(set: $community = 0)
(set: $contribution = 0)
(set: $knowledge = 0)
(set: $committer = False)
(set: $pmc = False)
(set: $outstandingPR = False)
(set: $outstandingQuestion = False)
(set: $communityOnce = False)
(set: $contributionOnce = False)
(set: $knowledgeOnce = False)
(set: $knowledgeOnceII = False)
(set: $weeks = 0)
(set: $hours = 0)
(set: $outsideHours = 0)
(set: $overwork = 0)
(set: $hoursWorked = 0)
(set: $holidays = 2)
(set: $fixBug = False)
(set: $lastBugs = 1)
(set: $lastPRs = 1)
(set: $lastMail = 1)
(set: $attendConf = False)
(set:$introduction = False)
(set:$guide = False)
(set:$coc = False)
}
You can:
- Work for a company that allows some work on OS projects.
- Work on an open source project outside of work hours.
- Be paid to work on an open source project.
[[A company employee -> Company]]
[[A volunteer -> Volunteer]]
[[An open source paid contributor -> OSCompany]]''Choose Your Open Source Project''
You have looked into several open source projects and have come across three projects you are interested in. Which do you want to contribute to?
You want to try to become a project committer by contributing to its code and being involved in its community.
Project A is a mature project, but it still has contributors involved and a large user base.
Project B is an active project with a large user base, but it is hard to become a committer.
Project C is a new project. Not many people use it and they welcome new contributions.
[[Project A -> ProjectA]]
[[Project B -> ProjectB]]
[[Project C -> ProjectC]]