Fighting against complexity in two ways:

  • eliminate complexity by making code simpler and more obvious, for example, complexity can be reduced by eliminating special cases or using identifiers in a function.
  • encapsulate complexity, programmers can work on a system without being exposed to all of its complexity at once by embracing modular design