top of page



API Design First with OpenAPI: Generating Kotlin and TypeScript Types from a Single Contract
Starting a new API project often involves juggling multiple technologies and teams. Backend developers build the API, frontend developers consume it, and both sides need to stay in sync. This can lead to mismatches, duplicated effort, and bugs. A Design First approach using OpenAPI offers a clear solution: define the API contract upfront, then generate code for different platforms from that single source of truth. This post explores how to use OpenAPI to generate Kotlin and T
Thalles Vieira
4 de jun.4 min de leitura


Java 11, 17, and 21: Is It Worth Migrating? An Engineering Perspective
A pragmatic look at what actually changed, what matters in practice, and what to do if your team is still running Java 11 in production today. Introduction Migrating Java versions is one of those discussions that always comes back to the table. Someone in the team brings up Java 21, the tech lead mentions Virtual Threads, an architect points out that "if it isn't broken, don't touch it", and the meeting ends with no decision. Three months later, the conversation starts again
Thalles Vieira
13 de mai.8 min de leitura


The Outbox Pattern: Reliable Data Consistency in Microservices with Spring Boot and Kafka
A practical look at how to solve the dual-write problem between your database and your message broker, without falling back on fragile homemade workarounds. Introduction Anyone who has worked with microservices for a while has lived through this nightmare. A service persists something to the database, then publishes an event to Kafka so other services can react to the change. Everything works locally. In production, the broker hiccups for two seconds, the application restarts
Thalles Vieira
6 de mai.6 min de leitura


Clean Architecture Applied to Java APIs
Modern backend systems tend to grow quickly. What starts as a simple API can become a complex system with dozens of services, integrations, and business rules. Without proper structure, it’s common to see projects where: Controllers contain business logic Services grow into massive classes Infrastructure concerns leak into domain logic This is where Clean Architecture becomes extremely valuable. The concept was popularized by Robert C. Martin and focuses on creating systems
Thalles Vieira
12 de mar.3 min de leitura


How to Scale Backend APIs on AWS (Without Losing Sleep at 3 AM)
Scaling backend APIs is one of the most interesting—and sometimes intimidating—challenges in modern software engineering. At the beginning everything works perfectly. Your API runs locally, then you deploy it to production, a few users start using it… and suddenly one day something happens: Traffic spikes. CPU usage goes up. Response times increase. And someone sends the classic Slack message: "The API is slow." If you work as a backend engineer—especially with Java or Kotl
Thalles Vieira
9 de mar.2 min de leitura


REST, GraphQL, and gRPC: What's the Difference?
As a backend developer, I’ve faced countless situations where choosing the right technology for system communication was crucial. Each...
Thalles Vieira
8 de dez. de 20242 min de leitura


Exploring Kotlin Coroutines for Asynchronous Programming
Asynchronous programming is a key technique in modern software development, enabling applications to handle long-running tasks without...
Thalles Vieira
11 de nov. de 20243 min de leitura


Performance Tuning in Java Applications
A well-performing Java application is crucial in both small and large-scale environments. Performance tuning in Java focuses on several...
Thalles Vieira
12 de out. de 20243 min de leitura


Software Architecture: The Foundation of Successful Systems
Software architecture is the backbone that supports any system, from small applications to large-scale platforms. Just as a building...
Thalles Vieira
30 de set. de 20244 min de leitura


Deadlock in Concurrency
Concurrent programming is a powerful tool that allows multiple tasks to be executed simultaneously, increasing the efficiency and...
Thalles Vieira
7 de set. de 20242 min de leitura


Race Conditions in Concurrency
Concurrent programming is a powerful tool that allows the execution of multiple tasks simultaneously, increasing a system's efficiency...
Thalles Vieira
24 de jul. de 20243 min de leitura


Multithreading, Parallelism, and Concurrency
This article is the first in a series on multithreading, concurrency, and parallelism. The goal is to explain and exemplify these...
Thalles Vieira
4 de jul. de 20247 min de leitura


Usability of SOLID Principles with Kotlin - Dependency Inversion Principle: Part 5
We have reached the end of the 5 SOLID principles, and we will address the last one in this article. The Dependency Inversion Principle...
Thalles Vieira
5 de jun. de 20243 min de leitura


Usability of SOLID Principles with Kotlin - Interface Segregation Principle: Part 4
We return to our article, now entering the fourth principle of SOLID, the Interface Segregation Principle. The Interface Segregation...
Thalles Vieira
1 de jun. de 20242 min de leitura


Usability of SOLID Principles with Kotlin - Liskov Substitution Principle: Part 3
Entering the third part of the SOLID article series with Kotlin, we will talk about the Liskov Substitution Principle. The Liskov...
Thalles Vieira
28 de mai. de 20242 min de leitura


Usability of SOLID Principles with Kotlin - Open-Closed Principle: Part 2
Let's continue our article on SOLID with Kotlin. It's time to talk about the second principle, the so-called Open-Closed Principle (OCP)....
Thalles Vieira
23 de mai. de 20242 min de leitura


Usability of SOLID Principles with Kotlin - Single Responsibility Principle: Part 1
The SOLID principles are a set of guidelines that help developers create more understandable, flexible, and maintainable systems. With...
Thalles Vieira
20 de mai. de 20243 min de leitura
bottom of page