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 seventh day of the month.
Let's begin!
AI
Vibe coding is not the same as AI-Assisted engineering explains the difference between vibe coding and AI-assisted engineering and argues that even though vibe coding is great for creating prototypes, we shouldn't use it for writing production code.
Writing Code Was Never The Bottleneck argues that AI hype is based on a misunderstanding, and that's why the AI tools might not help teams to move faster.
Writing Code Is Easy. Reading It Isn’t argues that writing code is the easy part and explains why reading code is much harder than writing (or generating) it.
Why I'm declining your AI generated MR identifies six reasons why the author rejects a merge request (aka a pull request) without reviewing it.
Where's the Shovelware? Why AI Coding Claims Don't Add Up raises an interesting question: if AI helps developers to release code at light speed, why the number of new applications isn't growing exponentially?
Development Speed Is Not a Bottleneck argues that increasing coding speed doesn’t remove the real bottlenecks of product development and highlights the problems we should solve instead.
Why I Fired Google and Gave an AI Chatbot a Shot? is my own blog post which explains why I replaced Google with an AI chatbot.
The quality of AI-assisted software depends on unit of work management argues that if we want to improve the quality of AI generated code, we should divide the solved problem into small chunks and go through these chunks one by one.
Software Development
Postgres for Everything identifies 31 different "problems" which can be solved with PostgreSQL.
CUPID: the back story argues that we shouldn't teach the SOLID principles to new programmers as best practices which must be followed in every situation.
Saying NO is not a free action in the world of software engineering explains why it's so hard to say no and shares seven tips that can make it a bit easier.
How I document production-ready Spring Boot applications explains what the author includes in the README file, describes how the author documents the architecture of his application, and demonstrates how the author documents REST APIs with Spring REST Docs.
I love UUID, I hate UUID explains why UUIDv7 is a better primary key than UUIDv4.
React Won by Default – And It's Killing Frontend Innovation explains why it's a bad thing to choose React without considering other possible frontend frameworks.
Keeping Secrets Out of Logs identifies six reasons why secrets end up in logs, provides 10 solutions to this problem, and describes how we can create a process which ensures (hopefully) that secrets won't end up in our logs.
Why Tests Aren’t Enough (And What Actually Keeps Code Safe) argues that tests cannot replace a gut feeling and provides four tips that help us to get better at noticing problematic code.
How I, a non-developer, read the tutorial you, a developer, wrote for me, a beginner is a funny blog post which gives some food for though to people who publish tutorials on the internet.
Redis is fast - I'll cache in Postgres compares the performance of Redis and Postgres, and explains why it might be better to use Postgres even though Redis is faster.
React State Management in 2025: What You Actually Need identifies four states which are found from a React application, explains when we should use a state management library, compares different state management libraries, and (of course) recommends state management libraries for us.