Consider your software broken if:
- You're the only one to understand how it works
- You can't remember what a function does just by reading its name
- You're not using a version control system
- You're not using continuous integration
- You're not continuously monitoring the quality of your code
- You have little or no unit tests
- You have little or no integration tests
- You don't use an issue tracker