This project is read-only.

Handling items without estimates

Jun 25, 2009 at 3:24 PM

The monitor is still going strong! ;-)

I have a thought about handling items without estimates. If there is at least one item without an estimate, I've noticed that the monitor doesn't update each team member's hours even if that team member has all of his/her estimates added. What has happened is we leave our monitor up and running continually. If one person has one item without an estimate it basically freezes the display to whatever the last calculation was which may have been a long time ago depending on how long the non-estimated item was entered. The result is that we are seeing stale data on the monitor.

Something that would be nice is if the monitor would still update each teammembers hours even if there is an unestimated item that is unassigned or assigned to another person.

What do you think?

Jun 27, 2009 at 1:32 AM
Edited Jun 28, 2009 at 12:28 AM

Glad to hear that!

I believe the intended behavior is that you get a warning message whenever it finds a non-estimated sprint backlog item. This is to encourage the team to finish estimating all the items ASAP. I do like your suggestion, and I believe it would be valuable as an optional behavior.

Can you try the latest changeset? It is a massive change that I have been playing with locally, and I believe it should not have the behavior I expected. Please let me know what you find.

Jun 29, 2009 at 2:14 PM

Excellent! I just grabbed it. I'll give it a try today.

Jun 29, 2009 at 2:49 PM

I can run the latest code from the solution without any problem, but when I try to run it after it has been published, I get the below error. Thoughts?

2009-06-29 08:46:13,546 [1] INFO  ScrumSprintMonitor.Wpf.Application.App [(null)] - Saving settings...
2009-06-29 08:46:13,546 [1] DEBUG Ninject.Core.Binding.StandardBindingSelector [(null)] - Resolving binding for active request for IConfigurationViewModel
2009-06-29 08:46:13,546 [1] DEBUG Ninject.Core.Binding.StandardBindingSelector [(null)] - 1 candidate binding available for service IConfigurationViewModel
2009-06-29 08:46:13,546 [1] DEBUG Ninject.Core.Binding.StandardBindingSelector [(null)] - One default binding and 0 conditional bindings match the current context
2009-06-29 08:46:13,546 [1] DEBUG Ninject.Core.Binding.StandardBindingSelector [(null)] - No conditional bindings matched, falling back on default binding.
2009-06-29 08:46:13,546 [1] DEBUG Ninject.Core.Planning.StandardPlanner [(null)] - Activation plan for type ConfigurationViewModel requested by default binding from IConfigurationViewModel to ConfigurationViewModel (via StandardProvider)
2009-06-29 08:46:13,546 [1] DEBUG Ninject.Core.Planning.StandardPlanner [(null)] - Using already-generated plan from cache
2009-06-29 08:46:13,546 [1] DEBUG Ninject.Core.Tracking.StandardTracker [(null)] - Starting to track instance resulting from active request for IConfigurationViewModel
     using default binding from IConfigurationViewModel to ConfigurationViewModel (via StandardProvider)
2009-06-29 08:46:13,546 [1] DEBUG Ninject.Core.Binding.StandardBindingSelector [(null)] - Resolving binding for active request for IConnectionProvider
2009-06-29 08:46:13,546 [1] DEBUG Ninject.Core.Binding.StandardBindingSelector [(null)] - 1 candidate binding available for service IConnectionProvider
2009-06-29 08:46:13,546 [1] DEBUG Ninject.Core.Binding.StandardBindingSelector [(null)] - One default binding and 0 conditional bindings match the current context
2009-06-29 08:46:13,546 [1] DEBUG Ninject.Core.Binding.StandardBindingSelector [(null)] - No conditional bindings matched, falling back on default binding.
2009-06-29 08:46:13,546 [1] DEBUG Ninject.Core.Planning.StandardPlanner [(null)] - Activation plan for type ConnectionProvider requested by default binding from IConnectionProvider to ConnectionProvider (via StandardProvider)
2009-06-29 08:46:13,546 [1] DEBUG Ninject.Core.Planning.StandardPlanner [(null)] - Type has not been analyzed, building activation plan
2009-06-29 08:46:13,546 [1] DEBUG Ninject.Core.Planning.StandardPlanner [(null)] - Activation plan for ConnectionProvider built successfully
2009-06-29 08:46:13,546 [1] DEBUG Ninject.Core.Tracking.StandardTracker [(null)] - Starting to track instance resulting from active request for IConnectionProvider
     using default binding from IConnectionProvider to ConnectionProvider (via StandardProvider)
