42
BenutzMichRichtig.jar Bewusster Umgang mit 3rd Party Libraries HARM GNOYKE, EMBARC Berlin Expert Days 17.09.2015 0

BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

  • Upload
    buikiet

  • View
    220

  • Download
    0

Embed Size (px)

Citation preview

Page 1: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

BenutzMichRichtig.jar

Bewusster Umgang mit 3rd Party Libraries

HARM GNOYKE, EMBARC

Berlin Expert Days

17.09.2015

0

Page 2: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

2 3rd Party Libraries embarc.de

BenutzMichRichtig.jar

Der Vortrag zeigt den Umgang mit Fremdbibliotheken (3rd Party Libraries) und die Fallstricke, die beim Einsatz lauern. Häufig wird in Projekten nur der kurzfristige Nutzen beim Einsatz einer Library betrachtet: Die betreffende Funktionalität braucht nicht selbst entwickelt und gepflegt werden. Das freut natürlich den Projektleiter: Das so freigewordene Budget kann anderweitig verplant werden. Doch hinter solch einem leichtfertigen Einsatz verbergen sich auch Kosten und Risiken, die die Weiterentwicklung des Projektes bremsen, technologischen Fortschritt behindern und im Extremfall das Projekt in eine Sackgasse bringen können. Diese Session beleuchtet den nachhaltigen Umgang mit 3rd Party Libraries in Projekten von verschiedenen Seiten. Es gibt Orientierung bei der Auswahl der Bibliotheken und beschreibt verschiedene Strategien zum anschließenden Einsatz. Wie geht man mit unterschiedlichen Releasezyklen um? Wie mit unterschiedlichen Lizenzen? Wie vermeidet man Risiken und minimiert die Kosten bei Fehlentscheidungen? Tipps für den Umgang mit Herstellern (ob Open Source oder kommerziell) gespeist aus Erfahrungen in Projekten mit bis zu 70 Entwicklern runden den Vortrag ab und geben den Zuhörern damit Sicherheit bei den nächsten Überlegungen zu 3rd Party Libraries.

Bewusster Umgang mit 3rd Party Libraries

Page 3: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

3 3rd Party Libraries embarc.de

Harm Gnoyke

n  Softwareentwickler + -architekt bei embarc in Hamburg n  Vorher Hamburg Süd, sd&m (heute Capgemini)

Schwerpunkte: n  Softwaredesign n  Softwarearchitektur (Bewertung, Methodik) n  Java Technologien

[email protected]

@HarmGnoyke

xing.to/HarmG

Page 4: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

4 3rd Party Libraries embarc.de

Was sind 3rd Party Libraries?

In Software-Projekten gibt es mindestens zwei Parteien:   Auftraggeber   Auftragnehmer

Teile einer Software, die von einer “projektfremden” Partei bereitgestellt werden, kommen von einer 3rd Party:   Produkthersteller   Open Source   Anderes Projektteam

aus dem eigenen Unternehmen

Page 5: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

5 3rd Party Libraries embarc.de

Abgrenzung Library vs. Framework

Eigene Software

Library

Abhängigkeit durch Aufruf

Framework

Eigene Software

Abhängigkeiten durch

Vererbung oder Aufruf

Hollywood-Prinzip: “Don’t call us, we call you”

Page 6: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

6 3rd Party Libraries embarc.de

1 Not Invented Here

2 Wie entscheide ich mich?

3 Rund um die Entscheidung

4 Im laufenden Projekt

5 Fazit und Ausblick

Agenda

1

Page 7: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

7 3rd Party Libraries embarc.de

Not Invented Here “The slowness of one section of the world about adopting the valuable ideas of another section of it is a curious thing and unaccountable. This form of stupidity is confined to no community, to no nation; it is universal. The fact is the human race is not only slow about borrowing valuable ideas - it sometimes persists in not borrowing them at all.”

è Some National Stupidities, Mark Twain;

Europe and Elsewhere, New York 1923

Page 8: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

8 3rd Party Libraries embarc.de

Die offensichtlichen Argumente

Buy Make 3rd Party Library einbinden n  Zeit sparen n  Verantwortung

verlagern n  Komplexität

reduzieren

Langfristige Auswirkungen auf die Qualität

Selbst bauen n  Mehr Zeit

nötig n  Weniger

Abhängigkeiten n  Know How

direkt im Projekt

Page 9: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

9 3rd Party Libraries embarc.de

1 Not Invented Here

2 Wie entscheide ich mich?

3 Rund um die Entscheidung

4 Im laufenden Projekt

5 Fazit und Ausblick

Agenda

2

Page 10: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

10 3rd Party Libraries embarc.de

Motivationsfaktor Zeit reicht nicht Einbinden einer Library ist toll:

