The Marco Show

IntelliJ IDEA
undefined
Mar 11, 2026 • 1h 12min

How Spring Boot Really Works (From a Core Engineer) - Moritz Halbritter | The Marco Show

Moritz Halbritter, Spring Boot engineer at Broadcom and team lead for start.spring.io (Spring Initializr), joins Marco to talk about the inner workings of the Spring ecosystem and the future of Java performance.💡 In this episode:GraalVM Native Image vs Project Leyden and Java startup performanceObservability in Spring Boot (logs, metrics, tracing)Developer experience improvements: Testcontainers, Docker Compose, SSL hot reloadAI coding tools, JSpecify nullability, and the future of Spring⏱️Timecodes: (00:00) Teaser(00:53) Meet Moritz Halbretter from the Spring Boot team(02:23) From school programming to consulting to Spring(08:14) How Moritz joined the Spring team(14:20) Spring Native, GraalVM, and Project Leyden(25:35) Observability, Micrometer, and customer-driven features(32:08) Developer experience: Docker Compose, Testcontainers, SSL hot reload(40:35) JSpecify and annotating Spring Boot for nullability(45:12) start.spring.io and generating Spring projects(50:45) Using AI in coding, reviews, and open source PRs(57:30) Where Spring is headed in the next few years(1:00:08) Favorite languages, Kotlin, and Linux(1:01:13) Personal projects: solar monitoring, Modbus, and heat pump predictions(1:08:46) Giveaway and rapid-fire questions(1:11:32) OutroNew episodes every other Wednesday. Subscribe for more developer-focused conversations.🎥 Watch the full episode on YouTube: https://youtu.be/FUFsul26rgA
undefined
Feb 25, 2026 • 1h 10min

JobRunr: Java Job Scheduling, OSS Monetization, $17K Deals – Ronald Dehuysser

Ronald Dehuysser, creator of JobRunr, joins Marco to talk about distributed job scheduling in Java, building a high-throughput background processing framework, and turning an open-source side project into a profitable business.They dive into what really happens when microservices lack distributed tracing, why dead letter queues can silently lose invoices, how JobRunr scales to thousands of jobs per second, and what it takes to monetize open source in the Java ecosystem. 💡In this episode:Distributed job scheduling and background processing in JavaJobRunr architecture and high-throughput performanceQuartz vs modern scheduling approachesRetries, exponential backoff, and reliability patternsDead letter queues and observability challengesMicroservices vs monoliths in enterprise systemsMonetizing open source and pro licensing modelsEnterprise sales and scaling a developer productBurnout, sustainability, and building a teamAI, LLMs, and the future of junior developers⏱️Timestamps(00:00) Teaser(00:48) Who's Ronald Dehuysser and what's JobRunr(01:37) From enterprise dev to freelancing (and switching to .NET)(11:19) Job scheduling pain and birth of JobRunr(16:21) Quitting, COVID, and building the first version(28:48) First customers and monetizing open source(40:13) Big enterprise deal and going full-time(47:16) Burnout, Vipassana, hiring, and building a team(53:20) Sustainability features and the future of JobRunr(56:08) AI, junior developers, the future of coding(01:07:28) Giveaway and Rapid-fire questionsNew episodes every other Wednesday. Subscribe for more developer-focused conversations.🎥 Watch the full episode on YouTube: https://youtu.be/9Zgw_0kVFk8
undefined
Feb 11, 2026 • 1h 31min

Java Performance Myths: JIT vs AOT, GraalVM, Performance Engineering – Thomas Wuerthinger

Episode description:Thomas Wuerthinger, Founder and Project Lead of GraalVM and Vice President at Oracle, joins Marco to unpack how modern Java runtimes actually work. They explore why duplicating compilers and garbage collectors across languages is a waste of engineering effort, how GraalVM grew from a research project into production technology, and why Native Image unexpectedly became its most impactful feature.💡 In this episode:GraalVM, Native Image, and Java performanceJIT vs AOT and predictable runtime behaviorPolyglot runtimes and shared memory modelsCloud-native Java, startup time, and memory footprintPerformance lessons from the One Billion Row ChallengeBranch misprediction and hardware-level bottlenecksResearch vs product engineeringAI in compilers and testing🕐 Timestamps(00:00) Intro(01:09) Meet Thomas Wuerthinger & what GraalVM really is(03:31) Why duplicating language runtimes is a waste(06:08) How GraalVM started at Sun Microsystems Labs(10:26) Writing an interpreter and getting a JIT “for free”(14:26) Going open source and finding real users(16:48) Why Native Image took off(23:02) From research project to real product(26:56) Native Image, Spring, Quarkus, and Java in the cloud(35:38) Why JIT performance can be unpredictable(39:31) When JIT still makes sense(43:02) Python, JavaScript, and polyglot runtimes(46:16) Using AI in compilers and testing(01:04:06) The One Billion Row Challenge(01:09:50) Branch misprediction and performance surprises(01:13:26) How to think about performance optimization(01:25:33) Giveaway question(01:27:11) Rapid fire and wrap-upNew episodes every other Wednesday. Subscribe for in-depth conversations on software engineering, performance, and developer tools.🎥 Watch the full episode on YouTube: https://youtu.be/naO1Up63I7Q
undefined
Jan 28, 2026 • 1h 12min

