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.