n  Man bekommt Funktionalität geschenkt!

n  Man spart Entwicklungszeit für andere Features!

Doch es gibt auch nachgelagerte Kosten:

n  Fehlerbehebung und Updates der genutzten Bibliothek

n  Bei kommerziellen Produkten Wartungsverträge (Gefahr des Vendor Lock-In)

n  Auswirkungen auf Qualität der eigenen Software die wichtigsten Merkmale nach ISO 25001: Wartbarkeit, Performance, Sicherheit, Zuverlässigkeit, Kompatibilität

Page 11: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

11 3rd Party Libraries embarc.de

Was sind sinnvolle Kriterien? n  Einsatzzweck n  Aktualität n  Änderbarkeit n  Verständlichkeit n  Aufwand n  Verbreitung n  Interoperabilität n  Kapselungsmöglichkeit n  Tests n  Branching n  Wichtigkeit für Projekt n  ...

Kriterien für unterschiedliche Kontexte anpassen!

Page 12: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

12 3rd Party Libraries embarc.de

1 Not Invented Here

2 Wie entscheide ich mich?

3 Rund um die Entscheidung

4 Im laufenden Projekt

5 Fazit und Ausblick

Agenda

3

Page 13: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

13 3rd Party Libraries embarc.de

Entscheidung hinauszögern

Page 14: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

14 3rd Party Libraries embarc.de

Die Gretchenfrage

Kann ich die benötigte Funktionalität vielleicht doch selber bauen?

Darüber entscheiden:

n  Umfang

n  Komplexität

n  Zeitplan

Orientierung bekomme ich eventuell von existierenden Bibliotheken

Page 15: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

15 3rd Party Libraries embarc.de

Qualität einer Library einschätzen

Community n  Wie viele Entwickler arbeiten (aktiv) mit? n  Wie schnell werden Fragen z.B. auf Mailing Listen beantwortet?

Verbreitung

n  Wird es von anderen Projekten eingesetzt? n  Gibt es Erfahrungsberichte von anderen Projekten / Bücher /

Blogposts darüber?

Release Zyklus

n  Wie häufig gibt es Releases/Patches? n  Passt das zum eigenen Release Zyklus?

Page 16: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

16 3rd Party Libraries embarc.de

Qualität einer Library einschätzen

Test n  Gibt es für die Library ausreichend Unit Tests? n  Wird der eigene Anwendungsfall gut getestet?

Aktualität

n  Wann wurde das letzte Release veröffentlicht?

Integration

n  Bringt die Library noch andere Deployment-Artefakte mit? (z.B. DB-Tabellen)

n Wie passt es zu anderen Lösungen in der Anwendung?

Page 17: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

17 3rd Party Libraries embarc.de

Einsatzzweck im Überblick behalten

Übersicht über genutzte 3rd Party Libraries n  Hilft den Zweck einer Library festzuhalten n  Erspart Redundanzen n  Kann kontinuierlich als Nachschlagewerk genutzt

werden

Festgehaltene Attribute können variieren n  Versionsnummern sind besser in der Versionskontrolle

aufgehoben

Page 18: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

18 3rd Party Libraries embarc.de

Adapter und Façade Adapter: Verbindung zweier bestehender Interfaces

Façade: Vereinfachtes Interface

In der Folge wird Wrapper als Oberbegriff für beide Muster gewählt.

Page 19: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

19 3rd Party Libraries embarc.de

Wann lohnt sich das? Wann nicht? Änderungen in der Library isolieren von der eigenen Software

In den meisten Fällen kann die Reaktion auf eine Änderung der Library im Wrapper erfolgen und schlägt nicht durch

Gut bei starker Verbreitung von Library-Aufrufen in der Software

Komplexe Library, die der Großteil der Entwickler nicht lernen soll Nur wenige Entwickler arbeiten am Wrapper Vereinfachtes Interface für den Rest

Standard APIs oder weit verbreitete Libraries und Frameworks Wrapper verbirgt die Standard API Kenntnisse der Libraries sind sowieso da Frameworks <> Libraries, Wrapper sehr aufwändig oder unmöglich

Page 20: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

20 3rd Party Libraries embarc.de

Dokumenterzeugung mit OpenOffice OpenOffice lässt sich aus Java mit der UNO API steuern.

Auszug aus einem Code Beispiel zum Einbinden einer Grafik:

// Querying for the interface XMultiServiceFactory on the XTextDocumentXMultiServiceFactory xMSFDoc = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, xTextDoc);

// Creating the service GraphicObjectObject oGraphic = xMSFDoc.createInstance( "com.sun.star.text.TextGraphicObject");

