Most of the popular Java frameworks are annotation driven. But while annotations have been a great tool, today we are no longer constrained by what's possible in Java 5. Functional programming has been re-discovered, and the JVM has a rich ecosystem of languages. In the talk we'll first review some of the problems of annotations. However, most of the time will be dedicated to a live-coding case study, replacing HTTP endpoint mapping annotations with Scala code, using the Tapir library. Separating the descriptions of mappings or side-effects, from the interpretation, using "regular" programming language constructs is a powerful tool: we have all the flexibility of the base language at our disposal. But, let the code from this talk speak for itself!