Wednesday, January 29, 2014

Agile Software Development method

The agile method is essentially a method of developing software that seems to be a response to a more structured, planned, and step-by-step approach that finishes one task and moves onto the next. Agile development follows an approach that allows the user to build up iterations of the software, slowly adding more features and building upon the previous iteration. This allows developers to learn from their past mistakes and also gives a working program to demo to the client at each iteration. Overall, the agile method is more people-oriented approach, whether the people in question are the developers, the clients, or the stakeholders in general. The agile method appears more adaptable than, say, a strict waterfall model, and allows developers to respond to change instead of "locking" them into a plan that restricts their ability to adapt. In particular, I like the pair programming aspect of agile development. I have done this one one or two other programming projects and I found it to be extremely helpful, particularly when it came to spotting bugs or errors in the code. It also allows two people to become "experts" in the code and thus one can take over if, say the other is out sick. Additionally, the agile method's emphasis on testing throughout an iteration is something else that I feel is important. Waiting until a feature is fully completed is not the time to start testing and realize that there is a major problem. Testing as development occurs prevents small errors from becoming huge bugs, thus saving time and money.

Agile development also places an emphasis on working code versus documentation, especially when it comes to presenting to the client. While working code is very important, and often has more of an impact than documentation with regards to a client demo, good documentation cannot be ignored. It is critical, in my opinion, to have good documentation (user manuals, test cases, detail code comments, etc.). I have seen too much code in my college career that lacks even basic comments, making it nearly impossible to decipher exactly what is occurring at complicated areas in the code. Therefore, I make it a point, as much as I hate it, to comment everything in my code that is ambiguous or confusing, ensuring that at least I, when I look at that code 6 months or a year from now, will know why I did what I did.

Another issue that I have with Agile is its adaptive approach to planning. It focuses on adapting to more immediate changes and, therefore, does not necessarily plan out future milestones and tasks to reach those milestones. While I feel that adaptation is very important, I also feel that having long-term goals and milestones is also important in order to get an idea of how long a feature might take or what the customer is going to expect in the next month or 6 months. Thus, in some areas I feel that Agile is too flexible and could benefit from some added structure. However, I really like its more iterative and incremental approach to programming and its emphasis on small teams, daily group meetings, and even pair programming. This, to me, makes my job as a programmer a little easier and more meaningful.

No comments:

Post a Comment