Friday, October 16, 2009

Agile Development

This post will provide a general overview of the Agile Development methodology. It is based on a presentation I developed a few months ago that is posted to my LinkedIn profile page.

There is a wealth of information available online on this topic, but here is a definition of Agile Development that I found that boils it down to a short list of ideas:

An iterative and incremental (evolutionary) approach to software development
which is performed in a highly collaborative manner
by self-organizing teams within an effective governance framework
with "just enough" ceremony
that produces high quality software
in a cost effective and timely manner
which meets the changing needs of its stakeholders.


The core ideas of Agile development are embodied in the Agile Manifesto. It was created in 2001 by some of the key thought leaders in the software development field. It states:

We are uncovering better ways of developing
software by doing it and helping others do it.
Through this work we have come to value:

Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

That is, while there is value in the items on
the right, we value the items on the left more.


There are a set of principles that underlie the Manifesto that illustrate some of these ideas:
  • Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
  • Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
  • Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
  • Business people and developers must work together daily throughout the project.
  • Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
  • The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
  • Working software is the primary measure of progress.
  • Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
  • Continuous attention to technical excellence and good design enhances agility.
  • Simplicity--the art of maximizing the amount of work not done--is essential.
  • The best architectures, requirements, and designs emerge from self-organizing teams.
  • At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
There are many different types of Agile. Here are the main ones:
  • Adaptive Software Development (ASD)‏
  • Agile Modeling
  • Crystal methods
  • Dynamic System Development Methodology (DSDM)‏
  • eXtreme Programming (XP)‏
  • Feature Driven Development
  • Lean Development
  • Scrum
A great explanation of Agile and some of these different disciplines can be found here and here.

Steven Thomas had developed a Generic Agile Lifecycle that shows at a high level how Agile development projects can be conducted:





The key pieces here are that the development occurs in fixed duration "timeboxes" and that these timeboxes are grouped together into releases. This also has implications for resourcing and general project management as well.


Steven covers the topic of Agile Project Management subject thoughtfully and in detail on his site.


While it might seem that Agile would improve all software development delivery, this is not necessarily the case. In their book
Balancing Agility and Discipline: A Guide for the Perplexed , authors Barry Boehm and Richard Turner summarized the types of projects that were better suited to an Agile or more traditional plan-driven development methodology:

Agile home ground:
  • Low criticality
  • Senior developers
  • Requirements change very often
  • Small number of developers
  • Culture that thrives on chaos
Plan-driven home ground:
  • High criticality
  • Junior developers
  • Requirements don't change too often
  • Large number of developers
  • Culture that demands order
Once the decision is made to adopt Agile methodologies, at some point in the process there is a need for tools to facilitate the process. Here are some attributes/criteria for selecting a tool, and an abbreviated list of some of the tools available:

Attributes
  • Sprint/ Iteration/ Timebox Planning
  • Backlog Management
  • Testing/ Coordination
  • Resource Planning
  • Documentation
  • Integration (Quality Center, Clearcase, etc.)‏
Candidates
  • IBM Jazz
  • Microsoft Solutions Framework (MSF) for Agile
  • VersionOne
  • Rally Software
  • Serena Software

Again, this is just a brief overview of a broad subject. Here is a partial list of websites with a wealth of additional information:

Agile Alliance: http://www.agilealliance.org/

Agile Software Development: http://agilesoftwaredevelopment.com/

Agile Manifesto: http://www.agilemanifesto.org/

Agile University: http://www.agileuniversity.org/index.jsp

Extreme Programming: http://www.extremeprogramming.org/


As always, I welcome your comments and feedback.



Tuesday, September 29, 2009

Technology Project Management

The purpose of this post is to give a general overview of project management, specifically IT project management, and provide a list of resources for more information.

Wikipedia defines project management as the discipline of planning, organizing, and managing resources to bring about the successful completion of specific project goals and objectives. It is often closely related to and sometimes conflated with program management. The primary
challenge of project management is to achieve all of the project goals and objectives while honoring the preconceived project constraints. Typical constraints are scope, time, and budget. The secondary—and more ambitious—challenge is to optimize the allocation and integration of inputs necessary to meet pre-defined objectives.

There are many different project management lifecycle templates, the one on the left is from Method 123 and has the four basic phases of Project Initiation, Project Planning, Project Execution, and Project Closure. The details of each of these phases is representative of other project management disciplines, and tracks with the Project Management Institute (PMI) project lifecycle phases.

Another key consideration of project management deals with risk, and risk mitigation. Risks are where a particular part or facet of the project comes with potentially detrimental occurrences or events. It is imperative that risks are identified throughout the project lifecycle, categorized, and do everything possible to mitigate the risk in order to lessen the negative impact on the project. If the detrimental occurrence or event does take place, then it becomes an issue instead of a risk.

Tony Jacowski defines the role of a project manager as follows:

A project manager is usually responsible for the success or the failure of the project. There is an entire team under the project manager, which helps to achieve all the objectives of the project. However, if something goes wrong, the project manager is ultimately accountable.

The tasks to be handled by a project manager to successfully manage a project include:
  • Integration Management - This is developing and managing the direction of the project
  • Scope Management - This includes planning, defining and managing the scope of the project.
  • Time and Cost Management - This covers developing a schedule, allocating resources and managing funds for the project.
  • Quality Management - This involves taking care of the quality of the process in question such that it meets or even exceeds various quality parameters set earlier.
  • Human Resource Management - A manager needs to take care of his team, encourage and motivate them and make sure the team moves in the right direction.
  • Communication Management - The manager needs to prepare a communication plan and make sure that there is a healthy communication, both horizontally and vertically.
  • Risk Management - Various risks involved in a project should be identified and a mitigation and contingency plan needs to be developed to ensure that the project is not derailed at any point.
  • Procurement Management - Various materials needed during the project need to be procured and managed with the vendors and suppliers for successful completion of the project.
Apart from this, depending on the size and the complexity of the project, they may need to take on multiple roles. The project manager may need to assist with gathering business requirements, help to design a database management system or may prepare project documentation. They may work full time on a large project, or may work part-time on various projects of a smaller nature; or may alternatively handle various projects as well as handle other responsibilities like business analysis and business development.

There are a variety of project management certifications available. The main ones are the PMP, CAPM, and Project +. More information is available here and here.

Agile project management is becoming a larger part of the overall project management discipline. This will be addressed in later posts as part of Agile Development.

This is a very brief overview of IT project management. I welcome your comments.

Friday, September 25, 2009

Introduction

This is my new blog. I will use this to highlight different areas of information technology that interest me.

Some of the topics I plan to cover:
- Technology Project Management
- Agile Development
- Knowledge Management
- Collaboration
- Social Media


I would like some feedback. Please feel free to comment.

Thanks,
Mark