Maintenance is hard
Is is there reason why in popular view maintenance programming is considered a simple enough task to be assigned to whomever that just comes along? Even if not familiar with the initial development. I mean if you should be the lucky winner of such an assignment you can produce errors in an actual working system. One with a well established business value! What an opportunity to make, not knowingly damage that is likely to be many folds more costly than errors in a system not yet deployed.
Although there is no sense to it typically maintenance work is delegated to an entirely different group having limited contact with original authors! In better cases the problem will be ameliorated by having organized a sort of handover, a great rush to transfer as much knowledge as possible in a ridiculously short time. True you might also get helpful support via email but that is not a good environment for communicating intent.
Just to keep myself humble once in a while I do a simple test: make a change in one of my program written by almost four years ago. Invariably it seems a lot more difficult than I remember it was back than when I originally wrote it despite that I took every effort I was capable of to make it maintainable.
Guess what: in retrospect it you can always find something that you should have done differently. Short term memory will make your best intentions seem inadequate, as its contents slowly fades away. Dependencies considered so natural that you did not even notice them consciously, now are irritating. Classes formerly considered as well defined are fuzzy, comments considered helpful now are cryptic or useless. Consider your self lucky if you have a workable error prevention concept like design by contract or an automatized unit test system. Personally I prefer to have them both. Even with them maintenance is still hard enough to keep at least a few of the original developers assigned to it. How else do they gonna learn from mistakes that they think where not committed.
