His men would follow him anywhere, but only out of curiosity.

the brown-dragon blog

Practical Project Management

2009-01-08

I'm currently managing nine projects at work and I needed a way to keep tabs on all of them without spending all my time on Microsoft Project. So I came up with this lightweight way to track projects which I think works very well.

A while back GK, a senior Group Lead in our company, held an excellent session on Project Management. I asked him for some advice and came up with this simple text file (one per project) that I maintain.

project.template

Project Name [Project Id]                              Last Updated: 2008-04-01
===============================================================================
Brief Overview of the project.

Owner   : Someone (Who defines "Success" of the project?)
Customer: Someone or some group (Who is the end "consumer"?)
Others  : Other stakeholders

Team    : Team Lead(s): Team Member, Team Member...
          Team Lead(s): Team Member, Team Member...
          Team Lead : Team Lead(s): Team Member, Team Member...
Status  : WIP       (or "On Hold", or "Released", etc.)

Value Provided (Objectives/Goals)
++++++++++++++
1.  Be S.M.A.R.T! (Specific Measurable Achievable Realistic Time-bound)
2.  Objectives in enough detail to describe the expected value of this project.

Output (Scope)
++++++++++++++
1.  Library (product.lib), providing the following services:
        * Does X
        * Does Y
        * Does Z
2.  Application (product.exe), providing the following services:
        * Blah Blah Blah
        * And more functionality
        * And yet more
3.  Techical Documentation (doxygen output, uml)
        * Overall Architecture
        * HLD/LLD
        * Class Diagrams/Sequence Diagrams
        * etc etc
3.  User Documentation (help.html, getting-started.pdf)
        * Introduction
        * How to Use
        * Workflow
        * etc etc

Risks & Mitigation
++++++++++++++++++
1.  May fail in the field.
        Strategy: Extensive testing must be done before release
2.  Developers may leave project
        Strategy: Ensure knowledge is duplicated and shared among team
                  Ensure code reviews/complete responsibility rests with lead
3.  Another risk.
        Strategy: (One of Avoid/Control/Accept/Transfer)
===============================================================================
Modules (WBS)

+ Major Module  [Owner]
+ Major Module  [Owner]
    + Sub Module    [Owner]
    + Sub Module    [Owner]
+ Major Module  [Owner]
===============================================================================
Milestones

* Something will be done. {Team Member responsible} [Date Due->Date Done]
* Something more will be done. {Team Member responsible} [Date Due]
    * Sub items in the milestone path [Date Due->Date Done]
    * Sub items in the milestone path [Date Due->DROPPED]
    * Sub items in the milestone path [Date Due]
* Something more will be done. {Team Member responsible} [Date Due]
    * Sub items in the milestone path [Date Due]
    * Sub items in the milestone path {Other Team member Responsible} [Date Due]
    * Sub items in the milestone path [Date Due]
* Something more will be done. {Team Member responsible} [Date Due->DROPPED]
    * Sub items in the milestone path [Date Due->Date Done]
        * Sub items in the sub-item's path [Date Due->Date Done]
        * Sub items in the milestone path [Date Due->Date Done]
    * Sub items in the milestone path [Date Due]
* Something more will be done. {Team Member responsible} [Date Due->Date Done]
    * Sub items in the milestone path [Date Due->Date Done]
    * Sub items in the milestone path [Date Due->Date Done]
    * Sub items in the milestone path [Date Due->DROPPED]
* Project ends. {Team Member responsible} [Date Due]

===============================================================================

Team Member
-----------
[WIP]   Action item
[WIP]   Action item
[WIP]   Action item
[WIP]   Action item
[   ]   Action item
[   ]   Action item
[   ]   Action item
[FIN]   Action item
[FIN]   Action item
[XXX]   Action item (dropped)
[XXX]   Action item (dropped)


Team Member
-----------
[WIP]   Action item
[WIP]   Action item
[WIP]   Action item
[WIP]   Action item
[   ]   Action item
[   ]   Action item
[   ]   Action item
[FIN]   Action item
[FIN]   Action item
[FIN]   Action item
[FIN]   Action item
[FIN]   Action item


Project Diary/Change Log
===============================================================================
Record all changes, notes, lessons learnt, reasons for decisions, and so on.
All changes should also be documented:
  * Risk Change * Scope Change * Objective Change * Resource Change
  * Estimation Change * Design Change * Leveling Change * Task Change
  * ...
The Reasons for the change should ideally also be documented.
It is a good idea for entry to begin with the date:
2008-01-01 Project started
2008-01-10 Requirement YYY changed to ZZZZ due to AAA
2008-02-08 [X]     Dropped Action item
2009-02-15 Risk status of XXX changed due to ABC going on unexpected leave
2009-03-15 Project On Hold because PQR
...

This sheet is really useful because it provides a quick overview of the entire project. I also take a print out of each project and pin it up on the walls of my cubicle. I write updates on the printouts as they come up and occasionally (say once a month) I'll take a fresh print-out. This print-out also helps team members track their tasks.

While printing out, I've found that I don't need the entire sheet, so I filter out only what's required using this sed script.

project-hardcopy.sed

# Filters a project overview sheet to
# make it more suitable for printing

# Don't print out blank lines
/^\n*$/d

#1y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
1{
s/.*/===============================================================================\n&/
t1
:1
s/  /* /
t1
s/\]\*/] /
}

# Check if we need a blank line
# [..] line followed by
# simple line
H
x
/^\[.*\].*\n\([^\[].*\)\?$/{
s/.*//
p
}
x
h

# Print blank lines before the following
/^Owner *:\|^Team *:\|^Value Provided (Objectives\/Goals)$\|^Output (Scope)$/s/^/\n/

# Don't print out finished/dropped tasks
/^\[[fF][iI][nN]\]/d
/^\[X\+\]/d

# Don't print out risks
/Risks \& Mitigation/,/^=\{79\}$/{/^=\{79\}$/!d;}

# Don't print out completed/dropped milestones
/Milestones/,/^=\{79\}$/{/->/d;/\[DONE\]/d;/\[DROPPED\]/d;}

# Drop the Log entries
/^Project Diary\/Change Log$/,$d

Each of the walls of my cubicle now look like this:

My Work Area

Not pretty maybe, but I just have to glance around to know the status of any project!

I find it an excellent, practical, and low stress way to manage projects effectively. If you're looking for a way to get a handle on multiple ongoing software projects try it out!

Other Posts

(ordered by Tags then Date)