&gt;  it&#x27;s getting from what needs to happen to how to decompose into classes&#x2F;methods&#x2F;libraries<p>Perhaps the problem doesn&#x27;t fit into an object oriented solution. You could try learning a functional language and see if you find it fitting better. I struggled for years with OO and was never happy with my solutions. Learning functional was my road to Damascus experience.<p>If you have to go OO, there have been plenty of people who have thought long and hard about how to make OO a suitable solution. Some classic books you may want to consider :<p>- Design patterns : elements of reusable object-oriented software (Gang of four) - there are people who swear by this and turn it into their hammer for which everything becomes a nail.<p>- Patterns of Enterprise Application Architecture (Martin Fowler)<p>- Refactoring: Improving the Design of Existing Code (Martin Fowler and Kent Beck)<p>- Growing Object-Oriented Software, Guided by Tests (Steve Freeman)