As Amibarrett says, difficult without seeing code, however my #1 check for performance is to see how much logging is being done on each stage. If it works, you can go back and enable logging for important stages only. If it makes no substancial difference you can reenable logging across the board, no harm no foul. Makes most difference for processes with lots of loops.
My Experience:
If you haven't done this yet it could make a big difference, my company had two processes both containing lots of loops, we cut down run time of one of them from 3-5 hours down to a few minutes, about 50x faster. The other one went from 3 minutes to just 50 seconds, almost 4x faster.
What To Do:
Try disabling logging for everything except errors.
How to do it:For a single Stage - Right click a stage, go to 'properties', on the bottom left there is an option called 'Stage Logging', default is 'Enabled' which logs everything to your DB, change to 'Errors only'.
For a few at once - click and hold to create a box and select multiple items or shift-click multiple items. Then with the items selected g ot othe 'Edit' tab at the top of the screen and go to the 'Selected Stages' and select 'Log Errors only'.
For literally everything in the process - go to edit in the ribbon, click 'All stages' and select 'Log Errors Only'. Careful with this one though, it is right beside the 'Selected Stages' option and you could end up doign this to everything in error. Probably won't matter but if you've already gone through the entire process and enabled logging for specific stages only you'll be undoing all that work if you save.
Why:
Every time an event is logged, BP bot has to be delayed by a few milliseconds waiting for repsonse from the DB server, if the code is logging the most basic events that only take a fraction of a second to run, your robot might be spending more time waiting for a response from a server than actually doing anything.