// Querying for the interface XTextContent on the GraphicObjectXTextContent xTextContent = (XTextContent) UnoRuntime.queryInterface( XTextContent.class, oGraphic);// Mehr Code...

https://wiki.openoffice.org/wiki/API/Samples/Java/Writer/GraphicsInserter

Page 21: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

21 3rd Party Libraries embarc.de

Eine Erleichterung NOA (Nice Office Access, Achtung: alt!)

Map<String, String> replacements = new HashMap<String, String>();replacements.put("SearchItem1", "ReplaceItem1");replacements.put("SearchItem2", "ReplaceItem2");

for (String searchString : replacements.keySet()) { // replace all keywords by their respective keyValues // noa does not seem to support replacements(XReplaceable), so lets initiate a // search and replace the occurences individually SearchDescriptor searchDescriptor = new SearchDescriptor(searchString); searchDescriptor.setIsCaseSensitive(true);

ISearchResult searchResult = this.parentWizard.getDocument().getSearchService().findAll(searchDescriptor);

if(!searchResult.isEmpty()) {//...and now select the resultList<ITextRange> textRanges = Arrays.asList(searchResult.getTextRanges());for (ITextRange textRange : textRanges) {

textRange.setText(replacements.get(searchString));}

}}

ITextRange ist ein Interface aus NOA, XTextRange wäre das UNO-Pendant.

Page 22: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

22 3rd Party Libraries embarc.de

Doppelt hält besser Benötigte Standardfunktionalitäten für das Projekt:

n  Gültigkeitsprüfung eines Templates gegen eine Liste von Platzhaltern

n  Ersetzen von Platzhaltern mit Nutzdaten

n  Erzeugung von PDFs zum Versand an Kunden

werden von einem Wrapper bereitgestellt, der noch vor NOA hängt:

Page 23: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

23 3rd Party Libraries embarc.de

Im Dilemma Beispielanforderung: PDF-Generierung

Apache FOP •  Bessere Layout-

Möglichkeiten •  Weitere Output-Formate

•  Formatting Objects als neue Technologie

•  Hoher Speicherbedarf

iText

•  Schnelle Verarbeitung (auch für große Dokumente)

•  Dokumenterzeugung im Java Code

•  Schönes Layout aufwändiger

•  Lizenz nötig für neue Version (>5.0) oder Nutzung von neuem Fork https://github.com/ymasory/iText-4.2.0/network

Page 24: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

24 3rd Party Libraries embarc.de

Die Ausnahmebehandlung …man nimmt mehrere Libraries. Aber das ist mit Zusatzkosten verbunden!

Kombination aus beiden

•  Library kann passend zum Szenario gewählt werden

•  Für Aufrufer transparent hinter einem Interface zu verbergen

2 Technologien zu •  Lernen, •  Warten, •  Aktualisieren

Page 25: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

25 3rd Party Libraries embarc.de

Nicht nervös werden… … wenn sich nach der Entscheidung Alternativen auftun.

Zum Beispiel durch

n  Neue Versionen n  Neue Bibliotheken

Welchen Mehrwert hätte die Alternative gegenüber der getroffenen Entscheidung?

Wie viel Aufwand ist schon verwendet?

Was würde die Alternative kosten?

Auf Veränderung der Entscheidung vorbereiten!

Page 26: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

26 3rd Party Libraries embarc.de

1 Not Invented Here

2 Wie entscheide ich mich?

3 Rund um die Entscheidung

4 Im laufenden Projekt

5 Fazit und Ausblick

Agenda

4

Page 27: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

27 3rd Party Libraries embarc.de

Verantwortung für Fixes verschoben

Page 28: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

28 3rd Party Libraries embarc.de

Wie besorge ich mir Fixes? (1/2) Kommerzielle Software

n  Kontakt zum Hersteller besorgen n  SLAs beachten n  Isoliertes Beispiel vorbereiten

n  Showcase nutzen n  Eigene Anwendung strippen

Ab hier warten…

Kritikalität angemessen melden!

n  Nicht über- oder untertreiben n  So wie man es sich von den Benutzern der eigenen Software

wünscht

Page 29: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

29 3rd Party Libraries embarc.de

Wie besorge ich mir Fixes? (2/2) Open Source Software

n  Kontakt zur Community suchen (Bug-Tracker, Mailing List, etc) n  SLAs gibt es (meistens) nicht ;-) n  Isoliertes Beispiel vorbereiten

n  Showcase nutzen n  Eigene Anwendung strippen

Ab hier warten…

oder selbst aktiv werden

n  Pull Request schon vorbereiten!

Page 30: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

30 3rd Party Libraries embarc.de

Kein Fix in Sicht An Workarounds arbeiten:

n  Gibt es schon ähnliche gemeldete Bugs? n  Workarounds dafür prüfen und evtl. Patches nutzen

