I am working on a branch-and-cut algorithm, and I have spent quite some effort into improving the branching decisions that are made by commercial solvers, such as CPLEX and Gurobi. However, it was never successful: the standard branching by Cplex and Gurobi combined with the slight subtleties you can choose (focus lower bound, focus upper bound etc.) were always better than my own custom-made branching rules. My problem does not inherit any symmetry or whatsoever.
Now is that not very surprising, as the folks at CPLEX and Gurobi probably have spend years on researching efficient branching decisions. However, I am quite curious why my custom-made branching rules are never more effective (although they seem very smart!). To that end, I am curious what branching decisions are taken by these commercial solvers. Is there, somewhere, an overview of branching rules used by these solvers?
Edit: Main reason for asking this question is to find some justification to spend hours into designing problem-specific branching rules, or even beter, to quickly be able to decide to not spend time into designing problem-specific branching rules as they would probably not lead to a significant improvement of computational performance.