In Principles of Package Design Matthias Noback tells you everything about designing software components, also known as packages. In the first part you'll revisit the SOLID principles of class design. They will help you prepare your classes for use in packages. The second part covers the important, yet lesser known package design principles. When you've finished this book, you'll be ready to design packages that have high cohesion, low coupling and are at the same time user- and maintainer-friendly.
If you are not new to the Object-Oriented design, the first 5 sections will not interesting for you. But the rest of the book is full of good advice (and reminders) for creating good packages (Or any other name that you give to that concept). I think reading this book (actually the parts after chapter 5) is good for all people creating softwares.
Although it’s not one of the best-selling books, yet I believe it shortens the learning curve for every software engineer. What’s great about this book is that it creates a need for the knowledge before it introduces it to the reader. It tackles a set of topics that every SDE encounters on everyday work, and it gives a great list of examples and a very good referencing along the way.