Git and Agile Development with CloudForge and TeamForge

Git and Agile Development with CloudForge and TeamForge Platforms

In this blog I will show you how to add TeamForge to your free CloudForge project and start taking advantage of the powerful collaboration and development tools that make TeamForge the industry leading Agile application lifecycle management platform.  This blog is intended to be a follow up to my earlier blog, Intro to GitEye and CloudForge.  If you wish to follow along with this blog, it is assumed that you have already installed GitEye, signed up for a free CloudForge account, created a CloudForge project, and added Git to your project.  If not, I recommend that you first do these things, following the directions in the Intro to GitEye and CloudForge blog for guidance where necessary.

Even if you do not use Git at all, you may still find this blog interesting.  Besides being a feature-rich Git client, GitEye also integrates tightly with CloudForge and with the TeamForge software delivery platform.  I’ve chosen GitEye as a vehicle to illustrate a few of the many TeamForge features that can empower your teams to deliver great software.  The focus of this article is on these features, not GitEye.  Whether you use Git, Subversion or something else for your SCM needs, everything I will show you here still applies and can be put into practice just as well using the TeamForge web UI or one of the other desktop clients that can talk to it, such as the Eclipse desktop or the Microsoft Windows desktop.

You will notice that throughout this blog I make several references to Agile development methodologies such as Scrum and to related terms such as story points and team velocity.  It is beyond the scope of the article to do anything more than scratch the surface of these subjects, but there is a wealth of information available if you would like to learn more.  I encourage you to investigate.  If you have not yet embraced Agile development, don’t worry; TeamForge is very flexible and adds great value to other methodologies as well.

Add TeamForge to CloudForge Project

The first step is to add the TeamForge service to your CloudForge project.  In the GitEye dashboard, select the CloudForge tab.  Click on the “Add Service” button.


In the Add Service dialog, expand CloudForge and select your project.  Click Next.


On the Select Services page, check TeamForge.  Click Finish.


If you followed along with my previous blog, then you might have noticed that the Git checkbox was disabled.  This is because you have already added the Git service to your project.  If you even did the extra credit assignment at the end of my previous blog and added the TeamForge service to your project, then the TeamForge checkbox will also be disabled.  In that case, you can skip this step and click Cancel.

After adding TeamForge to your project, select the “CollabNet Sites” tab on the left side of your GitEye window.  Expand CloudForge, then expand the project to which you added TeamForge.  Now expand the TeamForge node under your project.


Your window should look something like the above (with your organization name in place of “desktops2”, and your project name in place of “Blog Demo Two”).  It can take a few minutes for your new TeamForge service to be provisioned, so if you do not see your project under the TeamForge node then wait a minute before refreshing the CollabNet Sites view by clicking the refresh icon in the view’s toolbar.  Once your TeamForge project is available, expand that as well.


Beneath your TeamForge project, you will see nodes for several of the most valuable and frequently used TeamForge tools.  In this blog, we will focus mainly on the tools directly related to Agile development, specifically Trackers, Planning Folders, and the various planning editors that use these.  I encourage you to read about and experiment with the other tools as well, such as the TeamForge document manager and TeamForge discussion forums.  If you’d like to spend a few minutes exploring the web UI of your new TeamForge project, now would be a good time to do so.  You can open your browser to the project URL by right-clicking on TeamForge and selecting “Open in browser”.


Now let’s dive into some some TeamForge features.  I will continue to demonstrate using GitEye but, unless otherwise noted, all of these features can be accessed from the TeamForge web UI or any of the Collabnet desktops.


In the CollabNet Sites tab, expand the Trackers node.


You will see that your free TeamForge project is configured for Agile planning and development.  It includes trackers for Defects, Backlog Items and Tasks.

Let’s start to populate our backlog.  Right-click on “Backlog Items” and select New > Artifact… from the context menu.


