Mental Model of Engineering
The Process
Define and Identify the problem.
- Can you define and express the problem in numbers? (e.g. computing speed is so slow it takes more than 10 minutes to do x, this method has 20% more memory usage than the other method etc.)
- Think if that problem is even worth solving.
Analyze the root cause of the problem
- What exactly is the problem? Find the root cause
- Why do you think it’s a problem?
- Find where the bottleneck lies.
- Understand the mechanism (what goes under the hood?): input and output
- Complicated domains and subjects are mostly due to multiple layers of abstraction.
- Keep dividing until you narrow down to the core reason.
Solution Design
- Approach in 1st principle
- Check the latest trials from others
- Read, experiment, debate about it
Implement the design
- Fail fast and iterate a lot. Done is better than perfect
- Make it work first, then refine it
Keep iterating this cycle until you solve it. There is no more secret sauce, only grind.
Axioms
- An individual cannot know every detail about everything but one can go through a lot to find and fix a problem. You don’t need to know everything until you start solving the problem. You get to know along as you try to solve it. In other words, most knowledge should be a byproduct of trial and error, not earned by memorizing things and preparing for school exams.
- Understand what is changeable and what isn’t in the given environment/system. What is changeable becomes a tradeoff/design problem. If you don’t like the given system, break it and start from a more fundamental area. You have two choices: build on top or destroy.