Planning poker and three point estimations

Total ERPNext noob here, so excuse my ignorance!

Would it be possible to create a feature (or doctype) that would enable three-point estimations, but planning poker style?

The way it works IRL:

Each team member involved in a specific project task estimates the effort involved.

The estimates can be in sprint points, or in actual clock time.

The estimate is using three values:

  • the best-case estimate
  • the most likely estimate
  • the worst-case estimate

Estimations are done anonymously, and team members cannot see each others’ estimates until everyone had submitted theirs, or until the project manager pushes the process to the next step. Then the values are revealed and can be discussed and negotiated within the team.

Also, some formulas are applied to the values to get the final estimation numbers.

More details on these two techniques:

1 Like

Since doctype is basically only a form to access (input and display) database data, the logic is handled by python and js so technically I think everything is possible.
And from your explanation I guess the hard work would be in the python scripts for the estimation and calculation.

#but don’t ask me to develop it, I’m not a programmer :sweat_smile:
##anyway, it is an interesting model for a work/task bidding.

1 Like

Create a custom doctype to capture estimates

Link it with tasks

You got basic UI and submission form on the task page. Check “quick entry” to avoid going to full form page.

Done with CRUD and basic UI.

Now validations and business logic.

  1. Users should only submit one estimate for a task. - use server scripts

Before insert:

if frappe.db.exists("Planned Estimate", {"task": doc.task, "owner": frappe.session.user}):
    # dont allow duplicate Estimate
    frappe.throw("You can only submit one estimate")
  1. Users can only see their own estimates. Configure permissions like this:

  2. Compute average using some logic add a custom field + server script on task doctype.

Assuming you’re using PERT (modify if something else)

average =  frappe.db.sql("""
select avg((best_case + worst_case + most_likely*4)/6) 
from `tabPlanned Estimate`
where task = %s
""", doc.name)
if average:
    doc.average_estimate = average[0][0]

I haven’t tested these, and this doesn’t fulfill all the requirements but does 90% of what you’re looking for.

Maybe add a report for sharing estimates after “process moves to next stage”. Can’t think of any out of the box way to achieve that behaviour.

27 Likes

Wow @ankush thanks for sharing that!