We are going to create a user story backlog item.  A user story should describe a specific use case, encapsulating what it is that you want your product to do.  Later, as we’ll see in this blog, the user story might be broken up into several tasks that describe the work that needs to be done in order to satisfy the story.

With that in mind, in the “New Task” editor, provide a summary and description for your new backlog item.  For Category, select “Story”.  Change the priority to “1 – Highest”.  Click Submit.


Follow the same steps to create a second backlog item.  Again, select “Story” for Category.  This time, leave the priority as “4 – Low”.


Tracker Queries

Now that we’ve created a few backlog items, we’ll take a look at how you can use tracker queries to locate and organize your artifacts.

Select the “Task List” tab on the right side of the GitEye window.  Right-click anywhere within the Task List view and select “New > Query…” from the context menu.


On the “Select a repository” page of the “New Query” wizard, select your TeamForge server and click Next.


On the “Select Project” page, enter “High priority backlog items” for the title.  Select your TeamForge project and click Next.


On the “Select Application Folder” page, expand “All Trackers” and select “Backlog Items”.  Click Next.


On the “Selection Criteria” page, select both “1 – Highest” and “2 – High” in the priority box, then click Finish.


Expand your new query and you will see just the backlog item that we made high priority.  This is a very simple example of a user-defined custom query.

Planning Board – Release Planning

Let’s assume that you are the product owner and it is your job to organize the user requests and schedule them for releases.  This is where the planning board comes in.  Before continuing, I am going to add a dozen or so additional backlog items so as to demonstrate what a realistic planning board might look like.  You can do the same if you wish.  When you are ready, right-click on your project and select “Open with” > “Planning Board” from the context menu.


Your initial planning board will look something like this:


I have double-clicked on the planning board tab to maximize it within the GitEye window.  To minimize it again, I would simply double-click it again.  I have also expanded the “Artifact Selection and Highlighting Criteria” section at the top of the planning board.

On the right side of the planning board, you see all your project’s planning folders, with hierarchy indicated by indentation.  On the left side, you see cards for each artifact that is currently in the selected planning folder.  At this point, the selected planning folder is “Product” and no artifacts have yet been added to any planning folders, so the left side is empty.

Planning folders are the key to organizing your backlog.  A typical planning folder hierarchy might include a product folder at the top level, with child folders for releases.  If you are practicing Scrum development, the release folders might have child folders for sprints or iterations.  As you can see, your TeamForge project has been seeded with such a hierarchy of planning folders.

Now we are ready to start moving our backlog items into planning folders.  In the planning folders column, select “Unscheduled”.


Because you have selected “Unscheduled”, you are seeing all the artifacts that are currently not in any planning folder.  At this point, that is our entire backlog.  The first thing we are going to do is move all our artifacts into our “Product” planning folder.  The planning board has several different modes that you can choose to use, including Card mode, which we’re in currently, Columns mode, which I’m not going to demonstrate in this blog, and List mode, which I think is the easiest mode to use when you want to move a large number of artifacts to a planning folder.  In the dropdown at the top of the planning board, where it currently says “Cards”, select “List”.


Your planning board now looks something like this:


If you need to resize the columns, you can do so by dragging the separators in the table header.

Select all the artifacts in the table and drag and drop them onto the “Product” planning folder.  You will see a status dialog telling you that the artifacts are being assigned to the planning folder.  When this operation completes, the left side of your planning board will be empty because there are no longer any unscheduled artifacts.

Select the “Product” planning folder, then use the dropdown at the top of the board to change back to Card mode again.  Your board now looks something like this:


Before we start to schedule our backlog items, it’s likely that we want to order (rank) them according to the order in which we want them to be tackled.  There are various factors we might take into account when ranking our backlog items.  Logical dependencies might come into play (for example, I probably want to “Make all my dreams come true” before I “Undo my dreams”), or maybe we want to assign a high rank to backlog items representing requests from a particularly squeaky customer.  To reorder our backlog items, we need to toggle into rank mode.  We do this by clicking on the cross-shaped icon (tooltip is “Activate rank mode”) at the top right of the planning board.


