 <p>The actual number of types that end up in one particular package is not that important. It is how you arrive at your package structure.</p> <p>Things like abstraction ("what" instead of "how", essentially "public" API), coupling (the degree of how dependent a package is on other packages) and cohesion (how interrelated is the functionality in one package) are more important.</p> <p>Some guidelines for package design (mostly from <a href="http://butunclebob.com/" rel="nofollow noreferrer">Uncle Bob</a>) are for example:</p> <ul> <li>Packages should form reusable and releasable modules</li> <li>Packages should be focussed for good reusability</li> <li>Avoid cyclic dependencies between packages</li> <li>Packages should depend only on packages that change less often</li> <li>The abstraction of a package should be in proportion to how often it changes</li> </ul> <p>Do not try to flesh out an entire package structure from scratch (You Are Not Going To Need It). Instead let it evolve and refactor often. Look at the <code>import</code> section of your Java sources for inspiration on moving types around. Don't be distracted by packages that contain only one or a few types.</p>