10 Software Design Principles to Live By (as an ex-Google programmer)