You will notice that, in rank mode, the planning folders section is hidden.  This maximizes our available real estate so that we can use drag and drop to reorder our backlog to the way we want it.  I am going to switch the order of the first two artifacts.

As you are ranking your artifacts, it’s likely that you will need to see more of the artifact details than are currently shown on the artifact cards.  There are several ways that you can do this.

1.  You can double-click on a card (or right-click the card and select “Open in > Dialog” from the context menu) to bring up a simple dialog editor.


Note:  Changes that you make in the dialog editor are not saved to the server until you save your planning board changes.  This allows you to make changes to many artifacts, avoiding back and forth trips to the server until you are ready.

2.  You can click on the icon to the left of the rank mode icon (tooltip is “Show card details”).  This is a toggle.  When details are shown, your planning board will look something like this:


Note:  Although your free TeamForge project on CloudForge includes all the features you need to manage a typical Agile project, there are a few features that are available only in the paid plans.  One of these is the ability to custom configure your planning boards.  With a free plan, you are limited to using the planning board’s default configuration, which is satisfactory for the majority of cases.  With a paid plan, a project administrator can customize many aspects of the planning board, including what tracker fields appear on the cards when card details are shown, and how these fields are ordered.

After ordering your artifacts the way you want them, click on the rank mode icon again to deactivate rank mode.  Also, click on the show details icon again to toggle back to showing just the basic cards.


Let’s assume that “Make all my dreams come true” is something that we want to do in the first release.  Select this card and drag and drop it to “Release”.


Unlike when we dragged our unscheduled artifacts to the “Product” planning folder, our artifact did not disappear from the left side of the planning board after it was dropped.  You will notice, however, that underneath the title on the card, where it used to say “Product”, it now says “Release”.  The reason that the card is still shown is because we dropped it on a child planning folder, and the “Include artifacts from child folders” checkbox is currently selected.  Uncheck that box and see what happens.


What you have noticed is a very useful feature of the planning board.  With “Include artifacts from child folders” deselected, artifacts disappear from our board as they are assigned to a particular release or iteration, giving us a clear view of what items remain to be scheduled.

We’ve decided that “Undo my dreams” can wait for the next release.  Leave this artifact in the “Product” planning folder.  Schedule half of the remaining artifacts for this release by dragging them to the “Release” planning folder, leaving the remaining artifacts in the Product planning folder where they will be under consideration for subsequent releases (obviously real life release planning would involve a bit more consideration).

Now select the “Release” planning folder.


Planning Folder – Sprint Planning

At this point, we are going to change hats and take on the roll of the project manager working together with developers  to decide which user stories we plan to complete in our first Release sprint (Iteration).  In other words, we are going to have a sprint planning meeting.

If you do not have some familiarity with the Scrum development process and sprint planning, here is a nice article on forecasting in Agile.  A key takeaway is that a story point is a relative unit that does not directly relate to a number of hours.  A team’s velocity is how many of these story points the team can complete in a sprint.  These are subjective terms that will very depending on team and practice.  The numbers that I’m using in this blog are merely examples.

We need to decide what the duration is going to be for each of our iterations, and also how much work can be done by our team during that duration.  For this example, let’s assume that our iterations are each one week.  Furthermore, let’s assume that our team has a velocity of 20 story points.

Now, assuming we have already ordered (ranked) our release artifacts the way we want them, we need to assign story points to each of them.

Notice that in the upper right corner of each artifact card you see “None 0”.  “None” is the user to whom the artifact has been assigned.  “0” is the number of story points that we have assigned to the artifact.  We need to assign story points to our artifacts.

Click on the “0”, which is a hyperlink, in the upper right corner of the “Make all my dreams come true” card.  This will open the update dialog for the artifact, with the story point field preselected.  Change the value to “10” and click OK.


