every method needs it as the first parameter, every attribute access uses `self.` 2. **Mutable class attributes** — lists/dicts at the class level are shared between all instances; use `__init__` instead 3. **God classes** — split large classes into focused ones, each with a single responsibility