Hi @ericpgreen,
prep(), bake(), and juice() are only necessary when you are using recipes to pre-process your data. Even then, the tidymodels/workflows framework calls these functions internally when needed, so you don't really need to call these functions manually.
In the example you shared, when rf_workflow is fit using tune_grid(...), internally, the rf_recipe will be prep()'d and juice()'d on the analysis portion of val_set (80% of the 80% training set), the model is then fit, and then the prepared recipe is bake()'d on the assessment set before computing performance metrics. This is all done for you when using workflows.
If you aren't doing recipes preprocessing or resampling/hyperparameter tuning, for example, or if you've done your preprocessing manually you could just use the fit function on a parsnip or workflow object to bypass pre-processing altogether.
Optionally, outside of the parsnip/workflows framework, you can still take advantage of recipes and use prep(), juice(), and bake() manually to pre-process your data and fit models using any package/approach.
I hope this was helpful.