Hackathon Dec 2021
Mateusz Wójcik
Michał Przyszczypkowski
Problem


How to efficiently plan your sprint work?
How to minimize focus lost issues due to multiple meetings?
vs
Solution
Solution
- Measure actual time you can focus on development in the sprint
- Measure how granular your time is considering all meetings in your calendar
- Maximize your focus time and plan optimal issues for each focus time block
python3 plan_sprint.pySolution
- Estimate what is the best workload balance for each developer considering his meeting schedule
python3 optimise_focus_time.pyApproach
Approach
1. Fetch issues from JIRA based on provided JQL (Jira Query Language) expression
2. Fetch your calendar meetings schedule within JIRA sprint start/end dates
Approach
3. Represent your calendar schedule with Singly-Linked List

Approach
4. Estimate expected time required for single Story Point to be completed
expected_time_per_storypoint = schedule.total_free_time / story_points_capacityApproach
5. Represent data as a traditional knapsack optimisation problem
6. Solve knapsack problem (currently implemented using 2 alternative versions of greedy algorithm)
Showcase
Showcase

Showcase
python3 optimise_focus_time.pyUsecase #1
FOCUS_TIME_CALENDAR_START=2021-12-06T00:00:00.000Z
FOCUS_TIME_CALENDAR_END=2021-12-10T23:59:59.000Z
FOCUS_TIME_STORY_POINTS_CAPACITY=30
Showcase
python3 optimise_focus_time.pyUsecase #1

[!] See example .csv file live here:
Showcase
python3 plan_sprint.pyUsecase #2

JIRA_TOKEN=XXX
JIRA_USER=xxx@apptension.com
JIRA_SERVER=https://apptension.atlassian.net/
JIRA_PROJECT=XXX
JIRA_ESTIMATE_FIELD=customfield_10115
Showcase
python3 plan_sprint.pyUsecase #2

[!] See example .csv file live here:
What next?
- Implemented in a robust & flexible way
- Easy to extend functionality
- Multiple parameters affecting behavior alrady implemented i.e.
- BREAK_TIME / BREAK_AFTER - include break time each day
- ALGORITHM - specify what planning algorithm to use (NAIVE_GREEDY and NAIVE_GREEDY_WITH_SPLIT implemented at the moment)
- MIN_CONSIDERABLE_SLOT_TIME - ignore short time slots when planning work
- Infinite possibilities to add more different behaviors...
Hackathon presentation
By Michał Przyszczypkowski
Hackathon presentation
- 184