Sam Snyder has spent the past decade working on improving developer happiness with better tooling. At Tableau software, he used data from the development and deployment pipeline to systematically seize the greatest opportunities for improvement and eliminate the greatest pain points. At Gradle, he integrated that process and data visualization methodology into Gradle Enterprise. Now as VP of Engineering at Moderne, Sam leads development on the core refactoring technologies and teaches Moderne's customers how to automate away the tedious, repetitive parts of software development.
Generative AI can be a powerful force multiplier for developers, but it also comes with limitations. Developers are expected to co-create with AI, and check the generated output, or risk hallucinations running wild. This can aid development at a local machine, but what happens when you try to apply these tools on a massive scale? For mass-scale code operations, AI needs to have agency, able to operate with some degree of autonomy. In this session, we’ll cover how you can combine retrieval and tool calling techniques, the richest code data source for Java called the Lossless Semantic Tree (LST), and OpenRewrite rules-based recipes to drive more efficient and accurate AI model output for refactoring and analyzing large codebases. You’ll learn about how you can use AI embeddings as a powerful tool to visualize, analyze, and even do smarter sampling for your codebase. Plus, we’ll show you how to leverage GenAI to accelerate writing OpenRewrite deterministic recipes.
How adaptable is your technology stack to changes in business requirements, technological advancements, and the availability of new and better tools? When you can more easily secure, upgrade, move, or modernize your code, that means you can adapt quickly and efficiently to changes in technology and markets. That’s what Migration Engineering is all about, which we’ll be exploring in this workshop. We’ll discuss and demonstrate how to write custom recipes using OpenRewrite, an open source auto-refactoring tool that enables large-scale code analysis and transformations for your teams. You’ll learn the make-up of recipes as we walk through a number of examples, then we’ll demonstrate how to write custom recipes using OpenRewrite. We will assemble these recipes with the visitor pattern, and show how to stitch recipes together with YAML, with Refaster-style templates, with Semgrep matchers, etc. We’ll also show how Generative AI can be applied to accelerate recipe development.
How adaptable is your technology stack to changes in business requirements, technological advancements, and the availability of new and better tools? When you can more easily secure, upgrade, move, or modernize your code, that means you can adapt quickly and efficiently to changes in technology and markets. That’s what Migration Engineering is all about, which we’ll be exploring in this workshop. We’ll discuss and demonstrate how to write custom recipes using OpenRewrite, an open source auto-refactoring tool that enables large-scale code analysis and transformations for your teams. You’ll learn the make-up of recipes as we walk through a number of examples, then we’ll demonstrate how to write custom recipes using OpenRewrite. We will assemble these recipes with the visitor pattern, and show how to stitch recipes together with YAML, with Refaster-style templates, with Semgrep matchers, etc. We’ll also show how Generative AI can be applied to accelerate recipe development.
Software keeps moving—and so must we. From end-of-life frameworks to sprawling polyglot stacks and never-ending CVEs, modernizing code at scale is one of the toughest, most necessary problems in engineering today. In this keynote, we’ll take a clear-eyed look at where we are—and what it really takes to move forward. We’ll unpack the rise of agentic AI, and why the future isn’t just about bigger models but better data and tools. Generative AI may be great at writing new code, but modernizing existing code? That takes precision—and deterministic systems that know when not to guess. We’ll also dig into the language engineering problem: how do you unify modernization with codebases written in Java, C#, Python, JavaScript, and more? Each language needs a custom model that captures types, formatting, and structure for meaningful, accurate change at scale. Finally, we’ll confront the security tradeoffs facing modern teams: should you upgrade fast to stay on the latest most secure versions, or leverage back patches to stay secure on what you know? The answer isn't always forward motion—it’s smarter, safer modernization.