Repeat this process to assign story points to the other release artifacts so that when you are done your planning board looks like this:


Notice the asterisk next to the story points on each card.  This indicates that the field has unsaved changes.  Click the Save icon at the top of the planning board.


The save dialog shows all your unsaved changes.  You can also see that there is a field for an optional comment.  TeamForge keeps an audit log at the field level for every change that is made to an artifact.  If you enter a comment, the comment will be associated with the changes in the audit log.  Leave the comment field blank and click OK.

Our release artifacts are now ranked and have been assigned story points.  All we have to do now is drag artifacts to the Iteration planning folder, starting from the top and working our way down, until the total story points reaches 20, which we have decided is our team’s velocity.

Drag the first three artifacts to the Iteration planning folder.  Notice that the artifacts are removed from the page as they are dropped on Iteration.

Select the Iteration planning folder to see just the artifacts planned for this iteration.


That’s it, you’ve planned a sprint!

Task Board

Now we will change hats once again and take on the role of a developer who is actually going to write some code in order to complete this sprint.

If your planning board is still maximized, double-click the planning board tab to unmaximize it.  Then close it.  In the CollabNet Sites tab, right-click on your TeamForge project and select “Open with > Task Board”.


Double-click on the Task Board tab to maximize it.  If “Product > Release > Iteration” is not already selected in the dropdown at the top of the board, select it now.  Your board should look something like this:


Use the horizontal scrollbar to see any status columns that are not currently visible.  In the above screenshot, these include “Done” and “Abandoned”.

As you can see, there is a row for each backlog item (user story) that we assigned to this iteration using the planning board.  We are now going to break our stories up into tasks, where each task represents a specific bit of actual work that needs to be done in order to satisfy the user story.

Click on the icon in the upper left corner of the first story card.  In the “New Artifact” dialog, set the title to “Build the button” and set the estimated effort to “10”.


Click OK.  Repeat this process to create a second task with title “Install the dream machine” and estimated effort “10”.  When you are done, your board should look like this:


Note that you now have two tasks that have not yet been saved to the server, which is indicated by the artifact ID of “*unsubmitted”.  Go ahead and click the Save icon at the top of the task board.


The save dialog is virtually identical to what you saw when you saved planning folder changes earlier.  Click OK to save your changes.


Your two new tasks have now been saved to the server and have artifact IDs.  You might also have noticed that the progress bar, at the top of the board, changed from green to red when you added the tasks.  Drag the “Build the button” task from the “Not Started” column to the “In Progress” column and see what happens.


Not only has the status changed from “Not Started” to “In Progress”, and the progress bar been updated to indicate that there is now one “Not Started” task and one “In Progress” task, but the “In Progress” task has now been assigned to me.  To explain what happened here, let’s take a look at the task board automation preferences.  Click on the icon at the top of the board that looks like two boxes with circular arrows connecting them.


Notice the preference called “Automatically assign unassigned tasks when dropped on new status”.  It is set to “Assign to myself”, so when I dragged the unassigned artifact from one status to another it was automatically assigned to me.

Task board preferences are unique to you and your installation of GitEye or whichever CollabNet desktop client you are using.  While you are still on the preferences dialog, click “Task Board” in the tree on the left side.


Here you can see some of the other preferences that you can use to control task board behavior.  The polling preferences control how often the task board automatically contacts the server and refreshes itself if there are any changes associated with the visible planning folder.  This feature is especially valuable during a sprint review meeting, which we will cover soon, when a project manager and/or multiple developers might all be making changes to the tasks that you see on your board.

Press Cancel on the preferences dialog.  Now drag the second task to “In Progress”.  Click the Save icon and save the changes to your two tasks.

