I've always viewed type systems as adding constraints on and descriptions to the data and logic in the system.
Which is exactly what you find a ton of in electrical engineering (e.g. IEEE C37.2 and gazillion more).
Dead Comment
Which is exactly what you find a ton of in electrical engineering (e.g. IEEE C37.2 and gazillion more).
Sounds much better than the interface boilerplate if it's just for the sake of testing.
"makes it hard to cone up with good names" is not really a problem, if you have a `CreateRequest` method you name the interface `RequestCreator`. If you have a request CRUD interface, it's probably a `RequestRepository`.
The benefits outweigh the drawbacks 10 to one. The most rewarding thing about this pattern is how easy it is to split up large implementations, and _keep_ them small.