{"id":705190,"date":"2026-05-05T13:33:33","date_gmt":"2026-05-05T12:33:33","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=idea&#038;p=705190"},"modified":"2026-05-05T13:33:37","modified_gmt":"2026-05-05T12:33:37","slug":"java-annotated-monthly-may-2026","status":"publish","type":"idea","link":"https:\/\/blog.jetbrains.com\/en\/idea\/2026\/05\/java-annotated-monthly-may-2026","title":{"rendered":"Java Annotated Monthly \u2013 May 2026"},"content":{"rendered":"\n<p>April flew by. The pace of tech development didn\u2019t slow, and the flow of news and knowledge didn\u2019t either.<\/p>\n\n\n\n<p>This month, <a href=\"http:\/\/bacheconsulting.com\/\" target=\"_blank\" rel=\"noopener\">Emily Bache<\/a> joins us to share some sharp finds about AI agents and test-driven development. Java stays busy with fresh updates and practical tips, and Kotlin keeps pushing forward right next to it. The AI section is, as usual, packed with things worth your attention.<\/p>\n\n\n\n<p>You\u2019ll also find upcoming events to plan for and a few ideas to challenge your thinking.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Featured Content\u00a0<\/h2>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                                                            <div class=\"about-author__box-img\">\n                            <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2026\/05\/image-2.png\" alt=\"\" loading=\"lazy\">\n                        <\/div>\n                                        <div class=\"about-author__box-text\">\n                                                    <h4>Emily Bache<\/h4>\n                                                <p><span style=\"font-weight: 400;\">Emily Bache is an independent consultant, YouTuber, author, and Technical Coach, with over 25 years of experience working with Java and other programming languages and tools. She works with developers, training and coaching effective agile practices like refactoring and test-driven development. Emily has written two books about software development and contributed to several others. Emily founded the Samman Technical Coaching Society in order to promote technical excellence and support coaches everywhere.<\/span><\/p>\n                    <\/div>\n                            <\/div>\n        <\/div>\n    <\/div>\n\n\n\n<p>It&#8217;s my pleasure to bring to your attention some interesting content that appeared in April. The huge change that is sweeping through our industry right now is the adoption of AI coding agents, which many people are using instead of hand-coding changes to software. One of the most important new skills to master is designing a &#8220;harness&#8221; for your AI tool, and this month Birgitta B\u00f6ckeler has published the <a href=\"https:\/\/martinfowler.com\/articles\/harness-engineering.html\" target=\"_blank\" rel=\"noopener\">best reference<\/a> I&#8217;ve seen so far about what that is and a mental model for how to think about it. Chris Parsons has also published an extensive guide titled <a href=\"https:\/\/www.chrismdp.com\/coding-with-ai\/\" target=\"_blank\" rel=\"noopener\"><em>How I use AI to Code<\/em><\/a>, which is a really great resource for experienced developers looking to create their own harness and mentor others to do the same.<\/p>\n\n\n\n<p>Perhaps as a contrast, I&#8217;d also like to highlight Michael Taggart&#8217;s <a href=\"https:\/\/taggart-tech.com\/reckoning\/\" target=\"_blank\" rel=\"noopener\">introspective experience report<\/a> on his use of AI. He wrestles with his conscience over using these tools at all. An interesting metaphor for AI-assisted coding came up in an article by Drew Breunig \u2013 we run the risk of building a <a href=\"https:\/\/www.dbreunig.com\/2026\/03\/26\/winchester-mystery-house.html\" target=\"_blank\" rel=\"noopener\">Winchester Mystery House<\/a>. After you read that, listen to Kevlin Henney\u2019s talk <a href=\"https:\/\/youtu.be\/vpYJMr1pJRY?si=EE528ERYChpGhHHw\" target=\"_blank\" rel=\"noopener\"><em>Being the Human in the Loop<\/em><\/a>, where he takes a look at the engineering skills we still need \u2013 ones that could perhaps prevent the kind of thing Drew writes about from happening.&nbsp;<\/p>\n\n\n\n<p>I have a particular interest in test-driven development, which, as a technical coach, is a big part of what I teach to others. I wrote an initial assessment of <a href=\"https:\/\/coding-is-like-cooking.info\/2026\/03\/test-driven-development-with-agentic-ai\/\" target=\"_blank\" rel=\"noopener\">what TDD looks like these days<\/a>, based on interviews with several practitioners I trust who are all using agentic AI. For those of you who\u2019d like to see me in action writing code,&nbsp; I have a demo of a <a href=\"https:\/\/www.youtube.com\/watch?v=pqz_efj61q8\" target=\"_blank\" rel=\"noopener\">narrow integration test for an outbound port in a hexagonal architecture<\/a>, in Kotlin.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java News<\/h2>\n\n\n\n<p>Catch what shipped and track what\u2019s next:<\/p>\n\n\n\n<ul>\n<li>Java News Roundup <a href=\"https:\/\/www.infoq.com\/news\/2026\/04\/java-news-roundup-apr06-2026\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">1<\/a>, <a href=\"https:\/\/www.infoq.com\/news\/2026\/04\/java-news-roundup-apr13-2026\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">2<\/a>, <a href=\"https:\/\/www.infoq.com\/news\/2026\/04\/java-news-roundup-apr20-2026\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">3<\/a>, <a href=\"https:\/\/www.infoq.com\/news\/2026\/05\/java-news-roundup-apr27-2026\/\" target=\"_blank\" rel=\"noopener\">4<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2026\/04\/12\/newsletter\/\" target=\"_blank\" rel=\"noopener\">Newsletter: Java 26 Is Now Available | JDK 27 Heads-Ups<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2026\/04\/21\/quality-heads-up\/\" target=\"_blank\" rel=\"noopener\">Quality Outreach Heads-up \u2013 JDK 27: Obsolete Translation Resources Removed<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=Hy-Hf-G0Fp8\" target=\"_blank\" rel=\"noopener\">Update Your JDK, Read More Code, and Talk to Your Users: Interviews From VoxxedDays Amsterdam (#93)<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Java Tutorials and Tips<\/h2>\n\n\n\n<p>Steal these tricks:<\/p>\n\n\n\n<ul>\n<li><a href=\"https:\/\/nipafx.dev\/inside-java-newscast-109\" target=\"_blank\" rel=\"noopener\">Analysing Crashed JVMs \u2013 Inside Java Newscast #109<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/foojay.io\/today\/the-javafx-revival\/\" target=\"_blank\" rel=\"noopener\">Oracle\u2019s Java Verified Portfolio and JavaFX: What It Actually Means<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=9h0FEgNYyr8\" target=\"_blank\" rel=\"noopener\">10 Things I Hate About Java by Adele Carpenter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=Jts62hWkRO8\" target=\"_blank\" rel=\"noopener\">Is AI Ruining Java Open Source? \u2013 Andres Almiray | The Marco Show<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/medium.com\/@achrafhasbi\/java-26-updates-you-must-know-7dbbdd489a28\" target=\"_blank\" rel=\"noopener\">Java 26: Updates You Must Know<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/live\/RDNrCz4EiFI\" target=\"_blank\" rel=\"noopener\">Java and Gen AI: JVM Agents With Embabel by Rod Johnson (Spring Creator)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/spring.io\/blog\/2026\/04\/02\/a-bootiful-podcast-ana-maria-mihalceanu\" target=\"_blank\" rel=\"noopener\">A Bootiful Podcast: Java Developer Advocate Ana-Maria Mihalceanu<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/foojay.io\/today\/does-java-really-use-too-much-memory-lets-look-at-the-facts-jeps\/\" target=\"_blank\" rel=\"noopener\">Does Java Really Use Too Much Memory? Let\u2019s Look at the Facts (JEPs)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/foojay.io\/today\/java-native-memory-access-modes\/\" target=\"_blank\" rel=\"noopener\">Thread-Safe Native Memory in Java: VarHandle Access Modes Explained<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2026\/04\/09\/podcast-054\/\" target=\"_blank\" rel=\"noopener\">Episode 54 \u201cHow JDK 26 Improves G1\u2019s Throughput\u201d [AtA]<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/nipafx.dev\/inside-java-newscast-110\" target=\"_blank\" rel=\"noopener\">You Must Avoid Final Field Mutation \u2013 Inside Java Newscast #110<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2026\/04\/19\/generics-optimization\/\" target=\"_blank\" rel=\"noopener\">How the JVM Optimizes Generic Code<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/4comprehension.com\/enum-map-serialization\/\" target=\"_blank\" rel=\"noopener\">The Curious Case of Enum and Map Serialization<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2026\/04\/27\/avoiding-final-field-mutation\/\" target=\"_blank\" rel=\"noopener\">Avoiding Final Field Mutation<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Kotlin Corner<\/h2>\n\n\n\n<ul>\n<li><a href=\"https:\/\/javapro.io\/2026\/04\/16\/kotlin-kontra-java-part-1-ecosystem\/\" target=\"_blank\" rel=\"noopener\">Kotlin kontra Java \u2013 Part 1 \u2013 Ecosystem<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2026\/04\/kotlin-professional-certificate-by-jetbrains-now-on-linkedin-learning\/\">Kotlin Professional Certificate by JetBrains \u2013 Now on LinkedIn Learning<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.jetbrains.com\/ai\/2026\/04\/introducing-koog-integration-for-spring-ai-smarter-orchestration-for-your-agents\/\">Introducing Koog Integration for Spring AI: Smarter Orchestration for Your Agents<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=Tg3BN36v-wQ\" target=\"_blank\" rel=\"noopener\">Reliable AI Agents Using Domain Modeling With Koog in Java<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">AI&nbsp;<\/h2>\n\n\n\n<p>Cut the hype, test the tools, and boost your flow:&nbsp;<\/p>\n\n\n\n<ul>\n<li><a href=\"https:\/\/foojay.io\/today\/how-we-built-a-java-ai-agent-by-connecting-the-dots-the-ecosystem-already-had\/\" target=\"_blank\" rel=\"noopener\">How We Built a Java AI Agent by Connecting the Dots the Ecosystem Already Had<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.infoq.com\/articles\/ai-agent-transport-layer\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">Stateful Continuation for AI Agents: Why Transport Layers Now Matter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/spring.io\/blog\/2026\/04\/09\/a-bootiful-podcast-ana-mark-kropf\" target=\"_blank\" rel=\"noopener\">A Bootiful Podcast: Mark Kropf on AI Orchestration<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=2mGr7kdstJs\" target=\"_blank\" rel=\"noopener\">Embabel Tools &amp; MCP Servers: Supercharge Your Java AI Agents<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.jetbrains.com\/qodana\/2026\/04\/adversarial-ai-threats\/\">Adversarial AI: Understanding the Threats to Modern AI Systems<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/foojay.io\/today\/why-java-developers-over-trust-ai-dependency-suggestions\/\" target=\"_blank\" rel=\"noopener\">Why Java Developers Over-Trust AI Dependency Suggestions<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.frankel.ch\/agentic-github-workflows\/\" target=\"_blank\" rel=\"noopener\">A GitHub Agentic Workflow<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/blog.pollack.ai\/p\/8a0a3a73-144a-4615-a992-560da556f13c\/\" target=\"_blank\" rel=\"noopener\">ACP Java SDK: Building IDE Agents in Java<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/spring.io\/blog\/2026\/04\/15\/spring-ai-session-management\" target=\"_blank\" rel=\"noopener\">Spring AI Agentic Patterns (Part 7): Session API \u2013 Event-Sourced Short-Term Memory with Context Compaction<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.infoq.com\/articles\/beyond-rag-context-aware\/\" target=\"_blank\" rel=\"noopener\">Beyond RAG: Architecting Context-Aware AI Systems With Spring Boot<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/spring.io\/blog\/2026\/04\/07\/spring-ai-agentic-patterns-6-memory-tools\" target=\"_blank\" rel=\"noopener\">Spring AI Agentic Patterns (Part 6): AutoMemoryTools \u2013 Persistent Agent Memory Across Sessions<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/foojay.io\/today\/best-practices-for-working-with-ai-agents-subagents-skills-and-mcp\/\" target=\"_blank\" rel=\"noopener\">5 Best Practices for Working with AI Agents, Subagents, Skills, and MCP<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/deepfakes-ai\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">Deepfakes, Disinformation, and AI Content Are Taking Over the Internet<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.infoq.com\/articles\/mcp-java-architectural-strategy-llm-integrations\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">MCP in the Java World: Bringing Architectural Strategy to LLM Integrations<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Languages, Frameworks, Libraries, and Technologies<\/h2>\n\n\n\n<p>Explore new tools and technologies, and revisit the old ones:<\/p>\n\n\n\n<ul>\n<li>This Week in Spring <a href=\"https:\/\/spring.io\/blog\/2026\/04\/07\/this-week-in-spring-april-07-2026\" target=\"_blank\" rel=\"noopener\">1<\/a>, <a href=\"https:\/\/spring.io\/blog\/2026\/04\/14\/this-week-in-spring-april-14-2026\" target=\"_blank\" rel=\"noopener\">2<\/a>, <a href=\"https:\/\/spring.io\/blog\/2026\/04\/21\/this-week-in-spring-april-21-2026\" target=\"_blank\" rel=\"noopener\">3<\/a>, <a href=\"https:\/\/spring.io\/blog\/2026\/04\/28\/this-week-in-spring-april-28-2026\" target=\"_blank\" rel=\"noopener\">4<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.infoq.com\/articles\/beyond-rag-context-aware\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">Article: Beyond RAG: Architecting Context-Aware AI Systems With Spring Boot<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/hollycummins.com\/quarkus-ridiculous-things-devoxx-poland\/\" target=\"_blank\" rel=\"noopener\">Six and a Half Ridiculous Things to Do With Quarkus<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.infoq.com\/articles\/spring-team-spring-7-boot-4\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">The Spring Team on Spring Framework 7 and Spring Boot 4<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/spring.io\/blog\/2026\/04\/16\/a-bootiful-podcast-craig-walls\" target=\"_blank\" rel=\"noopener\">A Bootiful Podcast: The Legendary Craig Walls<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/quarkus.io\/blog\/reflection-free-jsckson-serializers\/\" target=\"_blank\" rel=\"noopener\">Enabling Reflection-Free Jackson Serializers by Default<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/dandreamsofcoding.com\/2026\/03\/31\/understanding-performance\/\" target=\"_blank\" rel=\"noopener\">Understanding Performance<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/spring.io\/blog\/2026\/04\/23\/a-bootiful-podcast-venkat-james\" target=\"_blank\" rel=\"noopener\">A Bootiful Podcast: A Bootiful Podcast: Dr. Venkat Subramaniam and James Ward on Intelligent Kotlin and So Much More<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/foojay.io\/today\/the-road-to-docker-official-images-for-java-the-azul-zulu-story\/\" target=\"_blank\" rel=\"noopener\">The Road to Docker Official Images for Java: The Azul Zulu Story<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=cUofXEeCCXo\" target=\"_blank\" rel=\"noopener\">Spring Debugger New Power: Where Should I Click to Demystify Spring Boot Magic?<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Conferences and Events<\/h2>\n\n\n\n<p>Join the crowd online or offline:<\/p>\n\n\n\n<ul>\n<li><a href=\"https:\/\/jax.de\/mainz-en\" target=\"_blank\" rel=\"noopener\">JAX<\/a> \u2013 Mainz, Germany or Online, May 4\u20138<\/li>\n\n\n\n<li><a href=\"https:\/\/www.devoxx.co.uk\" target=\"_blank\" rel=\"noopener\">Devoxx UK<\/a> \u2013 London, United Kingdom, May 6\u20137; JetBrains will have a booth at the event. Also, come and listen to our JetBrains speakers: <a href=\"https:\/\/maritvandijk.com\/\" target=\"_blank\" rel=\"noopener\">Marit van Dijk<\/a>, <a href=\"https:\/\/cheuk.dev\/\" target=\"_blank\" rel=\"noopener\">Cheuk Ting Ho<\/a>, and <a href=\"https:\/\/www.linkedin.com\/in\/vergauwensimon\/\" target=\"_blank\" rel=\"noopener\">Simon Vergauwen<\/a>.\u00a0The Spring documentary will premiere there, followed by a panel with <a href=\"https:\/\/joshlong.com\/\" target=\"_blank\" rel=\"noopener\">Josh Long<\/a>, <a href=\"https:\/\/www.linkedin.com\/in\/noregressions\/\" target=\"_blank\" rel=\"noopener\">Steve Poole<\/a>, and <a href=\"https:\/\/maritvandijk.com\/\" target=\"_blank\" rel=\"noopener\">Marit van Dijk<\/a>.<\/li>\n<\/ul>\n\n\n\n<ul>\n<li><a href=\"https:\/\/2026.geecon.org\" target=\"_blank\" rel=\"noopener\">GeeCon<\/a> \u2013 Krak\u00f3w, Poland, May 14\u201315; <a href=\"https:\/\/maritvandijk.com\/\" target=\"_blank\" rel=\"noopener\">Marit van Dijk<\/a> is speaking and moderating a panel on Java to discuss what excites each of them most about Java in 2026.&nbsp;<\/li>\n\n\n\n<li><a href=\"http:\/\/jalba.scot\" target=\"_blank\" rel=\"noopener\">JAlba<\/a> \u2013 Edinburgh, Scotland, May 14\u201316<\/li>\n\n\n\n<li><a href=\"https:\/\/jnation.pt\" target=\"_blank\" rel=\"noopener\">JNation Conference<\/a> \u2013 Coimbra, Portugal, May 26\u201327; <a href=\"https:\/\/www.linkedin.com\/in\/antonarhipov\/\" target=\"_blank\" rel=\"noopener\">Anton Arhipov<\/a> and <a href=\"https:\/\/maritvandijk.com\/\" target=\"_blank\" rel=\"noopener\">Marit van Dijk<\/a> from JetBrains are the speakers.&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/makeit.si\" target=\"_blank\" rel=\"noopener\">JCON Slovenia<\/a> \u2013 Portoro\u017e, Slovenia, May 27\u201329<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/kotlinconf.com\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" loading=\"lazy\" width=\"1940\" height=\"500\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2026\/05\/image-1.png\" alt=\"\" class=\"wp-image-705191\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Culture and Community<\/h2>\n\n\n\n<p>Where do you stand on these topics?<\/p>\n\n\n\n<ul>\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/panel-positive-culture\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">Panel: Building a Culture That Works<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sive.rs\/balance\" target=\"_blank\" rel=\"noopener\">How to Do What You Love and Make Good Money<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/www.paulgraham.com\/ds.html\" target=\"_blank\" rel=\"noopener\">Do Things That Don\u2019t Scale<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/martinfowler.com\/articles\/reduce-friction-ai\/encoding-team-standards.html\" target=\"_blank\" rel=\"noopener\">Encoding Team Standards<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/blog.scottlogic.com\/2026\/04\/01\/beyond-the-hype-is-ai-taking-fun-out-of-software-development.html\" target=\"_blank\" rel=\"noopener\">Beyond the Hype: Is AI Taking the Fun out of Software Development?<\/a>&nbsp;<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">And Finally\u2026<\/h2>\n\n\n\n<p>One last thing before you close the article. Don\u2019t skip it!<\/p>\n\n\n\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/idea\/2026\/03\/using-spring-data-jpa-with-kotlin\/\">Using Spring Data JPA With Kotlin<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.jetbrains.com\/idea\/2026\/04\/using-spring-data-jdbc-with-kotlin\/\">Using Spring Data JDBC With Kotlin<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.jetbrains.com\/platform\/2026\/04\/speeding-up-interactive-rebase-in-jetbrains-ides\/\">Speeding up Interactive Rebase in JetBrains IDEs<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.jetbrains.com\/platform\/2026\/04\/from-java-to-wayland-a-pixel-s-journey\/\">From Java to Wayland: A Pixel\u2019s Journey<\/a><\/li>\n<\/ul>\n\n\n\n<p>That\u2019s it for today! We\u2019re always collecting ideas for the next Java Annotated Monthly \u2013 send us your suggestions via <a href=\"https:\/\/mail.google.com\/mail\/u\/0\/?fs=1&amp;tf=cm&amp;source=mailto&amp;to=JAM@jetbrains.com\" target=\"_blank\" rel=\"noopener\">email<\/a> or <a href=\"https:\/\/x.com\/intellijidea?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor\" target=\"_blank\">X<\/a> by May 20. And don\u2019t forget to check out our archive of <a href=\"https:\/\/www.jetbrains.com\/lp\/jam\/\" target=\"_blank\" rel=\"noopener\">past JAM issues<\/a> for any articles you might have missed!<\/p>\n","protected":false},"author":1138,"featured_media":705224,"comment_status":"closed","ping_status":"closed","template":"","categories":[8899,5088,4113,89],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/idea\/705190"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/idea"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/types\/idea"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/users\/1138"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/comments?post=705190"}],"version-history":[{"count":2,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/idea\/705190\/revisions"}],"predecessor-version":[{"id":705247,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/idea\/705190\/revisions\/705247"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media\/705224"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media?parent=705190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/categories?post=705190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/tags?post=705190"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/cross-post-tag?post=705190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}