Stand still and watch the patterns, which by pure chance have been generated: Stains on the wall, or the ashes in a fireplace or the clouds in the sky, or the gravel on the beach, or other things. If you look at them carefully you might discover miraculous inventions. (Leonardo da Vinci)
 

Die 8 Schritte guter Entscheidungen

März 31st, 2010 Leadership| No Comments »

Eine der wichtigsten aber in vielen Fällen vernachlässigte Aufgabe von Führungskräften ist es Entscheidungen zu treffen. Im Recruiting, in der Einführung bestimmter Management Methoden, Businessprozesse oder Softwaresysteme, in  der Budgetverteilung oder aber bei ganz alltäglichen Entscheidungen … immer wieder geht es darum eine Veränderung herbeizuführen deren Implikationen gut durchdacht werden sollten.

Fredmund Malik beschreibt in seinem Buch “Führen, Leisten, Leben” einen sehr einfachen aber umso durchdachteren Prozess, den jede gute Entscheidung durchlaufen sollte. Im grunde basiert dieser Prozess auf 8 aufeinanderfolgende Schritte, von denen allerdings keiner ausgelassen werden sollte, auch nicht bei scheinbar sehr einfachen Entscheidungen oder Nebensächlichkeiten:

  1. Präzise Bestimmung des Problems
  2. Spezifikation der Anforderungen, die die Entscheidung erfüllen muss
  3. Herausarbeiten aller Alternativen
  4. Analyse der Risiken und Implikationen jeder Alternative
  5. Festlegung der Grenzbedingungen
  6. Entschluss selbst
  7. Einbau der Realisierung in die Entscheidung
  8. Etablieren von Feedback, Follow-Up und Follow-Through

Ich möchte kurz auf die einzelnen Schritte eingehen.

1. Präzise Bestimmung des Problems

Es ist wichtig sich bei der Problembestimmung nicht mit Symptomen oder Meinungen zufrieden zu geben. Es geht darum die wahren Ursachen und Tatsachen aufzudecken die eine Entscheidung erfordern. Man sollte sich die wichtige Frage stellen: Worum geht es hier wirklich? Bei der Beantwortung muss man sich Zeit lassen um die Antwort nicht zu schnell und leichtfertig zu geben. Der Grund: Von einem falsch verstandenem Problem kann man nie (oder nur zufällig) zu einer richtigen und nachhaltigen Entscheidung gelangen.

2. Spezifikation der Anforderungen

Hier geht es um die vollständige und präzise Herausarbeitung der Anforderungen und Kriterien denen die zu treffende Entscheidung entsprechen muss. Es ist wichtig die folgende Frage zu beantworten: Worum geht es hier wirklich? Und nicht etwa: Was ist am einfachsten, was am angehmsten, leichtesten oder für mich am besten? Dabei ist geht es aber nicht um den Maximalzustand sondern um den Minimalen Idealzustand. Zwei Prinzipien stecken darin: 1. Die Anforderungen müssen das Minimum beschreiben. Alles was darüber hinaus gilt ist zwar willkommen aber nicht unbedingt benötigt. Und 2. Es geht um den Idealzustand. Kompromisse sollten aussen vor gelassen werden. Man kommt noch früh genug zu Kompromissen.

3. Suche nach Alternativen

Bei der Suche nach Alternativen sollte man zwei gängige Fehler vermeiden:

  1. Mit den ersten, einleuchtenden Alternativen zufrieden geben. Wirksame Leader wissen, dass es immer noch mehr Alternativen gibt und zwingen sich und ihr Mitarbeiter dazu sich nicht sofort zufrieden zu geben, sondern immer weiter zu suchen und den gesamten Horizont zu betrachten.
  2. Die Null Variante, den Status Quo ausschließen. Der heutige Stand ist zwar nicht der beste (deshalb will man ja eine Entscheidung fällen) sollte aber niemals aus dem Optionenraum ausgeschlossen werden.

4. Durchdenken der Risiken und Implikationen jeder Alternative

