&gt; (ymmv)<p>This is probably the most important to remember. Every problem is different. Every situation is different. Good engineering isn&#x27;t just the implementation, but also the design process.<p>For most problems, there is rarely a single &quot;correct&quot; solution. This means decisions about which tools to use should should include maintenance costs, familiarity, and other non-technical criteria. For example, it&#x27;s probably a better idea to be consistent with tooling even if a side project is a great fit for another language&#x2F;framework. Or maybe it&#x27;s worth the cost in your particular situation.<p>In CS we often talk about trade=offs. Should we use the normal trig functions or trade memory for speed and use a lookup table? Should the data be stored in an array or linked list? Should the math be done using int16, int32, int64, or a bignum library? Good design happens when you take the time to consider all of your options, including which tools you will use.