I think the benefit of inheriting is that we make it explicit to be an error, and we have the common patterns of using an `Error` object, e.g., the `name` and `message` attributes. Like @dpup mentioned, the additional overhead is not too much percentage wise. You mentioned that it will hog CPU. That would be a concern as the timeout itself doesn't consume CPU.

Debug-ability wise, I think we should also pass the key to the error message, so it helps us debug which exact request times out. I will make that change.