Book Notes: A philosophy of software design