Donnerstag, 24. Mai 2012


Artikel

Februar 2012 | Artikel

Deployment-Abläufe sind ein wichtiges Ziel für Entwickler, aber interessiert das den Kunden?

(Link zum Artikel: http://www.createordie.de/jaxenter/artikel/4352)

Be pragmatic, not dogmatic!

Text: Joachim Arrasz
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
Dogmatismus wie auch Pragmatismus werden oft als Ausrede für verschiedene Unarten innerhalb der Softwareentwicklung genutzt. In dieser Kolumne wollen wir verschiedene Beispiele für beides vorstellen und hoffentlich spannend diskutieren.

Im letzten Teil der Kolumne haben wir die Differenzen zwischen Product Owner / Sponsor und dem Entwicklungsteam bei Refactorings, die keinen direkten Business Value erzeugen, besprochen (auch zur zweiten Kolumne gab es ein Quickvote!). In der neuen Ausgabe wollen wir die Differenzen zwischen Team und PO / Sponsor bei einem anderen, oft sehr heiß diskutierten, technischen Requirement diskutieren. Es geht um die Einhaltung von Test- und Deploymentabläufen während Livegängen.

Noch ein wichtiger Punkt, der unbedingt angemerkt werden muss: Alles, was ich hier schreibe, ist meine persönliche Meinung und spiegelt auch nur diese wieder. Diskussionen sind herzlich willkommen! Falls sich der eine oder andere Kollege angesprochen fühlt, natürlich ist alles frei erfunden und Ähnlichkeiten sind rein zufällig... :-)

"Test", "Stage" oder "Production" ?
Los geht es also nun mit dem dritten Teil der Kolumne. Dieses Mal ist es, meiner Meinung nach, eine spannende Mischung aus technischen und geschäftsrelevanten Themen.

Innerhalb eines von uns seit einigen Jahren betreuten Kundenprojektes wurde nach einigen Auslieferungen und Deployments immer klarer, dass die IT-Infrastruktur wie auch die Auslieferungszyklen für die angeforderte Qualitätssicherung nicht ausreicht. Nach einigen Diskussionen wurde beschlossen, dass wir zukünftig ganz klassische Abläufe "Develop → Test → Stage → Production" installieren werden.

Während der Livegangvorbereitung des nächsten Releases wurde dies einigermaßen eingehalten, und man einigte sich mit dem Kunden darauf, dass die Abnahmen auf der Stage gemacht werden, da er sich wiederum weigerte, Test, Stage und Production exakt gleich auszustatten (Kosten zu hoch). Soweit ist das alles noch kein größeres Problem oder gar ein Showstopper gewesen. Natürlich kam es, wie es meist kommt: Dem Kunden fällt drei Tage vor Livegang und drei Tage nach Abnahme auf dem Stagesystem auf, dass einige Funktionalitäten doch nicht dem Erwarteten entsprechen.

Wie konnte das passieren? Man sparte an Testflankierung, an fachlichen Testprotokollen sowie an Manpower, um das System wirklich auf Herz und Nieren komplett durchzutesten („Soo kompliziert ist das nun ja doch nicht“). Auf die Ansage, dass Entwickler das System nur so gut testen können, wie die Spezifikation geschrieben ist, und die Erfahrung den Entwicklern vielleicht gerade noch hilft, offensichtliche Fehler innerhalb der Domäne zu erkennen, wurde mit einem Schulterzucken reagiert. (Klar ist es eine Aufgabe eines Entwicklers, sich in die Fachlichkeit des Kunden einzuarbeiten und exakte Spezifikationen mit dem Kunden in Kooperation auszuarbeiten!)

Letztlich wurde dem Entwicklerteam am Ende erklärt, dass einfach zuviel Zeit für die verschiedenen Test-Stationen während des Livegangs drauf gingen. Somit konnte man einfach nicht noch ordentlich alle Prozesse durchtesten, man solle doch nicht so stur sein. Es entstand kein größerer Schaden, und auch die Kundenbeziehung selbst wurde nicht allzu sehr unter Spannung gesetzt.

Warum also beschreibe ich dann aktuell dieses Thema? Weil es mir seit Jahren in nahezu allen Projekten, in denen ich arbeite, begegnet!

Meine Meinung zu dieser Kontroverse:
Aus meiner Sicht ist es sehr wichtig, konsequent und stur mit Themen, die die Qualitätssicherung in einem Projekt angehen, umzugehen. Jede kleine Anpassung, jeder kleine Kompromiss kann die Arbeit von Wochen gefährden. Der Kunde erwartet höchste Qualität vom entwickelnden Team, oft jedoch ist er nicht bereit, seinen Anteil zur Qualitätssicherung beizusteuern.

