Milestone slip chart

July 31, 2010

This one of the most important chart a project manager has to maintain. Even if it appears to be complex it is very to built by applying a basic good practice.
For each project, first you have to define milestones and their corresponding target date. The table below defines several milestones for our projet.

In this table we have created four milestone with target dates. The title of the column “2/8/10″ is simply the date of the first definition of the milestone date.
You have achieved the first step of the milestone slip chart.

If you define these dates at the beginning of the project without reevaluating them during the project you have an important risk of delay in your project.
So a good practice, is to reevaluate, for example each week, the target date of each milestone. Answer to the question, is the target date previously defined still reachable ? To log this evaluation you create a new column in your table like in the table below.

In the example above, on week later, there is no change for most of the milestones except for the milestone 2. Its target date, initially planned the 16/08, has move to the 23/08.
By performing the same exercise each week, you will obtain a full milestone table.

The last step is to draw a chart from these values.

With this graphical view, it is easy to identify quickly:
- milestones near from their target date: milestones that will soon cross the diagonal
- time lag: milestone trend not straight

A project well managed can have time lags but far from the diagonal. This means that the time lag has been anticipated. Like, in the example, the milestone 2.
A project not managed waits the target date to define a new date. In this case, the trend will almost reach the diagonal before defining a new date. Like, in the example, the milestone 3.


Goal definition

May 24, 2010

One of the most important thing in process improvement (after the measure) is the goal definition. It corresponds to the Define phase of the Six Sigma DMAIC method.
To define a goal, it is necessary to ask some questions :
1/ What do you want ?

It is obvious that it is the first question to ask, but pay attention to the kind of answer given. This kind of answer is not enough: “I want to improve the way I’am working”. In this sentence you have to get more information on three words, you can achieve it by asking more questions till getting answers expressed with concrete words:
- working: What part of your work are you talking about, writing emails, creating schedules, etc. ?
- way: What do you mean by way ? Is it a self-organization problem, is it a problem related to the tools you use ?
- improve: What is your expectation ? Is the improvement you are talking about measurable ?

The main objective here is to reduce the abstractness of the answer. It is necessary to obtain answers expressed in clear terms understood, by everyone, in the same way. Everyone has the same vision of what is a “hammer” (even if some can imagine a Claw hammer and other a Sledgehammer) but try the same exercise with words like “happiness”, “creativity”, “freedom”, etc. So behind words the meaning is not the same and this is a real risk (The abstractness of answers is discussed in the Neuro-linguistic programming: NLP) .
The same principle must be applied to get precise answers to some additional questions:

2/ How will you know you got it ?
3/ How someone else will know it ?
4/ What will happen then ?
5/ What prevents you from achieving ?
6/ What is you target date to obtain it ?
7/ What could you lose by getting it ?

It is very important to understand precisely the needs, if they are not well understood all your work will be useless and you risk to get one of the 4 “R” in return:
- Remorse
- Recriminations
- Resentment
- Revenge (desire for)


Value engineering

July 3, 2009

Last time, my family asked be for my favorites authors in order to make me a gift for my birthday. After an hard reflexion I was able to define a wish list but not to sort this list. What is the ranking between these authors, what are the books I want prior to others…

While thinking to this very important problem, I was remembering a method permitting to take a decision about complex problems by breaking them out into smaller ones easy to solve.

This method is part of the Value engineering and is usually used in IT domain during the Requirements development phase in order to sort requirements by priority. It is specially useful when it is not possible to obtain a consensus.

The method is quite simple:

  • Compare functions by pair and valuate the priority
    • 1: The function is a little more important than the other
    • 2: The function is more important than the other
    • 3: The function is much more important than the other
  • Sum the number of points obtained by each function
  • Compute the distribution of each function and draw a graph

To compare the functions, we will use a matrix . See what is the result with my favorites authors:

Image 1

To build the matrix I have compared each author one by one, starting at the top of the matrix. It is easy for me to take a decision between two authors:

  • Between Balzac and Bernanos, I prefer Bernanos (writting BER) a little, giving a 1 (writting 1)
  • Between Balzac and Boulgakov, I prefer Bernanos (writting BER) a little, giving a 1 (writting 1)
  • Between Balzac and Camus, I prefer Balzac (writting BAL) , giving a 2 (writting 2)

Performing the same comparison for each pair …

