Value: Simplicity
  • Simplicity and elegance are different

  • Do the simplest thing that could possibly work (DTSTTCPW)

  • Software is fraught with complexity

    • Every software problem can be solved with another layer of indirection (DNS)

    • Every layer of indirection creates a new software problem

  • You aren't gonna need it (YAGNI)

  • Books are good enough in their own way, but they are a mighty bloodless substitute for life.

    -- Robert Louis Stevenson

Notes:

We strive for elegance in design. It doesn't come easy. Newton's and Maxwell's laws came about only after centuries of research into physics. It's all to easy to think than do. There's no substitute for empericism. XP adopts the "Just do it" philosophy.

When you sit down to solve a problem, try something. Run the code. If it modifies external entities (files, physical media) take the necessary security precautions (backups, secure the area) and try it out. Let experience be your teacher.

Software's mutability introduces its own complexity. We can solve software problems by introducing a layer of an indirection. DNS is a good example of a good indirection layer. DNS is also a good example of the inherent complexity of adding another layer. The problems are technical (how to manage a global database), political (who owns TLDs), and legal (who owns united.com).

Don't plan ahead. This has been the hardest lesson for me to learn. Software's flexibility kills us, because it is all to easy to spend time now on an elegant solution to a problem which we really don't know anything about. We aren't omniscient. Program in the here and now.