The Elements of Friendly Software Design