From Google to Indie Dev: Mac Apps, Subscriptions, AI Coding – Daniel Gräfe

Daniel Gräfe, founder of Timing and Cotypist, joins Marco to talk about the realities of indie software development after leaving Big Tech. They discuss turning side projects into a real business, risky rewrites, subscription pricing, and how AI fits into day-to-day coding and support.Daniel shares lessons from more than a decade of building and maintaining Mac apps, including what worked, what didn’t, and why sustainability matters more than quick wins. A grounded conversation for developers thinking about indie SaaS, side projects, or life beyond a full-time engineering role.💡 Topics in this episode:Leaving Google to go indieSide projects vs running a businessRewriting a product from scratchSubscription pricing decisionsB2B vs B2C tradeoffsUsing AI in everyday developmentLong-term maintenance and sustainability🕑 Timestamps:(00:00) Intro(04:08) Timing, CoTypist, and Daniel’s background(05:30) Early side projects and first Mac apps(13:16) Getting into Google(20:02) Promotion, performance, Big Tech reality(27:33) Quitting Google and going indie(28:27) Rewriting Timing from scratch(37:52) Launch day, sales, and burnout(46:37) Subscriptions and pricing decisions(54:13) Using AI for coding and support(01:03:34) Advice for aspiring indie developers(01:12:10) Agency vs intelligence(01:13:22) Giveaway + outroNew episodes every other Wednesday. Subscribe for more developer-focused conversations.🎥 Watch the full episode on YouTube: https://youtu.be/t4DkaadHLnI
undefined
Jan 14, 2026 • 1h 34min

Are Integrated Tests a Scam? TDD, Architecture, Fast Feedback – J. B. Rainsberger

J. B. Rainsberger, TDD coach and software consultant, joins Marco to challenge common assumptions about software testing. They discuss why JB argues that “integrated tests are a scam,” how testing choices affect design and refactoring, and what teams get wrong when they rely too heavily on end-to-end tests. The conversation draws on decades of real-world experience working with development teams of all sizes.💡 Topics in this episode:What “integrated tests” really are and why they cause problemsMicro tests, fast feedback, and confidence-driven testingWhen deleting tests is the right decisionHow tests create pressure on system designCollaboration and contract tests explainedWhy there is no single testing best practicePractical advice for junior and senior developersNew episodes every other Wednesday. Subscribe for more developer-focused conversations.⏰ Timestamps:(00:00) Teaser(01:24) Intro(02:44) How J. B. got into testing(06:12) What “integrated tests” actually mean(10:42) Stop asking “what’s the right test size?”(13:22) Removing irrelevant details from tests(15:30) Refactoring, coupling, and deleting tests(18:08) “There’s no best practice.”(23:52) Old TDD books and timeless ideas(26:01) Collaboration and contract tests explained(33:53) “99.5% of your tests can be micro tests”(46:21) Do you want to be right or solve the problem?(01:00:48) Advice for junior developers(01:19:32) Testing strategy distilled(01:23:58) Manual QA testing(01:29:44) Giveaway(01:33:15) Rapid fire and outro🎥 Watch the full episode on YouTube: https://youtu.be/j0NjFsb-at8
undefined
Dec 22, 2025 • 10min

Season Finale: Giveaway Winners & Q&A with Marco

The first season of The Marco Show has officially come to an end! In this Christmas special episode, we’re announcing all of our giveaway winners and wrapping up the season with a fun Q&A with Marco.🎁 Giveaway winners:If you’re one of the winners featured in this episode, please reach out to us at themarcoshow@jetbrains.com and let us know what you’d prefer: a 1-year license to one of our JetBrains products, or a coupon for the JetBrains merch store.Timestamps: (00:00) Season Finale Intro & What to Expect(00:34) LLMs with Jodie Burchell: giveaway winner(01:08) Software performance with Casey: giveaway winner(01:39) Hibernate with Gavin King: giveaway winner(02:15) Flyway with Axel Fontaine: giveaway winner(02:45) SQL with Torben: giveaway winner(03:16) Quarkus with Kevin Dubois: giveaway winner(03:46) Jetty with Ludovic: giveaway winner(04:18) ByteBuddy with Rafael: giveaway winner(04:52) How to claim your prize(05:08) Q&A with Marco(09:35) Outro and meet the teamThank you to everyone who watched, listened, and supported the show this season. We truly appreciate it. See you next year!New episodes every other Wednesday. Subscribe for more developer-focused conversations. 🎥 Watch the full episode on YouTube: https://youtu.be/hZemYWNKa6I
undefined
Dec 10, 2025 • 1h 13min

