"The next time you see an application you like, think very long and hard about all the user-oriented details that went into making it a pleasure to use, before decrying how you could trivially reimplement the entire damn thing in a weekend. Nine times out of ten, when you think an application was ridiculously easy to implement, you’re completely missing the user side of the story."
Clients at work routinely ask up to "just you what you did for [otherclient] – just reuse the code, so it won't take you very long", and then look at us like we're trying to con them when we explain that no, we can't do that. And this is kind of why – we learn and reuse relevent bits, but each client gets a custom codebase, because we build the best tools we can for each one. So they're not interoperable.