Note: As was the case with the planning board, the task board is fully functional with your free TeamForge project on CloudForge.  Again, however, there are certain useful configuration options that are only available with a paid plan.  One that is particularly worth noting is the ability to define story templates and save them on the server where they are available to all task board users.  Story templates are useful when there are common sets of tasks that get associated with certain stories.  For example, suppose that every time you create a user story you want a task to be created for server-side changes, a task for client-side changes, and a task for documentation.  In this case you would define a story template that describes what the summary and description should be for each of these three tasks, and then that template can be used when a new story is created, or at a later time, to automatically create the three tasks and associate them with the story.

Somebody has to do the Work

Since I’ve assigned the “Make all my dreams come true” story to myself and indicated that it is “In Progress”, I suppose I should actually start doing some coding.  My fellow team members, meanwhile, will be working on the other stories that have been selected for this sprint.  Because the focus of this blog is on TeamForge project trackers and planning tools, and because my algorithm for making all dreams come true is highly proprietary, I am not going to show this important phase of the process.  I will leave it to your imagination.

Task Board Revisited – Sprint Review Meeting

Now let’s assume that the end date for our first sprint has arrived.  It is time for our sprint review meeting when the developers will demonstrate their work to the team and hopefully show the project manager that they have met the acceptance criteria for their tasks.  They will open the task board to the iteration planning folder.


Note:  Since we last left the task board, I have added a task to both the  “Demo Story 01” and “Demo Story 02” user stories.  You can do the same, using the same steps that we used to add the tasks to the “Make all my dreams come true” story.

Let’s assume that I demonstrate the work that I did for the two “Make all my dreams come true” tasks and, of course, everything is perfect.  The project manager will drag these tasks to the Done column.  Let’s assume that the “Demo Story 01” task has also been successfully demonstrated.  This task is also dragged to the Done column.  When it comes time to demonstrate “Demo Story 02”, however, the developer explains that he could not complete his task because he discovered a bug in some underlying software that prevents him from going forward.  He has reported the bug, but a fix is not expected until next week.  This task will be dragged to the Impeded column.  The task board now looks something like this:


Click the Save icon at the top of the task board to save the changes to your tasks.

Even though the team did not complete all the tasks that they hoped to complete in this iteration, the iteration is over.  This is part of what makes this method of product development agile.  New tasks do not get added in mid-sprint, and sprints do not get extended to accommodate unexpected impediments or underestimated task effort.  At this point, “Demo Story 02” should be removed from the iteration planning folder and placed back in the product backlog planning folder, where it will be considered when it comes time to go back to the planning editor to plan the next iteration.  To do this, right click on the story card and select “Open in > Editor” from the context menu.


In the artifact editor, click on the selection button to the right of “Planning folder:”.  Change the selection from “Iteration” to “Release”.  Click OK.


After changing the planning folder to “Release”, click the “Submit” button at the top of the artifact editor to save the change to the server.  After saving the planning folder change and closing the artifact editor, you will see that the story no longer appears on the iteration task board, and the progress bar is now solid green, indicating that all the iteration tasks have been completed.


In this blog I’ve showed adding a TeamForge service to your free CloudForge account, creating and working with tracker artifacts to manage your backlog, using the planning board to plan a release and iteration, and using the task board to track the progress of developers’ tasks and to manage a sprint review meeting.  Although this blog has focused on agile development, TeamForge is very flexible and can be used with non-agile or hybrid processes just as well.  Most important of all, everything that you’ve seen in this blog, and much more, is available to you with your free CloudForge account.

In my next blog, I plan to demonstrate how you can associate your Git or Subversion commits with TeamForge artifacts to ensure traceability throughout the application lifecycle.


Steve Elsemore

Steve Elsemore is a Sr. Software Engineer at CollabNet. He works on Subclipse, GitEye and the CollabNet Desktop - Eclipse Edition.

Tagged with: , , , , ,
Posted in Agile, CloudForge, Git, TeamForge, Uncategorized

Leave a Reply

Your email address will not be published. Required fields are marked *