Targetprocess Product Blog

Agile development on a real project (we do Kanban)

Uncategorized

What People Say About Teams Board Area

Here is what people say about our new Teams Board area released in TargetProcess v.2.21.

  • The relatively simple overview is just great.
  • The simple fact that this really is a KanBan board with assignment swimlanes. Been waiting for this!
  • The overall feature is very good, well thought out. Kudos.
  • The board is very nice as a tool for standups
  • Using it for daily stand-up, is great view into what people are doing!
  • Overview of all projects in one place, I’ve been struggling with this in TP for over a year!
  • Overall, that’s a major improvement. We are using scrum and I was hoping to have a good task board as this one.
  • Great use of drag and drop, very intuitive.
  • Great feature to be able to zoom in and out for detail or for high-level scope on stories.
  • I really like this idea. Very helpful from a project management point of view. Great Job with this!
  • Nice tool to set priority on product backlog item presenting many projects with bugs and features all in the sample place with intuitive drag and drop: WoW!
  • Overall, I love it! This is a great way to view everything at a glance and the ability to drill in is prefect. More feedback as I use it

Kanban: Why 3 States in Cumulative Flow Diagram

We have implemented cumulative flow diagram in TargetProcess v 2.15 as a tracking/reporting chart to get a quick overview of user stories in To Do, In Progress and Completed state:

cfd_default2

Why we have only 3 fixed states for cumulative flow diagram while all the states for User Stories and other entities are customizable? We could have enabled showing the count of User Stories in all the customized states, be it 6 or 7 or 8 states. But the visual diagram would have been too clogged this way. We would have had to either follow the reporting stats meticulously,  replicate all the states and counts in the digram and lose the visual UX of this chart, or to get it down to 3 basic  states such as ToDo, InProgress and Completed (all the customized states are just a variation for those 3 states, one way or another) and retain a good info-design.

Some people asked us to enable more detailed views in cumulative flow digram and we will consider implementing this in the future.

You’re welcome to submit your requests on cumulative flow diagram and other features to TargetProcess HelpDesk or to TargetProcess UX Group.

What Features Should be Improved/Updated in Next Releases?

Continue to post survey results. Here is the list of what should be improved in TargetProcess.

Feature Relevant
customization 79%
integration 74%
agile planning and tracking 96%
QA 83%
reports and dashboards 81%
people allocations 75%
collaboration 77%
help desk 55%
email integration 52%
time tracking 68%

Interestingly, agile project planning and tracking is on the top. The main goal of the tool is to provide agile project management, but still this area demands most improvements on customers’ opinions. It proves nicely that the main focus should be perfect.

TargetProcess Customers' Feedback

We’ve conducted TargetProcess survey among our customers. The goal of the survey was to check people happiness, determine most important problems and future product development directions. Overall we’ve got responses from 65 companies. There will be some posts about results in this blog.