Modern Bytecode Instrumentation with ByteBuddy – Rafael Winterhalter

Rafael Winterhalter, creator of ByteBuddy and long-time Java consultant, joins Marco to break down the hidden world of JVM bytecode instrumentation. They discuss how ByteBuddy powers tools like Mockito and Hibernate, why legacy Java still dominates enterprise systems, and what it’s really like maintaining a massive open-source project as a single developer.💡 Topics in this episode:How ByteBuddy works and why frameworks rely on itJVM bugs, JIT issues, and surprises from instrumentationSupporting legacy Java (5, 6, 8…) in modern environmentsOpen-source sustainability and avoiding burnoutJava modules, unsafe, and evolving with new JDK releasesRethinking Java build tools and software engineering complexity🕑 Timestamps:(00:00) Intro(01:10) Rafael’s background & the origin of ByteBuddy(03:00) What ByteBuddy does and why it matters(04:32) Replacing CGLIB and early challenges(07:05) ByteBuddy’s design philosophy(09:15) Mockito, Hibernate and real-world adoption(13:14) Open source reality(15:48) Performance myths and JVM behavior(18:47) JVM bugs, JIT issues and instrumentation pitfalls(21:11) Supporting legacy Java in enterprise(23:56) Testing ByteBuddy across many JDKs(25:53) Why companies still run Java 5/6(28:25) Engineering vs economics(30:39) Modules, unsafe and evolving with Java(36:12) Maintaining a one-person project(39:31) Conferences and developer evangelism(42:02) Consulting vs product engineering(49:51) Burnout and sustainability(52:02) Thoughts on AI in software development(57:13) Rethinking Java build tools(01:05:07) Build security and dependency risks(01:10:16) Giveaway(01:10:48) Rapid fire and outroNew episodes every other Wednesday. Subscribe for more developer-focused conversations.🎥 Watch the full episode on YouTube: https://youtu.be/AzfhxgkBL9s
undefined
Nov 26, 2025 • 1h 2min

Scaling the Web: Lessons from Jetty, Bitronix, Terracotta, Quartz – Ludovic Orban

Episode description:Ludovic Orban (Jetty Maintainer and Performance Engineer at WebTide) joins Marco to break down what “web scale” really means, why most systems don’t need Google-level architecture, and how modern Java servers achieve massive throughput. From Jetty’s design philosophy to multi-core CPU realities, distributed transactions, Terracotta’s wild JVM clustering experiments, and the limits of AI-generated code, this episode dives deep into how high-performance Java is built today.💡 In this episode:What “web scale” actually means for real-world systemsJetty vs Tomcat and how Jetty became a fast, modern web serverCPU evolution, memory bottlenecks, and multi-core performanceDistributed transactions, XA pitfalls, and compensating patternsTerracotta’s clustered JVM: engineering lessons and war storiesWhy developers struggle with performance (and how to learn it)AI, coding assistance, and why Ludovic doesn’t trust generated code⏱️ Timestamps:(00:00) Teaser(01:10) Who is Ludovic Orban?(02:04) What “web scale” really means, and who actually needs it(03:54) How hardware changes reshaped software performance(06:28) Cloud, containers, and why performance still matters(07:28) Jetty vs Tomcat: history, adoption & performance(10:47) What makes Jetty “fast” in practice(13:21) How the Jetty team prioritizes performance(15:10) Recent work: fixing complex HTTP/2 bugs(16:38) How WebTide supports customers beyond Jetty issues(17:52) Bitronix: Why Ludovic built his own transaction manager(20:45) Open-source challenges. The rise and fall of Bitronix(24:19) Distributed transactions vs compensating transactions(27:07) Where to learn more: Atomikos and modern approaches(28:25) Terracotta: clustering JVMs and wild engineering stories(31:20) What Terracotta taught him about the JVM(33:48) Real-world Java performance mistakes developers make(40:22) Why learning performance is so hard(45:40) Kubernetes, abstraction, and performance visibility(48:50) Hardware that excites Ludovic: Oxide Computer(50:42) His take on AI and why he doesn’t trust generated code(53:30) Lessons from Jetty, Terracotta, Bitronix, and Quartz(56:10) Rapid-fire questions(01:01:15) Giveaway and outroNew episodes every other Wednesday. Subscribe for more deep, developer-focused conversations.🎥 Watch the full episode on YouTube: https://youtu.be/fJvg5zTKHeE
undefined
Nov 12, 2025 • 48min

