I've just finished compiling a list of places where we duplicate information. It struck me that software engineering is like any other engineering, you can't have it all. You can't design a car that is fast, cheap and reliable. You can pick any two of the three and design a car to fit those criteria.
In my previous job in an electronics firm the engineers had to explain to the management why we couldn't produce products in a short space of time, that were powerful and yet cheap. "Pick any two", we'd say, "and will manage those".
In our information systems we'd like them to be integrated, handle complicated information and be easy to update. One of the places where we duplicate information is where we've previously chosen integrated and complicated whilst having to put up with not easy to update. However the ease of update is has become more important so what we've sacrificed instead is the integration - so the data is partly duplicated in a custom system that handles the complicated data nicely.
In another place we have data entered by hand which exists elsewhere in a spreadsheet, so we can do a quick mail merge to get the data out in several ways. In that case we've sacrificed integration because the effort to type it in was easier than the gymnastics in getting the data out in those several ways.
Fortunately the list of duplicated data is quite short because the data is mostly fairly simple and so can live in the integrated system (Raiser's Edge).