Practices of Reliable Software Design