@Deprecated Deadlock

“Suche nach Ruhe, aber durch das Gleichgewicht, nicht durch den Stillstand deiner Tätigkeit.”

Friedrich Schiller

Beim Aktualisieren von Bibliotheken finden sich immer wieder Methoden, die nicht mehr zeitgemäß sind. Denn häufig ermöglichen neuere Ansätze kompakteren, einfacheren oder eleganteren Code.

Um den Nutzern der Bibliothek das Leben nicht zu erschweren, werden solche Methoden als veraltet (@Deprecated) markiert. Damit beginnt eine Gnadenfrist in der die Nutzer ihren eigenen Code auf die neuen Alternativen umbauen müssen. Diese Frist endet, wenn die Entwickler der Bibliothek die veralteten Methoden löscht. Natürlich können Projekte auf älteren Versionen der Bibliothek verweilen, aber neue Features der Bibliothek sind dann nicht zugänglich.

Obwohl dieser Mechanismus recht einfach ist, bietet er auch seine Fallstricke. Lästig ist es beispielsweise, wenn der Entwickler der Bibliothek dem Nutzer keine alternative Implementierung vorschlägt. Dann muss der Nutzer entweder viel Mühe in das Refactoring investieren oder er unterlässt fahrlässig die Aktualisierung. Ärgerlich sind auch Bibliotheken, die häufig Methoden veralten lassen. Dann sind die Nutzer regelmäßig mit Umbauten der eigenen Anwendung beschäftigt.

In manchen Projekten finden sich Bibliotheken, in denen veraltete Methoden zu finden sind, die schon vor Jahren mit @Deprecated markiert wurden. Gemeinsam ist solchen Bibliotheken ihre Existenz als firmeninterne Eigenentwicklung. Obwohl vermutlich ein Großteil der Bibliothek nicht genutzt wird, unterbleibt es den alten Code zu löschen.

Problematisch an solchen Bibliotheken ist der hohen Anteil an unnötigen Code, der verwaltet werden will. Ursache an diesem Zustand ist ein falsches Machtverhältnis. @Deprecated funktioniert, wenn die Nutzer wissen, dass ihnen Methoden entrissen werden können. Wenn dem Entwickler der Bibliothek aber die Entscheidung nicht obliegt oder es Interessenskonflikte gibt, dann werden solche Methoden nicht angerührt. Bei den Interessenskonflikten handelt es sich immer um die Pflege von Legacy Software oder einer etablierten Anwendung. Etabliert bedeutet hier in der Regel, dass jemanden diese Legacy Software ans Herz gewachsen ist.

Legacy Software zu verändern ist heikel und zeitraubend, daher möchten Software Entwickler ungern Änderungen vornehmen, die in ihren Augen momentan unnötig sind. Leider veraltet die Software durch diese Haltung nur noch schneller.

Mit @Deprecated Deadlock ist die Situation gemeint, in der Entwickler gehindert werden, veraltete Methoden zu löschen. Veraltete Methoden, die mit @Deprecated markiert sind und solche, die es nicht sind. Sobald die Entwickler nämlich bemerken, dass @Deprecated nicht funktioniert oder den Widerstand der Kollegen spüren, hören sie auf mit dem sinnvollen Aussieben veralteter Methoden. Dann sind diese zwar noch immer da, aber sie sind schwerer zu finden. Die Code-Pflege wird so ad absurdum geführt.

Um diese Situation zu beenden, gibt es ein sicheres Mittel. Den veralteten Code löschen und die Nutzer überzeugen oder zwingen, die neuen Möglichkeiten zu nutzen!