Tips for program design