Or, for that matter, if an entire stack of methods needs modifying to accept some new data type. All you have to do is modify one of them and the compiler won't let you run until you've done the rest.
Or modify the type definition and everything using it has to change. If you want to force check every usage, rename the type.
Not that I have anything against tests either, these are all just strategies for keeping a record of context.
I can see that. I definitely prefer my code to run even while broken, since I find it makes it easier (overall) to write - particularly when I don't have great docs for the data I'm getting from web hooks (I'm looking at you, Slack Actions), where it's useful to just pop into an in-situ REPL and poke around.
Although - waaay back in the day, I was very gung-ho about using C++ template shenanigans to enforce code correctness at compile time.
It depends what you're working I guess. I can see where you're coming from with web hooks; in the examples above it was more of a 'pure' algorithm module and much more self contained.
Haha, yes I overdid templates for this once too :)