Targetprocess Product Blog

Agile development on a real project (we do Kanban)

Uncategorized

2 of our servers down since 1 AM EST (servers are up already)

Here’s what we received from our hosting provider:

Our data center which is owned by Verizon Canada is having a global outage and they are in complete dark right now. None of their backup power flipped over. We have a backup generator and UPS that should all automatically pick up.

They will be releasing a statement apologizing for the issue once all is said and done that you can extend to your clients. We can also talk about compensation at that time.

For the time being we are anxiously waiting on power to be restored, we will update you as soon as we have more from Verizon.

We will update you about the status.

UPDATE: 6 AM EST

Power is restored, our datacenter is having trouble with the network but the problems should be resolved shortly.

They have 24 hours of UPS and 24 hours of diesel fuel onhand. The issue was the flip did not work properly and did not flip over to an alternate power source. Power has been restored for quite sometime but they are having troubles getting their networking equipment going.

We use the top datacenter in Toronto, most of the banks use the same one as us.

We have had constant communication with them every 10 minutes, this issue is effecting multiple other large clients of Verizon as well. They won’t issue an ETA but say it could be any minute.

All of the servers are on, we are just waiting for them to fix connectivity. I will make sure you have something to give to your clients that explains the issue in detail.

UPDATE: 8:12 EST

Some of Verizons(datacenter) routers were damaged in the power surge. They are reloading the configuration on those devices. They won’t issue an ETA but are working on it with all hands on deck.

We have numerous staff at the datacenter and keep phoning for updates frequently.

I don’t have a firm ETA but I would think by the amount of man power working on this for the past few hours, it should be fixed any time.

UPDATE: 9:20 EST

We received an ETA from the datacenter of 1 hour. We were in the process of moving the equipment to our 2nd datacenter but given the new ETA. We will give it the hour before moving.

UPDATE: 10:47 AM EST

Servers are back! Please let us know if you have any problems.

UPDATE: 1:15 PM EST We received update from our hosting provider with some explanations:

At 11:30PM on Monday, January 9th the Verizon datacenter lost complete power. Normally this would not be a problem as they should failover to Verizon’s UPS or generator. For reasons that have not yet

been explained to us, none of the alternate power sources picked up. This caused the entire datacenter to lose all power and lights. We had someone onsite by 12AM on Tuesday, January 10th to investigate the issue.

At this time numerous other large customers of Verizon also arrived, demanding answers about the situation. We knew very little until the power was restored at roughly 2AM. We were then able to power all servers and equipment and ensure everything was in a healthy condition. Verizon announced at this time they were having “internal network problems” that they were trying to resolve and did not have an ETA as to when it would be fixed.

We escalated the case along with the other companies using the facility. Verizon was unable to provide any ETA or information on what was wrong until roughly 10AM EST. The issue was found to be 4 cards in a Cisco gateway were damaged as a result of a short circuit within Verizon. We were told 4 cards were being rushed to the facility and we would be back online in roughly 1 hour. All systems came back online at 10:45AM EST.

It was very difficult for us to provide much information to our clients during the outage because the issue was not with our equipment or infrastructure directly.

Verizon will be making an announcement and providing more detail in the coming days.

UPDATE: Jan 13

We’ve received official email from Verizon

Dear Verizon Canada customer:

On Monday, January 09 at 11:02 PM EST Verizon’s network connections in
the Toronto data center experienced a service interruption. This
incident was triggered by numerous utility voltage fluctuations followed
by a total loss of utility power. Verizon backup power systems came
online as designed but a failure occurred during the transfer to
generator power.

At approximately 11:20 PM EST the power in the Verizon colocation
facility failed. By this time Verizon field engineers were on site to
investigate the power incidents. Utility power was restored at
approximately 11:31 PM EST which also restored colocation power.

Residual problems with the UPS systems were observed. Verizon field
engineers engaged vendor and third party assistance to restore full
functionality. At approximately 12:00 AM EST the UPS came back on line
and the power systems were fully restored throughout the facility.

At about 12:30AM commercial power returned and site was transferred
back.

Verizon observed problems within the network infrastructure and began
troubleshooting. At approximately 03:00 AM EST it was determined that
there were multiple hardware failures in the switching infrastructure.

At 06:49 AM EST network field technicians were dispatched to replace
hardware.
By 08:49 AM EST the incidents were escalated to level 3 engineers.
At 09:37 AM EST it was determined that additional hardware was required
from another Verizon site within Toronto.
At 10:32 AM EST all faulty hardware was replaced.

Network services were fully restored at 10:41 AM EST.

********

Corrective actions were planned and an emergency maintenance was
performed on January 12th 2012, at 12:00 AM EST to bypass the power
equipment which failed during the transfer to generator power. Verizon
procedures have been adjusted to improve the speed of escalation for
network infrastructure devices at this facility.

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).

Targetprocess Help

All you want to know about Targetprocess