Probably everyone who is engaged in software development knows what “agile” is. If to put it simple, agile is a number of methods or approaches of managing a development process and team work. Agile implies following a set of software development values fixed in agile manifesto. Based on these values several methods were worked out. Namely: DSDM (Dynamic Systems Development Method), Scrum, XP (Extreme Programming) and others.
Main principles of agile
Each method has its set of principles. However many principles are shared so we can list most common of them to figure out what the core idea of agile methodology is.
1. Client must be actively involved.
2. Team’s opinion is also an argument.
3. Requirements may change but schedule never.
4. Better deliver small parts but constantly.
5. Best practice is delivering before deadlines.
6. Test, test, test.
7. Don’t move to another feature until current one is not complete.
8. Collaboration and cooperation between both parties is vital.
Agile is very popular if not to say more. It is considered to be more advanced than for example Waterfall software development approach being more flexible and less formalized. But it is not a cure-all solution anyway. Agile has its drawbacks and weak-points which also have to be considered when you choose your software development methodology.
Disadvantages of agile
Client’s involvement, close collaboration and cooperation. These are the fundamental principles of agile which ensure that result will be exactly as it was expected. However, this principles fail when a client has not sufficient time and not always available upon the first request. Also these principles affect the pace and swiftness of the development process.
New requirements emerged and modified. This what makes agile being a very flexible method of software development. However this is how never-ending projects appear with constant improvements and enhancements. And this, in its turn, leads to a more unpredictability in business planning. Moreover both parties are at risk. A developer can’t effectively schedule his upcoming projects and a client can face an unexpectedly excessive budget.
Constant testing. This insures quality and saves from unpleasant surprises during the final testing. At the same time this increases the cost of development significantly since it involves more resources (man/hours).
Deliver by parts, don’t move forward until the current feature is done. This principle of course is meant to ensure quality. But if you look closer to the real order of things you will understand that this approach can be excessive. Developer has to contact his client as soon as another line of project is ready; client has to test it up and express his opinion. Reliable? Yes. Time-consuming and requires constant control? Of course! Besides, put developers shoes on. It’s mentally quite tediously to follow each delivery iteration. Since we talk about agile as a flexible method, let’s be fair to all parties and don’t forget about another principle: team’s opinion is also an argument.
Early delivery. Well, both developers and clients are interested in fast delivery. But let’s face it: rushing almost always means lack of quality. So, it is not recommended to make fast delivery a number one priority.
It is hard be a 100% agile. Every project, every client and every developer team has something new to add to the development process. Agile is not a Codex but a collection of smart ideas based on experience and knowledge. Agile values are good for initial discussion about terms and conditions of the project. But it’s never too late to add something new, something advanced to this methods to make them work even better. So the best method of development project management will be the one discussed and agreed by all parties. And may agile be with you.