Leider wird hierbei auch immer sehr transparent, wie exakt der Kunde testet, wie es um fachliche Testszenarien bestellt ist, und wie sehr diese im Alltag noch angepasst werden. Das Team der Entwickler hat natürlich letztlich jede Änderung mit der heißen Nadel auf dem Produktivsystem zusammengestrickt. Auch dieses Mal hat es wieder funktioniert, was in letzter Konsequenz eigentlich schade ist: So wurden die Folgen wieder verschleppt, und es gab wenig bis keine Eskalation des Dilemmas. Die Entwickler haben technische Entwicklungsschulden aufgebaut. Jedoch macht es natürlich auch wenig Sinn, sich hier stur zu stellen und dem Kunden dadurch noch mehr zu schaden.

Auch die Retrospektiven, wenn es denn welche gibt, sind aus meiner Sicht hier nur bedingt hilfreich. Sie kommen zu spät, da man die Tage nach dem Livegang natürlich zuerst einmal andere Dinge zu erledigen hat, bzw. vielleicht auch einfach das nächste freie Wochenende benötigt, um die „Akkus wieder aufzuladen“. Jedoch sollten solche Themen zeitnah in kritisch geführten und moderierten Retrospektiven ausgearbeitet werden. Dadurch werden die Argumente klar, und man passt entweder die Zyklen an und bespricht die potentiell niedrigere Qualität bewusst mit dem Kunden - oder aber der Kunde passt seine eigenen Qualitätsanforderungen seiner bereitgestellten Teamstärke und Zeit an.

Letztlich ist ein Livegang, solange es keine Continous-Delivery-Ansätze im Projekt gibt, immer ein Kompromiss zwischen zu erreichender Qualität und der bereitgestellten Zeit für die fachlichen Tester. Natürlich spielen Spezifikationen, Stories und all diese Dinge auch eine Rolle, aus meiner Sicht aber in dieser Phase nicht mehr die tragende. Ich habe es leider noch nie erlebt, dass ich eine Spezifikation oder eine Story erhalten habe, die ich ohne jede Anpassung live nehmen konnte (egal wieviele Zyklen durch Nutzermeetings eine Story hinter sich hatte). Daher kann ich hier nur sehr dogmatisch die Sicht der Entwickler unterstützen und die Sponsoren, Geldgeber und Projektleiter dazu auffordern, sich mehr Gedanken über diese Thematik zu machen!

Ich würde mich sehr über eine anregende Diskussion freuen und verspreche auch, die Sicht potentiell antwortender Sponsoren nicht einfach abzuwiegeln, sondern wirklich zu versuchen, die Argumente aufzunehmen und auch hier eine sachliche Diskussion in den Kommentaren zu liefern :-)

Wenn wir dauernd unsere Abläufe aufgrund der engen Maintenance-Zyklen aufweichen, werden wir nie nachvollziehbar bessere Livegang-Ergebnisse erhalten.

Joachim Arrasz ist als Software und Systemarchitekt in Karlsruhe bei der Synyx GmbH & Co. KG als Leiter der CodeClinic tätig. Darüber hinaus twittert und bloggt er gerne @arrasz.
  1. Entwickler machen Refactorings – auch wenn der Kunde davon nichts sieht!

andere Artikel dieser Serie

Kommentare

Gravatar Niko Schmuck 15.02.2012
um 19:03 Uhr
Besten Dank für die sehr gelungene Schilderung aus dem echten Projektalltag, solche Situationen durfte ich ähnlich auch schon erleben (mit der berühmten Zwickmühle: "in letzter Minute Feuerwehr spielen" vs. Kundenzufriedenheit aufs Spiel setzen).

In meinem aktuellen Projekt läuft es glücklicherweise mit einer recht hohen Qualitätsanforderung zum Sprint Ende recht gut ab. Vorteil bei uns: die alte XP Forderung "on site customer" ist gegeben und der PO nimmt zum Sprintende eine Story nur ab, wenn diese auch erfolgreich auf einem Staging System deployt werden konnte. Mein Tipp wäre also: das gemeinsam im Team und mit dem PO verabschiedete "Definition of Done" (auf Story/Sprint und Release-Level) regelt den Qualitätsmaßstab. Der PO (Proxy oder vom Kunden direkt gestellt) muss zusammen mit einem Quality Engineer im Team kontrollieren, ob diese aufgestellten Tests dann auch ausgeführt werden können. So ist die Hoffnung, dass frühzeitig Hindernisse beseitigt werden und vor dem Live-Gang keine Überraschungen mehr auftreten.
#zitieren
Gravatar Joachim Arrasz 16.02.2012
um 07:01 Uhr
Hallo Niko,

