Programmers often write procedures or methods that model mathematical functions. These functions clearly distinguish between input arguments and output values. In contrast, relational programming treats programs as mathematical relations, eliminating the distinction between input and output. miniKanren is an embedded domain specific language for constraint logic programming, designed for writing interpreters, type inferencers, theorem provers, and other interesting programs as relations. We will explore the extremely interesting and surprising behavior of these relational programs, and consider how this approach to programming might be made more practical in the future.