As a basis for all our development cycles, from when we were Waterfall, to Agile and now Iterative, we have always had a change request process.
If a change to the system is new and not a bug, then it should be raised with the individual who own's the project manager/product owner. That change should then be assesed to ensure it meets the needs of the business, the cost (Physical and resource) and the impact to timelines.
I have worked on a few deliverables, where this has not been the case. In each instance, the unverified change has lead to the timeline extending, more resource being required and more bugs being found. I have also found it encourgaes people not to communicate, so test environments become unstable and bugs are found in live as a result of testers not knowing that the change existed.