Introduction
2009/1 is only just out of the door but the developers at PureCM have been working on the 2009/2 release for over 3 months now. Some of the big features which you will hear about over the next few months include our new Visual Studio plug-in and Explorer plug-in. This blog looks at our new ‘Projects’ view. Some of this functionality will find its way into the 2009/2 release but it will not be finished until the 2010/1 release. All functionality is subject to change – but this blog should give you a feel for the direction we are taking PureCM.
The “Problem” with Streams
We believe streams are one of PureCM’s strongest features. One of the reasons for this is that they are flexible so they can be used for a wide variety of functions. For example you can use streams to represent your development branches, user branches, task branches, etc. You can also use streams to create snapshots of your releases. This flexibility, however, brings various problems...
Talking to first-time users we are finding that the concept of a stream can be difficult to grasp. All users are familiar with terms such as versions and releases. Users coming from another SCM tool are familiar with the concepts of branches and snapshots/labels. It can be difficult for users to adjust to the concept that a stream can be used to represent these different entities. Furthermore there is the complexity of having to setup your streams folders to include the relevant permissions.
Another problem with having a generic ‘stream’ is that when listing streams you cannot filter the list according to the context. For example when creating a new workspace, 9 times out of 10 you are creating a workspace for a development branch. It would be great if you could select your workspace stream from a list of these development branches. Currently you have to find the development branch within all the other streams.
This also applies when viewing the Stream Hierarchy Diagram. If you create lots of streams for each release/feature/task/developer then the tree control becomes unreadable (as shown below).
We had a discussion about how we might represent the stream Hierarchy Diagram as a diagram rather than a tree control. It quickly becomes apparent that you want to display development branches differently to releases/snapshots. Furthermore you want the option to show/hide developer/task streams.
Another example is with displaying the child streams in the submitted changes. This is great if you only use streams for development branches and releases. You can quickly see which changesets were submitted between 2 releases. However, if you use streams for feature/task branches then the number of streams shown within the submitted changes becomes unmanageable. It would be nice if you could tell PureCM to only display the release streams within the list of submitted changesets.
Stream Types
So we went back to the drawing board and tried to think of the basic concepts which people use when developing software. So far we have come up with:
-
Project : The project contains all the code for a single project. If you develop multiple projects in PureCM then you have probably created a top level folder for each project.
-
Version : For parallel development it is necessary to create multiple versions of a project..For example we would have a 2009/1 version and a 2009/2 version.
-
Feature : A feature is a large piece of work which is broken up into multiple tasks.
-
Task : A task is a unit of work which requires changing the source files. A task can be created directly from a version or from a feature.
-
Release : Otherwise known as a label or snapshot. This represents an external release, milestone, internal release, etc.
‘Under the hood’ these will all be streams and functionally we are not introducing anything new. But by categorizing streams into these types we can improve the user interface with a new ‘Projects View’.
The Projects View
The Projects View will replace the Streams View in the toolbar. Within the Projects View you will be able to create each of these stream types. Selecting a project, version or feature will list all tasks for that object. So selecting a project will list all the tasks for the whole project. You will be able to filter this list according to the task state (see below). Tasks with a higher priority will appear first in the list.
Tasks or Issues?
You may be wondering whether tasks are replacing issues. Tasks have a static workflow which is shown here...
The green states are optional while the red states are mandatory. So at its most basic form a user creates the task, a developer starts working on the task and finally the developer submits the task into the version. If you want to plan which tasks will go into which version then you include the ‘Open’ state. If you want a product manager to assign which developer will complete which task (rather than letting the developer choose) the you include the ‘Assigned to Developer State’. If you want to review the developers changes before they are submitted into the version or if you are involved in parallel development then you include the ‘Integrated’ state.
So if the workflow you are using matches the static workflow of tasks then you may be able to replace issues with tasks completely. If your workflow is more complex or if you need to store more information against a task than a simple description then you can use tasks to complement your issue workflow.
The idea is that tasks are lightweight, so they contain a minimum amount of information and need virtually no setup. They do not have custom fields, only a summary. If you want to store more information or have a more detailed workflow then you should use issues to complement the tasks. Alternatively you could use a third party defect tracking tool instead of PureCM issues. Whatever defect tracking tool you choose the tasks will be created automatically and the integration will be seamless.
This concept is illustrated with the
PureCM OnTime Bridge which integrated PureCM with OnTime. OnTime stores all the information for a defect/feature/incident. A minimal PureCM issue is created when a developer needs to work on the OnTime defect. When the developer submits the changes the state of the OnTime defect is updated.
What Next?
There are many other advantages which the Projects View brings to PureCM, some of which will be the focus of future blogs...
|
Creating Merge Paths
|
When creating a new version, feature or task PureCM will create the relevant merge paths for that stream type. |
| Maintaining Merge Paths |
The flat ‘Merging View’ can be reorganized to use the new stream types to make it more user friendly. |
| Stream Ownership |
You can specify the user or group which owns the stream. This will make the user interface for ‘My Pending Merges’ a lot better because we can only display the pending merges for streams which you own. |
| Visual Studio |
Imagine that you open Visual Studio to get a list of your open tasks. You select a task which automatically creates the workspace if necessary or reuses an existing one to get the project from source control. When you submit your changes the task is automatically closed. |
The OnTime Bridge will be updated to use tasks rather than issues, and more integration ‘Bridges’ will be created. If there is a particular defect tracking tool which you use and want to integrate with PureCM then please let us know by emailing sales@purecm.com.