Here are the some of the underlying principles i extracted from my research:-
- Changes in requirements are accepted as inevitable.
- KISS (Keep it simple, stupid!). Don't do more work than is required.
- Code should be of High-quality and clear of it's intention. Techniques such as design patterns and refactoring are embraced.
- Systems are built incrementally, each piece at a time with frequent builds encouraged.
- Focuses on the strong value of team-work rather than the use of excessive or expensive tools to improve productivity. Believes that face-to-face conversation with team members is always the best method of communication.
- It's all about the software. Documentation can be neccessary but takes a back seat to the primary goal of creating high-quality software. Unless documentation is absolutely required, it is avoided.
- Constant communication between the developer and customer is vital so that "inevitable" changes can be relayed effectively.
The term Agile development encompasses many recently developed methodologies such as XP, SCRUM and Test-driven Development. Work is generally done iteratively in small independant teams that make a piece of software every couple of weeks. Each iteration will contain phases similar to those in the Waterfall Method, such as Planning, Requirements Analysis, Design, Implementation, Testing and Evaluation.
It was useful last year that we touched on Design Patterns and UML diagrams in the 'Rendering' module. This helped to understand the purpose of Agile development and the issues with implementing maintainable and flexible code for large systems.
We also touched on Refactoring last year in the GS2 module, which basically encompasses the restructuring of code so that is it more usable, understandable, reliable, flexible or maintainable, WITHOUT actaully changing what the code does. Again, this helped to understand the motivation for the principles in Agile development.
--------------------------------------------------
Essentially, Agile development seems to be about simplicity. It's like a 'stripped-down' appraoch to software development. In many ways, it seems to be about finding the most effective and least painful way of arriving at the end goal - software that works. It focuses on what matters and devotes time to what is most important, whilst ignoring the laborious processes that do little to actually progress the project.
Equally it promotes focusing on the problems of 'the now' and tackling potential problems when they arrise.
Seems perfect for the stereotypically lazy student!
-----------------------------------------
I think some of the principles of Agile development create a good mindset to approach implementing the application with. However, it's views on documentation mean i cannot wholely take on the Agile mindset, since 70% of the project marks are awarded for the report, making the documentation of higher priority than the application! Additionally, some of the principles seem only applicable to team-work, whereas i am undertaking this project alone.
I am also reluctant to take the iterative approach that is described in many Agile practices. Again this is designed for teams but the main worry is that i would not have enough time to complete more than one iteration in the allotted time for the project.
What was interesting was thinking about the way Agile development accepts changes as inevitable and the realisation that the requirements within my project could change as i begin to understand more about the subject area. Perhaps the adoption of Agile methods during my implementation could ensure the impact of these potential changes are kept to a minumum?
Sources :
- 'Agile Software Development' by Robert C.Martin.
- Wikipedia Article - http://en.wikipedia.org/wiki/Agile_software_development
- Youtube - Interview with Shane Warden and Jim Shore - "On The Art Of Agile Development" - http://uk.youtube.com/watch?v=bfmLsQq6OUU
- Youtube -"Agile Software Development" http://uk.youtube.com/watch?v=1Qg6sgS8QIE