Let’s make this example more concrete. At my day job, most clients talk to our backend services via HTTP, so our backend services are all written in Express. But we recently wanted to allow accessing a backend function via
websocket, so we could add a progress bar. Time for a massive refactor?
Actually, no. I needed to wire up a websocket API, but we didn’t need to change the business logic at all. That’s because all our business logic is in functions that share the same function signature, and that signature doesn’t depend on any framework.