Introduction -- Planning is everything but the plan is nothing.
The quote is from a successful general in the 2nd world war: Eisenhower.
From planning how you get to work on time, to planning the next step in your team project, thru to sorting out a plan for a big project.... the same technique can be used. You can handle routine daily planning and small projects using pencil and paper. Large projects need a computerized tool. But the same ideas and algorithms are used for both small and large projects.
You should already have met scenarios: lists of simple steps that are executed one after another. There is only one path through a scenario. There is only one way of executing it. In a typical planing situation you have a list of steps, but the order is not completely determined. Usually you can save time (and so money) by doing things in the optimal order. The Critical Path Method is a powerful tool for doing this. The critical path is a set of activities that have to be done on time or the whole project will be late. Every plan has one. These are the important activites to watch as the plan evolves.
Masterly management of the unexpected
This page also has notes on management.
Managers have to plan things. But they have other things they must
do. They must motivate and organize people. They make the tough decisions,
set goals for subordinates,
provide
resources, and .... get out of the way. This set of
notes
has a some introductory thoughts,
some procedures and artifacts needed when managing a development project,
and a reading list that may help.
Brookes's Law: Adding staff to a late software project makes it later.
Software development is usually a learning experience. As the
project progresses the team learns facts about their environment, their
technology, the problem, etc. . More they create new facts: the software
architecture, the project coding standards, what each person does, ...
Now, if you add new people, the team has to stop developing the software
and, instead, teach the new people the above information. This slows
down (even stops) development. The project goes further behind
schedule, and so more people are added...
See MMM (The Mythical Man Month) below.
So..... (1) get enough people first. (2) software development is more like research than manufacturing so some traditional planning techniques tend to make failure more likely. (3) First do things that provide the information to estimate the project -- you need to know if you need more people at the start of the project, not later.
Tools: MS Project, Visio, UML, etc.
You can use pencil and paper, Visio, and Dia. In a group use
a board -- it's fun. There are lots of piece of software that can
be used -- see the online resources at the end of thie reading.
Example -- breakfast
This is an example of a sequence. Note we can't eat a hard boiled egg without first cracking it or boiling it. This defines a single possible scenario. We add up the durations to figure the time to completion. In turn this means that if it takes longer to boil the egg then the whole sequence will either be delayed, or we have to do the later steps faster.
Software development has lots of sequences: write code before compiling and make it compile before you you test it. Another example: find out the problem, before you start to solve it.
Here is an example of a parallel structure.
The time to complete is the maximum of the two times. Usually the time for the whole structure depends on just one of the to processes. If that process takes too long then the whole is delayed. And the other process can take a longer time without delaying all. We say the the longer process is ont the critical path and the the shorter process has float or slack.
In the paralel case we have two or more scenarios depending on which task we start first. There is no predefined sequence. We can choose the sequence. We can even try to multi-task the two parallel processes at the same time.
In software development this happens when you have several people coding and the work is broken into independent modules. For example: Designing screens and reports. Or preparing user manuals and help screens in parallel with coding and testing. It also happens when there is a single person but machines (the toaster above) can carry out the actions.
| # | Task Description | Predecessor | Duration |
|---|---|---|---|
| 1 | Get new Requirements | - | 2 |
| 2 | Negotiate iteration functions | 1 | 4 |
| 3 | Programmer writes Unit Tests | 2 | 3 |
| 4 | User plan acceptance tests | 2 | 5 |
| 5 | Modify code until test all succeed | 3 | 5 |
| 6 | Users do Acceptance tests | 5,4 | 2 |
| - | Done | 6 | - |
| Time | Abbreviation | Constraint |
|---|---|---|
| Earliest start | ES | Immediatly after the last predecessor task finishes |
| Earliest finish | EF | = ES + duration |
| Latest Finish | LF | Immediatly before the first successor task starts |
| Latest Start | LS | = LF - duration |
| # | Task Description | Predecessor | Duration | ES | EF | LF | LS |
|---|---|---|---|---|---|---|---|
| 1 | Get new Requirements | - | 2 | 0 | 2 | 2 | 0 |
| 2 | Negotiate iteration functions | 1 | 4 | 2 | 6 | 6 | 2 |
| 3 | Programmer writes Unit Tests | 2 | 3 | 6 | 11 | 9 | 6 |
| 4 | User plan acceptance tests | 2 | 5 | 6 | 11 | 14 | 11 |
| 5 | Modify code until test all succeed | 3 | 5 | 11 | 14 | 14 | 11 |
| 6 | Users do Acceptance tests | 5,4 | 2 | 14 | 16 | 16 | 14 |
| - | Done | 6 | - | 16 | 16 | 16 | 16 |
PERT
There are example in the Wikipedia reading of this notation.
I don't like the PERT notation of arrows for activities and bubbles for
events because activities often have many prerequisites etc. You have to
add "dummy activities" that take no time to express multiple
prerequistes.
I was taught this in the 1960's but rapidly moved away from it.
However PERT has a very useful approximation:
Use this formula to get the expected durations of activities in CPM. It
can also be used in any estimating problem where we have best, worst, and
most likely values.
CPM Notation
There were example in the Wikipedia reading of this notation.
Each node records the following data representing activities:
| Earliest start | Duration | Earliest finish |
| - | Task Name | - |
| Latest Start | Slack | Latest Finish |
I have seen several layouts for the parts in an activity for the Critical Path Method. I like the critical path method and have used the common notation until recently. But it forces you to record most start and finish times twice because the Earliest Finish of a task will equal the Earliest Start of the next task.
UML Activity Diagrams
These are the best notations I've seen for doing Network Planning.
. . . . . . . . . ( end of section Notations) <<Contents | End>>
Practice -- Use UML Activity Diagrams for planning
You can do CPM easily in the UML.
. . . . . . . . . ( end of section Hints with planning diagrams) <<Contents | End>>
Can we face a critical path at the start of a project
Yes -- the critical path starts with the first step.
All WBS have a critical path and it always connects the start to the
end of the project. It is a property of WBSs!
However only one of the initial activities is usually on the critical
path.
Which do I prefer: Visio or Dia
Somehow I like Dia better because it is free and not pretentious.
I dislike paying for a program that tries to do so
many things that I don't want.
What is the purpose of the critical path method
It tells you much time you will need to complete a project if
you do things in the right order. It also tells you what steps/actions/tasks
in the project that can be started late
with out delaying the whole project. It also
calculates for each non-critical task, how much lateness is allowed.
Explain CPM
Hmmmmm --- best thing is to try it. It is a quick and simple
calculation that gives you some useful information about your
project.
How do you decide if an activity is critical
Use the critical path method and the critical tasks will have
zero slack. Slack is found by subtracting the earliest start
from the latest start. Then look for a sequence of critical taks that
runs from the start to the fish of the project. This is the critical path
for the whole process.
If one activity helps another but it not necessary -- is it a predecessor
It depends.
First the "helpful" activity can be split in two: part that
helps so much that it must be done first plus a part that is irrelevant.
Second you can choose to ignore the help provided in the hope that
the shorter schedule will make up for the "helped" not going so well.
Third you can choose to include the constraint and assume that
the helped task will finish quicker and so the whole project finishes
faster.
In each case CPM will help to clarify what you need to do.
Planning Smell -- Indecisiveness
A plan that has a decision in it, can not be handled by CPM
and is a risky plan.
Take whatever actions you can to reduce the risk
as early as you can. For example, include activities
to gather data to make the decision and schedule them early.
Then revise the plan. For example
This means that you can do any amount of planning but you also have to be prepared to handle the surprises that are going to happen in any interesting project. The job of management is to be ready for them and to demonstrate "masterful" handling of them. Being ready, means including some "slack" in the plans.
Reminder -- you should tackle the risky parts (unknowns, new things, ...) first. Early steps should be set up to resolve doubt.
. . . . . . . . . ( end of section Complexity) <<Contents | End>>
Notice: you don't need a complex "Heavy weight" SCM system for simple projects with few people and small scopes. You need it for medium to large projects.
Configuration management ( CM ) is needed from day one in a project of any realistic size. Each document or artifact has many versions and you need to know which one to use... For programs you can easily get into "DLL Hell" just because the user is using the wrong version of a library. Even DFDs, manuals, standards, and other types of documents will need SCM.
In all SCM systems a strict regime is enforced. To work on an artifact
you must:
. . . . . . . . . ( end of section Useful Lists for Managers) <<Contents | End>>
Readings on Management
You won't be managing a team straight out of college! This course just
touches on the high points. CSCI455 and/or CS655 (Software Engineering) goes further.
But before you get promoted to management you will need to learn more.
An enormous number of books have been written on management. Some
of these are about managing software development. Before you start your first
project as manager please read so I have added a list of readings
that will help. Some of these are available on line... but most are
books you might want to have on the bookshelf in your office when you
get promoted to managing people.
. . . . . . . . . ( end of section Management) <<Contents | End>>
Questions
. . . . . . . . . ( end of section Planning) <<Contents | End>>
Online Resources
Moral: Careful planning can save a lot time doing.
Joke
[ Hofstadter%27s_law ]
Coding Horror -- Big Projects are different
[ 000960.html ]
Example Diagrams online
(Gantt charts):
[ Gantt_chart ]
[ search?cat=img&cs=utf8&q=gantt+chart&rys=0&itag=crv ]
Critical Path Method Online
Look at this excellent description:
[ Critical_path ]
Another Example
[ cpmEx.html ]
Tools for project management
Also see:
[ List_of_project_management_software ]
Scrum Meetings on Wikipedia
See
[ Scrum_%28development%29#Scrum_meetings ]
or
[ Craig Larnman ]
below for details.
Software Configuration Management on Wikipedia
[ SCM ]
What is the best way to estimate the time to develop software
There are some standard techniques that are covered in CSCI455
(Software Engineering) -- See
[ COCOMO ]
and
[ Function_point ]
for more, they are not part of this course.
All good methods are based on relevant previous experience and data plus breaking down the project into the parts.
. . . . . . . . . ( end of section Online Resources) <<Contents | End>>
Further Reading on Management
Here some other good books, they may be out of date by the
time you need them.
Joel Henry
Do the Readings on Management make me an OK manager
They are better than nothing. They inject some
experience and know-how that will help.
The main blockage to you being an OK
manager in the long term, is your own personality.
There are roughly 4 managerial types and all are OK
when things are going well, but under stress they all have weaknesses.
For example a "Benevolent Dictator" becomes a plain "Dictator" and
the "Executive" type becomes a "Compromiser".
This is from an author called Redding...
And this is something you must work on after this class.
. . . . . . . . . ( end of section Further Reading on Management) <<Contents | End>>
Review Questions
| # | Description | Duration(Days) | Predecessors |
|---|---|---|---|
| 1 | Develop test | 1 | - |
| 2 | Develop A | 1 | 1 |
| 3 | Develop B | 2 | 1 |
| 4 | Develop Main | 1 | 2,3 |
| - | Done | - | 4 |
A JAD Meeting
Before you can start a Joint Application Development -- -- --(JAD)
meeting you must Email the participants and prepare the Audio Visual aids -- -- --(AVs)
and before you can send the Email you need to prepare the information
in the Email and arrange the room. You can't prepare the information
or the AVs without preparing the agenda for the meeting. Before
you arrange the room and prepare the agenda you need to get
approval for the JAD meeting from the participants. And before you can get approval you need to make contact with the participants.
Here is a table of activities. What numbers do you put in the "Predecessors"
column:
Table
| # | Description | Duration(Hours) | Predecessors |
|---|---|---|---|
| 1 | Contact people | 1 | ? |
| 2 | Get approval | 5 | ? |
| 3 | Arrange Room | 4 | ? |
| 4 | Prepare Agenda | 11 | ? |
| 5 | Prepare Info | 4 | ? |
| 6 | Prepare AVs | 8 | ? |
| 7 | Email people | 1 | ? |
| 8 | Hold JAD session | 5 | ? |
| - | Done | - | 8 |
| # | Description | Duration(Hours) | Predecessors |
|---|---|---|---|
| 1 | Design Search form | 1 | - |
| 2 | Learn some PHP | 2 | - |
| 3 | Draft PHP | 1 | 2 |
| 4 | Alpha test | 1 | 1,3 |
| 5 | Improve form | 1 | 4 |
| 6 | Improve PHP | 2 | 4 |
| 7 | Beta test | 1 | 5,6 |
| 8 | Release 1.0 | 1 | 7 |
| 9 | Learn PHP RegExs | 2 | 2 |
| 10 | Update PHP | 2 | 8,9 |
| 11 | Update form & test | 1 | 10 |
| - | Release 2.0 | - | 11 |
| # | Description | Duration(Hours) | Predecessors |
|---|---|---|---|
| 1 | Find time+place | 2 | - |
| 2 | Book room | 1 | 1 |
| 3 | Get Snacks | 2 | 1 |
| 4 | Get coffee | 1 | 1 |
| 5 | Draft flier | 2 | 2 |
| 6 | Put on Dept Events Board | 1 | 2 |
| 7 | Check Fleer | 1 | 5 |
| 8 | Post Flier | 2 | 6,7 |
| 9 | Email Flier | 1 | 6,7 |
| 10 | Prep Handout | 10 | - |
| 11 | Order Equip | 1 | 1 |
| 12 | Prep AVs | 6 | 10 |
| 13 | Check equipment | 1 | 11 |
| - | Done | - | 3,4,8,9,10,12,13 |
. . . . . . . . . ( end of section Review Questions) <<Contents | End>>
Typical Quiz on Critical Path Methods
Demonstrate doing CPM
. . . . . . . . . ( end of section Project Planning and Management) <<Contents | End>>
Abbreviations
Also see
[ glossary.html ]
for more special abbreviations and phrases.
End