Technical Practices for the Professional Software Developer