In my first years as a self-taught programmer, my main source of information was not books. I read a few, but most of the time, when I needed help, I just looked for a blog post or tried to come up with something myself, often reinventing the wheel in the process.

Obviously, the quality of my programming work suffered, and one day I decided to look for books that could give me a more complete understanding of my subject of interest. After a time, I concluded that I learned much more from books than from any other resource. In this article, I would like to share with you some books I've read in the last few years that have proven extremely relevant to my career as a software developer. 

To make my recommendations easier to follow, I have selected just 12 books, which may be organized into the following 4 categories: Agility, Pragmatism, Software Design, and Software Architecture.

User Stories Applied: For Agile Software Development User Stories Applied: for Agile Software Development, by Mike Cohn: This book is a primer on how to understand, define and write user stories in a way that enables you to successfully finish them within a sprint. This book is a must-read for anyone who works or plans to work with User Stories and Scrum.
Succeeding with Agile: Software Development Using Scrum Succeeding With Agile: Software Development Using Scrum, by Mike Cohn: In this complementary book, the author of User Stories Applied presents a detailed guide to Scrum, complete with all its peculiarities. It's a great resource for those who want to fully understand the Scrum framework as well as how to make it succeed and scale.

Balancing Agility and Discipline: A Guide for the Perplexed
Balancing Agility and Discipline: A Guide for the Perplexed, by Barry Boehm and Richard Turner: This book teaches how to balance traditional practices and agility in big organizations, making possible a less disruptive and more successful Agile transformation.


The Pragmatic Programmer: from Journeyman to Master, by Andy Hunt and Dave Thomas: A classic. This masterpiece from 1999 has aged so well that most of the principles and tips presented in it are still fully relevant today. It's a must-read for every developer. The Pragmatic Programmer: From Journeyman to Master

Clean Code: A Handbook of Agile Software Craftsmanship, by Robert Martin: Similar to The Pragmatic Programmer, Clean Code describes a set of technical skills that will help you to be a better software developer.

Clean Code: A Handbook of Agile Software Craftsmanship
The Clean Coder: A Code of Conduct for Professional Programmers, by Robert Martin: Less famous than The Clean Code, The Clean Coder is not a book about technical skills, but instead a book about soft skills and professional behaviors that will make it easier for you to interact with coworkers and clients in order to have a healthier life and to be a more successful professional. The Clean Coder: A Code of Conduct for Professional Programmers

Software Design

Implementing Domain-Driven Design Implementing Domain-Driven Design, by Vaughn Vernon: 10 years after The Blue Book was published, Vaughn Vernon revisits DDD patterns, including their evolution and an amazing case study that will forever change the way you think about how to structure your domain and service classes in an object-oriented software.
Working Effectively with Legacy Code Working Effectively with Legacy Code, by Michael Feathers: Legacy code is something we encounter every day, and knowing how to deal with it, refactor it, evolve it, test it and build over it is essential. In this book, Michael Feathers teaches us the best way to cope with these nightmares.
The Art of Unit Testing The Art of Unit Testing, by Roy Osherove: There are many books about unit testing out there, and although I really like Growing Object-Oriented Software Guided By Tests, The Art of Unit Testing is, IMHO, the best book to show the value of unit testing without bringing TDD to the table.

Software Architecture

Cloud Design Pattern: Prescriptive Architecture Guidance for Cloud Applications (Microsoft patterns & practices), by Alex Homer et al: Before Microservices became the buzzword it is today, this book introduced us to the most relevant patterns when we think about distributed applications. Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications (Microsoft patterns & practices)
Building Microservices, by Sam Newman: This book presents the concepts we need to understand before even thinking about implementing a Microservice Architecture. It's a must-read for sure. Building Microservices
Spring Microservices in Action, by John Cornell: While Sam Newman introduces us to the theory of Microservices Architectures, this book takes us by the hand and walks us through each aspect of implementation and how to actually build them using the Netflix tools that made their way into Spring Cloud, becoming the standard tools for Java Microservices. Spring Microservices in Action

Because everyone is at a different place in their career, I can't definitively say these are the best books for you to read right now--though I'm sure you will lose nothing by reading them--but they have laid a great foundation for me. Because I learned so much through them, reading technical books is something I will continue doing for the rest of my career.

If you want to check out what I'm reading right now, follow me on, and if you have a book you consider a must-read for every software developer, leave a comment below!

Feature Image: Freepik


Rafael Romão

Rafael Romão is a Software Engineer at Avenue Code. He has studied software development since 1998 and has worked as a software developer since 2002. His main areas of interest are software architecture and design, as well as the development of highly productive teams.

Six Tips for Starting a New Project


Business Analyst 101


The New Hiring Mindset is Development


Safely Working with Multiple Git Providers