|
| 1 | +""" |
| 2 | +Calculate max weeks of programmer availability for yearly planning. |
| 3 | +
|
| 4 | +Assumes the following: |
| 5 | +
|
| 6 | +1. The number of maintainers stays the same |
| 7 | +2. We cannot anticipate availability changes like parental leave, part-time moves, etc. |
| 8 | +3. 5 weeks of holiday + sick leave with stipulation that this is just an estimate!!!!! |
| 9 | +4. Not all conferences are accounted for |
| 10 | +""" |
| 11 | + |
| 12 | +programmers_with_reduced_availability = { |
| 13 | + # _ is part-time (safer to assume that isn't going to change) |
| 14 | + "_": 52 * 0.6, |
| 15 | + # __ is on parental leave for the first quarter of the year |
| 16 | + "__": 52 - (52 / 4), |
| 17 | + # assume whoever is lead at any point probably has 1/3rd availability for dev work |
| 18 | + "lead": 52 / 3, |
| 19 | +} |
| 20 | + |
| 21 | +total_openverse_maintainers = 8 |
| 22 | + |
| 23 | +programmers_with_regular_availability = { |
| 24 | + "-" * (i + 1): 52 |
| 25 | + for i in range( |
| 26 | + total_openverse_maintainers - len(programmers_with_reduced_availability) |
| 27 | + ) |
| 28 | +} |
| 29 | + |
| 30 | +programmer_availability_ignoring_regular_leave = ( |
| 31 | + programmers_with_reduced_availability | programmers_with_regular_availability |
| 32 | +) |
| 33 | + |
| 34 | +# These are just vague estimates, obviously some folks take more or less, etc. |
| 35 | +holiday_weeks = 4 |
| 36 | +sick_weeks = 1 |
| 37 | + |
| 38 | +total_leave_weeks = holiday_weeks + sick_weeks |
| 39 | + |
| 40 | +# Conferences with attendance estimate in reduced availability by weeks |
| 41 | +conference_weeks = { |
| 42 | + "wceu": 3, |
| 43 | + "wcus": 2, |
| 44 | + "wccs": 2, |
| 45 | + "wcasia": 2, |
| 46 | + "ccglobalsummit": 1, |
| 47 | + "data": 1, |
| 48 | + "pydata": 0.5, |
| 49 | + "pycascades": 1, |
| 50 | + "widsps": 0.25, |
| 51 | + "other": 2, |
| 52 | + "teammeetup1": total_openverse_maintainers, |
| 53 | + "teammeetup2": total_openverse_maintainers, |
| 54 | + # Not all team members attend division meetups |
| 55 | + "divisonmeetup": total_openverse_maintainers / 2, |
| 56 | +} |
| 57 | + |
| 58 | +total_programmer_availability = sum( |
| 59 | + [ |
| 60 | + weeks - total_leave_weeks |
| 61 | + for weeks in programmer_availability_ignoring_regular_leave.values() |
| 62 | + ] |
| 63 | + + [weeks * -1 for weeks in conference_weeks.values()] |
| 64 | +) |
| 65 | + |
| 66 | +print("Total weeks of programmer availability:", total_programmer_availability) |
| 67 | +# => (e.g.) 221.6 |
0 commit comments