If you’re reasoning about the problem, you should write software about which you and other developers can reason. You’ve probably encountered a code base that’s full to the brim with mystery and surprise. Characteristics of reasonable code include clearly expressed intent, limited side effects, neatly separated concerns, and unambiguous naming. When you write your code this way, it’s easier to comprehend the code base—you don’t spend any time confused about what’s happening. Reasonable code also tends to be simple.