Logo

Critical Thinking

Challenging assumptions and conventional wisdom in software development. These are insights from years of building, breaking, and rebuilding systems.

Mental Models

First Principles Thinking

Break down complex problems to their fundamental truths and build up from there.

Key Questions:

  • What are we actually trying to solve?
  • What assumptions are we making?
  • What would this look like if it were easy?

Second-Order Thinking

Consider not just the immediate consequences, but the consequences of consequences.

Key Questions:

  • Then what happens?
  • Who else will be affected?
  • What will this look like in 2 years?

Inversion

Instead of thinking about how to achieve success, think about how to avoid failure.

Key Questions:

  • What would guarantee failure?
  • What are the anti-patterns?
  • How could this go wrong?

Unconventional Insights

The Cost of Premature Abstraction

Software Architecture

Abstracting too early is more expensive than duplicating code. Wait until you have three concrete implementations before creating an abstraction.

EXAMPLE

Building a 'flexible' authentication system for one use case vs. implementing specific auth flows and abstracting after patterns emerge.

Users Don't Care About Your Tech Stack

Product Thinking

The best technology choice is the one that ships value fastest. Your users care about their problems being solved, not your architectural purity.

EXAMPLE

Choosing boring, proven technology over the latest framework when building a startup MVP.

Complexity is a Debt You Pay Forever

System Design

Every layer of abstraction, every microservice, every tool adds complexity. Choose simplicity unless complexity provides clear, measurable value.

EXAMPLE

Starting with a monolith and extracting services only when you have actual scaling problems, not theoretical ones.

Documentation is a Design Smell

Developer Experience

If your system needs extensive documentation to understand, it's probably too complex. Good design is intuitive.

EXAMPLE

RESTful APIs that follow conventions vs. custom protocols that require lengthy documentation.

"The biggest risk is not taking any risk. In a world that's changing really quickly, the only strategy that is guaranteed to fail is not taking risks."
— On building and iterating