You are on page 1of 19

Agile Project Management

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.

New project was born


In the very beginning I was contacted by USA representative of our company with the request
for development of new project. Customer is the owner of popular golf club and he wants to
create web site for his business. Benefits he is expecting are the following:
• attraction of potential clients with the help of interactive content (google maps
with club's fields, web cameras video broadcasting, interesting game videos, on-line
booking and reservation services);
• creation of virtual community around the business;
• social networks marketing initiated by integration with linkedin, facebook, and twitter
services.

Defining User Stories


We'll go with agile approach for this project and start with defining User Stories.

Marketing content

• Allow visitor to view home page content.


• Allow visitor to view news.
• Allow visitor to view upcoming events.
• Allow visitor to view popular Blog Post, Video and Photo created by Virtual
Community.
• Allow visitor to view featured Blog Post, Video and Photo created by Virtual
Community.
• Allow visitor to view Picture Gallery.
• Allow visitor to view map of the Golf Club fields and buildings.
• Allow visitor to view materials on golf training.
• Allow visitor to view price list for Club services.
• Allow visitor to add social bookmarks to this web site under his linkedin, twitter and
facebook profile.
• Allow visitor to join public profile of the Club in linkedin, twitter and facebook.

On-line Services

• Allow visitor to register an account on the web site.


• Allow visitor to login the website. After successful login visitor becomes user.
• Allow user to view calendar with already assigned reservations for each golf field.
• Allow user to book golf field for playing. During this arrangement user will be
forwarded to order payment page on PayPal.
• Allow user to view hour/date calendar with already assigned training reservations.
• Allow user to order training. During this arrangement user will be forwarded to order
payment page on PayPal.
• Allow user to subscribe to the Club's newsletter distributed over email.

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

• Allow administrator to manage contents of the home page.


• Allow administrator to create/edit/delete Public Event.
• Allow administrator to create/edit/delete News Article.
• Allow administrator to select/deselect Virtual Community Blog Posts, Photos and
Videos for presentation on the Home page.
• Allow administrator to create/modify/delete photos in Gallery.
• Allow administrator to manage contents of the Golf Trainings page.
• Allow administrator to add special markers and polygons on Google Map for
presentation of Club's facilities.
• Allow administrator to view and print arrangement reports.
• Allow administrator to view and print payment reports.

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.

We decided to use available developers from our Ruby-on-Rails team. So development


platform will be Ruby-on-Rails 2.x.

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.

Here is a first step - creation of new spreadsheet. Go to http://docs.google.com and then


click "Create New" - "Spreadsheet" menu item:
Then copy the following table or create similar one:

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.

Preliminary Plan creation


Now we have estimate for our User Stories and Architectural tasks. Out next step is to model
full development life-cycle including Phases, Iterations and Resources (developers and QA
engineers). This will give us a Calendar of the Project and we would be able to see impact of
tasks' dependencies and resources' limitation on this Calendar. This is a very important part
of each project.

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.

After logging in Ganttzilla you will be redirected to your documents page:

Press "New Document" button. Corresponding form will appear:


There are 2 scenarios here: If you select "Blank" radio button you will start an empty
project plan (actually this is our case). Otherwise if you select "Upload File" then you will
work with existing Project Plan in MicroSoft Project or Gnome Planner file formats.

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:

Then change "new task" name to "Functional Iteration #2":


Now let's add subtasks under each Iteration. We'll start from Architectural tasks. Press on
the gear icon near "Architectural Iteration #1" task and select "Insert Subtask" action. New
task will apear with some margin under Iteration task and this Iteration task itself changes
its bar to parent task style. Select "Edit Task" for this new task and modify it's name and
duration according to Estimation matrix:

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):

You can browse the final Project Plan here

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:

Finally we'll have the following picture:


It's time to Track the Iteration Plan! Imagine that Team Lead will be responsible for updating
this plan. He will mark progress of each task on the daily basis and also he will update tasks'
start-dates, durations and resources to reflect day-to-day orchestration.

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.

You might also like