n  Gibt es auch funktionale Workarounds? n  Die eigene Funktionalität überprüfen

Sollte ein Workaround gefunden sein, wappnet man sich für das Ankommen des „richtigen“ Fixes

n  Workaround dokumentieren n  Empfehlung: Direkt im Source Code markieren inkl. Bug-ID n  Im Backlog (oder auch der Library-Übersicht) festhalten, dass

Nacharbeiten nötig sind

Page 31: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

31 3rd Party Libraries embarc.de

Was tun, wenn der Fix kommt? Möglichst schnell einbauen, sowie es der eigene Releasezyklus zulässt.

Kriterien zur Beurteilung:

n  Kritikalität des Fixes für die eigene Anwendung n  Testbarkeit des Fixes

n  im Entwicklertest n  im Benutzertest

n  Isolierte Änderung vs. Release mit mehreren Änderungen n  Beeinflusst die beiden vorherigen Punkte

Page 32: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

32 3rd Party Libraries embarc.de

Open Source…

…kann man auch selbst schnell fixen.

Auf was man dabei achten sollte:

n  Eigene Fixes immer zurückfließen lassen

n  Fremde Fixes kontinuierlich einbauen

Beides sollte möglichst zeitnah geschehen

Page 33: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

33 3rd Party Libraries embarc.de

Sackgasse

Page 34: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

34 3rd Party Libraries embarc.de

Nicht in der Sackgasse landen

Page 35: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

35 3rd Party Libraries embarc.de

Strategien bei der Aktualisierung n  “Everybody freeze” – Niemals aktualisieren

n  unrealistisch, weil sich immer etwas ändert in einer Software

n  „Always update“- Neue Versionen der Library sofort übernehmen

n  das andere Extrem, weil ich nicht immer fremdbestimmte Änderungen machen kann

Die Wahrheit liegt also irgendwo in der Mitte (und ist unterschiedlich je nach Library und Projekt)

n  Risiken beim Update minimieren durch

n  Frühzeitigen Einbau (Vermeiden in später Phase) n  Dedizierte Tests, z.B. Consumer Driven Contracts n  Einsatz von Wrappern

Page 36: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

36 3rd Party Libraries embarc.de

Versionsnummern helfen Semantic Versioning schlägt folgende Änderungen der Versionsnummer vor:

Viele Projekte im Open Source Bereich halten sich schon an dieses Schema.

Auch nutzbar für nur unternehmensintern veröffentlichte Libraries oder fachliche Komponenten

MAJOR MINOR PATCH Inkompatibel Neue oder leicht

veränderte Funktionalität

Bugfixes

Page 37: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

37 3rd Party Libraries embarc.de

1 Not Invented Here

2 Wie entscheide ich mich?

3 Rund um die Entscheidung

4 Im laufenden Projekt

5 Fazit und Ausblick

Agenda

5

Page 38: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

38 3rd Party Libraries embarc.de

Der bewusste Umgang

Page 39: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

39 3rd Party Libraries embarc.de

Der bewusste Umgang

Behalte den Überblick über eingesetzte Libraries

Bei der Entscheidung:

Wäge Alternativen ab

Überlege Dir Kriterien für Deinen Kontext

Nur bei triftigen Gründen

Entscheidungen umstoßen

Im Projekt:

Überlege ob Wrapper sinnvoll sind

Baue Kommunikation mit der 3rd Party auf

Definiere eine Update

Strategie

Page 40: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

40 3rd Party Libraries embarc.de

Entscheidung hinauszögern - LVM

“Triff Entscheidungen so spät wie möglich”

aus „Vorgehensmuster für Softwarearchitektur“ von Stefan Toth, 2. Auflage 2015

Page 41: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

41 3rd Party Libraries embarc.de

Ausstieg aus Not Invented Here

Groupthink fördert Not Invented Here Man kann aber ausbrechen:

n  Keine Präferenzen für eine Entscheidung aus dem Management vorgeben

n  Alle Alternativen berücksichtigen n  Unabhängige Gruppen arbeiten am gleichen Problem n  Mit Meinungen von außerhalb der Gruppe

abgleichen n  „Advocatus Diabolus“ als Rolle vergeben:

n  Nimmt eine Kontra-Perspektive ein n  Fördert Diskussion der Gruppe

Page 42: BenutzMichRichtig - bed-con.orgbed-con.org/2015/files/slides/BenutzMichRichtig.jar.pdf · ... gespeist aus Erfahrungen in ... Map replacements = new HashMap

Vielen Dank. Ich freue mich auf Eure Fragen!

[email protected]

xing.to/HarmG

@HarmGnoyke

DOWNLOAD FOLIEN: http://www.embarc.de/blog/