... rework when the system is not yet deployed is always scrap...
I question that because:
... keep room for fixing bugs...
In a project you really need to do the "big design up-front", otherwise you'll have too much scrap, and nobody wants to pay that.
"Just plan harder so you don't write bugs" is hardly realistic.
(If you define "scrap" as "stuff you have to throw away because it has provided no value", then you have a circular definition you can only break by redefining "value". You get to pick what you rework: is it the BDUF spec several months later or is it code minutes to days later?)
Even if you want to embrace agile methodologies, you need to understand that the first release must be managed as a project, with a start, an end and a specific product to deliver.
Every reputable agile method of which I am aware suggests this explicitly.