Here are some advices from my experience.

 - Explore new ideas with the Mathematica frontend. Don't hesitate to use sections and subsections in the frontend to structure your work and experiment various possibilities.
 - When you have instructions that work package them into functions, still in the frontend.
 - Then package them into packages. I do it like explained [here][1]. You can also do it from a notebook.
 - Use Wolfram Workbench. It's really important from my point of view for big projects as having a debugger is very important. Also you can rename variables across multiple packages (files) which is very convenient.
 - Once you already have a project big enough, you can write some functions directly in Workbench.
 - Write unit tests, before or right after writing a new code that works. Workbench handles unit tests.
 - Use code versioning, for example Git with the plugin Egit in Eclipse (that you will use if you use Wolfram Workbench).
 - Reuse, reuse, reuse. Never write twice the same thing.
 - Use the function Echo or this more sophisticated [utility][2] to print values from deep inside your code.


  [1]: http://mathematica.stackexchange.com/a/7478/66
  [2]: http://mathematica.stackexchange.com/q/15134/66