das Scenario war sogar ähnlich aufgestellt, wir hatten während der Sprints Abnahmen des PO mit dem Team während eines Reviews auf der Testumgebung, nicht der Stageumgebung da hier auch andere Menschen gegen testen oder das neue System einfach einmal austesten wollen. Schwer ist es einen Livegang mit der damit verbundenen Maintenance und dem 3d Level Support innerhalb eines Sprints zu realisieren. Daher waren wir während des Livegangs in einer Maintenance Phase und hatten keinen aktuell laufenden Sprints.
Wie könnte man damit umgehen, welche Alternativen gibt es innerhalb eines Sprints einen Livegang mit zu realisieren. Dieser ist kaum schätzbar, aus meiner Sicht zumindest nicht.
#zitieren
Gravatar Niko Schmuck 16.02.2012
um 16:06 Uhr
Hi Achim: einen wichtigen Punkt hattest Du ja schon angesprochen: eine möglichst dem Live System nahe Staging Umgebung. Was die Sprints angeht, verfolgen wir den Plan kontinuierlich weiterzusprinten (in 2 Wochen Iterationen) und die funktionalen Anforderungen Richtung Livegang runterzuschrauben und nicht-funktionale Anforderung in den Stories (inkl. Betriebssupport) entsprechend hoch zu priorisieren, ausserdem formulieren wir auch Stories aus Betriebsmanagement Sicht. Dies hat den Vorteil den Aufwand eines Livegangs allen bewusster zu machen und den Fortschritt in gewohnter Manier am Taskboard transparent mitzutracken. Vor Überraschungen seitens Datenversorgung und Real-World Lastverhalten ist man deswegen natürlich trotzdem nicht gefeit ;-) #zitieren
Gravatar Joachim Arrasz 20.02.2012
um 14:48 Uhr
Hallo Niko,


Was die Sprints angeht, verfolgen wir den Plan kontinuierlich weiterzusprinten (in 2 Wochen Iterationen) und die funktionalen Anforderungen Richtung Livegang runterzuschrauben und nicht-funktionale Anforderung in den Stories (inkl. Betriebssupport) entsprechend hoch zu priorisieren, ausserdem formulieren wir auch Stories aus Betriebsmanagement Sicht. Dies hat den Vorteil den Aufwand eines Livegangs allen bewusster zu machen und den Fortschritt in gewohnter Manier am Taskboard transparent mitzutracken. Vor Überraschungen seitens Datenversorgung und Real-World Lastverhalten ist man deswegen natürlich trotzdem nicht gefeit ;-)


Nun wird es auch für mich spannend, wie schätzt und priorisiert ihr denn dabei Betriebsmanagement? Livegangvorbereitungen und derlei Dinge sind ja noch schätzbar, aber Betriebsmanagement Tasks stelle ich mir doch sehr hart vor, vor allem wenn es um Schätzungen ohne Story Points geht?

Vielen Dank für deinen Input hier, ich finde das Thema hochspannend und aus meiner Sicht wird es viel zu leger behandelt innerhalb von Entwicklungsteams (Da werden sich die Sysadmins schon kümmern....)

Viele Grüße

Achim
#zitieren
Gravatar Roland Steinegger 21.02.2012
um 08:52 Uhr
Moin moin Achim, Hallo zusammen,

guter Artikel mit nettem Praxisbeispiel. Dass die Abläufe vom Kunden (und den Entwicklern?) unterschätzt werden, ist mir auch schon oft untergekommen. Ob dieses Problem überhaupt lösbar ist? :-)


Joachim Arrasz:
Deployment-Abläufe sind ein wichtiges Ziel für Entwickler, aber interessiert das den Kunden?

Sind Deployment-Abläufe für Entwickler wirklich so wichtig?
Den Hauptnutzen hat der Kunde dabei, da er eine hohe Qualität und reibungslose Übergänge auf dem Live-System bekommt. Für Entwickler heißt ein gut geplanter und dogmatischer Ablauf nur, dass es vermutlich keinen Stress bzw. Schelte gibt, was mit ersterem zusammenhängt ;-)
Ich vermute, dass die meisten Entwickler am liebsten nichts mit dem Deployment zu tun hätten? Auch ein zusammenstricken "mit der heißen Nadel [am] Produktivsystem" ist für Entwickler oftmals eher Routine und nur hitzig wegen den drohenden Schelten. Zumal es immer zu Fehler kommen wird, auch weil Menschen am Werk sind, und diese behoben werden müssen. Mit Fehlern meine ich sowohl die Entwicklung nicht nach den wünschen des Kunden, sei es weil falsch spezifiziert oder entwickelt wurde, oder auch, dass bei der Abnahme der Fehler nicht direkt auffiel. Dagegen kann selbst Dogmatismus nicht helfen.

