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