2009-06-29 08:46:13,561 [1] FATAL ScrumSprintMonitor.Wpf.Application.App [(null)] - Unhandled exception from System.Windows.Threading.Dispatcher
Ninject.Core.ActivationException: Error activating IConnection: no matching bindings are available, and the type is not self-bindable (or implicit binding is disabled).
Activation path:
  1) active request for IConnection

   at Ninject.Core.KernelBase.ResolveInstance(Type service, IContext context, Boolean isEagerActivation)
   at Ninject.Core.KernelBase.Get[T](IParameterCollection parameters)
   at ScrumSprintMonitor.Implementation.ConnectionProvider.ProvideConnectionTo(String requestedServerName, Boolean reuseExisting)
   at ScrumSprintMonitor.Wpf.Application.NinjectAppConfigurationDependentModule.SetupRuntimeBindings()
   at ScrumSprintMonitor.Wpf.Application.NinjectAppConfigurationDependentModule.Load()
   at Ninject.Core.KernelBase.LoadModules(IEnumerable`1 modules)
   at Ninject.Core.KernelBase.Load(IModule[] modules)
   at ScrumSprintMonitor.Implementation.NinjectContainerAbstraction.<LoadRegisteredModules>b__3(IModule module)
   at System.Collections.Generic.List`1.ForEach(Action`1 action)
   at ScrumSprintMonitor.Implementation.NinjectContainerAbstraction.LoadRegisteredModules(Boolean configurationDependent)
   at ScrumSprintMonitor.Implementation.NinjectContainerAbstraction.LoadConfigurationDependentModules()
   at ScrumSprintMonitor.Implementation.NinjectContainerAbstraction.EnsureConfigurationDependentModulesAreSetUp()
   at ScrumSprintMonitor.Wpf.Application.Bootstrapper.ShowScreensaver()
   at ScrumSprintMonitor.Wpf.Application.Bootstrapper.ProcessCommandLine()
   at ScrumSprintMonitor.Wpf.Application.Bootstrapper.CreateShell()
   at NinjectContrib.CompositePresentation.NinjectBootstrapper.Run(Boolean useDefaultConfiguration)
   at NinjectContrib.CompositePresentation.NinjectBootstrapper.Run()
   at ScrumSprintMonitor.Wpf.Application.App.OnStartup(StartupEventArgs e)
   at System.Windows.Application.<.ctor>b__0(Object unused)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)

 

Jul 1, 2009 at 12:33 AM
This discussion has been copied to a work item. Click here to go to the work item and continue the discussion.
Jul 1, 2009 at 8:08 PM

I have found the source of the exception. I have separated all TFS logic into a DLL that is normally placed under the .\Addins\ServerAdapters folder. Since the ClickOnce deployment does not produce that folder, the connection type doesn't get picked up and registered. I will be looking into a solution for this and hopefully post a fix soon.

Jul 4, 2009 at 2:04 AM

Hi bebo,

 

I have fixed the ClickOnce deployment manifest. You should now be able to successfully deploy with ClickOnce. Please let me know your findings.

Jul 6, 2009 at 3:41 PM

Got it to work! I had to update the link to ScrumSprintMonitor.ServerAdapter.TFS.dll from the ScrumSprintMonitor.Wpf.Application project (I ended up pointing it to main\build\AnyCPU\Debug\AddIns\ServerAdapters). Aside from that, I had no issues with the new version. Thanks again!

Jul 6, 2009 at 10:56 PM
Edited Jul 6, 2009 at 10:56 PM

Great to hear that! Did the link not work at all for you, or you just needed to use another build target (AnyCPU)?

 

BTW, feel free to leave a review on the downloads page, so casual browsers know that this build is doing what it is supposed to.

 

Thanks for using the Sprint Monitor!

Jul 16, 2009 at 2:43 PM

The project just couldn't find the file where the link was pointing initially. Once I updated the path of the link, it worked. I didn't have to change the build target (it defaulted to Any CPU).