How to log actual effort of a task in TFS - tfs

Recently came across "Remaining Work" option in TFS, got no clue what it stands for, is it the time in hours that i am supposed to define against a task.

Remaining work is the number of hours you have left to complete a task. If something is a 4 hr task and at the end of a day you have managed to complete 1hrs work, you would update it to 3hrs remaining. You can update the remaining work as often as you like. You could just 0 it when there is no more work, or every time there is 1hr's less work remaining - or somewhere in between.
From this value, TFS can create a burndown graph of remaining work in an iteration.
There are fields for Original Estimate and Actual Work you can use if you need to track estimates and how long things took.

Remaining Work field can actually show if the original estimate has changed since you started working on a task.

Related

How to get power charts and reports for tfs

I want to get some different reports and charts from Tfs activities and history (most based on task tags and assigned users). for example after 3 monthes I want to know how many hours a user moved her tasks to next iteration, ...
Is there any tools for this?
No such a tool can exactly achieve that. There is an extension Team Capacity Management, but seems it's not apply for you.
If you want to know how many hours a user moved her tasks to next iteration, then you need to get the planned hours then subtract the completed hours in current iteration. Alternatively you can add tags on the work items which moved to the next iteration, then create a query which filter by the tags to get the sum of hours.
e.g.:
Create a query 'RemainingWork' with the column Assigned
to and Remaining Work added in "next iteration" (e.g.: iteration
2 here) to filter the moved work items from pervious iteration with the tag.
Save it in Shared queries
Add Chart for Work items widget in your project dashborad, then
configure the widget. Then you can see the hours a user moved tasks
to next iteration in the chart:

Query JIRA Story Point HISTORY

