title: How do you plan an application's architecture before writing any code?
body: <p>One thing I struggle with is planning an application's architecture before writing any code.</p>
  
  <p>I don't mean gathering requirements to narrow in on what the application needs to do, but rather effectively thinking about a good way to lay out the overall class, data and flow structures, and iterating those thoughts so that I have a credible plan of action in mind before even opening the IDE. At the moment it is all to easy to just open the IDE, create a blank project, start writing bits and bobs and let the design 'grow out' from there.</p>
  
  <p>I gather UML is one way to do this but I have no experience with it so it seems kind of nebulous.</p>
  
  <p>How do <strong>you</strong> plan an application's architecture before writing any code? If UML is the way to go, can you recommend a concise and practical introduction for a developer of smallish applications?</p>
  
  <p>I appreciate your input.</p>