Dies ist der arbeitsintensivste Schritt. Zunächst gilt es ein Framework zu modellieren bzw. auszuwählen und anschließend umfassend und genau mit objektiven Inhalten zu füllen.

5. Festlegung von Grenzbedingungen

Nachdem man die Informationen zu den einzelnen Alternativen gesammelt und eingeordnet hat gilt es die Integrationsfläche - die Prozesse, Abteilungen, Systeme, Strukturen, Personen etc. - zu analysieren und nach Grenzbedingungen und Ausschlußkriterien zu suchen.

6. Der Entschluss selbst

Man kann nur zu einem Entschluss gelangen, wenn man die ersten 5 Schritte durchlaufen hat. Man muss sich sicher sein, dass weitere Analysen und Studien nicht bringen. Aber: Trotz aller gesammelten Informationen ist es auch ratsam auch auf einen sehr günstigen Berater zu hören: Seine eigene innere Stimme.

7. Realisierung der Entscheidung

Laut Malik ist es 10 Mal schwieriger eine Entscheidung zu realisieren, als den Entschluss zu fassen. Aber: Man kann erst von einem Entschluss sprechen, wenn es sichtbare Ergebnisse gibt. Ohne Ergebnisse hat man lediglich gute Absichten - aber nicht mehr. Deshalb gilt: Die Maßnahmen, die für die Realisierung wichtig sind, sollten festgelegt und aufgeschrieben werden. Aber das Aufschreiben allein reicht nicht. Für jede Maßnahme muss eine Person die Verantwortung tragen, und für die Umsetzung muss es Termine und Deadlines geben. Denn: Am Ende des Tages werden Entschlüsse durch den Terminbezogenen Vollzug von Maßnahmen durch Personen realisiert.

8. Etablierung von Feedback, Follow-Up und Follow-Through

Wenn eine Entscheidung getroffen wurde muss die Person / müssen die Personen, die Owner der Entscheidung sind der Realisierung nachgehen. Personen, die an der Realisierung arbeiten müssen regelmäßiges Feedback über den Gesamtstatus, die Anforderungen, Ergebnisse und Erfahrungen anderer Maßnahmen erhalten. Die Finalisierung bzw. die Erreichung von Ergebnissen muss kontrolliert werden ohne dabei die Verantwortlichkeit der Umsetzer zu unterwandern. Es geht um Koordination, Information und weitere Entscheidungen sobald sich in der Umsetzung Probleme zeigen.


Data becomes Knowledge through Data Exploration.

Juni 23rd, 2009 Uncategorized| No Comments »

Ever heard about Freebase Parallax? Just watch this video and be amazed :)

Freebase Parallax: A new way to browse and explore data from David Huynh on Vimeo.


The Jerk is gone

März 25th, 2009 Communication| 2 Comments »

Leider ist der Eintrag nur auf English verfügbar.


2 Beispiele wie OpenSource die Leistungsfähigkeit eines Entwickler-Teams steigern kann

Februar 23rd, 2009 Development, Open Source| 1 Comment »

Man könnte sagen, dass es prinzipiell zwei Wege gibt, bestimmte komplexe aber unabhängige Teilfunktionalitäten eines Systems zu entwickeln:

  1. Alles selbst entwickeln
  2. freie Frameworks, APIs und SDKs nutzen und zu einem größeren Ganzen zusammenstecken.

Natürlich ist das auch abhängig von der Art der Software, die man entwickelt, für welche Firma man entwickelt und wie die Rahmenbedingungen aussehen. In meinen Erfahrungen zeigte es sich oft so: Man steht vor einen riesigen Aufgabe, der man aufgrund fehlender Resourcen (sei es Wissen, Zeit oder die Teamgröße) als nicht lösbar erachtet. In einigen Fällen wird man diese Aufgabe komplett ablehnen, in einigen Fällen wird man sich für eine leichtgewichtige Version entscheiden, die nur einen Teil der gestellten Aufgabe abbildet und in einigen Fällen wird man anfangen zu entwickeln und am Ende kläglich an den hohen Anforderungen scheitern.