We used JIRA on-demand to manage an Agile project. Sometimes a story may be preliminarily sized in story points, but is then re-sized before commitment. I would like a query which shows the history of each story's status and point value.
For example:
Story 99 history:
1/1/2014 -- Status = Open; Points = Null
1/15/2014 -- Status = Reviewed; Points = 5
2/15/2014 -- Status = Committed; Points = 8
My goal (and maybe there is another way to do this) is to see how often we change our story sizes.
Thanks.
I thought I had a solution for you in using the "changed" JQL query (https://confluence.atlassian.com/display/JIRA/Advanced+Searching#AdvancedSearching-WAS), but unfortunately it looks like that is not supported currently in Jira. I received the following error from our hosted Jira instance:
History searches do not support the 'Story Points' field.
So as a user on demand query I don't think it is currently possible.
The only way I see of doing this would be to have a set day/time where you would run a query to get the current story points, export it as an excel file and then do it again after you review a set of stories and write some excel functions to show the change.
The larger question would be around your agile/scrum processes as to why estimated would change so frequently as to need tracking. If the team as a whole decides the points its ok if it doesn't match the reality once we start working on it. Or is this a case where it is updated on more than one occasion before its actually being worked on? If thats the case then I'd say that the story isn't well defined and need more information before it can be estimated?
Adding to Michael's answer, the daily monitoring for a given set of results to a query can be semi-automated using a JIRA filter subscription. You will still need to extract the issues from the results manually but at least in principle you can be sure not to miss any resizing that happens.

Scalable time decay for web application

My goal here is to generate a system similar to that of the front page of reddit.
I have things and for the sake of simplicity these things have votes. The best system I've generated is using time decay. With a halflife of 7 days, if a vote is worth 20 points today, then in seven days, it it worth 10 points, and in 14 days it will only be worth 5 points.
The problem is, that while this produces results I am very happy with, it doesn't scale. Every vote requires me to effectively recompute the value of every other vote.
So, I thought I might be able to reverse the idea. A vote today is worth 1 point. A vote seven days from now is worth 2 points, and 14 days from now is worth 4 points and so on. This works well because for each vote, I only have to update one row. The problem is that by the end of the year, I need a datatype that can hold fantastically huge numbers.
So, I tried using a linear growth which produced terrible rankings. I tried polynomial growth (squaring and cubing the number of days since site launch and submission) and it produced slightly better results. However, as I get slightly better results, I'm quickly re-approaching unmaintainable numbers.
So, I come to you stackoverflow. Who's got a genius idea or link to an idea on how to model this system so it scales well for a web application.
I've been trying to do this as well. I found what looks like a solution, but unfortunately, I forgot how to do math, so I'm having trouble understanding it.
The idea is to store the log of your score and sort by that, so the numbers won't overflow.
This doc describes the math.
https://docs.google.com/View?id=dg7jwgdn_8cd9bprdr
And the comment where I found it is here:
http://blog.notdot.net/2009/12/Most-popular-metrics-in-App-Engine#comment-25910828
Okay, thought of one solution to do that on every vote. The catch is that it requires a linked list with atomic pop/push on both sides to store votes (e.g. Redis list, but you probably don't want it in RAM).
It also requires that decay interval is constant (e.g. 1 hour)
It goes like this:
On every vote, update the score push the next time of decay of this vote to the tail of the list
Then pop the first vote from the head of the list
If it's not old enough to decay, push it back to the head
Otherwise, subtract the required amount from the total score and push the updated information to the tail
Repeat from step 2 until you hit a fresh enough vote (step 3)
You'll still have to check the heads in background to clear the posts that no one votes on anymore, of course.
It's late here so I'm hoping someone can check my math. I think this is equivalent to exponential decay.
MySQL has a BIGINT max of 2^64
For simplicity, lets use 1 day as our time interval. Let n be the number of days since the site launched.
Create an integer variable. Lets call it X and start it at 0
If an add operation would bring a score over 2^64, first, update every score by dividing it by 2^n, then set X equal to n.
On every vote, add 2^(n-X) to the score.
So, mentally, this makes better sense to me using base 10. As we add things up, our number gets longer and longer. We stop caring about the numbers in the lower digit places because the values we're incrementing scores by have a lot of digits. Which means that the lower digits kind of stop counting for very much. So if they don't count, why not just slide the decimal place over to a point that we care about and truncate the digits below the decimal place at some point. To do this, we need to slide the decimal place over on the amount we're adding each time as well.
I can't help but feel like there's something wrong with this.
Here are two possible pseudo queries that you could use. I know that they don't really address scalability, but I think that they do provide methods so that you can
SELECT article.title AS title, SUM(vp.point) AS points
FROM article
LEFT JOIN (SELECT 1 / DATEDIFF(NOW(), vote.created_at) as point, article_id
FROM vote GROUP BY article_id) AS vp
ON vp.article_id = article.id
or (not in a join, which will be a bit faster I think, but harder to hydrate),
SELECT SUM(1 / DATEDIFF(NOW(), created_at)) AS points, article_id
FROM vote
WHERE article_id IN (...) GROUP BY article_id
The benefit of these queries is that they can be run at any time with the same data and they will always return the same answers. They don't destroy any data.
If you need to, you can also run the queries in a background job and they will still give the same result.

How can I get a report of all work items added to an iteration after a given date?

I need to produce a report, similar to the Unplanned Work report included with the MS Agile Process Template, but which lists me all work items which were added to an iteration after a given date.
The work item may have already been created before that date, so I can't used the created date.
Can anyone give any guidance on how I can go about this? If I can achieve it in Excel then that would be perfect...
Thanks.
Ok, took some work. Interesting enough though to put some effort in it ...
First screenshot is a Pivot table connected to the Analysis Cube. The most left colum shows the ID of a workitem. The second column shows the ChangeDate. In the row header I have included every iteration that I am interested in. What you see happening in the Excel sheet is items moving from one sprint to the other. For example, workitem 27 was created for iteration 1 at 14-3-2011. On 13-4-2011 it was moved to iteration 2. On 12-5-2011 it was moved to iteration 3. etc.
If I narrow down the filter to a specific iteration I actually see items entering the iteration and leaving the iteration. If I also change the ChangeDate filter, I can focus on items entering after a specific date, as you requested. Again, you can see item 27 enter iteration 2 at 13-4 and leave at 12-5. You can juggle around with the columns to get the view you want.
Finally, the options I used to get this view from TFS.
Hope this exceeds your expectations :-)

How can I have FogBugz show me cases with no recent activity?

I have a particular saved filter that shows me all cases in a specific project and area that are active and assigned to humans (by excluding some users that don't correspond to real people but are instead used for unrelated project management operations.
It looks something like:
"All open cases in PROJECT that are active containing -assignedto:"Non-Human User 1" -assignedto:"Non-Human User 2"
I would like to amend this filter to show me the subset of these cases that have had no edits of any kind in the last two weeks. I have tried adding various flavors of the edited axis using relative time ranges as I've seen examples of in the FogBugz documentation, but I get unexpected results every time. In particular, -edited:"-2w.." or even the simpler -edited:"yesterday" shows me results where the Last Updated column says, maddeningly, "DD/MM/YYYY (Yesterday)."
(This is with FB 8, for what it's worth).
I was able to get this to work reasonably close to what I expected by adding a search axis term for edited:"..-2w" (where -2w means "two weeks ago" and could of course be changed to whatever window of time was relevant). What tripped me up is that I was trying to exclude things edited between two weeks ago and now using -edited and that didn't quite do what I expected.
Instead, my final query looks like it is grabbing things edited from the dawn of time until two weeks ago (further restricted by additional filters of course).

Resources