When writing guidance algorithms or optimization routines (or reading papers about them), I tend to see best results come from asking these questions. Some of them are redundant, but can apply differently at different scales.
- How can I simplify the formulation?
- Can I get away with a bad initial guess?
- Can I abstract the complicated parts to a look up table and then run a simplified routine over this with a new initial condition?
- What methods will provide a reliable and efficient implementation?
- Is the problem formulation dynamically feasible?
- Can this be fast and or parallelizable?
- Can I separate the problem into disjoint components and solve for each part separately and or in a parallel fashion?
- How do I take advantage of new frames or new mappings to construct a minimal dynamical representation?
- How does this new problem scale?
- How does this problem linearize, how many orders must I include to provide an accurate representation of the nonlinear dynamics?
- Are there ways to relax some constraints of the problem?
- What methods will provide the fastest solution? Is it possible to pose the problem in that framework?