Software Troubleshooting: Process, Tools & Best Practices