Continuing on the subject of agile ... agile teams accept change as inevitable and adapt their processes to manage change. Short iterations imply that stakeholders can see steady progress and provide frequent feedback. The emphasis on working software means that stakeholders can see & use the working prototype rather than merely look at metrics and documentation highlighting status of the team. Continuous integration means that if one part of the system isn’t playing nicely with others, the team will find out almost immediately. Merciless refactoring, where programmers improve the code internally without changing its external behaviour, prevents code from becoming fragile over time. Extensive automated unit tests ensure that fixing one bug won’t introduce further regressions.