I started as a programmer in a big company where projects typically took 1 year in theory and 1,5 years in practice.
The plan was 4 months of requirements and design, 4 months of implementation and 3 months of testing.
In practice, implementation continued 2 months into testing and in the end there was 3-6 months of panic.
Then some bright minds released the agile manifesto:
We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
That is, while there is value in the items on the right, we value the items on the left more.
There was a culture crash between modernists and realists. The realists were right of course; our limited minds cannot comprehend all details in a complex system to make a perfect plan. Furthermore, that plan will be obsolete before it can be implemented because our world is constantly changing.
But agile should not be an excuse for hacking. It might be fun to work with no process, no documentation, no contracts and no plans. This is fine on your personal projects on your free time, but when someone is paying for your work, they want to know how much it will cost and when it will be done. And when you work with others, misunderstandings are inevitable if you don’t write down what was decided. And misunderstandings are costly!
The agile founders never proposed that we work without processes, documentation, contracts and plans. What the really said is that those things are valuable, but that collaboration, working software and responding to change is more valuable.
So what does agile really mean?
It means adaptive. If the team is located in one room together with the customer, they may not need any documentation at all. But if the team is located in different countries and never talk to the customer, documentation is essential. Agile means to adapt the process to reality.
It does not mean no requirements. It means that requirements will not be perfect.
It does not mean no planning. It means that the plan will have to change.
And it certainly does not mean hacking ;)