Thursday, December 3, 2009

Agile Project Management on the Clouds. Part III.


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!




Agile Project Management on the Clouds. Part II.


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

Wednesday, December 2, 2009

Agile Project Management on the Clouds. Part I.


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.