Geeks With Blogs
Dynamic Concepts (in) Development Musings of TheCPUWizard

What is Agile Software?

 

Much has been written about the Agile Software Development Processes. While there are many different approaches to this methodology, they all involve being able to rapidly and effectively deal with changing requirements during the software development lifecycle (SDLC). This article looks at software development from a slightly different perspective; creating software that is in and of itself agile. Software agility can be defined as the ability of software to be adapted for different scenarios with a major focus on re-use.

Even the term “re-use” has different meanings for different development teams. For the purpose of this article, re-use is specifically defined as utilizing the software without any modifications at the source level, and ideally without even requiring a recompilation.

Although this series focuses on Microsoft .NET technologies, including new features available in version 3.5, the basic principles apply to almost all software development environments. Taken individually these principles are not new. Taken as a comprehensive design philosophy, the benefits form positive feedback loops; enhancing the quality of the resulting application with a lower total cost of ownership. Having a clear set of design goals, that are largely independent of the specific application, also identify those aspects of the lifecycle process and methodology that are most applicable to the overall result.

Our experience has shown that agility can be measured in a number of distinct domains. The importance of these domains varies from site to site; but they are present in all but the smallest development environments.

Time – Agility in the time domain is defined by the number of changes (iterations) that occur to a specific software component after it is initially written, debugged, and tested. These changes are typically triggered by the evolution of requirements.

Access – Agility in the access domain is defined as the ability to reuse the code that was developed to be accessed via one mechanism (e.g. Windows Forms Desktop Application) via other means (e.g. WPF Application, Web Service, Web Application).

Usage – Agility In the usage domain is defined as the ability to reuse the code developed for one specific project in other projects. The development of common, shared libraries reduces the project specific workload, and provides a solid foundation for new project development.

Achieving a high degree of agility requires careful planning from the earliest architectural decisions. In most cases, the savings are evident almost immediately. The futures posts in this series will cover specific techniques that have been proved to be beneficial.

Please Stay Tuned.......

All Material Copyright 2008, All Rights Reserved.
Dynamic Concepts Development Corp.
331 West 57th Suite #422,
New York, NY 10019

 

Posted on Tuesday, April 22, 2008 9:56 PM Developing Agile Software | Back to top


Comments on this post: What is Agile Software?

# re: What is Agile Software?
Requesting Gravatar...
Thanks for the post on my site about the 'Average Developer"... My experience with Agile Development has been somewhat different from what you describe in this post. At worst, i would describe it as "Measure once cut twice..." Basically, we use TDD for our Agile methodology -> We write tests for our code before we write any code. Then we code 'inside out" using Resharper, so that we only write code that is absolutely needed. There are many times i wish we did more architectural design before writing code, but there is something to the idea of writing the minimum code needed.

We have revisited code to make it more generic, but only when it makes business sense.

Jonathan Starr
Left by Jonathan Starr on May 03, 2008 12:01 AM

# re: What is Agile Software?
Requesting Gravatar...
Jonathan,

Thank you very much for posting this comment. It really highlights what I am trying to accomplish with this series.

Your comment is covering your "Development PROCESS" and is one of the more common "Agile" styles I encounter. However (at least from your comment) that really has little to do with the "Developed PRODUCT" (ie the codebase at the end of an iteration)

I have had many clients who have literally spend hundreds of thousands of dollars to develop a comprhensive PROCESS for efficiently developing GARBAGE (software that is not stable, difficult to understand and maintain, impossible to reuse (ie include the assembly in another product without modification or even re-compilation).

For this series I will be concentrating on what makes the WORK PRODUCT itself be of optimal quality (robust, maintainable, highly resuable) while largely ignoring the process (other than the concept of iterations)

When this is combined with any "reasonable" process (which naturally vary based upon many factors), then end result has ALWAYS been a measurable significant improvement in the cost effectiveness over the entire product life cycle.

Hope to see you here again soon!
Left by TheCPUWizard on May 03, 2008 12:39 AM

Your comment:
 (will show your gravatar)


Copyright © David V. Corbin | Powered by: GeeksWithBlogs.net