One of the main reasons is the fact that not all requirements are known or revealed in the project preparation phase, these may even arise during the programming phase as a result of new opportunities, client's views or challenges of the project . Trying to diminish the number of unknown requirements may become time consuming and inefficient. Our solution to this problem is client involvement.
Client involvement in the project realisation phase is the key point in delivering a product that meets client's expectations. This is our basic assumption in the project preparation phase. We analyse and plan everything having reasonable room for additional client's requirements and feedback to functionality that is just being developed in mind.
We achieve this by determining fundamental aspects of the future product that are already well know in the planning phase. These change very rarely so we design application architecture in a way that anything else besides these fundamental aspects can be changed pretty effectively. This approach ensures fine application design with functional robust code as well as functionality that meets client's requirements.
Application design is only one part of successful product delivery. To manage the realisation phase we follow SCRUM methodology, that is agile enough to provide client with sufficient room for additional requirements and feedback and on the other hand well organized to manage functionality development.