# To Avoid Bugs We Have To Fundamentally Change How We Approach Programming I was reminded recently of an e-mail I received from one of our customers. He saw this [tweet](https://twitter.com/Foone/status/1229641258370355200) about a bug that prevented two completely unrelated applications from running side by side. The cause was interesting. Both teams copied a single line of code from [Stack Overflow](https://stackoverflow.com/questions/502303/how-do-i-programmatically-get-the-guid-of-an-application-in-net-2-0/502323#502323) that included a rather silly mistake. I was asked how the development processes we had in place at the time helped avoid similar problems. My answer was that a technical solution is impossible, as the problem essentially lies in human nature. To fix it, we need to fundamentally change the way we approach programming. The technical concepts and practices needed for that change, such as functional programming, [[Test-Driven Development|test-driven development (TDD)]], and [[Behavior-Driven Development|behavior-driven development (BDD)]], are not new but despite their revolutionary potential are also not widespread. The irony is that the widespread use of those new concepts is hindered precisely by the overwhelming complexity those concepts can help alleviate.