Refactoring doesn’t exist in the physical world
Imagine you are tasked with updating the tired interior of a 40-year-old 10 story apartment building. Unless you are ripping off your tenants you have a limited budget. You need to decide on common design components and color scheme that will work on every floor.
You lay out your master plan and begin working. By the time you hit the fifth floor you realize that the design won’t work. People are complaining that the lights are too dim and the paint is garish. You still have work to do but starting at the 1st floor and ripping out your changes is expensive and time-consuming. It’s the physical world and changes are difficult to make. That’s not to say there isn’t a way to iterate on physical architecture but it takes much more skill.
Software does not have this limitation. Change is easy in software. The limitation is the people. Can they see what needs to be done and do they have the tools to identify and rip out the bad design? More importantly do they have the tools and skills to put a better design in based on the actual user need?
Whether you work in the physical world or the virtual world if you design something there needs to be a feedback cycle that lets you refine the design over time. It just so happens that software is malleable and does not have the physical limitations that a physical design has. In software change should be cheap and expected. As soon as you place the constraints of the physical world on it and fear the time and cost of changing software you will have killed the feature or product.
If you are not constantly refining and removing bad design then the building is crumbling. That’s fine – if you want to be a slum lord.