The agile process is simple:
Admit that you don’t know what you are doing
Start learning more
Run out of time
Make an excuse
Repeat
You make excuses in iterations and learn more and more with each round. Eventually, you exhaust the reasons and have to do work, but now you know more based on how the universe accepted or rejected your excuses. And you have learned some things from all those random blog posts from Hacker News you have been reading instead of working.
The typical agile shop uses a Fibonacci point system based on fancy science, so everyone feels better. The idea is that the less you know about a particular task, the amount of time it will take you should go up exponentially. Apologies, not the time it takes, but the effort it takes. Measuring how effort relates to time is crazy talk.
Anyway, this is a cheat sheet of what the points mean in most shops:
0 points: this one was already done during the sprint planning meeting
1 point: I should be able to do this in a day, as long as it isn’t today or tomorrow
2 points: I should be able to do this in the next two days, because I have to do a 1 pointer today
3 points: I know what this is and will do it until I have a question about it, then I’ll move it to blocked
5 points: I don’t really know what this is, but I have heard of it. We should take five people and spent 30 minutes talking about it, burning 1 point, then split it into two 3 point cards.
8 points: I don’t know what this is, and do not want to know
13 points: Please don’t make me work on this
21 points: Please, can we not do this project
Because of the above, most stories will be 2, 3, or 5 points. How can a developer tell the right answer? If you are a new developer to the team, and you don’t know any of the pieces of the system yet, when you play Planning Poker, your answers will appear wrong and highlight your ignorance. In the beginning, this is Professionally OK Because You are New to The Team, but a few months later, you can’t be throwing a 13 out, and the rest of the developers throw out a 1 - you’d look like an idiot.
Instead, you should use the following script:
StoryPointResponse PointStory(Story story
, int questionsAskedByOtherDevelopers
, int minutesOfOverallDiscussion
, int wordsYouDontUnderstand)
{
if (story.description.length > 500)
{
return Response.Create(3, VerbalReply.IDeferToAMoreSeniorDeveloper);
}
if (questionsAskedByOtherDevelopers > 3)
{
return Response.Create(13, VerbalReply.DoWeNeedMoreDiscussion);
}
if (minutesOfOverallDiscussion > 20)
{
return Response.Create(8, VerbalReply.IAmHavingNetworkIssues);
}
if (wordsYouDontUnderstand > 10)
{
return Response.Create(21, VerbalReply.IDeferToAMoreSeniorDeveloper);
}
return StoryPointResponse.Create(3, VerbalReply.IAmGoodWithAFive);
}
class Response
{
int Score;
VerbalReply VerbalReplyIfChallenged;
}
enum VerbalReply
{
IAmGoodWithAFive,
DoWeNeedMoreDiscussion,
IDeferToAMoreSeniorDeveloper,
ButWhatAboutDocumentationAndUnitTests,
IAmHavingNetworkIssues,
IAmJustGuessingCanIJustSayThatWhyAllTheFancyPseudoScience
}