Somit ist aus meiner Sicht ein wichtiger Punkt, dass der Kunde versteht welchen Nutzen dieser von den Abläufe hat. Wie du schreibst, sehen die Auftraggeber meist nicht diesen Zusammenhang, außer vielleicht sie kommen aus dem IT-Bereich. Eventuell lernt ein Kunde das, indem in einer Iteration ein pragmatischer Deployment-Ablauf durchgeführt wird. Aber eventuell merkt er dann auch, dass dieser ausreicht? ;-)
Ein anderer wichtiger Punkt ist mE, dass jeder einsieht, dass es immer zu Fehlern kommen wird und das dabei nicht die deutsche Mentalität durchgreifen darf (Wer ist der Schuldige?), sondern eine Lösung gefunden werden muss. Nach der Deeskalation kann man sich über Verbesserungen Gedanken machen, allerdings ohne Schuldzuweisung... mE steht hier wohl Kommunikation im Vordergrund?

Soviel erstmal aus meiner Sicht


Niko Schmuck:
[...] ausserdem formulieren wir auch Stories aus Betriebsmanagement Sicht.

Bestriebsmanagement-Stories hört sich interessant an. Wie sähe ein Beispiel einer solchen Story aus?
Wenn schon über agile Methoden in dieser Hinsicht geredet wird, sind diese überhaupt für den Betrieb gedacht? Ich könnte mir auch ein 2. Team, eine Sonderrolle in der Iteration, die sich um den Betrieb kümmert, oder eine Story je Fehler bzw. bei schweren Fehlern ein Impediment a la Scrum vorstellen (Impediment, weil es nichts mit der Iteration zu tun hat, von den Entwicklern gelöst werden muss und diese somit vom Arbeiten abhält).

Viele Grüße
Roland
#zitieren
Gravatar Joachim Arrasz 22.02.2012
um 12:46 Uhr
Aus meiner Sicht sind die Abläufe für Entwickler extrem wichtig.
Strukturen helfen zuerst einmal jedem. Prozedere auch. Sicherheitsstufen wie die verschiedenen Systeme auf denen die aktuelle Version der Software erfolgreich getestet werden soll, sind also auch ein Fallschirm für die Entwickler.
"Works on my machine" kennt sicherlich jeder :-)
Ich gebe Dir, Roland, Recht, wenn Du sagst, dass Entwickler so etwas gewohnt sind. Allerdings ist es eine imho sehr schlechte Gewohnheit. Hier bin ich absolut bei Niko.
@Niko: Wie Roland auch schon fragte, wie könnte man so eine Betriebsstory formulieren?
#zitieren
Gravatar Roland Steinegger 23.02.2012
um 19:06 Uhr
Naja, ich würde Continous Integration unabhängig vom Deployment sehen, nichts mit works on my machine :-) Allerdings ist die Frage, ob ein starrer Ablauf nach der Entwickelung eines Features richtung Deployment dem Entwickler so viel nutzt und ob er dies benötigt, das heißt u.a. eine Phase für Tests vom Kunden und "Durchklicken" der Anwendung auf einem Live-System ähnlichen Test-Server. Das fällt meist eh spärlich aus, wie du es auch andeutest.
Wenn der Kunde es hier pragmatischer möchte und die Konsequenzen tragen kann, ebenso Probleme beim Deployment, so kann er hier potentiell Einsparen, allerdings eben mit gewissem Restrisiko (kurzzeitiger Systemausfall, Feature hat Fehler, ...). Wie du sagst, der Auftraggber sollte sich mit der Problematik auseinandersetzen, kann aber mE einen lockereren Ansatz wählen.

Bei den Strukturen halte ich es mit dem Menschenbild C.G. Jung's. Es gibt verschiedene Persönlichkeitsgruppen. Einige brauchen genaue Abläufe, einige brauchen Freiheit; manche Treffen Entscheidungen aus dem Bauch heraus, manche müssen Pro-/Contra-Listen erstellen, etc.. Es gibt immer mehrere richtige Wege.
Manchen helfen die Strukturen, manche werden dadurch eingeschränkt.
#zitieren