Agile software development methodology

Agile software development is a model for development of information technology systems based on iterative and incremental development, based on feedback from the clients.  In this methodology the requirements and solutions evolve through collaboration between self-organizing, cross-functional teams who work in close liaison with the clients. It promotes evolutionary development, adaptive planning and encourages rapid and flexible response to change.

Although the methodology was conceived in the early 1990s, it started gaining in popularity after 2001 when the methodology started getting adopted in research laboratories of major technology companies. Generally speaking Agile software development is more suitable for products and less for services. Even amongst products, Agile software development methodologies are more suitable for smaller to medium sized products. Ideally development teams for such products have a size ranging from 5 members to 20 or 30 members, although, instances were noted when the methodology was successfully used with a team of 100 members.

Some of the more popular Agile methodologies are as follows:

  •     Agile Modeling
  •     Agile Unified Process (AUP)
  •     Dynamic Systems Development Method (DSDM)
  •     Essential Unified Process (EssUP)
  •     Extreme Programming (XP)
  •     Feature Driven Development (FDD)
  •     Open Unified Process (OpenUP)
  •     Scrum
  •     Velocity tracking

A major difference of Agile methodologies from the Systems evelopment Life Cycle (SDLC), or software development life cycle models is that the requirements from the client is collected iteratively and in an evolutionary manner. In contrast, in the SDLC methodologies, each stage, including the requirement analysis stage, needs to be completed and finalized, before moving on to the next stage.

Also, another major difference of Agile methodologies from the Systems evelopment Life Cycle (SDLC) is that the degree of documentation done is typically a lot lesser. Because of smaller team size, extensive informal communication makes high quality software development feasible. But it would be difficult to ensure high quality in larger projects, due to this methodological limitation, which is mostly made by choice to ensure faster delivery of software projects.

The Agile methodologies focusses on different aspects of the software development life-cycle. Some focus on the practices (extreme programming, pragmatic programming, agile modeling), while some focus on managing the software projects (Scrum). There are also methodologies which have a focus on all the stages of the SDLC (DSDM, RUP), although most are tailor cut for the requirements specification phase (e.g. FDD).

Hope this short and simple note is sufficient for an introduction to Agile software development methodologies. Do let me know if you need any more information.

The Agile methodologies focusses on different aspects of the software development life-cycle. Some focus on the practices (extreme programming, pragmatic programming, agile modeling), while some focus on managing the software projects (Scrum). There are also methodologies which have a focus on all the stages of the SDLC (DSDM, RUP), although most are tailor cut for the requirements specification phase (e.g. FDD).

Why Technology Reuse fails

Today, a lot of stress is on code reuse, in the IT industry. In fact, the industry is thriving on the same. The problem is every business requirements have its very own set of specific needs which often are not met with by using standardized software packages and code modules, besides other barriers to success.  Ideally software should be designed to complement and automate business processes. But since this becomes costly, modules and packages are standardized and IT business analysts try to fit the standard things to all problem domains. The net result is mayhem and chaos.

In theory, organizations should recognize the value of systematic reuse of internal assets and reward internal reuse efforts. In practice, many factors act as barriers to success in technology reuse. Software reuse often fails for the following reasons:

  • Organizational impediments: In house developing of software systematically, to create reusable software assets requires a deep understanding of application developer needs and business requirements. As the organization size grows, coordination problems are often a major challenge.
  • Business need impediments: Similar business units within the same organization often have different needs which are not always apparent. Trying to force fit the same solution to different problems is a sure recipe for chaos.
  • Economic impediments: Supporting the development of reusable technology requires an economic investment, and often IT teams operate as cost-centers and thus their priorities are ignored.
  • Administrative impediments: It is hard to document reusable technology properly for usage across multiple business units within large organizations, although the same may be reusable in the smaller business units. Hence business units may end
  • Political impediments: The teams that develop reusable technology are often viewed with suspicion by the rest of the technology team, as they may no longer be empowered to make key architectural decisions. In group rivalry is also a major barrier to the development of reusable technology.
  • Psychological impediments: Application developers often feel “top down” reuse efforts as an indication that management lacks confidence in their technical abilities and an insult to their capabilities.