Der oft einfachste Weg solche Aufgaben ohne Probleme mit den gegebenen Resourcen lösen zu können ist die Nutzung von OpenSource Frameworks. Für beinahe jede Aufgabe gibt es bereits eine angemessene Lösung beziehungsweise eine unterstützende Komponente, die es dem Entwicklerteam ermöglicht sich auf das wichtige konzentrieren.

Ich möchte fünf Beispiele nennen, in denen mir und meinem Team ein oder mehrere OpenSource Produkte halfen Problemlösungen zu entwickeln, für die man normalerweise weitaus mehr Zeit und Manpower benötigen würde.

Beispiel 1: Implementierung einer flexiblen Enterprise-Datenbanksuche für ein bestehendes PHP-MySQL System

Das Problem: Wir hatten es mit einer sehr großen, absolut unperformanten MySQL - Datenbanklösung zu tun: Ein Verbund von ca. 200 Tabellen mit bis zu 18 Mio Einträgen und jeweils 50 Feldern. Die Tabellen sind weder normalisiert noch auf Feldebene optimiert. Suchanfragen können ausschließlich über zwei statische Hash-Werte durchgeführt werden. Jede andere Suchanfrage legt die Datenbank für mehrere Minuten lahm. Dieser Zustand war für den Bestand des Gesamtsystems inakzeptabel, ein komplettes Re-Design der Lösung jedoch aus Kostengründen nicht möglich. Aufgrund der hohen Komplexität des Systems spielt hier auch das Risiko des Unverhersehbaren eine bestimmte Rolle. Des weiteren musste berücksichtigt werden, dass das gesamte Restsystem, in dem Datenbankzugriffe stattfinden, in PHP programmiert wurde. Was tun?

Die Lösung: Lesende Anfragen sollen von der Datenbank gelöst werden. Im gleichen Atemzug sollen Suchanfragenunschärfen zulassen und idealerweise schnell sein, die Datenbank aber nicht weiter belasten. Nach langem überlegen und planen, nach dem Ausschluss diverser zunächst vielversprechender dann aber nicht tauglicher Alternativen sind wir auf eine Lösung gestoßen:

Apache Lucene Solr

Apache Lucene Solr

Apache Solr. Dabei handelt es sich um einen auf Lucene basierenden Enterprise Suchserver. Durch dieses Produkt konnten wir unsere Ziele allesamt erreichen und benötigten dafür geradeeinmal 2 Entwickler, die drei Wochen an der Integration arbeiteten. Solr erlaubt es anhand einer Webserviceähnlichen Schnittstelle über HTTP Anfragen zu stellen und die flexible Konfiguration der Indexstruktur. Wir haben eine auf Suchanfragen optimierte Struktur geschaffen, und damit die gesamte Datenbankstruktur auf Solr abgebildet. Die Aktualität des Index wird gewährleistet indem wir mit Hilfe von Triggern eine Update Tabelle füllen, die in lurzen Zeitabständen ausgelesen und auf den Index übertragen wird. Um doppelte Datenhaltung zu vermeiden und die Einhaltung der Datenschutzrichtlinien zu gewährleisten sind im Index ausschließlich die Primärschlüssel der Suchergebnisse gespeichert. Im bestehenden System mussten alle lesenden Prozesse durch Anfrage an den Solr-Server abgelöst werden. Mit den Ergebnislisten werden dann die Daten aus der Datenbank geholt. Eine Suchanfrage, für die man bisher ca. 20 Minuten benötigte dauert heute nur noch 0,1 Sekunde. Wir können komplexe Auswertungen erstellen und flexibel auf spezielle Datenbankanfragen von Kunden reagieren. Der größte Vorteil von Solr aber ist seine Unabhängigkeit. Das System, in dem die Suche integriert werden musste, war in PHP geschrieben. Die standardisierte HTTP Schnittstelle, die es erlaubt neben XML auch JSON oder HTML als Ergebnis zu erhalten erlaubte es uns den Dienst separat auf einem eigenen Server aufzubauen und dann einfach über einen HTTPClient einzubinden.

