It is really interesting to check some established diseases in software development and investigate how they can be resolved using agile processes. If agile development is so good, it should provide solutions to common problems. Here we go.
Many people will start to fully apply themselves to a task just at the last possible moment before a deadline.
Maybe the most famous disease in software development teams. You have 40 hrs task and thoughts like “Huh, one week! I am pretty sure I will complete this task in 2 days!” You are doing something fun like refactoring or research and start working on the task Wednesday’s afternoon. Suddenly you encounter a serious problem. You spent all day hunting for resolution with no luck. In a weekly status meeting you say that task was not done and 80% ready, but there is completely unexpected nasty problem that popped up and broke the plans.
Looks familiar? Yes, it is. Agile development solves the problem with several simple practices:
Work expands so as to fill the time available for its completion.
Indeed it is a matter of perfection and laziness. Some people may complete the task earlier and have spare time for other things. Some people will complete the task earlier and polish the solution till it shines. Some people will digress from the task and complete it on time. All attitudes may be dangerous. The result is that a whole project delayed.
Agile approach has some medicine for this disease as well:
Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.
Maybe it looks quite weird, but this law has great application in software development. If you have two modules that interact via API, you hardly create good API unless developers of the both modules communicate together. It leads to some conclusions:
Communication between developers is very important for good design.
Distributed teams may hurt software design in case of poor communication (and it is harder in distributed teams).
Software can’t be produced in isolation. You can’t have several people working on several modules with no or little interactions.
In agile development there is a clear statement that communication is very important. It does not have explicit practices for software design communication (well, except pair programming), but it doesn’t take a rocket scientist to create and apply them. Company should adapt and change to have great communication flows.
Adding manpower to a late software project makes it later.
There are two simple reasons behind this law:
From the first sight agile development can’t to anything with these problems. However that is not true.
Feel free to continue the list of diseases ;)