At the end of the comparison I make the sum of results obtained by each author and compute the distribution (result for the author on the sum of all results).

Here is the result:

Image 2

So according to this result, my favourites authors are: Conrad, Boulgakov, Bernanos, …

This very useful method permit to obtain a result that cannot be obtained in another way. This is simply done  by breaking a complex problem into several easy to solve comparison.
However, it is tedious to use with a great number of items.


Subversion in 5 minutes

June 27, 2009

I have recently installed a Subversion on my Ubuntu VM for my personal use:

  • Store little bit of source code , when I play with code
  • Store documents in order to keep a track of modifications

Subversion is a popular Software Configuration Management (SCM), the CVS successor.
Installing Subversion for a personal use is quite simple.
Distribution installation
Easy by using the Ubuntu package utility:

sudo apt-get install subversion

SNVServe
First we have to create a directory that will be the root to store all Subversion repositories.
mkdir /usr/local/repositories

Then, we will use a simple server in order give access to the repositories.
This server is called svnserve.
svnserve -d -r /usr/local/repositories

By using the command above, we tell the server to start from the created directory in daemon mode.
Once started the server will be accessible at the following URL: svn://localhost:3690/
Creating a repository
Now, we have to create a repository in order to store data.
Creating a repository (called test) can be done by using the following command:
svnadmin create /usr/local/repositories/test

This command will create the test folder containing the default Subversion repository structure.
Configuring access rights
Since, this repository is for a personal use, we will give write access to all users. To do that, it is necessary to modify the following file in the newly created repository test/conf/svn/svnserve.conf. Using these settings is certainly not advised in a production context.
# anon-access = read
anon-access=write

Creating repository structure
In Subversion, repositories have, usually the following structure:

  • trunk: Main development
  • tags: Space to store tags (label)
  • branches: Space to store branches

This is not mandatory but it is a convention, widely used.
So, we will initialize this structure by creating corresponding folders in a temporary directory called import-svn for e.g. and then import this structure in the repository.

mkdir -p /tmp/import-svn/trunk /tmp/import-svn/tags /tmp/import-svn/branches
svn import /tmp/import-svn/ svn://localhost:3690/test

You will have to cancel the edition of a comment text and to continue in order to commit the import.

If you want to use your repositories from outside the VM, you can forward the TCP port 3690 to 3699 for e.g. see this post for more details on port forwarding.


VirtualBox Headless

June 20, 2009

Sun Virtual Box Logo

VirtualBox is an amazing software, it permits to emulate several guest systems. This process is also called virtualization. With this tool, it is, for example, possible to run a Linux installation (called Guest) on a Mac OS X system (called host).In this way, this is very easy to run a Linux safely. This virtual environment will be a great playground to perform tests, install softwares, etc. since it will be easy to save and restore a previous configuration without spoiling your main environment.

Ubuntu running on Mac OS X inside a VM

Ubuntu running on Mac OS X inside a VM

I will tell more about VirtualBox features and usages in next posts.
But know, I will explain how to access the system running in the VirtualBox environment (the Guest) from the host machine. This is useful, for example, if you want to use your Linux installation trough the SSH protocol. This avoid to be inside the Virtual Machine (VM) screen to use it. You can then use your VM as if was a server located on your network.
The default network protocol used when you create a VM is NAT (Network Address Translation). With this configuration, it is possible to access by default to the Internet form the Guest. But if we want to access the Guest from the Host trough ssh an additionnal setting is required. It consists in defining port forwarding for the ssh port. The goal is to forward to the default ssh port (22) on the Guest, queries made on a new port (2222) on the Host.

Declaring port forwarding (To run these instructions the VM must not be running)

VBoxManage setextradata "Ubuntu" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP
VBoxManage setextradata "Ubuntu" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22
VBoxManage setextradata "Ubuntu" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 2222

Where:

  • Ubuntu: is the name of the VM
  • pcnet: is the default network card
  • gestssh: is a name given to the setting

Behind the scene, the definition file of the VM (Ubuntu.xml in this case) is updated:

<ExtraData>
 <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" value="TCP"/>
 <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" value="22"/>
 <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" value="2222"/>
</ExtraData>

Installing the server on the guest

Now it’s time to install the ssh server on the Guest.
On the Guest:

sudo apt-get install openssh-server

Now the ssh server is installed and is running.

