software design with python