Problem solving like an engineer, in a nutshell

Here are some high level principles of problem solving that are repeated in almost every engineering undergrad class. I personally think these guidelines for problem solving are useful outside of engineering as well. None of these guidelines apply in all situations.

  • Approach problems quantitatively. Many important design decisions should be justified by quantifiable metrics.
  • Strive for simplicity during design and implementation. For large and complex systems, there are several ways engineers can manage complexity, including creating layers of abstraction, breaking projects up into smaller modules, and linearizing models.
  • Use intuition and heuristics to reason with large, complex, and non-linear systems when simple models break down. Developing intuition requires practice, experience, and a solid understanding of first principles.
  • Understand the first principles behind the problem at hand.
  • Experiment and observe.
  • Balance the trade-offs between non-trivial decisions. Engineers will often consider multiple constraints, such as design complexity, speed, power, and — most importantly — financial cost.
  • Identify and address the bottleneck of a performance constraint when fine-tuning a particular quality.
  • The devil is in the details.