You want to teach functional programming to someone else: To enable a fellow developer to hack in your project, as a professional trainer, or to teach students. You are enthusiastic that functional programming is the best, and you probably feel that Haskell, OCaml, Erlang, Clojure, Scala, Swift, F#, Racket or Scheme is the best in particular. However, as natural as functional programming feels to us, it is not easy to teach well. In particular, the languages listed above are powerful tools for development, but they are not necessarily the best tools for teaching - at least in the beginning. The tutorial will help you teach functional programming well, in a variety of contexts, using the Program by Design Approach. It will give an overview of effective teaching approaches, techniques and tools, and highlight pitfalls and aspects of teaching worthy of your attention.