title: Strategies for multithreaded application
body: <p>I might inherit a somewhat complex multithreaded application, which currently has several files with 2+k loc, lots of global variables accessed from everywhere and other practices that I would consider quite smelly.</p>
  
  <p>Before I start adding new features with the current patterns, I'd like to try and see if I can make the basic architecture of the application better. Here's a short description :</p>
  
  <ul>
  <li>App has in memory lists of data, listA, listB</li>
  <li>App has local copy of the data (for offline functionality) dataFileA, dataFileB</li>
  <li>App has threads tA1, tB1 which update dirty data from client to server</li>
  <li>Threads tA2, tB2 update dirty  data from server to client</li>
  <li>Threads tA3, tB3 update dirty  data from in memory lists to local files</li>
  </ul>
  
  <p>I'm kinda trouble on what different patterns, strategies, programming practices etc I should look into in order to have the knowledge to make the best decisions on this.</p>
  
  <p>Here's some goals I've invented for myself:</p>
  
  <ol>
  <li>Keep the app as stable as possible </li>
  <li>Make it easy for Generic Intern to add new features (big no-no to 50 lines of boilerplate code in each new EditRecordX.cs )</li>
  <li>Reduce complexity</li>
  </ol>
  
  <p>Thanks for any keywords or other tips which could help me on this project.</p>