Software projects fail more often because of misunderstandings of requirements or other forms of miscomunications between the domain experts and the development team than for strictly technical reasons. An effective way to mitigate this problem is writing the parts of the software implementing the business logic using a Domain Specific Language that could be understandable also for the non-technical participants to the project. This allows the domain expert to read and validate the business logic directly from the source code and check that it corresponds to what they had in mind. This talk will quickly introduce DSLs clarifying the differences between internal and external ones. Then it will illustrate with practical examples the 3 main patterns to implement DSLs in Java 8: method chaining, nested functions and function sequence with lambda expressions, discussing the pros and cons of each of them and showing how these patterns have been used in real-world open source projects. Finally it will demonstrate how to combine these 3 patterns in a single DSL to take advantage of their respective best features.