Today I ran into an issue with SPWebConfigModification.

SPWebConfigModification can be used to make changes to SharePoint’s web.config. The advantage of using SPWebConfigModification - instead of manually changing web.config files on each server - is that changes are applied automatically to each Web Frontend Server (WFE) in the farm.

Internally SharePoint is holding a collection of modifications (a collection of SPWebConfigModification) that should be applied to the web.config File. Once a modification failed, this particular instance of SPWebConfigModification may resist within the collection. Therefore you should always clear the collection directly before staging your modifications on an instance of SPWebApplication.

The snippet below demonstrates it, right after receiving the webApp, WebConfigModifications.Clear() is invoked:

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    var webApp = (SPWebApplication)properties.Feature.Parent;
    webApp.WebConfigModifications.Clear();
    var myModification = new SPWebConfigModification("mode", "system.web/customErrors")
    {
            Owner = properties.Feature.DefinitionId.ToString(),
            Sequence = 0,
            Type = SPWebConfigModification.SPWebConfigModificationType.EnsureAttribute,
            Value = "Off"
    };
    webApp.WebConfigModifications.Add(myModification);
    webApp.Update();
}

Happy SharePoint’ing