Enabling the X protocol on ssh
On a Ubuntu installation the X server is configured with the -nolisten tcp option. In order to be able to use the X protocol trough this configuration, this option has to be enabled.

sudo vi /etc/gdm/gdm.conf
#DisallowTCP=true
DisallowTCP=false

The X server needs a restart to take this modification into account.

Run the VM in Headless mode
The Headless mode permits to run a VM without the need to use the VirtualBox GUI nor to have the VM displayed in a window. To do that run the VM as folllow:

VBoxHeadless --startvm Ubuntu --vrdp=off

The vrdp option is turned off because it is useless since we will use ssh to connect to the VM.

Connect to the Guest form the Host
Use an ssh client, for example the command line to connect to the Guest.

ssh -X [user]@localhost -p 2222


Estimate of attributes

June 17, 2009
Establish Estimates of Work Product and Task Attributes

Establish Estimates of Work Product and Task Attributes

Once you have written the WBS, the next step consists in estimating the effort required to perform the described tasks. This is often done in two steps since it is not easy to determine directly the effort (or the cost) from the task.  The first step aims defining possible measures that will help in performing estimations during the second step. Typical measures often concern size. In the example initiated in a previous post, the major part of the work is to write a specification from a requirement document. The first measure that comes to mind is the number of pages. This is a possible measure but not enough detailed in our case.

Requirement documents are organized in requirements that have to be well defined, with an equivalent granularity level. Moreover, requirements are interesting because they lead the work. Once all requirements are treated , the work is finished. In consequence, requirements will be our main measure unit of the work to do.

Usually, requirements are easily identifiable since they have an ID compliant to a convention. For example requirements ID can be put between brackets, in this case a simple regexp tool can be used to count them (I’m writing a reminder to work on a post concerning requirement analysis).  This measure is a first level of measurement, it may be sufficient in most of the cases, however, the model can be refined by providing additional information like the complexity level of a requirement (simple, medium or complex). This additional information will permit to estimate more accurately the workload required to treat a requirement. A simple requirement will require less effort than a complex.

For other tasks of the WBS, measures have also to be defined. For all activities requiring meetings, the number of meeting is a good measure. Some activities directly linked to the writing can be deduced from the main task. For example, reviewing a document will be directly linked to the size of the document, itself being linked to the number of requirements. Finally, the cost of some tasks is equal whatever the amount of work produced. This is the case for deliveries. For these tasks, measure is not required if you already know the time it takes to deliver a document.

When defining measure, it is important to write not only the result obtained but the definition of the measure. The definition of the measure will be used as the base of the estimation hypothesis (my estimation is based on the number of requirements) and it will permit to analyze and refine estimations for next works. Establishing measures is an activity described in the Measurement and Analysis (MA) process of CMMI for Development.

Here is the result of a WBS sheet with measure definition:

WBS with measures

WBS with measures

The second step of the estimation process (using measures to deduce workload) will be treated in a next post.


WBS tools

June 14, 2009

To create a WBS, it can be interesting to use a Mind mapping software. Mind maps are diagrams used to represent information in a graphical structure called map. Softwares permit to create these diagrams. Several products exist in this category, like (see here for the full list):

  • XMind : Based on the Eclipse platform. This is the tool that has been used to produce diagrams of this post.
  • FreeMind: One of the first free mind mapping software (written in Java).

Since the WBS is a hierarchical structure, Mind mapping tools permits to represent and to design it efficiently. In consequence, it will be easy to:

  • Expand / Collapse level to show hide WBS detail
  • Reorder elements of the WBS (if an activity does not belong to a category, it is easy to move it with a Mind mapping software)
  • Add new elements, elements are easily inserted, numbering of existing elements is automatically computed
  • Add additional informations (notes, flags, etc.), Mind mapping softwares permit to add graphical elements in order to bring visual information.
  • Offer a global view of the project
  • Export the structure to a spreadsheet application for further use like estimating the WBS
  • And many other things, …

The following screen shots show what can be done in XMind with the example of the WBS presented in a previous post. All the views presented below have been created with the same structure, only the visual representation has been switched.

The standard map clockwise view (note: numbering function has been used in order to identify each activity of the WBS), this view is (most of the time) the default view of Mind mapping softwares:

WBS map view

WBS map view

The tree view, this is the standard view to represent a WBS:

WBS Tree structure

WBS Tree structure

The spreadsheet view:

