I'm looking for SAP standard guidelines on standard source code enhancement. There's a lot of ways to enhance source codes like exits, BADI (classic and kernel), BTE, explicit and implicit enhancement. Is there any standard documentation about guidelines on which approach should be used or which approach should be considered first over the other? Key considerations are maintainability, SAP support and if there will be any impact if support pack/upgrade implementations occur.