در حالت ایده آل، کل مهندسی نرم افزار از تئوری های علم کامپیوتر ساخته می شود، اما واقعیت چیز دیگری است. مهندسین نرم افزار اغلب باید از رهیافت های ذهنی برای توسعه نرم افزار استفاده کنند و احتمالا ایده ای که تا به حال شکل نگرفته را عملی کنند. تئوری های علم کامپیوتر را همیشه نمی توان به مسائل واقعی پیچیده ای اعمال کرد که نیازمند راه حل های نرم افزاری اند.
در واقع مهندسین نرم افزار باید مسائل پیچیده واقعی را با تفکر نرم افزاری مبتنی بر علم کامپیوتر حل کنند. این گونه مسائل واقعی کاملا با تئوری های علم کامپیوتر در تناقض است و در این میان وظیفه مهندسین نرم افزار تحلیل و رفع تناقضات مسئله با علوم کامپیوتری و ایجاد سیستم نرم افزاری مبتنی بر علم کامپیوتر می باشد.
به طور مثال ساخت یک نرم افزار اتوماسیون اداری که قرار است تمامی سیستم های یک سازمان بزرگ از جمله سیستم حسابداری، تولید ، فروش ، انبارداری وغیره را پیاده سازی نماید، نیاز به داشتن دانش مهندسی نرم افزار دارد. چنین سیستمی را نمی توان با تئوری و منطق کامپیوتری پیاده سازی نمود چون این گونه سیستم ها نیاز به تحلیل های تشریحی دارند که با علوم کامپیوتر که فقط قادر با حل مسائل منطقی است کاملا در تضاد می باشد.