One question was “Your personal feedback as a TP user“. See below all the answers (without any shortcuts or changes).

  • best decision we made. thanks
  • Good customer support; generally decent product
  • TP has matured over the last couple of years. It is slowly edging towards a complete package (planning, measuring, logging, bug tracking etc) for agile development. It is still lightweight and doesn’t burden the agile process.
  • Great tool with great features. Performance is slowed down by the web interface, so a native UI could be on the wish list for the future.
  • I like it very much, especially for it’s completeness (integration of TestCase management and bugtracking into the planning environment is most important and greatly solved with TP); usability, ‘orientation’, user guidance is sometimes a problem (as pointed out earlier).
  • I like it. It’s part of our business now.
  • Loving the progress you all have made. Just would like to see a little more focus on bug-tracking so users can see via Help Desk more info such as when a bug was resolved.
  • couldn’t work without it
  • I have enjoyed working with Target Process – both the product and the team. The product has come a very long way in a short time without losing the easy-to-use interface that allows our users to be productive in a very short time. Keep up the good work and let me know how I can help with new versions.
  • Help Desk needs work: Search function for the end user portion, custom fields visible to end users, TP Tray item avail for end users that sends to help desk.
  • Risk management features would be helpful
  • the product overall is wonderful. however, too many of the developers on my team think that the navigation within the interface is too clunky (it’s hard to find certain things even though you’ve seen the screen a thousand times). we do consulting work and the agile process works well for us. i would like to see the time tracking input and reporting become more robust.
  • Excellent tool. Very intuitive and functional. We use it as a help desk for internal requests very often.
  • excelent tool for the price, looking forward for some improvements
  • Very helpful tool, good development team and ability to realize requests in acceptable time frame
  • Please concentrate on making TP better, rather than adding more to it.
  • Overall satisfied.
  • only using a subset of the available features.
  • Thinking of integrating help desk process.
  • Awesome!
  • TP is a great tool, i recommend it and i am a big fan. IF I would give a good feedback based on what I missed during my projects, I would point an attention to the QA section. TP needs to have a history for execution, its really important to keep track of the test execution for all test cicle. I also missed and found a kind limited and confusing the report section. TP needs to have more project managment oriented reports, thinking on stakeholders, like a project summary. I missed the line chart for burndown as well as a planning poker, mainily for distributed teams.
  • TP is good and usable, what’s of more concern is the agile method and using stories to plan the release and iteration. The theory is there but turning it into practice is difficult, specially in an engineering project where there isn’t so much “end-user” content. If TP would provide guidelines (docs, UI tips, …) in this area that would be nice.
  • You guys are doing great, the product gets better and better, keep it up!
  • I like the target process product. It fits our needs better than the other products we have evaluated. However, at times it is very frustrating because features are inconsistently implemented. I can edit some table in place but not others. I can filter on some fields but not all of them. I would appreciate if the user interface was more usable and consistent throughout the product.
  • Very pleased overall.
  • Fast, stable and not bloated.
  • Can be even greater with a bit of polish
  • customization and integration are the key likes i have and good support
  • Good product
  • Overall best agile planning tool I’ve used so far.
  • Very clear easy to learn by all users, not just technical ones. Not overloaded with useless features. Lacks some flexibility.
  • Generally we are all extremely happy with TP. As I said before the one thing that would make us REALLY happy would be better e-mail notifications and the ability to assign individual TestCases withing a story, to different users.
  • Great tool. Be more careful when releasing .10 version had problems (folks lose confidence in the product). Consider actual spreadsheet grid like interface to make it easier to do quick edits (including custom fields). Consider a view that actually addresses a User Story (Card, Conversation, Confirmation). We are using this as a Template in the description for a story.
  • I think with a handful of features, this could improve my situation immesley. Because of the difficulty of resource management and reporting, I can not allow rollout to entire organization. I am hoping that I do not need to evaluate another tool such as VersionOne, but without these tools, I may be put into a position with no choice.
  • As an executive, I mostly need to know high-level status of ongoing initiatives and immediate issues. These are outside of the scope of TP and that’s good. (i.e. Don’t try to do everything in TP – stick to what you’re good at.
  • TP has been a great tool for us. There are lots of areas for improvement, but mostly having an integrated system (features/stories/test cases/bugs/requests) makes it extremely valuable for us for tracking and managing work effort and deliverables
  • Performance and stability are the most critical things that TP need address in all future releases. Regression errors, unhandled exceptions, and lost functionality are really affecting our team’s confidence in the tool. And if the application isn’t responsive and fast to use, it makes it hard to encourage people to use it.
  • Great tool. But espiacially the Jira integration is not complete.
  • Sometimes a lot of clicks to achieve a specific goal.
  • The development process is only a portion of the lifecycle. We use the reporting system to enable the rest of that lifecycle.
  • Simpler APIs (e.g. RESTful) would help alleviate feature gaps e.g. by running reports outside of TP
  • very easy for new users to pick up and use
  • We are really satisfied – we like the fast update of features and we like the product
  • Very great tool which I like to use and work with.
  • I miss a possibility to start a peson’s allocation at a certain date. An allocation always starts “today”, never in the future.

TargetProcess Development Tricks: Clear NHiberante cache using ASP.NET handler (.ashx)

Sometimes we need to clear cache of NHibernate. For example when the database was changed without using NHibernate. We have created the corresponding handler in web application ClearCache.ashx with the following code:

<%@ WebHandler Language="C#" Class="ClearCache" %>
using System;
using System.Collections;
using System.Web;
using NHibernate;

public class ClearCache : IHttpHandler
{
  public void ProcessRequest(HttpContext context)
  {
      context.Response.ContentType = "text/plain";

      //Need to retrieve ISession using your NHibernate session provider. In my case it is done in the following way
      ISession session = Portal.Instance.GetCurrentSession();

      DoCacheClearing(session);

      context.Response.Write("Done");
  }

  public void DoCacheClearing(ISession session)
  {
      ISessionFactory factory = session.SessionFactory;

      factory.EvictQueries();

      ICollection types = factory.GetAllClassMetadata().Keys;

      foreach (Type type in types)
          factory.Evict(type);

      foreach (string role in factory.GetAllCollectionMetadata().Keys)
          factory.EvictCollection(role);
  }


  public bool IsReusable { get { return false; } }

}

TargetProcess Development Tricks: Force ExtJS GridPanel skip events processing raised from nested grid panels

We got a problem with implementing inner grids based on ExtJS. ExtJS GridPanel reacts on every event from inner GridPanel by default. For example sorting in nested grid causes the sorting in parent. That is not good. Find below the code which will allow to deny the event processing in GridPanel if it is fired in its child grid panel:

Ext.override(Ext.grid.GridPanel, {
    processEvent: function(name, e) {
        var t = e.getTarget();

        if (!t) {
            return;
        }

        if (!this.el) {
            return;
        }

        if (jQuery('#' + this.el.id).find('.x-grid3').length > 1 && jQuery(t).parents('.x-grid3').length > 1) {
            return;
        }

        this.fireEvent(name, e);

        var v = this.view;
        var header = v.findHeaderIndex(t);

        if (header !== false) {
            this.fireEvent("header" + name, this, header, e);
        } else {
            var row = v.findRowIndex(t);
            var cell = v.findCellIndex(t);
            if (row !== false) {
                this.fireEvent("row" + name, this, row, e);
                if (cell !== false) {
                    this.fireEvent("cell" + name, this, row, cell, e);
                }
            }
        }
    }
});

TargetProcess Development Tricks: Setting the custom context to MS SQL Connection

We are developing the new audit history mechanism. SQL triggers were added. They do the shadow copy of added/deleted/updated data in important tables such as user story, project. The problem is that we need the custom context in these triggers implementation such as logged user and client date. In other words we need to set some custom info into the connection session before any change.

The code below shows how to set and extract context on MS SQL side:

GO

CREATE PROCEDURE setTpCnt
       @userID INT,
       @clientDate DATETIME
AS

DECLARE @BinVar varbinary(128)

SET @BinVar = CAST(CAST(@userID as nvarchar(20)) +
       '_' + CONVERT(nvarchar(100), @clientDate, 13)
              + '_' AS varbinary(128))

SET CONTEXT_INFO @BinVar

GO

CREATE FUNCTION f_GetLoggedUserID()
       RETURNS INT
       AS
BEGIN
       DECLARE @CONTEXT AS NVARCHAR(120)

       SET @CONTEXT = NULL

       SELECT @CONTEXT = CAST(CONTEXT_INFO AS NVARCHAR(120))
                     FROM master.dbo.sysprocesses WHERE spid = @@spid

       IF (@CONTEXT IS NULL)
              RETURN NULL


       RETURN CAST(SUBSTRING(@CONTEXT, 0, CHARINDEX('_', @CONTEXT)) as INT)
END

GO

CREATE FUNCTION f_GetClientTime()
       RETURNS DATETIME
       AS
BEGIN
       DECLARE @PAD_INDEX AS INT
       DECLARE @CONTEXT AS NVARCHAR(120)

       SET @CONTEXT = NULL

       SELECT @CONTEXT = CAST(CONTEXT_INFO AS NVARCHAR(120))
                     FROM master.dbo.sysprocesses WHERE spid = @@spid

       IF (@CONTEXT IS NULL)
              RETURN NULL

       SET @PAD_INDEX = CHARINDEX('_', @CONTEXT)
       SET @CONTEXT = SUBSTRING(@CONTEXT, @PAD_INDEX + 1, LEN(@CONTEXT) - @PAD_INDEX)
       SET @CONTEXT = SUBSTRING(@CONTEXT, 0, CHARINDEX('_', @CONTEXT))

       RETURN CONVERT(DATETIME, @CONTEXT, 13)
END

GO

We can do the following things with the procedure and functions above

  • We can set the context using stored procedure setTpCnt
  • We can get the logged user anywhere using function f_GetLoggedUserID
  • We can get the client time using the function f_GetClientTime

Now we need to set the context from our client. Only our client knows the logged user id and the date. We need somehow to the call of stored procedure setTpCnt in our C# client. We are using NHibernate. So we need to figure out how to pass the custom context information into every connection which is created by NHibernate.
Please find the solution below. We created the custom driver for NHibernate to make a call to stored procedure with setting required value:

#region

using System;
using System.Data;
using System.Data.SqlClient;
using NHibernate.Driver;
using NHibernate.SqlCommand;
using NHibernate.SqlTypes;
using Tp.BusinessObjects.Components.Authentication;

#endregion

namespace Tp.BusinessObjects.Data
{
    public class Driver : SqlClientDriver
    {
        private bool _isSecurityInjected;

        public override IDbConnection CreateConnection()
        {
            var connection = base.CreateConnection();
            _isSecurityInjected = false;
            return connection;
        }

        public override IDbCommand GenerateCommand(CommandType type,
                SqlString sqlString, SqlType[] parameterTypes)
        {
            var command = base.GenerateCommand(type, sqlString, parameterTypes);

            if (_isSecurityInjected)
                return command;

            var commandText = command.CommandText;

            if (string.IsNullOrEmpty(commandText))
                return command;


            if ((commandText.IndexOf("INSERT ",
                    StringComparison.InvariantCultureIgnoreCase) < 0)
                && (commandText.IndexOf("UPDATE ",
                    StringComparison.InvariantCultureIgnoreCase) < 0)
                && (commandText.IndexOf("DELETE ",
                    StringComparison.InvariantCultureIgnoreCase) < 0))
            {
                return command;
            }

            var userID = UserAuthentication.UserID;

            if (userID != null)
            {
                _isSecurityInjected = true;
                var text = @"EXEC setTpCnt @cnt_userID, @cnt_ClientDate" + Environment.NewLine;
                command.CommandText = text + commandText;
                command.Parameters.Add(new SqlParameter("@cnt_userID", userID));
                command.Parameters.Add(new SqlParameter("@cnt_ClientDate", CurrentDate.Value));
            }

            return command;
        }
    }
}

Now we need to improve NHibernate configuration to include the driver created above. It should be done in the following way

Will keep you informed about other tricks (if have time for sure).

Agile Project Management Tools Evaluations

Short comparison of several agile project management tools. I can’t resist to provide the quote :)

Even though it is [TargetProcess] a massive application somehow it feels very intuitive. Reports are easily customizable, processes can be changed to fit your style such as XP or SCRUM. You can comprehensively organize your stories into iterations by dragging and dropping. In-place editing almost everywhere allows for super quick updates. Overall the app seemed extremely configurable yet uncluttered. Also available is a public API, support for Subversion integration and a rich story card board that seems easier to use than Mingle’s.

Targetprocess Help

All you want to know about Targetprocess