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.py

Solution

  • Estimate what is the best workload balance for each developer considering his meeting schedule
python3 optimise_focus_time.py

Approach

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_capacity

Approach

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.py

Usecase #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.py

Usecase #1

[!] See example .csv file live here:

Showcase

python3 plan_sprint.py

Usecase #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.py

Usecase #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...
Made with Slides.com