WBS spreadsheet view

WBS spreadsheet view

And, my favorite (it is the most funny) the fishbone view:

WBS fishbone

WBS fishbone


Introducing CMMI & related vocabulary …

June 13, 2009

The previous post was about creating a WBS. This activity is one of the activities described in the CMMI for development (Capability Maturity Model Integration) model. CMMI goal is to provide organizations a tool helping them in their processes definition and improvement. Behind the term process it is simply the definition of the way an organisation or a person perform a defined job. For example, if you are a house painter, you know the process of painting a room (rub down previous painting, put a finishing plaster to polish the wall, etc.). It is exactly the same thing for the development activity, CMMI for development aims helping organization involved in development in defining their processes. CMMI does not define accurately how to do since each organization has its own way to work. Instead it focus on describing practices that have to be implemented to successfully reach goals.

In addition to the development (CMMI-DEV), CMMI is also defined for several domains:

  • CMMI for Acquisition (CMMI-ACQ): How to acquire products and services.
  • CMMI for Services (CMMI-SVC): How to define and deliver services.

It is also interesting to cite here:

  • People Capability Maturity Model (P-CMM): How to manage people in an organization.

To focus on CMMI, it is strictly organized in Process Area (PA). A Process Area is the main element of CMMI, it defines a set of practices in a dedicated area like Project Monitoring & Control (PMC) or Project Planning (PP). Each process Area contains:

  • Generic Goals (GG) : Goals of the process area shared between several processes. They are called generic since they have to be achieved for each process. Generic Goals describe several activities permitting to reach the goal. These activities are called Generic Pratices (GP) . The term generic is used because these practices have to be applied in each process area, for example the “Train People” practice is important whatever the related process area.
  • Specific Goals (SG) : Goals of the process area specific to a process. They describe the goals of the process area (in contrast with generic that can be applied for all process areas). Specific Goals describe several activities permitting to reach the goal. These activities are called Specific Practices (SP). It is the description of an activity permitting to achieve the corresponding goal. These activities are the core of the process area. For example creating the WBS is an activity of the Specific Practice “Estimate the Scope of the Project” related to the Specific Goal “Establish Estimates” of the Process Area “Project Planning”.

I will not talk  about maturity levels now, since I think that it is not the most important part of CMMI. Maturity level is often used by organizations to promote themselves. CMMI will be one of the central topics of this blog, in consequence maturity level will be discussed later.


WBS

June 12, 2009

If you have a work to perform the first thing to do is to create a WBS. A WBS (Work Breakdown Structure) is the complex term for the list of tasks to perform in the frame of a project or a mission. For example, if you have to write a software specification based on a Requirement dossier, you have to define the list of tasks to perform in order to do the job.

Well writing this document will first require to read and understand the input document (the Requirement Dossier), this may require to run one or more workshops with customers to ask questions and acquire enough knowledge to be able to start writing the specifications. Once written, you will have to review yourself the document, perform corrections and finally deliverer it. During this work you will probably have to report the progress of your work to the customers and to your boss. In short, a lot of tasks aside the core task of writing the document.

This is the first benefit of using a WBS, it permits to make you think to the tasks you will have to perform. Without doing this inventory prior to the work start, tasks will be identified too late to have the time and the money to perform them properly.

Let’s write in a spreadsheet application the list of tasks to perform this job:

Initial WBS

Initial WBS

It is an interesting first step but, mainly two remarks can be made on this initial WBS:

  1. It does not define a hierarchical structure, it is hard to identify tasks since they are not categorized. Elements in this structure are called levels.
  2. The core task, “write the specification”, is not enough detailed. Performing this task encompasses a lot of activities. But, these activities are not known at this time. In consequence the WBS will be refined later.

Here is the same WBS with the addition of top level categories.

Hirearchical WBS with 2 levels

Hirearchical WBS with 2 levels

Besides the ergonomic enhancement, the categorization will permit to obtain, in the next estimation step, a model of this kind of work. It will permit to visualize, for example, the amount of additional workload required to perform the core task of writing a document. After several iterations, it will be the base of a model definition permitting to estimate accurately, from the workload required to write the document, the total workload required to perform the global process (writing the document + additional tasks).  The following pie chart gives an example of this kind of model:

pie chart of the workload by top level category

pie chart of the workload by top level category


Follow

Get every new post delivered to your Inbox.