Beispiel 2: Implementierung eines Text-Analyse-Systems zur Extraktion und Überführung von strukturieren Daten aus Freitexten in eine relationale Datenbank.

Das Problem: Bestimmte Prozessentscheidungen beim Kunden erfordern die Einbeziehung srukturierter Informationen, die lediglich in Textform vorliegen. Der manuelle Aufwand der Strukturierung dieser Texte ist allerdings so enorm, dass der Einsatz der Daten sehr teuer ist. Die Implementierung eines Text-Information-Retrieval Systems, welches die Strukturierung automatisiert wäre für ein kleines Team von ca. 10 Programmierern kaum durchfürbar. Eine einfache Lösung ist für die Komplexität der Texte und der Vielfältigkeit der zu strukturierenden Informationen kaum denknar.

Gate - General Architecture for Text Engineering Applications

Die Lösung: Von der Universität Sheffield wird ein OpenSource System angeboten, welches genau diese Aufgabe lösen kann. GATE.

Hierbei handelt es sich um ein Framework zum einlesen und verarbeiten textueller Information. Neben des eigentlichen Prozessframeworks besteht GATE aus zahlreichen Plugins verschiedener Anbieter, die zu diversen Zwecken eingesetzt werden können. Die wichtigsten GATE Plugins sind unter ANNIE (A Nearly-New Iniformation Extraction system) zusammengefasst. Für unsere Aufgabe haben uns insbesondere zwei Mechanismen geholfen: Der JAPE-Transducer und der sogenannte Gazetteer. Grundlegend ist GATE aus Sprachresourcen (LR) und Processing Resources (PR) aufgebaut. Letztere werden in Pipelines beliebig zusammengebaut und verarbeiten genannte Sprachresourcen (Dokumente bzw. Korpora). Die Inhalte eines Dokuments werden entlang der Processing Pipeline annotiert.

Der Gazetteer fügt Named Entity Annotationen zum Text hinzu. Dazu haben wir diverse Lookupdatenbanken aufgebaut: Vornamen, Nachnamen, Städte, Postleitzahlen, Bundesländer, Rechtsformen, Toplevel Domains etc. Diese Annotationen wiederum werden in diversen JAPE Regeln in ihren Kontexten betrachtet, so dass man auf den Inhalt und Zweck der Daten schließen kann.

Die so ermittelten Daten werden analysiert und rückwirkend auf ihre Qualität bewertet.

Das Ergebnis: Wir können in weniger als 20 Minuten 4000 Dokumente einlesen, auswerten, strukturieren und in einer Datenbank speichern. Aufgrund bestimmter Muster lassen sich sichere von unsicheren Strukurierungen trennen. Unsichere Ergebnisse werden in einem manuellen Prozess nachgeprüft und ggf. angepasst, so dass wir insgesamt eine 100%ige Erkennunsrate erreichen.


10 Anleitungen um einen besseren Job zu machen.

Februar 20th, 2009 Knowledge, Websites| 2 Comments »

Gestern bin ich auf eine spannende Website gestoßen, die das Wiki-Prinzip auf einen neuen Bereich anwendet: http://www.wikihow.com. Hier geht es nicht um lexikalisches Wissen, sondern um Anleitungen zu verschiedensten Themen. Wie in Wikis üblich werden die Inhalte der Anleitungen durch die Community erstellt, erweitert und berichtigt: Die Weisheit der Massen. Neben den einfachen textuellen Anleitungen sind einige auch per Video dargestellt.

Folgende 10 Anleitungen können die eigenen Softskills verbessern:

  1. How-To manage Geeks
  2. How-To be a good manager
  3. How-To develop an IT Change Management Program
  4. How-To establish an IT project
  5. How-To be an effective Project Manager
  6. How-To run an effective meeting
  7. How-To motivate Staff
  8. How-To access useful Web Development Tools
  9. How-To Have successful Open-Source projects
  10. How-To improve your Skills as a programmer