Agile Project Development

This is a modern approach for small to medium-size projects. Reading the main ideas, concepts, and methods that organizations teach their developers will help you understand the way your term project will be evolving. This is also training in the modern approach to the development of web projects that are characterized by continuing evolution of developer/customer vision of what is it that they try to develop, of what is possible, efficient, and effective. Agile development shows how to substitute existing project parts for newer, just emerging technologies/methods that work better and are easier to maintain.

Examples of these agile concepts (that are compiled and slightly modified from the Web sources) and practices include the following:

·         Embracing change: Seeing change, which comes in weekly learning progress and its support, as vision and understanding of the project goals and technologies to be used keep developing, as an ally rather than an enemy. Change allows for more creativity and quicker value to the customer.

·         Fast cycles, frequent delivery: Scheduling many releases with short-time spans between them (like weekly project revisions and updates) forces implementation of only the highest priority functions, delivers value to the customer quickly, and speeds requirements emergence (which happens only after some parts come alive and are experienced by the users and co-developers). Timeboxing, for example, establishes specific time frames that are then filled with as much prioritized functionality as can be developed (see our weekly requirements that are intended for functionality AND learning support in proper sequencing ).

·         Simple design: Designing for the battle, not the war. The motto is YAGNI (You Aren’t Going to Need It). The antimotto is BDUF (Big Design Up Front). Strip designs down to cover just what you’re developing. Since change is inevitable, planning for future functions is a waste of effort.

·         Refactoring: Restructuring software to remove duplication, improve communication, simplify, or add flexibility without changing its behavior; just-in-time redesign.

·         Pair programming: A style of programming in which two programmers work side by side at one computer, continually collaborating on the same design, algorithm, code, or test.

·         Retrospective or reflection: A post-iteration review of the effectiveness of the work performed, methods used, and estimates. The review supports team learning and estimation for future iterations.

·         Tacit knowledge: Establishing and updating project knowledge in the participants’ heads rather than in documents (explicit knowledge).

·         Test-driven development: Developers and customers (professor’s reviews and notes) incrementally write module or method tests before and during coding. Supports and encourages very short iteration cycles.



Who is interested in a deeper understanding of Agile Development read http://en.wikipedia.org/wiki/Agile_software_development , http://agilemanifesto.org/, etc.