I eventually learned to never trust any restrictions on the user.
I quickly learned to make sure everyone had a copy of decisions made, so that I could charge by the hour for changes. I eventually learned to include examples of what would and would not be possible in any specification or change order.
Also this change from 1:1 to 1:n entity was like one "minor" feature in a rather larger list of feature requests. It so far has caused more work then all the other features combined.
It's a good thing I'm a hobbyist so that I can avoi- hmm, now that I think about it this feature could be really cool and shouldn't take too long to implement...
Spouse at 7:00 AM: "Why do only some of the house lights work and there's no hot water?"
Me: "You know that quick fix I was working on last night. Well, umm, one thing led to another aaaand... Umm... Just so you know, your phone is using mobile data because the wifi is out."
In consulting, that’s called “after work”. Got to pump those billables
Honestly though, unless it’s a feature that is completely outside the domain of the application. If you have to re-write your entire app then your app was probably dog shit to begin with
To be fair, it said "an enormous amount of code", not "your entire app", but yes, the ability to add unexpected new features or make focused changes without touching more than a minimal amount of existing code is a very good smell metric of code quality. The problem is that for every dev who understands how to program like that, there are at least five, probably more like ten who don't, which means most of us are working on teams that produce a blend of clean code and, as you say, dog shit, so the feature request that requires stirring up all that shit is out there waiting for us, like it or not. The best we can do, when it hits, is try to at least improve all the shit that we touch in the process. Maybe some of it can become compost, I dunno, the metaphor breaks there, gonna have to refactor the metaphor.
My favorite thing was having to rewrite an enormous amount of code to support a new feature because the original architect originally wrote an enormous amount of code in anticipation of supporting a new feature like it.
In order to analyze the problem, inform stakeholders and a allow for a brief period for outlining the next potential steps to be decided by the steering committee. Once there, we can talk about allocating developer hours to enabling the resolution and it's required upgraded dependencies. See my previous estimate sent 2/7/2018.
This literally happened in my meeting last week. Top position development manager was complaining the existing thing was shit. Basically means we have to build a new thing from scratch. And guess what? The deadline is 12 Sep.
If you think it was shit why did you let them do what they did in the past?