why `self.id`?