बग प्रोग्रामिंग की प्रक्रिया में मानवीय पहलुओं की प्रकृति का एक परिणाम हैं। वे विनिर्देशन, डिजाइन, कोडिंग, डेटा प्रविष्टि और प्रलेखन के दौरान एक सॉफ्टवेयर टीम द्वारा की गई चूक या आपसी गलतफहमी से उत्पन्न होती हैं। उदाहरण के लिए: शब्दों की एक सूची को वर्णमाला क्रम में सजाने के लिए एक अपेक्षाकृत साधारण प्रोग्राम बनाने के क्रम में एक डिजाइन यह समझाने में विफल हो सकता है कि किसी शब्द में हाइफन आने की स्थिति में क्या किया जाना चाहिए। संभवतः काल्पनिक डिजाइन को चुनी गयी प्रोग्रामिंग की भाषा में परिवर्तित करते समय कोई व्यक्ति अनजाने में एक ऑफ-बाइ-वन त्रुटि तैयार कर सकता है और इस तरह सूची में अंतिम शब्द को सजाने में असफल रह सकता है। अंत में, इसके परिणाम स्वरूप बने प्रोग्राम को कंप्यूटर में टाइप करते समय वह गलती से एक '<' कर ले सकता है जहां कि एक '>' होना चाहिए, जिसका नतीजा संभवतः शब्दों को विपरीत वर्णमाला क्रम में सजाने के रूप में सामने आ सकता है। किसी कंप्यूटर प्रोग्राम के विभिन्न भागों के बीच अनायास संपर्क से और अधिक जटिल बग उत्पन्न हो सकते हैं। ऐसा अक्सर होता है क्योंकि कंप्यूटर प्रोग्राम जटिल हो सकते हैं--कुछ मामलों में लाखों की संख्या में लंबी लाइनें हो सकती हैं--जिन्हें अक्सर एक काफी लंबे समय में कई लोगों द्वारा प्रोग्राम किया गया हो सकता है, इसलिए ऐसे प्रोग्रामर मानसिक रूप से हर संभव तरीके का पता लगाने में असमर्थ होते हैं कि कौन के भाग संपर्क कर सकते हैं। "रेस कंडीशन" नामक एक अन्य श्रेणी का बग या तो उस समय आता है जब कोई प्रक्रिया एक से अधिक थ्रेड में या दो या दो से अधिक प्रक्रियाओं में एक साथ चल रही होती है और जब कोड के महत्वपूर्ण क्रमों के निष्पादन के बिलकुल सही क्रम को सही तरीके से समकालिक नहीं किया गया होता है।

सॉफ्टवेयर उद्योग ने सॉफ्टवेयर लेखन करते हुए अनजाने में बग को शामिल किये जाने से प्रोग्रामरों को बचाने के तरीके खोजने में काफी प्रयास किया है। इनमें शामिल हैं:







शब्द-व्युत्पत्ति
डीबगिंग
बचाव
प्रभाव