I had learned how to make OOP programs. I thought I knew how to use it. I continued to still encounter many problems with maintenance, enhancements and new features. I was differently missing something important. I was following all rules, I had read many books and was following there examples, so what was the problem. Design Patterns have started to shown me what I didn't and things I maybe still don't know (I hope, I love a better way). I think itâââ‰â¢s much like the difference between me and a painter. We both know how to use a brush, but the painter know how and why to use the brush differently for different situations. I am reading "Design Patterns Explained, A New Perspective on Object Oriented Design" by Alan Shalloway and James R. Trott. This is a great book for learning Design Patterns, it's not a collection of design patterns. This book is all about epiphanies, showing you how to think about OOP. After a few ahhas I began see a better way. I wish I had known this book existed when I was learning OOP.