There are a minority if individuals in IT that are happy to spend their time maintaining often old legacy systems. They've been there for years, indeed in some cases seem part of the furniture. However, it is my opinion that systems maintenance is seen by the majority as a 'dead-end' or non-sexy job within IT. The 'action' is on new IT projects.
But who does what? How do we use those individuals that have been there for years (with their knoweldge of the business and it's culture, built up over a long period of time) and use their knowledge on new projects so that the solution truly is fit-for-purpose?
I respectfully suggest that legacy systems/applications support is a prime area for outsourcing for the following reasons:
- Existing staff will, for the most part, have a much greater sense of job satisfaction working on new solutions (with an ensuant reduced attrition rate), and will not be considered the bottom of the IT 'pile'.
- Existing staff understand your business.
- Legacy systems being replaced require a finite 'hump' in support while the new system is being written (sunsetting).
- The Risk is low, because in the unlikely (?) event that the outsourcer does not deliver, your support capabilities are still available in-house to back-stop
- Good outsourcers of legacy systems application and system support should have a proven track record of managing maintenance activities, and have mature processes and toolsets to bring to the table (with solid references to support).
- Good outsourcers should be able to give you a Fixed Price, against existing SLAs, with savings up to 30% on your in-house costs
- You should only outsource stable, repeatable activities - and legacy systems support is a prime candidate. (Don't outsource to get something fixed - it will cost you a fortune in Change Control.)
Summary: Outsource the non-Sexy IT jobs that are stable and repeatable. Value the knoweldge of your long-standing existing staff and give them the 'sexy stuff'.
I'd like to carry on by discussing Output based Contracts - but that's a topic for aonther day!

Many years ago when outsourcing was in its infancy I was told that there are two types of IT people. Farmers and hunters. The farmers were happy to maintain old systems, keep documentation up to date and follow procedures and the hunters wanted to work on the leading edge developments and didn't really want to get involved in documentation and all the 'boring' stuff. Like life, the IT industry needs both and there are plenty out there who just want a quiet life while there are others who enjoy being in at the deep end. From my experience it is more than a minority that are farmers although many farmers actually want to be hunters to work on the leading edge but don't have the temperament and it shows on the projects they are on. The trick is aligning these people with the right jobs to suit their skills and temperament and accepting there is a place for all types both in the company and in outsourcing.
From my experience companies in general don't spend the time they should to evaluate what should be outsourced and what should be kept in house. You can expand your list to include systems that add little value to the business and are just there to process legislation and/or provide support services as they are prime candidates for outsourcing, Pension, Payroll, Finances, Car management, Benefit management, Expenses etc. are ideal candidates which will require minimal development resource and ideally only support and maintenance. I agree with you that what is best kept in house is business critical systems and business critical knowledge. Development of course can be outsourced as necessary depending on the project. We also need to bear in mind some systems are critical to a business but called legacy because it has not been updated in a long time, perhaps even written in one of the older languages and no-one wants to touch it. These generally are not prime candidates for outsourcing and, ideally, should be rewritten to ensure maintainability before things go wrong.