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