Growing Quarkus in a Spring Boot World – Kevin Dubois (IBM)

Kevin Dubois (IBM Developer Advocate, Quarkus Team) joins Marco to explore how Quarkus is reinventing Java for the modern cloud era, and why it’s not about killing Spring Boot. From startup times to developer experience, microservices, AI, and GraalVM, this episode dives into where Java is heading in 2025 and beyond.💡 Topics in this episode:The origins of Quarkus and why it existsSpring Boot dominance and migration trendsHot reload, Dev UI, and developer experienceCloud-native Java, containers, and serverlessGraalVM and the future of native JavaJava’s role in the age of AINew episodes every other Wednesday. Subscribe for more deep, developer-focused conversations.🎥 Watch the full episode on YouTube: https://youtu.be/IRqTbgC2JLU⏱️ Timestamps:(00:00) Intro(01:12) Why Quarkus was created (it’s not about killing Spring)(04:45) How Quarkus compares to Spring Boot today(08:30) Developer experience: hot reloads, Dev UI, and that “aha” moment(13:05) Quarkus in the cloud: Kubernetes, containers, and serverless(18:20) Native compilation vs JVM: when (and when not) to use it(24:00) MicroProfile, Jakarta EE, and open specs(28:35) The future of Java: monoliths, microservices, and AI(33:10) How IBM is investing in Quarkus and the Java ecosystem(37:25) Agentic AI, LangChain4J, and practical use cases(42:10) Rapid-fire questions(46:15) Giveaway question + closing thoughts
undefined
Oct 29, 2025 • 1h 30min

Hibernate vs Spring Data vs jOOQ: Understanding Java Persistence | Thorben Janssen

Thorben Janssen joins Marco to talk about the hidden power (and pain) of Java persistence frameworks. Hibernate, JPA, Spring Data, jOOQ: which one should you really use in 2025? From learning SQL the right way to surviving microservices madness, this episode is packed with hard-won lessons from decades of real-world Java work.💡 Topics in this episode: Hibernate vs JPA vs Jakarta Data When to use jOOQ or Exposed The biggest persistence misconceptions Common performance traps (and how to avoid them) Monoliths, microservices, and “real” architecture decisions How AI might change the way we write queries⏱️ Timestamps:(00:00) Introduction: From painful early learning to AI-generated annotations(01:02) Meet Thorben Janssen – consultant and trainer for Java persistence(02:11) Early days of Hibernate and the horror of EJB2(04:33) Main challenges in database access today(06:18) Too many tools: Hibernate, JPA, Spring Data, jOOQ – how to choose(08:15) Why understanding ORM internals really matters(09:20) How juniors should start learning persistence(10:59) SQL skills – why you still need them even with Hibernate or Spring Data(13:48) SQL essentials for beginners: what to learn first(16:01) Why Hibernate became the dominant persistence tool(18:57) Hibernate vs JPA – is there really a difference?(20:35) Hibernate API vs Jakarta Persistence API – which to use(22:10) Criteria API and DSLs for queries(23:43) Strengths and weaknesses of Spring Data JPA(27:26) Jakarta Data vs Spring Data JPA(30:53) Stateful vs stateless data models(33:21) jOOQ, Exposed, and the SQL-centric approach(37:41) Mixing Hibernate and Exposed in one project(39:33) Where Spring Data JDBC fits in(43:24) Starting a new project in 2025 – what stack to choose(45:24) The role of experience and not chasing every new trend(48:50) Monoliths, microservices, and common pitfalls(52:14) Database design vs service design – where to start(59:02) Common database performance issues(01:03:10) Why developers should collaborate with DBAs(01:06:20) Caching problems: when caches make things worse(01:09:29) Reactive database access – what happened to the hype(01:12:33) The "perfect" persistence framework – does it exist?(01:14:40) AI-assisted development and query generation(01:19:43) The AI hype cycle and developer reality(01:20:17) Other persistence models worth learning (graph, full-text search)(01:21:43) Full-text search and graph databases in practice(01:23:25) Integrating AI into applications(01:24:38) Thorben's unpopular opinions(01:26:04) Giveaway announcement(01:27:06) Rapid-fire round: Paderborn, joins, and lazy loading(01:30:00) Closing remarks🎁 Giveaway: What’s the highest number of SQL queries you’ve ever seen one workflow generate? Best answers win JetBrains merch or IDE licenses.New episodes every other Wednesday. Subscribe for deep, developer-focused conversations.📺 Watch on YouTube: https://youtu.be/t4h6l-HlMJ8

The AI-powered Podcast Player

Save insights by tapping your headphones, chat with episodes, discover the best highlights - and more!
App store bannerPlay store banner
Get the app