Based on my experience as a first time user of agile development process, I have come to a conclusion that agile process is not a solution for everything.
In my opinion what I think are the advantages and disadvantages of agile process are listed below:
1. Running, real, tested, customer-shipment-ready software is available from first release cycle (which is usually in few weeks)
2. Everyday face-to-face collaboration, conflict and dependency resolution decreases the overall development time
3. The focus is only on running software throughout the development duration
4. Development cycle(short ones) is not just one; it repeats time after time until the product is finished
5. Incremental and iterative development really tests your product well for regression as you integrate new features, and gives confidence in the product from the beginning
6. Customer can start using the product and give feedback from day one of the development process
7. Progress and low level detail visibility is high
8. Every new piece of code is accompanied by unit test code
1. Too much micro management on developers
2. User story is highly susceptible to change due to unexpected events which might spawn another user story
3. Design, documentation and such soft areas of product development may not fit into the model of showing progress everyday in standup meetings
4. The crucial skeletal design done before the agile development process starts, has to be correct. If that went wrong, the previously integrated and finished user stories might be reintroduced or new user stories might be added to remove them from the product
5. There is a certain overhead in making the product easy to extend and friendly to integrate new features from day one. That is what piece of the product has to be finished first and whether it can change later or not. If it changes later, all other finished user stories at that point of time may go invalid
6. Many firms adopt Agile process for quick development and micromanaging the employees, which is sad. Because Agile roots for usable software from day one and puts all the efforts into making the product running on daily basis than anything else.
7. In the chaos of finishing user stories and high visibility of dependency and conflict, the great guys like creativity, innovation, research, added perfection, and documentation plus presentation die HORRIBLY at the hands of micromanagement
8. While developing the user story, the developer also needs to fix the bugs spilled over from last cycle. This becomes usual due to short test duration and not really there is a time allocated for the product to go back and forth between testing team and development team. Or we can say, the collaboration between testers and developers fails.
9. Since, tester and developer meet on daily basis, and due to short release cycles, tester is tempted to follow developer's mind in testing the user story(test cases of developer and tester become identical), which defeats the purpose of a third eye look to find faults.
10. Since, new features are plugged into the product in every short release cycle(especially when it is weekly based) testers only test the new feature in isolation for the most part. They are not allowed the luxury of thinking about integration test cases and what other parts of the product might be affected by this new feature may not have been thought of when the user story was defined for that tester. Or it may not be possible to think through integration test cases in the previous release cycle.
11. When a new user story is added unexpectedly, or a user story is modified it introduces lot of grey areas and errors into agile tracking system itself. User stories for testers might be affected. Integration test cases might be affected. Already integrated features might be affected, which might spawn further changes in those finished user stories and it might cause an avalanche. Basically when the product is complex, things might simply can go crazy.
12. There is no place for learning new skills as part of agile development or it simply looks silly when you update your learning task on daily standup meetings
13. It rather becomes worrisome for the developer to keep the agile tracking system updated with valid tasks and hours everyday along with his worries about developing the feature
14. Sometimes it might look like the developers are in lime-light based on their spent time rather than the quality of work they have done
So, finally a word of advise. I hear that agile works only when the developers involved are highly skilled in what they develop. It may be true, because learning new stuff and incorporating into the product is not really welcome in agile environment. Everything has to be known prior to the development. Agile works very well for the development of new product and that too only when the developers involved have experience in developing similar products and are well aware of what technologies to use for the product and they are already skilled in those technologies.
When management team takes a strict position in maintaining the agile tracking system, there happen a lot of silly things in agile trackers like, user story to undo a user story, user story to do a presentation, few minute standup meetings becoming many hour discussions due to complex dependency and where that time has to be updated? Hey I had a long personal meeting with my manager and boom, it can't be tracked in the agile tracker and today I've nothing much to update. Hey some of us go for a few days technical training, boom there can't be user stories for that. Hey somebody is going on vacation, the dependencies must wait. Hey, scrum master himself has to update his progress and allocate time to resolve conflict with other team members as well, and boom where he has to update that time?
So, I plead to the management community to not kill things around, but just take the good stuff from agile. Allow changes to agile process itself if necessary. And do not confuse the agile tracker for tracking developers spent time at office. Agile tracker is there only to track the time to develop the product. Leave managing the developer's time out of agile process and stop treating people as dumb resources for god's sake!