Professional Documents
Culture Documents
on the Clouds
by Aleksey Drobnych
(C)2009
Intro
Some time ago I decided to write long article or short eBook about simple approach in Project
Management.
In comparison with existing books about PM this eBook will describe agile approach in
Estimation, Planning, Tracking and Managing of Projects using only web-based tools (Google
Docs and Ganttzilla) where Software Development used as domain for real examples.
So this is it. I'll post fragments of this eBook in the Blog. I'll appreciate any comments and
criticism.
Marketing content
On-line Services
Virtual Community
• Allow user to manage his Community Profile. This profile will include Wall, Photos,
Videos, Blog Posts, Messages, Followers (twitter-like approach for RoF) and Following
sections.
• Allow user to follow another user.
• Allow user to vote for another user's Photo, Video, Blog Post.
• Allow user to exchange private messages with one another.
Back Office
Development platform
Customer has no strict recommendations concerning development platform for this web
application. Also there is no requirement to support extra traffic. This will be rather *usual*
web application tied to some local environment rather than N-billion-users-web-2.0-Super-
Star.
Estimation Matrix
Some time ago I've started using simple table for presentation of influence of crossing
Architectural aspects onto User Stories. Let's look at such a table for our Golf Club project.
By the way I've used Google Spreadsheet for this purpose.
Starting from row #5 enter User Stories to be developed (or another Functional items if you
split functionality in another way):
Let's look at column names. These names reflect important parts of Architecture. You can see
typical Fowler's layers or MVC parts here. Also you can see some architectural components
or external APIs to be integrated. In our case we'll use MVC model for Architectural layers
so you can see UI code, Controllers and Model columns. Also we'll use content management
approach for static pages so you can see CMS (Content Management System). Also we're
planning to use Google Maps and Addthis Javascript APIs for maps and social bookmarking.
Standard actions like writing Test Cases and deployment to Production environment are
added as Architectural patterns.
Now we're in the most interesting part of the game. We have to forecast time expenses for
each User Story in appliance to each architectural task.
For example lets look at User Story "allow visitor to view home page content". How many
pages this User Story will affect? I think only one page: the home page. Which sub-tasks will
be there? HTML and CSS formatting, most probably general layout creation. I predict that for
this work "average" Rails developer will spend approximately 5 hours.
Now let's look at controller and model columns. At this point I can't see some valuable coding
for home page in the context of controllers and model. Let's estimate controller and model in
0 hours.
CMS. We need to locate 2-3 placeholders for static content for home page. Also there will be
some SEO efforts like HTML Title optimization. Let's include 2 hours for content-related work
for this page.
Other 4 columns will not be involved during home page development. As a result no time
expenses expected.
Let's look at "Architecture" yellow row. This is the estimate for development of infrastructure
parts which will be used as foundation for Functionality development. Architecture row also
includes some common tasks like Data Model creation, writing Test Cases and prototypes for
2 external APIs.
Other User Stories can be analysed and estimated in a similar manner. Many of them have
Model hours. Here I used the following approach. In Architecture row (yellow) basic Model
was created as the result of Data Modelling. This work includes creation of DB schema and
UML Diagram of Model Classes. Corresponding tasks are estimated in 8 hours. But it is only
one part of Model activity. During development of business functionality we need to extend
Model classes and to add some methods to them. This additional part of work is distributed
over User Stories rows inside Model column.
I made estimation in this example by myself. But in real project it is better to involve as many
people in this game as you can. This activity has much in common with Estimation Poker from
Scrum methodology. So you have to invite, say, 4 developers to work INDEPENDENTLY with
4 instances of Estimation Matrix. And after filling all tables you have to organize discussion
around each estimate and finally create some summary estimate.
Now we are finished with estimates. Lets look at our table at this point.
In many cases this part also gives a set of Milestones which will be used to support and
control speed and effectiveness of the Project. This set of Milestones is often a subject of a
signed contract between Customer and our team. For sure there is always some flexibility
around inclusion of tasks into iterations in Agile projects but Milestones play the role of a
skeleton for the project. So we have the rigid template of Phases and Iterations but can move
tasks between them during conversations with the Customer.
So let's build Estimation Plan. We'll use another online tool for this purpose named Ganttzilla.
We'll build Gantt chart with resources with the help of this tool. We'll use Free Account for
this demonstration. You can create your own account here.
So let's leave "Blank" selection as it is and fill document name (mandatory field) and
description. Finally press "Add New Document" button.
As a result Ganttzilla will create empty document and open Gantt in edit mode:
We can see that current date is November 29, 2009 and there is one sample task in the
Gantt. This task is "Default task" and its duration is 1 working day (and in calendar this task
fits 2 days because Sunday is not a working day).
Our next step is to change default properties of the project. Press left mouse button in the
tasks area and select "Project" item in context menu. Alternatively we can press on the gear
icon near the task to bring up context menu and select "Project" there. Gantzilla will show
corresponding form:
In this form we have to press on the calendar icon near "Start" property and pick December
7, 2009 as new project start date. Also we should change manager name and then press
"save" button.
Now we turn to working with tasks. Double-click "Default task" text and then enter
"Architectural Iteration #1". Alternatively we can press on the gear icon near this task, then
select "Edit task" item in context menu and edit Task Name property in corresponding form.
Now let's add one more task. To do this click on gear icon and select "Insert Task" in
context menu:
By repeating this step for all Architectural tasks we'll fill Architecture Iteration:
Now let's play with Resources and Task Dependencies. First of all we have to fill in the table
of Human Resources involved in the project. To do this bring up context menu and click on
Resources item. Corresponding form will appear. By entering HR name and pressing "Add"
button let's fill the HR table:
At this point let's enter short name for each resource. This information is used when
converting project plan into other formats:
Now we can assign resources to each task. For example click on the blue bar of "CMS
Engine development" task on the Gantt. This is a shortcut to calling "Edit Task" action from
context menu. Now select Resources tab:
Select "Developer #1" and press "ADD ->" button. As a result Developer #1 becomes single
resource for the task.
At some point of time we'll find that tasks begin to conflict for resources. For example here
you can see that tasks 1.2 and 1.3 start the same day and have the same resource - Team
Lead:
This is a good time to start using dependencies. Just click at blue bar of task 1.2 and drag
cursor to blue bar of task 1.3. As a result Finish-to-Start dependency will be created
between these tasks:
Then we should repeat the same actions with the rest of Architectural Iteration #1 tasks
and also create Finish-to-Start dependency between iterations:
Now let's enter User Stories tasks into Functional Iteration #2. We'll enter back-office User
Stories first since this is a shorter way to fill database with content objects:
Afterwards all other User Stories should be entered. Pay attention that we don't think about
Test Cases and QA at the moment.
Now let's model calendar progress of the project. We'll assign resources and dependencies
for all tasks. Finally we'll have something like this:
Here we have coding tasks only. And Functional Iteration #2 fits in 4 weeks. But we have to
add QA, bug-fixing, presentation preparation and production deployment tasks. So we'll
have around 6 weeks for the iteration. We have to split this functional iteration onto 2
iterations. 3 weeks is ideal duration for iteration for such project.
To do such a split let's pick some task in the middle of Functional Iteration. Say, it will be
task 2.15. Now we insert new task after 2.15 and give "Functional Iteration #3" name to it:
Then we go through all underlying tasks and execute "Indent Task" action from context
menu near each task:
At this moment we have to unindent Functional Iteration #3 task. Now we have to recreate
all dependencies and also create FS dependency between Functional Iteration #2 and #3.
Finally we'll have the following picture:
It's a good time to add QA and infrastructure tasks. We have 60 hours for QA activity. Let's
distribute it in such a way:
• Writing Test Cases for Functional Iteration #2 - 16 hours
• Execution of Test Cases for Functional Iteration #2 - 14 hours
• Writing Test Cases for Functional Iteration #3 - 16 hours
• Execution of Test Cases for Functional Iteration #3 - 14 hours
And let's add "Bug Fixing" tasks for both Functional Iterations and "deployment to
Production Environment" infrastructure task at the end of Functional Iteration #3:
And, finally let's click on "Back to Viewer" link to finish editing session. Now we're in viewer
mode where we can share or publish this Project Plan (using corresponding buttons):
Project Tracking
Preliminary Plan we created was appoved by Customer and we're in development stage
now. But work with plans and schedules doesn't stop at this point. Now we'll work with
Iteration Plans. Good news is that we have freedom in re-scheduling tasks and resources.
But milestone and task sets for each Iteration are constant.
I like using the term Orchestration in appliance to Iteration Plan. During Iteration you will see
that certain tasks need more time than it was estimated before, some tasks need less time.
You will be faced with real-life circumstances when one of your developers fall ill and another
one have to pass university exam. All these changes have to be reflected by resource and
task re-arrangements.
Let's consider some real-life example. Imagine you are going to create separate document
in Ganttzilla named "Golf Club Functional Iteration #2". This can be done by downloading
Preliminary Plan after pressing "Download" button and then creating new document on the
basis of downloaded one with "Upload File" option:
Afterwards we can cut all tasks except Functionality Iteration #2 tasks. Before doing the cut
please don't forget to set up proper value in "Must Start on" field of Functionality Iteration
#2 task group:
First step towards this approach is moving original Iteration Plan to Team Lead's document
space in Ganttzilla. To share your plan you can press "Share" button in viewer mode and
specify Team Lead's email in the following form:
The last part of the story is marking progress for Iteration Plan tasks. Imagine you are
Team Lead who received invitation email to open shared Functional Iteration plan. You follow
the link in this email and download the project plan file. Then you upload this file as new
Ganttzilla document and share it with Project Manager.
To mark tasks' progress go to the Gantt editor and click on task blue bar. As a result "Edit
Task" form appears. Now enter some progress value into Percentage complete field and press
OK:
Corresponding progress line will be rendered inside the task bar.
Now you know all rules of the game. Your job is to keep progress in agreement with current
date. You can play with tasks relocation, resources, relations. Orchestration is your main
weapon in this game.
Enjoy Planning!
P.S.
Many thanks to Vladimir Tsukur for important observations to the first version of the book
and to Victor Prestaya for his "pseudo lamps" art-work.