Planning to fail is quite a bit more work than failing to plan.
The singleton pattern combines all the perf benefits of a global variable with all of the code maintenance benefits of a global variable.
In all seriousness, duplicating code isn’t bad. What is bad is duplicating intent.
A wise man once said “I could talk about pointers all day and still be confused.” Then he pointed to me and said, “I mean you will still be confused.”
The waterfall model mitigates failure by providing a document trail about whose fault it is.
Scrum tries to mitigate failure by making it smaller, but happen more often.