The Software Development Monthly is a monthly blog post that shares interesting or useful content which I consumed during the previous month. This blog post is always published on the eighth day of the month.
Let's begin!
AI
Understanding is the new bottleneck argues that we should understand the code we generate and introduces alternative techniques that we can use instead of reading the raw diff (which might be impossible).
All you need is Claude (🎵Naaah na-na-na-na🎶) shares the results of an experiment where the author tried to vibe code a custom tool for typesetting choral lyrics and ended up with code that works most of the time but is practically impossible to test, debug, or maintain.
I Love Generative AI and Hate the Companies Building It explores the author's complicated relationship with generative AI and the companies that build these tools.
On AI Coding and Its Discontents reveals that a growing number of developers have realized that relying only on AI can lead to critical production bugs, maintenance overhead, and skill degradation. Thus, the author argues that developers must figure out how they can use AI in a sustainable way.
It’s Almost Like You Need an Actual Programmer warns that blindly trusting AI-generated code leads to a messy and buggy codebase because AI agents are trained mostly on average code, and introduces a four-step strategy that helps us to take back control of an AI-generated codebase.
The New Technical Debt explains why the technical debt of AI-generated code is a more serious issue than the debt created by humans, and provides practical tips that help us pay off and avoid technical debt when we are using AI agents.
I'm done using AI explains why an experienced lead developer decided to stop using AI tools even though they sped up his work, and explores how AI changed his thoughts about life, programming, and his career.
AI Writes the Code, But Humans Can't Review It All. Now What? argues that AI agents can generate code much faster than humans can review it, and introduces possible solutions to this problem.
AI handles incidents, engineers lose touch with their systems argues that if AI agents are resolving routine incidents, engineers will struggle to handle complex incidents because they have lost their troubleshooting skills, and explains that one way to solve this problem is to force engineers to train their skills by using an incident simulator.
Why Is Everyone In Tech So Sad? explains why tech workers are realizing that their work is mostly pointless and explores what might happen as a result.
Vibe Coding, Maven, and the Dependencies You Didn’t Choose describes how vibe coding can make our application vulnerable to supply chain attacks.
Citizens Build, Agents Execute, Experts Govern explains that vibe coding a functional application during the weekend isn't the same as building enterprise-grade software.
Software Development
Secure Your APIs: OAuth2 and JWT for Beginners provides an introduction to OAuth2 and JSON web tokens, and describes how we can add authentication and authorization to a Spring Boot REST API by using these two technologies.
To Cache or Not to Cache Virtual Threads documents an experiment where the Quarkus team wanted to see what happens if they cache virtual threads, and reports the results of this experiment.
When Escape Routes Become Toll Roads shares the findings of the 2025 JetBrains State of Developer Ecosystem survey and reveals why developers migrate from one programming language to another.
Solving Gradle metadata and Renovate integration explains why merging Renovate PRs can break a Gradle build and describes how he solved this issue.
Renovate: teaching an old dog new tricks describes how we can synchronize Node and npm versions with Renovate when these versions are configured in multiple places.
The Bedrock of Software Design demonstrates how the correct usage of algebraic data types improves the design of our software.
Agile Is Not Dead. The Agile Industry Might Be argues that AI might have finally killed the agile industry and reminds us that we should still embrace the core values of agile software development.