Re-think abstract interfaces