"1. Someone asks you to add a feature to an existing program."
That someone should do it themselves in a fork then, if you design software like this you run into problems with AI and human coders the same.
Your goal is to think of the form first(!), functionality emerged from that - or cache requests for functionality over at least 3 to 6 months, then refactor from the data structures up.
I know this is not the way businesses write software but if you want to stay relevant you should take a closer look as to what system or software design means to you. Spaghetti belongs to the Italians!
Functionality can be emergent from form - then you get a forced full-stop while trying to bend or hack your structure until you solve the problem system-wide and while solving this you usually get some functionality derived for free - often stuff your company can use now or will need later but does not know about yet.