We want to use a defined scale for our story points in JIRA. How can I at least change the description therefore?

Maud Schlich March 25, 2015

We use story points to estimate stories. How can I change the configuration of story points? At least the description or translation (it currently is set to "... Grö?e der ..." which should at least be "... Größe der ..." and - better yet - adding information about our scale.

Is there a possibility to restrict entered numbers to the ones we'd like to allow (1..10 / Fiabonacchi / Mountain Goat / ... - there are some possibilities that all have a set of numbers).

Thanks in advance,

 Maud

 

4 answers

1 accepted

0 votes
Answer accepted
Anthony Pelosi March 25, 2015

Maud,

You can change the description of story points just like any other custom field.

https://confluence.atlassian.com/display/JIRA/Configuring+a+Custom+Field#ConfiguringaCustomField-editEditingacustomfield

Unfortunately you can't change the field type of custom field after its been created, so story points are an opened ended number field. I also wish I could change this to powers of 2 (1, 2, 4, 8), something that the much less feature rich Pivotal Tracker actually supports.

Maud Schlich May 5, 2015

Well, I experienced difficulties in changig that field that is: changing could be done but afterwards the original description was again shown. I will dig into this again in the next days - had to postpone it to some day in May.

Like Cameron LaBorde-Zank likes this
1 vote
dphanson63_yahoo_com July 30, 2019

Our team defined a custom listener using Scriptrunner to update the Points value to the next highest number in the Fibonacci sequence, if the entered value was not a Fibonacci number.  This solution was fairly simple and worked reasonably well.  

This functionality is accessible through Administration > Add-ons > Scriptrunner > Script Listeners or Listeners, once Scriptrunner is installed.

Here's the basic logic:

// Fibonacci Points Listener

import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.IssueInputParameters
import com.atlassian.jira.event.issue.IssueEvent
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField

def fibList = [1,1] // seed the Fibonacci sequence
def fibCheck = {}
fibCheck = {
  float val -> 
  if (val <= fibList[-1]) { // if points less than or equal to last number in sequence
    return fibList[-1] // round up to next Fibonacci number
  } else {
    fibList += (fibList[-1] + fibList[-2]) // append next Fibonacci number to sequence
    return fibCheck(val) // repeat check
}
}

def pointId = "customfield_10006" // Jira "custom" field ID for points

// object required to update issues
IssueService issueService = ComponentAccessor.getComponnent(IssueService)
IssueInputParameters issueInputParameters = issueService.newIssueInputParameters()

def event = event as IssueEvent
Issue issue = event.getIssue()
def user = ComponentAccessor.getJiraAuthenticationContext().loggedInUser

// get custom fields for issue
List<CustomField> allCustomFields = ComponentAccessor.getCustomFieldManager().getCustomFieldObjects(issue);
def allCustomIds = allCustomFields.collect {it.id}

if (!(pointId in allCustomIds)) { return } // no Points field

// object required to manage custom fields
def customFieldManager = ComponentAccessor.getCustomFieldManager()
CustomField points = customFieldManager.getCustomFieldObject(pointId)
def rawPointVal = issue.getCustomFieldValue(points)

if (rawPointVal == null) { return } // no Points value

float pointVal = rawPointVal as float // set raw points as float

if (pointVal == 0) { return } // accept 0 points

def fibPointVal = fibCheck(pointVal) // round to next Fibonacci number

if (fibPointVal != pointVal) {  // reset points if updated
  issueInputParameters.addCustomFieldValue(points.id, fibPointVal as String)
  def update = issueService.validateUpdate(user, issue.id, issueInputParameters)
}

return

Thanks to Sam Orloff for the code sample. 

dphanson63_yahoo_com November 14, 2020

One user needed to replace the last if statement to get the points to update.  She replaced the last if statement with:

if (fibPointVal != pointVal) {

def changeHolder = new DefaultIssueChangeHolder()

points.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(points), fibPointVal as double, changeHolder)

}

0 votes
Maud Schlich November 8, 2015

Hi Folks,

I found the solution in misconfigured field schemes. It works now. Thanks for your help.

 

0 votes
Damon Gaylor March 25, 2015

Hi Maud,

That field probably cannot be modified, so my answer may not help much, but here it goes.

I always recommend the modified Fibonacci approach (1,2,3,5,8,13,20,40,100).  Then, you just need to remind your teams of the valid numbers.  If you notice a '4', either have a conversation or make it a 5.

Ideally, each team will have their own definition of 'what a 5 is' so the best way to do any cross-project analysis on performance is converting it to a ratio.  I don't personally have to do that.  

If this is important to you, google Rapid Scrum and view their short presentations.  It is good stuff, just doesn't play well with JIRA at this point.

Maud Schlich May 5, 2015

Hello, yes I also prefer Fibonaccis :-) Regards, Maud

Suggest an answer

Log in or Sign up to answer