Of course, prototyping only + test runs; then moving the code to proper source files (or writing them separately and including them in the notebook). Usually I write everything in the notebook, make sure I catch all the bugs, do some initial test runs to see if I am getting anywhere, then separating code out to individual Python files. The good thing is I can immediately showcase principles and progress to clients by interleaving markdown with the code, throw in some visualization and stats to the mix, add links to arxiv papers and github repos, showcase multiple approaches/models with preliminary accuracy results or heatmap visualizations etc. Then (reasonable) clients are properly informed and can decide which direction they want to move forward etc.