Typeclasses are widely in use on advanced Scala code and yet they are not a first class citizen of the language. This talk will introduce the concept of typeclasses from the ground up by looking at languages such as Haskell and Rust. Typeclass coherence (multiple instances of the same typeclass for the same type), effective namespacing and implicit resolution (in Scala) are some of the challenges that arise for extensive usage of this concept and language feature. We'll explore those issues and how to apply the learnings from other languages to improve the readability and usability of typeclasses in Scala by defining conventions (inspired by the Cats library) and relying on tools (e.g. Simulacrum).