How quickly do you need those 5 callouts per Lead to occur?
If that answer isn't immediately and you could wait a few minutes before doing the callout then a custom queue object could be a useful solution.
It would look roughly like this:
- New Custom Object to represent the Leads that need the callouts to occur
- Replace existing triggers that call the future methods with one trigger that upserts a record into the new custom object with the Lead Id.
- Create Scheduled Job (or jobs) that start a batch job.
- Create a batch job that runs for a query over the custom object. It will find all the Leads that still need to callouts to occur.
- In the batch job execution it performs the callouts. Has the option to flag Leads that are failing certain callouts.
Now you no longer have to worry about causing a massive spike in callouts. Or at the very least you have a mechanism where you can control the callout rate and handle any potential errors.
There will be a number of variations on this depending on how fast you need to records to be processed and how many there will be. For instance, you could try the new Platform Events to publish events when the leads are modified. It might be possible to have some of the external systems subscriber to those events.