IT Project Management:
A foolproof approach
|
In software development, project management can become one of
the most challenging tasks to do successfully. People view project
management as an arduous task requiring lots of “non-productive” time managing
schedules, budgets, requirements and complex project management software.
When it comes to running small projects on shorter timelines, project managers
will tend to shy away from using any formal project management approach due to
the perception of “unnecessary overhead”. This does not have to be the
case. Project management, when done right, should accelerate a project and make
it easier, not harder, regardless of the scale. In this article we will
discuss how to take proven project management techniques and apply them to
small projects to make them easier to manage and increase their chance of being
successfully completed on time and on budget.
Any project, regardless of size, usually has three main
measures of success: was it done on time; did it come in on budget, and does it
deliver the requisite functionality. In order to manage to these three
objectives we need to create a specific plan that will allow us to achieve
this. Pragmatically, using a complex software management programs like
Microsoft Project to manage small projects with only a few developers and a
short time frame often turns out to be more effort than it is worth. By
the time you are done setting up and managing resources, critical dependency
chains, costing, scheduling etc. you may have already depleted a significant
portion of your budget. The approach we will use here is a very flexible
approach that does not require any software tools to support; it can all be
done with a notepad and a pencil.
This approach has four main steps that are both flexible and
powerful in that they can be applied universally to any type of project and
work at various levels of detail. The steps are as follows.
-
Determine
your significant milestones.
-
Estimate
the work needed to complete the specific milestones.
-
Schedule
your milestones to specific calendar dates.
-
Stay
in a known state by monitoring your progress on regular basis.
1. Determine your significant Milestones.
Defining your significant milestones is the process of
breaking down your project into logical sequential steps. A milestone is
something that has a definitive and measurable completion state. Look for
groups of tasks that reach a common end point. The milestone “Start
development” does not have an objective end point, but “Complete all User
Interface Screens” does. Each of these milestones might have smaller
milestones within them, don’t worry about that for right now, as we move on to
the subsequent steps we will have an opportunity to refine the level of
granularity if needed.
For time sensitive projects with firm deadlines, we can use a
“working backwards approach.” In this approach we start with the last
task that needs to be completed at the end of the project, such as “train
users”. We then work our way backwards thinking “what needs to be done
immediately prior to get to this step.” By working backwards like this we
force ourselves to think through each step in the process and it makes it
easier to see every task along the way. An added benefit for non-project
manager types who may not have a lot of experience with full life cycle
development, is that this process forces them to focus on the end goal versus
starting with what they know and getting to an ambiguous stage of the project
where they have a difficult time tying together the “Code is finished” step to
“Train Users” step.
Let’s look at how we would apply this to a simple
example. In this example we have received a project request to deploy a
one page website by January 11 of this year. In order to identify all the
milestones needed to complete this project, we will start with the last
milestone, which could be: “Website Deployed and Tested on Production
Servers”. Next we start to think about what we have to do immediately
prior to getting to that step. In this case, the previous step might be:
“Website Deployed and Tested on Test Server”. We can follow this
process through for each preceding step and come up with a high level list of
milestones in reverse order; such as the list below.
Milestone 7: Website Deployed and Tested to Production Servers
Milestone 6: Website Deployed and Tested on Test Servers
Milestone 5: Web Page Code Developed and Unit Level Tested
Milestone 4: Web Page User Interface Designed
Milestone 3: Web Page Prototype Approved
Milestone 2: Project Scope Defined
Milestone 1: Project Request Initiated.
2. Estimating the work required to complete your milestones.
After we have determined all of the significant milestones in
their sequential and backward order we now want to estimate how long each
milestone will take. In estimating the time it will take to complete a
milestone we might discover missing milestones, which is good. We simply add
them to the list and make sure our list still follows a logical progression.
We might also discover that some milestones are really sub milestones of
other tasks or not milestones at all; once again we just refine our milestone
list.
If we are having a hard time estimating the time needed to
complete a milestone, or the time for one milestone is significantly greater
than all the rest, that is the surest sign that you have not become granular
enough in your milestones. If we encounter this, we need to “chunk it
down”. This simply means that we will break the milestone in question
down to a finer level of detail that describes the requisite steps to complete
that milestone. We keep chunking down these steps until we can feel
confident in the time estimates we have created. Be careful not to get
too granular in chunking down your tasks, the goal is just to formulate a
confident estimate in the most efficient way possible.
For example when we look at the milestone “Website Deployed
and Tested on Production Server” we realize that we are having a hard time
putting our arms around the true time required to complete this milestone. All
we need to do is break the milestone down into smaller more discrete steps,
following the same approach we did for the whole project. We can also do
this for any of the sub steps as well, until it becomes easy for us to put a
time estimate to the specific step. After we are done chunking down the
milestone into its parts, we sum up the time needed for each sub part to get a
reasonable estimate for how long the whole milestone will take to
achieve. The task list below shows all the sub parts and time required to
complete Milestone 7 from our previous example.
Milestone 7: Website Deployed and Tested on Production Server:
9 hrs
Step 7: User performs web test from external web browser – 1hr
Step 6: User performs web test from internal web browser – 1hr
Step 5: Test machine connectivity - .5hr
Step 4: Enable Firewall – 1hr
Step 3: Deploy Web Pages – 2hrs
Step 2: Create Web Site on Server – 3hrs
Step 1: Validate Server is Connected to Network - .5hr
3. Scheduling our milestones.
Now that we have identified all the milestones and the work
required to complete them we will map the milestones to actual dates on a
calendar. We can either use a blank calendar, or draw one on a whiteboard
or notepad. Just like we did when we identified all of the milestones, we
want to work backwards and start with the end date of the project.
This is especially important when we have a fixed delivery date. This
keeps the focus on the final delivery, which is often several steps away from
the “we have finished all the code” step. Sometimes we might even
want to give our selves a little “pad”, and set our “end date” to a date before
the actual due date. Generally giving ourselves a 10%-15% pad should be
sufficient.
We want to take into account the natural rhythms of the work
day and week to map our milestones to particular calendar dates. This
means that our time estimates might not neatly fit into the calendar when a
milestone delivery date happens to fall on a date the conflicts with the
natural work window. For instance, having a week long milestone end on a
Monday morning probably is not realistic. It would be better to manage the
schedule to have that milestone fall on a Friday, the natural ending point for
the work week. Or, if we have a high risk and time sensitive milestone we
might want to buffer it with a weekend just in case some extra overtime hours
are needed to take care of any problems that might occur.
Using our previous website project example that has as due
date of January 11 with total of 53 hrs, we might give ourselves a 1 day
pad and set the end date of Jan 10th. For this example we will
assume only one person will be working on the project with a normal 8 hour work
day.
Milestone 7: Website Deployed and Tested to Production Servers
– 9 hrs
Milestone 6: Website Deployed and Tested on Test Servers – 7
hrs
Milestone 5: Web Page Code Developed - 24 hrs
Milestone 4: Web Page User Interface Designed – 8 hrs
Milestone 3: Web Page Prototype Approved – 1 hr
Milestone 2: Project Scope Defined – 4hrs
Milestone 1: Project Request Initiated. – 0hrs
|
M (Jan 1)
Milestone 1: 0hr
Milestone 2: 4hrs
Milestone 3: 1hr
|
Tu(Jan 2)
Milestone 4: 8hrs
|
W(Jan 3)
Milestone 5: 8hrs
|
Th(Jan 4)
Milestone 5: 8hrs
|
F(Jan 5)
Milestone 5: 8hrs
|
|
M(Jan 8)
Milestone 6: 7hrs
|
Tu(Jan 9)
Milestone 7: 9hrs
|
W(Jan 10)
END DATE
|
Th(Jan 11)
|
F(Jan 12)
|
As you notice on the calendar, not every day includes a full 8
hours of work. We try to plan a little padding into the schedule and take
into account the natural workday. We want to use some common sense when
scheduling milestone completions and not have someone start an 8 hours task
with half an hour left at the end of the day. The calendar above reflects
a reasonable timeline to accomplish our project and allows us to monitor the
project on a daily basis.
After reviewing this calendar, we might look at milestone 5,
which has 24 hours allocated to it and realize we want to chunk it down so we
can monitor progress a little more closely for that time period. Our
revised milestones calendar might look like this then.
Milestone 7: Website Deployed and Tested to Production Servers
– 9 hrs
Milestone 6: Website Deployed and Tested on Test Servers – 7
hrs
Milestone 5c: Server Side code developed – 8 hrs
Milestone 5b: Database code developed – 8hrs
Milestone 5a: HTML code developed – 8hrs
Milestone 4: Web Page User Interface Designed – 8 hrs
Milestone 3: Web Page Prototype Approved – 1 hr
Milestone 2: Project Scope Defined – 4hrs
Milestone 1: Project Request Initiated. – 0hrs
|
M (Jan 1)
Milestone 1: 0hr
Milestone 2: 4hrs
Milestone 3: 1hr
|
Tu(Jan 2)
Milestone 4: 8hrs
|
W(Jan 3)
Milestone 5a: 8hrs
|
Th(Jan 4)
Milestone 5b: 8hrs
|
F(Jan 5)
Milestone 5c: 8hrs
|
|
M(Jan 8)
Milestone 6: 7hrs
|
Tu(Jan 9)
Milestone 7: 9hrs
|
W(Jan 10)
END DATE
|
Th(Jan 11)
|
F(Jan 12)
|
When we have mapped all of the milestones to the calendar,
working our way backwards from the final delivery date, we might find that the
start date has actually moved to a day in the past ! What does this
mean? This means, that our current project timeline exceeds the amount of
time we have to complete the project. We have two alternatives here,
either we need to extend our project delivery date (which is sometimes an
option in less time sensitive projects), or we need to accelerate our project
timeline. Most often we need to explore the second alternative.
Here are two possible ways to accelerate our project timeline:
Option 1: Rework the milestone delivery dates. Can any milestones
be developed in parallel; is it possible to stretch each work day to accomplish
the milestones on a quicker schedule? Can we add resources to the project
to get milestones done more quickly? The negative side effect here is
usually added project cost either due to overtime or having additional
resources added to the project, but the positive result could be keeping the
project on schedule.
Option 2: Reduce project scope. This means reducing some level of
functionality the project was going to deliver upon. This is usually only
effective in the earlier stages of the project. Once a significant amount
of development has occurred there will be diminishing returns on trying to
reduce project scope since most of the work has been done and it often creates
more work to “undue” functionality.
4. Staying in a known state.
The final step in managing our project is not just one step,
it is a continual process called “Staying in a known state.” Staying in
known state is the biggest KEY to successfully managing your project. This
doesn’t mean that your project won’t have problems like missed schedules or
budgets, but it does mean that your problems will be anticipated, minimized,
and ideally - mitigated. The easiest way to stay in a known state is to
use your project calendar like a lifeline. The team should be focused on
the current milestone and treat each milestone as fixed date that needs to be
met. This focus should be kept regardless of where you are in your
timeline, a 3 day slip in week one of the project is just as important as a 3
day slip near the end. It is often these “little” slips that build up
over the project lifecycle that make delivery dates so hard to hit.
This milestone delivery schedule is what drives the project
and everyone on the project team. At least once a day check in with the
team and monitor forward progress, these check-ins can be informal chats or
regularly scheduled status meetings. You goal here is to uncover any
information that could take you out of a “known state” and jeopardize your
delivery schedule. Three main topics to cover when checking in with the
team are:
-
Are
we on target ? If not, what happened and how do we resolve ?
Have we encountered any unknown issues?
-
Or has something changed from our previous
check-in?
-
Does
everyone have the information and resources they need to continue to move
forward? If not, what information or resource do we need to obtain?
Often time is these meetings we do discover that things are
not going perfectly smoothly and something has slipped. This is okay,
having a slip is normal and expected for most projects. The important thing is
to know that you have a slip early while we have time to correct it. Not
knowing things have slipped until many days after the slip is probably the
biggest reasons why project deadlines are not met. When we have a slip we
need to reassess every milestone from that slip on and redo our calendar
schedule, updating each milestone, in effect redoing the third step in our
process for each slip. The sooner you identify a slip, the less costly it
is to the project.
By following these 4 project management guidelines, adapting
them to your own projects, and being disciplined in your execution of these
four steps you will have projects that are done quicker, cost less, and are
more enjoyable to manage.