It's a non-trivial task to design software for scalability before you know which components will be stressed through increased throughput. However, using a loosely coupled approach provides the flexibility needed to address scalability issues as throughput needs increase - once can then isolate the component that needs to be optimized as throughput increases.
In Amir Shevat's "Designing a Fully Scalable Application," he introduces a series of utilities provided by the MantaRay project which make it easier to distribute the resource-intensive parts of the application to one or more network boxes if necessary - all without code redesign. "...These utilities allow you to write the same code for your application whether it is running in a single JVM or distributed over several computers/JVMs."