While I think there are better introductions to "first principles thinking" than this post, the idea of "...When I step back and ask what we’re actually trying to do, why it matters, and how the pieces connect, I usually find more ways forward than I expected."
That's an important skill to have.
However, I think sometimes we overvalue thinking from first principles when it isn't warranted. I've seen times in my career where first principles thinking led to a solution that ignored key non-technical constraints. (For example, it would require a full re-architecture of the system and require deferring all feature work for a year. Another example: the proposed solution breaks Conways law in a way that would require a reorg that would break other organizational constraints.)
Sometimes, we need to recognize our constraints. Spend the time to question them when appropriate, but realize that there are other tools that are more appropriate in some cases -- such as anthropological thinking.
I mean that's always been the paradox that good devs need to live in, and I often go backwards and forwards on the scale between technically pure, and straight up problem solving.
Fundamentally software we create exists to solve problems, if bad code solves the problem is it bad code? Counter to that is we are engineers and it's our job to design systems that mean problems can be solved safely and effectively.
Like most things in life the truth lies in the middle
ebiester · · focus · HN ↗
While I think there are better introductions to "first principles thinking" than this post, the idea of "...When I step back and ask what we’re actually trying to do, why it matters, and how the pieces connect, I usually find more ways forward than I expected."
That's an important skill to have.
However, I think sometimes we overvalue thinking from first principles when it isn't warranted. I've seen times in my career where first principles thinking led to a solution that ignored key non-technical constraints. (For example, it would require a full re-architecture of the system and require deferring all feature work for a year. Another example: the proposed solution breaks Conways law in a way that would require a reorg that would break other organizational constraints.)
Sometimes, we need to recognize our constraints. Spend the time to question them when appropriate, but realize that there are other tools that are more appropriate in some cases -- such as anthropological thinking.
hiddenvulkcan · · focus · HN ↗
Fundamentally software we create exists to solve problems, if bad code solves the problem is it bad code? Counter to that is we are engineers and it's our job to design systems that mean problems can be solved safely and effectively.
Like most things in life the truth lies in the middle