
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