Home Sweet Home Office

Working from home has many advantages but also numerous risks

During the global pandemic in 2020 the German government has decided to restrict social contacts as much as possible. Companies increasingly allowed their employees to work from home. 

According to the statista website, only 4% of all those surveyed have been working from home before 2020. This value increased to 27% during the first lockdown in April 2020,  which is almost a quarter of all respondents who worked exclusively or mainly from home. The value fell over the year but increased to 24% in January 2021. This shows a clear trend towards more people working from home.


(statista 2021)

This blogpost pursues two central questions:

  • What factors influence performance, commitment and job-satisfaction of employees working from home
  • What are the risks for employers and how can these risks be reduced?

The magazine “Spiegel” published an article with the headline “Homeoffice mit drei Kindern Zu Hause im Versuchslabor” (Der Spiegel 2020). This article clearly shows the challenge of balancing work and childcare. A challenge that many people had to overcome during last year. But what are the advantages, and what are the disadvantages of working from home?

Not every job is suitable for remote work. A surgeon can hardly operate on his patients at home. Also a baker can not sell his rolls to his customers at home. A software developer, on the other hand, can easily program his application at home or anywhere else in the world. Industries that are most suitable for working at home include jobs in the IT industry, marketing, services such as travel agencies, and jobs in the service sector such as call centres. But also areas of public administration, such as the citizens’ office, increasingly worked from home last year. As schools were closed, teachers also had to restructure their teaching and offered online classes or provided teaching material while the students had to work independently from home.

So why was there less work  from home in the past? 

The Way of System Thinking – Was Systemdenken ausmacht

Ein Artikel von Jessica Hofmann und Julia Grimm

In unserem Leben, egal ob im Privaten oder Beruf, müssen wir Entscheidungen treffen. Diese Entscheidungen haben so gut wie immer eine Konsequenz. Bei alltäglichen Entscheidungen ist uns das oft nicht bewusst. Erst bei großen und schweren Entscheidungen sind wir Menschen uns darüber im Klaren, dass das was wir vorhaben zu tun unser Leben in Zukunft beeinflussen wird. Wir erwarten häufig von uns selbst Entscheidungen schnell zu treffen, da wir uns nur selbst als nützlich erachten, wenn wir etwas tun. Daher kommt es, dass wir uns oft nicht die Zeit nehmen über Entscheidungen nachzudenken und herauszufinden was gerade wirklich passiert. Wir fokussieren uns darauf so schnell wie möglich weiterzukommen und verlieren das große Ganze – the Big Picture – aus den Augen, in welchem sich alle unserer Entscheidungen und unser Handeln zusammenfinden.

Die Welt, in der wir leben ist immer mehr vernetzt und durch die wachsende Globalisierung wächst auch die Komplexität sozialer Systeme. Der internationale Handel zum Beispiel verknüpft Nationen auf der ganzen Welt zu einem mächtigen wirtschaftlichen Feedbackloop. Was genau ein solcher Feedbackloop ist werden wir später noch genauer betrachten. Einzelne Systeme (falls diese überhaupt je getrennt voneinander funktioniert haben) wachsen und kommen immer näher zusammen. Verwachsen einige dieser Systeme miteinander, erzeuget dies komplexe und unvorhersagbare Effekte. Es ist also kaum noch möglich, einen Überblick über das gesamte System zu haben. Aber dieser Tatsache sind wir uns nicht immer bewusst. Je nachdem welche Perspektive wir hierbei einnehmen, bekommen wir ganz unterschiedliche Eindrücke wie die Realität aussieht. Hier passt das bekanntes Gleichnis „Die blinden Männer und der Elefant“ sehr gut.

In dieser Erzählung untersuchen fünf Blinde, die noch nie zuvor einem Elefanten begegnet sind, einen echten Elefanten mit ihren Händen. Sie sollen dadurch einen Eindruck bekommen, was ein Elefant ist. Jeder von ihnen steht an einer anderen Stelle und betastet so eine andere Stelle des Elefanten. Einer untersucht den Rüssel, einer ein Ohr usw.. Am Ende sprechen sie darüber wie ein Elefant aussieht und fangen heftig an zu streiten, weil jeder sein Bild für richtig hält, aber alle völlig unterschiedlich sind. Schließlich kommt der Elefantenführer dazu und sagt ihnen, dass sie alle richtig und alle falsch liegen, denn jeder von ihnen kennt nur einen Teil des wirklichen Elefanten. Wenn sie all ihre Erfahrungen zusammennehmen, dann würden sie einen Eindruck bekommen, wie der tatsächliche Elefant aussieht. Jeder von ihnen ist also aufgrund seiner individuellen Erfahrung zu einer eigenen, unvollständigen, aber logischen Schlussfolgerung gekommen.

Genau mit diesen Problemen – der Komplexität von Systemen, dem Hang überstürzte Entscheidungen zu treffen und die Realität nur aus einer Perspektive zu betrachten – befasst sich System Thinking.

Was ist System Thinking?

Beim System Denken wird davon ausgegangen, dass sich all unsere Handlungen und Entscheidungen mehr oder weniger in Verbindung zueinanderstehen und voneinander abhängig sind. System Thinking soll Menschen und auch Organisationen, wie Teams, Abteilungen oder Firmen dabei helfen, die Konsequenzen ihres Handelns besser zu verstehen und sich an die Umwelt, in welcher wir uns befinden anzupassen. System Thinking ist ein Skillset, um die Komplexität des Verhaltens besser vorherzubestimmen und zu verstehen und letzten Endes auch den Ausgang anzupassen. System Thinking bietet uns Menschen eine Möglichkeit die Realität zu sehen so wie sie ist und über diese zu Sprechen.

Bevor wir uns genauer damit beschäftigen und dieses Skillset genauer betrachten, wie man tatsächlich im System denkt, werden wir uns erst noch genauer mit dem Begriff System Thinking auseinandersetzen und diesen genauer einordnen. Außerdem wollen wir uns noch genauer mit den psychologischen Aspekten befassen, die die Denkweise des Menschen beeinflussen und was hierbei besonders wichtig wird, wenn wir im System denken wollen. Zu guter Letzt werden noch einige methodische Ansätze kurz erläutert, um ein paar praktische Methoden des System Thinkings mit auf den Weg zu geben.

Sind wir nur schick angezogene Höhlenmenschen?

Versetzen wir uns in folgende Situation: Bei einem Projekt laufen wir in ein Problem. Wir können nicht weitermachen, weil weitere Arbeitsschritte von dem Problem abhängig sind. Was tust du? Findest du schnell eine Lösung, um das Problem zu lösen oder nimmst du dir die Zeit, um die Ursache des Problems zu finden?

Die meisten Menschen würden hierbei wahrscheinlich antworten, dass sie sich die Zeit nehmen würden, die verschiedenen Möglichkeiten für die Ursache des Problems abzuwägen, und dann nach dem sie alle Pros und Cons für die unterschiedlichen Lösungen verglichen haben, treffen sie eine rationale Entscheidung.

Dieses rationale Entscheidungsmuster wird von uns Menschen jedoch gar nicht so oft genutzt, wie wir uns das gerne einreden. Oft verlassen wir uns bei der Lösung komplexer Probleme auf unsere sogenannte Intuition und treffen eine emotionsgetriebene Entscheidung. Der rational denkende Mensch, das was uns vom Tier unterscheidet, ist vielmehr ein Bild, welches wir Menschen gerne von uns selbst haben, aber meist nicht immer der Realität entspricht.

Der Grund dafür liegt aber schon Jahrtausende zurück. Und zwar tragen wir Menschen immer noch unser evolutionäres Erbe von vor 10 000 Jahren mit uns herum. Denn seit her hat sich bei der Entwicklung unseres Gehirns nicht mehr viel getan.  Unsere Umwelt hat sich hingegen in den letzten 10 000 Jahren rapide geändert. War es bei unseren Vorfahren vor 20 Generationen noch wichtig im Bruchteil einer Sekunde über Leben oder Tod zu entscheiden, weil hinter jedem Baum ein Raubtier lauern konnte, welches einen fressen wollte, leben wir heutzutage in einer vollkommen industrialisierten und digitalisierten Welt.

Die Welt, in der wir aktuell leben ist so komplex, dass emotional Entscheidungen oft nicht zielführend sind. In einer so vernetzen Welt ist es wichtig, sich erst ein Bild und Überblick über dieses Komplexe zu verschaffen und das direkte Tun und Handeln einen Moment zurückzustellen und stattdessen zu denken. Und genau hier kommt System Thinking ins Spiel.

Das Seerosen-Modell

Es steckt oft mehr dahinter als das, was wir im ersten Moment sehen. Beim System Thinking geht es darum unter die Oberfläche zu blicken oder wie man gerne sagt über den Tellerrand hinauszuschauen. Es geht darum die Muster in unserem Alltag oder bei der Arbeit zu erkennen und Situationen besser einzuschätzen und zu bewältigen.

Bei der Recherche für diesen Artikel sind wir immer wieder auf die Metapher des Seerosenteichs gestoßen, um den Grundgedanken des System Thinkings zu veranschaulichen. So ist bei einer Seerose der größte Teil verborgen und liegt unter der Wasseroberfläche. Unsere Aufmerksamkeit gilt auf den ersten Blick aber nur den wunderschönen Blüten und Blättern der Seerose.  Diese wunderschöne Blüte kann jedoch nur existieren und wachsen, weil sie durch ein enormes Wurzelsystem mit Nährstoffen aus dem Wasser und dem Boden versorgt wird. Es bringt also nichts nur die Seerosen an der Oberfläche zu betrachten und diese zu pflegen. Um einen gedeihenden Seerosenteich zu haben, reicht es nicht nur die verwelkten Blüten und Blätter zu stutzen. Wir müssen auch unter die Wasseroberfläche schauen und an der Wurzel arbeiten, denn nur dann kann die Seerose weiterwachsen. Wenn wir nun unsere Welt mit einer Seerose gleichsetzen, bedeutet das, dass wenn wir bei einem System strukturelle Änderungen vornehmen und die Wurzel des Problems anpacken wollen, um nicht nur Symptome zu behandeln, sondern die Ursache, wir tiefer schauen und einen Blick unter die Oberfläche wagen müssen. Je tiefer wir also in den Teich hinabschauen, desto effektiver sind unsere Maßnahmen.

Nachdem wir das Seerosen-Modell nun im Kontext des System Thinking betrachtet haben, lässt sich sagen, dass es beim System Thinking in erster Linie darum geht das große Ganze – the Big Picture – zu betrachten.  

Wo sind die Ursprünge des System Thinking? Was sind die Grundannahmen?

Die Ursprünge des System Thinking liegen in der System Theorie. Die Wurzeln finden sich in so unterschiedlichen Disziplinen wie Biologie, Kybernetik und Ökologie. Systemdenken bietet einen Einblick in die Funktionsweise der Welt, die sich deutlich von der traditionellen reduktionistischen, analytischen Sicht unterscheidet. Kognitive Prozesse des Erkennens und Problemlösens, die auf Konzepte der Systemtheorie Bezug nehmen, werden oft unter dem Begriff System Thinking oder Systemdenken zusammengefasst.

Wie bereits erwähnt leben wir in einer immer komplexer werdenden Welt. Um in dieser Welt vernünftig zu überstehen, fordern Experten, welche sich mit System Thinking befassen, mehr Systemdenker. Menschen mit solch einem Skillset werden nicht nur in wissenschaftlichen oder Disziplinen oder dem Ingenieurwesen benötigt, sondern in allen Bereichen unseres Lebens. Entscheidungen am anderen Ende der Welt, wie zum Beispiel die Rodung des Regenwaldes haben Auswirkungen auf den gesamten Globus. Auf Grundlage dieser Überlegung könnte man gar argumentieren, dass alle Menschen in Entscheidungspositionen ein solides Verständnis für das System Thinking haben sollten.

Wenn nun System Thinking das Allheilmittel für die Probleme dieser Welt sind, was ist es überhaupt genau? Hierauf gibt es keine eindeutige Antwort.

In der Literatur gibt es eine Reihe verschiedener Definition für den Begriff des System Thinking, jedoch unterscheiden sich diese oftmals und es gibt keine eindeutige allgemeingültige Definition. Das Problem bei der Begrifflichkeit ist, bzw. was sie so schwer macht zu definieren, dass dieser Begriff schon so oft definiert und redefiniert wurde. Wenn man die verschiedenen Definitionen und Erklärungen betrachtet, weißen sie dennoch eine Vielzahl an Gemeinsamkeiten auf. Diese wollen wir im Folgenden genauer betrachten und damit den Oberbegriff, um den es in diesem Blogbeitrag geht eingrenzen.

Prägend für das System Thinking an sich ist der Begriff System für sich selbst. Schon das Wort System hat je nach dem in welchem Kontext und welcher Disziplin es verwendet wird unterschiedliche Bedeutungen. In dem Fall des System Thinking macht die naturwissenschaftliche Definition wohl am meisten Sinn. So ist ein System laut Duden in einem naturwissenschaftlichen Kontext eine „Gesamtheit von Objekten, die sich in einem ganzheitlichen Zusammenhang befinden und durch die Wechselbeziehungen untereinander gegenüber ihrer Umgebung abzugrenzen sind“. Ein Grundprinzip eines Systems ist also, dass es mehr ist als eine bloße Ansammlung seiner Teile. Dies können wir auch für das System Thinking annehmen. So finden sich einige Grundannahmen, die für das bloße System gelten auch beim System Thinking wieder. Wenn wir System Thinking genau betrachten, besteht es in erster Linie zunächst einmal aus drei Dingen. Den einzelnen Elementen, die Beziehung der einzelnen Elemente zueinander und dem Zweck oder auch dem Ziel. Aus diesen Grundannahmen lassen sich wiederum Charakteristiken für ein System ableiten.

Charakteristik von Systemen

  1. Zweck: Systeme haben immer einen Zweck. Der Zweck oder auch das Ziel eines Systems ist eine Eigenschaft des Systems als Ganzes und nicht eines der Elemente. So ist das System Flugzeug in seiner Gesamtheit dafür verantwortlich Passagiere von A nach B zu fliegen. Dieser Zweck ist eine Eigenschaft des gesamten Systems und nicht das einer einzelnen Turbine oder eines Flügels und wird erst durch das Zusammenspiel der einzelnen Flugzeugteile erreicht.
  2. Gesamtheit: Es müssen alle Teile vorhanden sein, damit ein System seinen Zweck optimal erfüllen kann. Wenn wir einem System ein Element wegnehmen oder auch hinzufügen können, ohne dass es die Funktion des Systems beeinflusst, dann haben wir kein System, sondern eine bloße Ansammlung von Elementen, die nicht in Abhängigkeit zueinanderstehen. Wenn wir zum Beispiel aus einem Werkzeugkasten ein Werkzeug herausnehmen, bleibt die Funktion des Kastens erhalten. Wir haben lediglich den Inhalt geändert.
  3. Reihenfolge: Die Reihenfolge, in der die Elemente unseres Systems angeordnet sind, beeinflussen dessen Leistung. Wenn wir die Elemente beliebig anordnen können, dann ist es kein System. So spielt es bei unserem Werkzeugkasten keine Rolle, ob der Schraubenzieher über oder unter dem Hammer liegt. Bei unserem Flugzeug hingegen ist die richtige Anordnung der einzelnen Elemente für einen sicheren Flug überlebenswichtig. Daraus können wir schließen, dass die Anordnung der einzelnen Elemente in einem System sehr wichtig ist.
  4. Feedback: Beim Feedback oder auch zu Deutsch der Rückkopplung werden Informationen übermittelt und zurückgegeben. Das wichtigste Merkmal des Feedbacks ist, dass es Informationen an das System liefert, die es wissen lassen, wie es sich in Bezug auf einen bestimmten Zustand verhält.

Dies sind wichtige Charakteristika, die für die Definition eine prägende Rolle spielen.

So definiert Barry Richmond, System Thinking als die Kunst und Wissenschaft, zuverlässige Rückschlüsse auf das Verhalten zu ziehen, indem man ein immer tieferes Verständnis der zugrunde liegenden Struktur entwickelt. Er betont, dass Menschen, die Systemdenken praktizieren, sich so positionieren, dass sie sowohl den Wald als auch die Bäume sehen können.

Auf Richmonds Definition berufen sich die meisten anderen Definitionen, jedoch werden diese noch erweitert.

Eine Definition, welche sich aus der Auswertung umfassender Literatur ergab, ist die von Megan Hopper und Krystyna Stave. Hopper und Syave bekräftigen die Notwendigkeit einer allgemein akzeptierten Definition. Sie warnen auch davor, dass der Begriff System Thinking auf verschiedene und manchmal auch widersprüchliche Weise verwendet wird, was bei der Findung für eine allgemeingültige Definition nicht gerade hilfreich ist.

Aus der Arbeit von Hopper und Stave ergeben sich folgende Grundannahmen für das System Thinking, welche auch die bereits erwähnten Charakteristiken von Systemen ergänzen:

  1. Erkennen von Zusammenhängen
  2. Erkennen von Rückkopplungen
  3. Dynamisches Verhalten verstehen
  4. Unterscheidung der Arten von Flüssen und Variablen
  5. Konzeptuelle Modelle verwenden
  6. Erstellen von Simulationsmodellen
  7. Erprobung von Politiken

Was alle Definitionen berücksichtigen und worunter sich die meisten einig sind ist, dass Elemente und die Charakteristiken, die ein System ausmachen, die Zusammenhänge, das Verständnis von dynamischen Verhalten, die Systemstrukturen als Ursache für dieses Verhalten und die Idee, Systeme als Ganzes und nicht als Teile zu betrachten, sind.

Einblick in unsere Psyche

Jetzt haben wir einen Eindruck was unter System Thinking eigentlich zu verstehen ist. Bevor wir nun mit den Methoden des System Thinking beschäftigen, sollten wir nochmal einen Schritt zurücktreten und uns anschauen, wie das menschliche Denken überhaupt funktioniert. Wie fällen wir Urteile und kommen zu Entscheidungen? Zuerst einmal müssen wir uns von dem Gedanken verabschieden, dass wir in der Lage sind rein objektive Entscheidungen aufgrund der Kenntnis aller relevanter Fakten zu treffen. Der Mensch ist weder in der Lage völlig objektiv zu sein noch die Wirklichkeit zu 100% exakt zu erfassen.

Wir konstruieren uns unsere Wirklichkeit

Unser Gehirn ist ein Meister darin Lücken zu schließen, um ein vollständiges Bild zu formen. Ohne dass wir bewusst etwas davon mitbekommen, ergänzt unser Gehirn fehlende Informationen oder übergeht Unpassende (zumindest bis zu einem gewissen Grad). Und diese Eigenschaft ist essenziell wichtig, damit wir uns in der Welt überhaupt orientieren können.

Unsere Wahrnehmung ist durch mehrere Faktoren beschränkt. Zum einen sind unsere Sinnesorgane nicht in der Lage alle möglichen Informationen auch aufzunehmen. Beispielsweise können Licht nur in im Spektrum zwischen 380 nm und etwa 780 nm wahrnehmen. Ein anderer Faktor ist die beschränkte Verarbeitungskapazität unseres Gehirns. Pro Sekunde sind wir in der Lage 15.000.000 Bits an Daten über unsere Sinnesorgane wahrzunehmen. Von all diesen Informationen können wir aber nur ca. 0,0004% bewusst verarbeiten. Unser Gehirn hat sich also im Laufe der Evolution so entwickelt, dass es sich auf ein Minimum der notwendigen Informationen beschränkt und den Rest ergänzt. Auf diese Weise konstruiert das Gehirn ein Abbild unserer Realität. Dieses Konstrukt hat Einfluss darauf, was wir fühlen und wie wir handeln.

Neben den biologischen Faktoren wird die Wahrnehmung auch von psychologischen und soziokulturellen Faktoren beeinflusst. Das bedeutet, dass unsere aktuelle Stimmung, unsere Erwartungen und Erfahrungen mitbeeinflussen was wir wahrnehmen und wie wir es verarbeiten. Somit ist der Wahrnehmungsprozess keine reine Abbildung der physiologischen Realität, sondern vielmehr eine Konstruktion der individuellen Wirklichkeit. Das unser Gehirn auf diese Weise alle Informationen zusammenfügt, sorgt dafür, dass wir uns relativ problemlos in der Welt orientieren und in ihr agieren können.

Wir sind in der Lage innerhalb von Sekundenbruchteilen eine Situation einzuschätzen, indem die gesammelten Informationen in unser mentales Model – unseren Bezugsrahmen – gesetzt werden und fehlende Informationen ergänzt werden. Welche Teile des Gesamtbildes in unserem Kopf nun aber auch tatsächlich wahrgenommenen Reizen beruhen und welche ergänzt wurden, ist für uns nicht mehr nachvollziehbar. Das ist mitunter einer der Gründe warum Augenzeugenberichte sich teilweise stark voneinander unterscheiden können. Je nachdem was die Zeugen für Vorerfahrungen hatten und wo ihre Aufmerksamkeit in dem Moment lag unterscheiden sich die Bilder, welche sie von der Situation im Gedächtnis behalten.

Diese Funktionsweise unseres Gehirns hat sich über viele Jahre entwickelt und unseren Vorfahren das Überleben gesichert. Das Problem ist aber, dass sich unsere Umwelt seitdem dramatisch verändert hat. Unsere heutige Umwelt ist deutlich komplexer und erfordert viel mehr Vorausdenken, um Veränderungen zu antizipieren.

Denken wir immer gleich?

In der modernen Psychologie wird davon ausgegangen, dass wir zwei voneinander abhängige Systeme des Denkens haben. Ein System (System 1) für das unbewusste, automatische und schnelle Denken und ein System (System 2) für das bewusste und langsame Denken. Welches System gerade aktiv ist, ist uns oft gar nicht bewusst. Doch in den meisten Fällen ist System 1 aktiv. Die Aktivitäten von System 1 geschehen automatisch und nahezu mühelos, während System 2 Aufmerksamkeit und mehr kognitive Ressourcen erfordert.

In den meisten alltäglichen Situationen ist der Hauptakteur System 1, da dieses deutlich weniger mentale Ressourcen benötigt und viel schneller ist. In den meisten Situationen ist System 1 auch völlig ausreichend beziehungsweise notwendig. Wir wären kaum lebensfähig, wenn wir über jeden Schritt, jeden Atemzug und jede unserer Handlungen bewusst nachdenken müssten. System 1 geht dabei nach dem What you see is all there is (WATASI) Prinzip vor und ist auch in der Lage Informationen parallel zu verarbeiten. Es geht davon aus, dass wir alle notwendigen Informationen besitzen, um die richtige Entscheidung zu treffen. Unser Gehirn ignoriert in diesem Fall, dass es Informationen gibt, auf die es keinen Zugriff hat. System 1 ist auch völlig unempfindlich gegenüber Qualität und Quantität von Informationen. Das oberste Ziel ist es ein konsistentes Gesamtbild aus den vorhandenen Informationen zu schaffen, um handlungsfähig zu bleiben. Das ist auch der Grund warum wir dazu neigen überall kausale Zusammenhänge herzustellen und bereits aus einem Minimum an Informationen einen Kontext abzuleiten. System 1 beurteilt alle Ereignisse danach, ob sie in unser mentales Muster passen. Da wir unbewusst danach streben, ein möglichst konsistentes Gesamtbild zu erhalten, akzeptieren wir oftmals auch wenig stichhaltige Argumente, solange diese in unser mentales Modell passen.

Wollen wir nun im Zuge des System Thinking das Gesamtsystem versuchen zu erfassen und das im Bewusstsein, dass wir niemals alle Informationen besitzen, müssen wir aktiv das System 2 nutzen. System 2 ist für das bewusste Denken und unsere Selbstbeherrschung zuständig. Dieses Denksystem ist in der Lage zu zweifeln und Dinge zu überdenken, indem wir bewusst nach neuen Informationen suchen oder die gegebenen Informationen neu strukturieren. Es ist das Kontrollsystem, welches die Aktivitäten von System 1 überwacht und dann aktiv wird, wenn System 1 an seine Grenzen stößt. Bei der Lösung komplexer Denkaufgaben greifen wir auf dieses System zu. Allerdings schöpft dieses System auch deutlich stärker unsere mentale Arbeitskraft aus, was dazu führt, dass wir schneller ermüden. System 2 kann sich auch nur auf eine Aufgabe konzentrieren es arbeitet Informationen sequentiell ab. Das heißt, wenn wir mental gerade sehr mit einer Aufgabe beschäftigt sind, werden wir in allen anderen Bereichen leichtgläubig, da System 1 keine Zweifel kennt und System 2 beschäftigt ist.

System 2 wird also nur in bestimmten Situationen und für eine bestimmte Zeit lang aktiv. Es akzeptiert auch eine gewisse Fehleranfälligkeit von System 1. Der Grund ist, dass voreilige Schlussfolgerungen dann effizient sind, wenn sie mit hoher Wahrscheinlichkeit zutreffen, wenn die Kosten eines gelegentlichen Fehlers akzeptabel sind und wenn dadurch Mühe und Zeit gespart werden können. Dieses Vorgehen hat uns im Laufe unserer Evolution vor dem Aussterben bewahrt. Wir mussten oft innerhalb von Sekunden auf Basis der aktuell vorhandenen Informationen entscheiden, ob wir fliehen oder kämpfen sollten.

Das System Thinking hingegen erfordert, dass wir uns ganz bewusst mit allen Möglichkeiten auseinandersetzen und damit gezielt das System 2 nutzen ohne dass wir den Vereinfachungen von System 1 zu sehr vertrauen. Dies erfordert ein hohes Maß an Selbstbeherrschung und bewusstem Denken. Aber allein das Bewusstsein, über die beiden Systeme und ihre Funktionsweise kann dabei hilfreich sein, das eigene mentale Modell häufiger infrage zu stellen, um Unstimmigkeiten aufzudecken.

Wie lösen wir eigentlich Probleme?

Nachdem wir uns jetzt mit den beiden Systemen beschäftigt haben, ist die nächste Frage: Wie lösen wir eigentlich Probleme und was macht ein Problem für uns kompliziert? Und was ist für uns überhaupt ein Problem?

Ein Problem entsteht dann, wenn man in irgendeiner Form ein Ziel hat und dieses erreichen will, aber dabei auf ein oder mehrere Hindernisse stößt. Wenn wir für die Überwindung dieser Hindernisse keine Routine verfügbar haben, haben wir ein Problem. Das problemlösende Denken ist eine der Fähigkeiten, welche uns gegenüber vielen anderen Spezies besonders auszeichnet. Problemlösendes Denken erfolgt immer zu dem Zweck, ein oder mehrere Handlungsziele zu erreichen. Dabei bedarf es zielgerichteter Entscheidungen und weiterer Komponenten wie z.B. Problemidentifikation, strategisches Planen, Reflexion und Abstraktion.

Auch wir als Informatiker werden oft mit dem Thema Problemlösen konfrontiert.

Wie kann ich den Wunsch meines Kunden am besten umsetzten? Wie setzte ich es überhaupt um? Warum funktioniert das schon wieder nicht? Warum habe ich plötzlich mehr Fehlermeldungen als vorher?

Egal welche der Fragen wir lösen müssen eins haben alle gemeinsam. Idealerweise sollten wir zuerst das zugrundeliegende Problem identifizieren, bevor wir es lösen können. Klingt logisch, ist aber in der Praxis oft ein Problem für sich. Wir neigen gerade bei komplexen Problemen dazu lieber eine schnelle sofort verfügbare Lösung zu probieren, als erst mal zu warten und das Problem in seinem gesamten Umfang zu erfassen. Vor allem wenn wir unter Druck stehen, nehmen wir öfter mal die erstbeste Lösung, ohne sie richtig zu prüfen.

Aber: „There is no use of running, if you’re on the wrong road.”

Oftmals liegt dem Offensichtlichen ein größeres komplexeres Problem zugrunde, welches tiefer im System verankert ist. Um eine Lösung zu finden, die das Problem wirklich langfristig und vollständig löst, ist es notwendig das gesamte System oder zumindest einen deutlich größeren Kontext im System zu betrachten. Wie umfangreich die Veränderungen dann sein müssen, um das Problem zu beheben, kann dann wieder ganz unterschiedlich sein. In Bezug auf Software bedeutet das, dass die Lösung, die der Kunde sich wünscht, nicht immer die ist, die er braucht.

Bei der Erfassung eines Problems bekommen wir es wieder mit einigen Fallstricken unseres Denkens zu tun. Denn wir überschätzen systematisch unser eigenes Wissen und Fokussieren und eher auf das was wir wissen und ignorieren das wir etwas nicht wissen. Es ist leichter davon auszugehen, dass man alle relevanten Informationen zur Lösung eines Problems schon hat, als zu überlegen was man nicht weiß, was aber wichtig sein könnte. Haben wir dann eine These, welche für uns schlüssig ist, gebildet, tendieren wir dazu vor allem den Fakten Beachtung zu schenken, die diese These stützen. Wir verbiegen ganz unbewusst die hinzukommenden Informationen so, dass sie möglichst nicht mit unserer gefassten Meinung kollidieren. Also aufpassen, wenn eine Lösung zu leicht erscheint und alles wunderbar zu passen scheint. Lieber noch einmal bewusst kritisch auf die Lösung schauen.

Aber um ein Problem lösen zu können, sollten wir auch anschauen, unter welchen Umständen ein Problem für uns komplex erscheint.

In unserem Alltag werden wir ständig mit unterschiedlichen Problemen konfrontiert, manche davon sind leicht zu lösen und manche schwer. Verbrennt uns beispielsweise das Abendessen und wir brauchen schnell eine Alternative, wenn wir nicht hungern wollen, ist das für die Meisten von uns kein allzu großes Problem. Die Frage wie wir die Klimaerwärmung noch aufhalten können, ist hingegen ein deutlich komplexeres Problem.

Aber was macht die Komplexität eines Problems eigentlich aus? Was mach ein Problem zu einem schweren Problem? Dazu tragen mehrere Faktoren bei. Einige dieser Faktoren sind:

  • Intransparenz: Wenn wir nicht alle relevanten Informationen besitzen und damit zu viele Variablen oder vielleicht sogar ein ganzes System außerhalb unseres Horizontes liegen, ist es schwierig ein Problem zu lösen. In der Realität ist es sogar meisten so, dass wir nicht alle Variablen eines Problems kennen.
  • Vielschichtigkeit: Wir verfolgen gleichzeitig zu viele Ziele und haben nicht genügend Ressourcen, um sie alle zu erreichen. Wenn wir an zu vielen Stellen gleichzeitig aktiv werden müssen, wird es schwer mit den vorhandenen Ressourcen zum Ziel zu kommen.
  • Komplexität: Sind an einem Problem eine Vielzahl von Variablen beteiligt, welche alle miteinander in Abhängigkeit stehen, macht dies die Lösung des Problems um einiges schwieriger. Um das Problem lösen zu können, müssen wir dann ein hochkomplexes Geflecht aus Variablen durchschauen, um die Lösung zu finden.
  • Konnektivität der Variablen: Nicht nur die Anzahl der Variablen macht ein Problem schwer. Vor allen die Abhängigkeiten zwischen den Variablen machen es schwer Vorhersagen zu den Konsequenzen von Handlungen zu treffen. Wenn die Veränderung einer Variablen viele andere in mehr oder weniger bekannter Weise beeinflusst, wird es sehr schwer die Resultate abzuschätzen.
  • Dynamische Entwicklung: Ein weiterer Faktor ist Zeitdruck. Wenn es sich um ein Problem handelt, welches sich mit der Zeit weiterentwickelt oder sogar verschlimmert, erhöht auch dies die Problemkomplexität.
  • Zeitliche Trennung: Es fällt uns sehr schwer ein Problem nachzuvollziehen, wenn Ursache und Wirkung zeitlich voneinander getrennt sind. Wenn Einwirkungen auf Variablen des Problems erst zeitlich versetzt zu einem Effekt führen, wird es sehr schwer abzuschätzen, was genau welchen Effekt hatte oder haben wird.

Während viele der kleinen Alltagsprobleme mit wenig Aufwand und oftmals ohne bewusstes Nachdenken gelöst werden können, erfordern komplexe Probleme unsere volle Aufmerksamkeit. Unser Gehirn versucht darum öfter schwere Fragen durch leichtere zu ersetzen, um unser System 2 nicht zu sehr zu belasten. Wenn wir beispielsweise gefragt werden, wie zufrieden wir mit unserem Leben sind, ersetzt unser Gehirn diese Frage gerne durch eine leichter zu beantwortende. Beispielsweise wie unsere Stimmung gerade ist. Das passiert unbewusst und ist in vielen Fällen ausreichend zielführend. Aber eben nicht immer.

Im Vergleich zu der Zeit, in der sich unser Gehirn hauptsächlich entwickelt hat, haben wir es heute vermehrt mit komplexen Problemen zu tun, welche unsere volle Aufmerksamkeit benötigen. Wir müssen zum Teil ein großes Geflecht zusammenhängender Variablen beachten, um ein Problem wirklich verstehen zu können. Um alles zu erfassen und entsprechende Lösungsmaßnahmen antizipieren zu können, brauchen wir vor allem mehr Zeit. Wir können oft nicht innerhalb kürzester Zeit alle relevanten Informationen herausfiltern und ihre Zusammenhänge erfassen. Wir müssen lernen stillzustehen und erst alle Informationen und Möglichkeiten zu betrachten, bevor wir aktiv werden. Was so einfach klingt, ist oft enorm schwer umzusetzen. Wir sind darauf programmiert schnell zu agieren. Wenn wir ein Problem vor uns haben wollen wir so schnell wie möglich etwas dagegen tun. Auch wenn wir dabei riskieren etwas Falsches oder wenig Wirkungsvolles zu machen.

“Getting it right or getting it right now”

Auch wenn wir in der Regel ziemlich gut darin sind Probleme zu lösen, kommen wir in einer immer komplexer werdenden Welt auch öfter an unsere Grenzen und müssen vermehrt mentale Stolpersteine umgehen. Um dem gegenüberstehen zu können, sollten wir uns bewusst werden, wie unser Gehirn arbeitet und uns auch die Zeit nehmen, uns von mental anstrengenden Aufgaben zu erholen. Dass sich auch mentale Anstrengung körperlich auswirken kann, zeigt sich beispielsweise darin, dass unser Blutzuckerspiegel sinkt, wenn wir über ein schwieriges Problem nachdenken oder große Selbstkontrolle aufbringen müssen.

Methodische Ansätze

System Thinking in der Theorie klingt ja schön und gut, aber wie kann ich diese Denkweise nun praktisch anwenden.

“To Enlarge first, To Shrink then.”

Ein wichtiger Ansatz ist das Big Picture zusehen. Dies erreichen wir am besten in dem wir zuerst auf den Kontext erweitern, bevor man dann wieder einschränkt. Das bedeutet wir nehmen zusätzliche Faktoren, wie z.B. Zeit und das Umfeld in welchem sich unser System befindet mit auf und können dadurch mögliche Einflüsse auf unser System erkennen und diese mit einfließen lassen und mögliche Störungen und Probleme schneller erkennen oder diese sogar komplett verhindern. Wenn wir also beispielsweise Dinge clustern wollen, macht es Sinn, erst den Kontext der einzelnen Elemente zu erweitern, um herauszufinden, wie sie wirklich sinnvoll geclustert werden können. Nach diesem Ansatz sollte immer zuerst vorgegangen werden, um die anderen Methoden richtig einsetzen zu können.

Ein weiterer methodischer Ansatz sind hierbei die sogenannten Feedbackloops.

Um Systeme richtig zu verstehen, müssen wir uns im Klaren sein, dass beim System Thinking alles miteinander verbunden ist und wir davon ausgehen, dass diese Denkweise eine Organisation als lebendes System betrachtet. Die Teile eines Systems stehen in einem Ursache-Wirkungs-Zusammenhang und formen sogenannte dynamische Feedbackloops. Es gibt nur zwei Arten von solchen Feedbackloops, positives (Reinforcing) Feedback und negatives (Balancing) Feedback. In einem Feedbackloop gibt es außerdem auch nur zwei Arten von Beziehungen in welcher die einzelnen Elemente zueinanderstehen können. Elemente können entweder in einer kausalen Beziehung „+/s“ (gleich) oder „-/o“ (gegenteilig) verbunden sein. Eine solche visuelle Repräsentation, wie die Teile miteinander interagieren, hilft uns zu verstehen, wie zum Beispiel eine Intervention unser System beeinflussen würde.

Reinforcing-Feedbackloop

Ein Reinforcing oder auch positiver Feedbackloop ist die Basis von allen Veränderungen und der Motor für Wachstum aber auch Abschwung. Als Beispiele für solche Feedbackloops wären hier zum einen der Schneeball-Effekt, Pygmalion-Effekt oder auch das Phänomen „Die Reichen werden reicher, die Armen werden ärmer“ aufzuführen. Hierbei kann der Trend entweder rauf oder runter gehen.

Eine Eigenschaft ist, welche auch schon im Namen dieser Feedbackschleife steckt, dass sie selbstverstärkend ist. Sie verbindet Veränderungen in eine Richtung mit noch mehr Veränderungen, was zu exponentiellem Wachstum, aber auch zu einem Kollaps führen kann.

Wie kann ich einen solchen Reinforcing-Feedbackloop erkennen?

Eine schnelle Methode, um festzustellen, ob eine Schleife verstärkend oder ausgleichend ist, besteht darin, die Anzahl der „-/o“ zu zählen. Ist die Anzahl von „-/o“ gerade (oder Null) ist die Schleife verstärkend, bei einer ungeraden Anzahl ist sie ausgleichend. Obwohl dies eine effiziente Methode ist, sollten wir den Feedbackloop immer noch einmal genau überprüfen und checken, ob die Verbindungen richtig beschriftet sind.

Wann immer wir ein exponentielles Wachstum oder einen Niedergang erleben, steckt mindestens ein verstärkender Prozess dahinter. Reinforcing-Feedbackloops neigen dazu, Systeme aufgrund ihres Schneeballeffekts zu destabilisieren und so werden kleine Veränderungen schnell zu großen Veränderungen. Deswegen macht es Sinn diesen Prozess so früh wie möglich zu identifizieren, um die Ursache für das Wachstum oder auch dem Abschwung zu finden und gegebenenfalls rechtzeitig eingreifen zu können.

Balancing-Feedbackloop

Balancing-Feedbackloops sind die Grundlage aller Stabilität in unserer Umwelt und die Natur ist voll von solchen Ausgleichsprozessen. So besteht zum Beispiel der menschliche Körper aus tausenden von stabilisierten Prozessen, die dafür sorgen, dass unser Bedarf an Nahrung durch Hunger und Wasser gedeckt wird oder unsere Temperatur konstant bleibt. Auch im Arbeitsumfeld finden sich solche Feedbackloops. Zum Beispiel die, die dafür sorgen, dass Angebot und Nachfrage übereinstimmen. In solch einem Prozess wird auf ein Ziel hingearbeitet, ob es nun sichtbar ist oder nicht. Dieses Ziel oder auch Normwert wird Set Point genannt. Beim Ausgang eines solchen Feedbackloops besteht immer eine Lücke zwischen dem gewünschten Niveau (Ziel oder Norm) und dem tatsächlichen Niveau. Das tatsächliche Niveau wird bei einer zu großen Diskrepanz zwischen beiden so lange durch korrekturmaßnahmen angepasst, bis die Lücke kleiner wird. Ein Balancing-Feedbackloop versucht also immer die Bedingungen ins Gleichgewicht zu bringen.

Was bei einem Balancing-Feedbackloop eine große Rolle spielt ist die Verzögerung. Zwischen einer Aktion und dessen Ergebnis gibt es fast immer eine Verzögerung. Wenn solche Schleifen in Verbindung mit Verzögerungen stehen, können diese ein komplexes Verhalten hervorrufen. Dies liegt dran, dass es so viele verschiedene Quellen und Größen von Verzögerungen gibt. Wenn wir nun vermuten, dass es sich um einen Balancing-Feedbackloop mit Verzögerung handelt, macht es Sinn die beteiligten Verzögerungen zu identifizieren und zu beschreiben. Wenn uns das gelingt, können wir die Verzögerungen gegebenenfalls verkürzen oder zumindest besser damit umgehen und unser System damit zu einer größeren Stabilität verhelfen.

Das gute beim Systemdenken ist, dass es diesen Effekt der Zeit mit aufnimmt, da wir den Kontext erst erweitern bevor wir ihn dann schließlich wieder verkleinern.

In der folgenden Darstellung sehen wir noch jeweils ein Beispiel für einen Reinforcing- und einen Balancing-Feedbackloop.

Wir müssen uns darüber im Klaren sein, dass die Systeme, mit denen wir im Alltag oder Beruf zu tun haben, selten ein einzelner kleiner Feedbackloop ist, sondern aus vielen zusammenhängenden Feedbackloops besteht.

Kausale Zusammenhänge

Wie bereits erwähnt stehen die Elemente unseres Systems in sogenannten Ursache-Wirkungs-Zusammenhängen. Die einzelnen Teile unseres Systems können unterschiedlich in Verbindung miteinander stehen. Wir unterscheiden im Folgenden zwischen drei verschiedenen Verbindungen:

Mediator Junction: A → B → C

Hierbei handelt es um eine vermittelnde Verbindung. Wenn wir folgendes Beispiel betrachten, dann sehen wir, wenn „Rauch“ gefixt wurde, dann stehen „Feuer“ und „Alarm“ nicht länger in einer kausalen Verbindung zueinander. „Rauch“ nimmt hierbei die Rolle des Mediators (dt. Vermittler) ein.

Feuer → Rauch → Alarm

Fork Junction:   A ← B → C

Bei einer Gabelverbindung hat eine Ursache mehrere Wirkungen. Die beidem Wirkungen haben eine gemeinsame Ursache und es besteht eine Scheinkorrelation zwischen A und C. So könnte man im folgenden Beispiel schließen, dass Kinder mit größeren Schuhen tendenziell besser lesen.  Da zwischen der „Schuhgröße“ und der „Leserfertigkeit“ aber kein kausaler Zusammenhang besteht, ist die Schlussfolgerung wahrscheinlich falsch.

Schuhgröße ← Alter der Kinder → Lesefertigkeit

Collider Junction: A → B ← C

Bei einer Kollisionsverbindung beeinflussen mehrere Ursachen ein Ergebnis. In dem folgenden Beispiel beeinflussen die Ursachen „Talent“ und „Schönheit“ das Ergebnis „Prominente“.  

Talent → Prominente ← Schönheit

So ist für Prominente nur eines von Beiden relevant, um prominent zu sein. Wenn eine bekannte Persönlichkeit ein guter Sänger wäre, müsse er weniger gut aussehen. Und umgekehrt müsste ein Sänger mit weniger Talent besser aussehen.

Wir haben nun einige wichtige methodische Ansätze kennen gelernt haben, um Systemdenken praktisch umzusetzen. Was wir aus den oben genannten methodischen Ansätzen mitnehmen sollten ist, dass wir zuerst den Kontext vergrößern, dann wieder verkleinern, die Zusammenhänge verstehen und die Hintergründe prüfen bevor wir handeln.

Was offen bleibt

Wir haben jetzt ausführlich betrachtet was die Grundannahmen des System Thinking sind, welche Methoden es gibt und was die psychologischen Grundlagen sind, aber es bleiben dennoch einige Fragen für uns offen. Denn so wie wir es verstehen basiert das System Thinking vollständig auf Prozessen von System 2 und es scheint eher so zu sein, dass versucht wird gegen System 1 zu kämpfen. Das ist aber auf Dauer nicht nur extrem anstrengend, es ist auch wenig sinnvoll, wenn man so ausgereifte und leistungsstarke Prozesse einfach ignoriert. Es ist natürlich sinnvoll, die Schwächen unseres Gehirns zu kennen, aber ebenso sinnvoll wäre es, wenn wir lernen, wie wir die Stärken besser nutzen. Zum Beispiel könnte es wirkliches Potential haben, wenn wir die Fähigkeit unseres Gehirns Zusammenhänge herzustellen und auf Basis von wenig Informationen ein mentales Modell zu schaffen nutzen würden. Mit der falschen Auswahl an Informationen wird unser mentales Modell fehlerhaft, aber wenn wir optimieren welche Informationen wir aufnehmen, dann würde auch das mentale Modell besser werden. Strategien wie wir die „richtigen“ Informationen herausfiltern, sollten deswegen besser herausgearbeitet werden. Es wäre also interessant, wenn das System Thinking sich noch gezielter die Stärken unseres Gehirns zunutze macht.

Auch bei der Problemlösung sollten wir keine Energie darauf verwenden, unseren angeborenen Drang schnell handeln zu wollen immer zu unterdrücken. Stattdessen wäre eine mögliche Strategie dem Ganzen eine produktivere Richtung zu geben. Welche Handlungen, die man schnell machen kann, helfen dabei dem Verständnis des eigentlichen Problems und damit einer langfristigen Lösung näher zu kommen? Denn wenn wir unser Verlangen immer unterdrücken bei einem für uns schwerwiegenden Problem nach etwas zu suchen, dass wir sofort tun können, setzt uns das unter Stress und gerade unter Stress treffen wir oft unreflektierte Entscheidungen oder fallen sogar in ein unproduktives „ich gegen die“ Denken.

Alles in allem bietet das System Thinking aber tolle Ansätze, um unser alltägliches Denken und Handeln ins Positive zu lenken. Es zeigt einige relativ einfache aber sinnvolle Methoden auf, wie wir komplexe Vorgänge besser verstehen können und die Zusammenhänge überblicken können. Es gibt einigen bekannten Methoden wie dem Clustern eine neue Richtung. Aber es verlangt auch ein hohes Maß an Selbstreflexion und Selbstkontrolle und ist demnach nicht für jede Situation im Alltag anwendbar. Um die Art des Denkens wie es im System Thinking vermittelt wird, besser zu verbreiten, sollten wir uns fragen, ob es nicht etwas sein sollte, was bereits in unser Bildungssystem einfließen sollte. Nicht nur Inhalte, sondern auch Konzepte und Strategien wie wir mit unserer komplexen Welt umgehen und zielführend Denken lehren.

Gerade im Management ist das System Thinking ein sehr wichtiges Konzept. Instinktive Entscheidungen stehen gutem Management oft im Weg und es wird selten über den Tellerrand des eigenen Teams oder der eigenen Abteilung hinausgeschaut. Aber genau das ist wichtig. Es ist notwendig über die alltäglichen Probleme hinauszudenken und wenn nötig in einem großen Kontext nach Lösungen zu suchen. Dazu ist ein interdisziplinärer Ansatz oft der richtige. Egal wie gut jemand ist, er kann nie ein Experte für alles sein und nie alle Blickwinkel annehmen. Das fliegt häufig noch unter dem Radar, obwohl es in unserer heutigen Zeit ein mächtiges Werkzeug sein kann, um gute Entscheidungen zu treffen.

Ein wichtiger Aspekt, über den man sich bewusst sein sollte, wenn man versucht tiefer in das System Thinking einzusteigen und die Konzepte auch anzuwenden ist, dass es uns nicht leicht fällt. Zum einen ist das System Thinking sehr umfangreich in seiner Theorie und zum anderen ist es sehr schwer die eigenen Denkmuster und Gewohnheiten abzulegen. Jede Veränderung, die zu einer neuen Sichtweise auf die Welt, unsere Arbeit und unsere Beziehungen und wie wir uns zu anderen verhalten führt, kann Widerstand hervorrufen. Es braucht Zeit, etwas Neues zu lernen und wenn wir mit dem Anspruch herangehen, von Anfang an alles wissen zu wollen und alles „richtig“ zu machen, blockieren wir uns im Endeffekt nur selbst.

Aber ist System Thinking jetzt das Schlüsselkonzept des 21. Jahrhundert?

Wir würden sagen ja und nein. System Thinking ist ein wichtiges Konzept und mehr Menschen sollten darauf zurückgreifen, aber es ist nur ein Werkzeug unter vielen. Auch der analytische Ansatz hat beispielsweise seine Berechtigung und kann für manche Probleme die essenzielle Schlüsselrolle spielen. Es sollte also eher so sein, dass wir uns mit einer Reihe von Denkkonzepten und Strategien dem 21. Jahrhundert gegenüberstellen. Würden wir uns zu sehr auf ein Konzept versteifen, würden wir uns ja wieder einschränken und uns weiteren Verbesserungen und Neuerungen verschließen.

Ob wir wollen oder nicht, die Welt wird immer komplexer und es ist immer mehr voneinander abhängig. System Thinking sieht dabei die Individuen und Organisationen als Bestandteile, die auf einer multidisziplinären Ebene in einem großen System arbeiten und nicht als einzelne unabhängige Elemente. Die Akzeptanz, dass alles miteinander in Verbindung steht, hilft uns unsere Interessen, Ziele, Probleme und Lösungen klarer zu kommunizieren und in unserer Realität zu verorten.

Quellen

HERZLICHEN GLÜCKWUNSCH – Sie haben gewonnen!

Über Social Engineering und wie man sich schützen kann.

Jeder kennt E-Mails mit Titeln wie diesem. Eine wildfremde Person verspricht Gewinne in Millionenhöhe. Und alles, was dafür benötigt wird, sind ein paar persönliche Daten. Ein Traum vieler Menschen wird wahr und man will dem Titel glauben. Doch was passiert, wenn man der E-Mail nachgeht? Ist es so leicht, Millionen zu kassieren? Und was gibt es noch für Möglichkeiten meine Daten gegen fantastische Träume einzutauschen?

Dieser Artikel soll die Gefahren des Alltags aufdecken und einfache Wege zeigen sich zu schützen.

Quelle: Instagram @coderhumor

“Studidash” | A serverless web application

by Oliver Klein (ok061), Daniel Koch (dk119), Luis Bühler (lb159), Micha Huhn (mh334)

Abstract

You are probably familiar with the HdM SB-Funktionen. After nearly four semesters we were tired of the boring design and decided to give it a more modern look with a bit more functionality then it currently has. So we created “Studidash” in the course “Software Development for Cloud Computing”. “Studidash” shows your grades and automatically calculates the sum of your ECTS and also an average of your grades. 

Since this is a project for SD4CC it runs as a serverless web application at Amazon Web Services, or AWS for short. Our tech stack for this project consists of Angular, Python, Terraform and some AWS Services like Lambda or S3.

While developing this Web-App we encountered some difficulties but also learned a lot of stuff and we hope that this blog post can give you a quick overview of what we did, what we learned, what problems we had and how we solved them so you have it easier for your next project.

What did we do? 

As mentioned in the abstract, we developed a serverless Web-App called “Studidash” because of said boring design of the SB-Funktionen. First of all, we decided that we wanted to learn a new tech stack and came to the conclusion that Angular as our frontend would be the most modern frontend framework. For our backend we decided to use Python since it’s lightweight and easy to learn. From another course we learned about Terraform so this was something we were already somewhat familiar with and decided to use it for our deployment to AWS. We also used AWS to host the Web-App since we got access to AWS Student Accounts.

After we settled for a project and our tech stack we had to think about a way to make it “cloud native” and started to research some information and came across serverless. We dug a bit deeper and found some useful information. So we came to realize that serverless might be the way to go. Serverless means that our (or maybe your application) isn’t running completely on a “on-prem”-server but is running in the cloud instead. That means the application itself isn’t coupled to the server. Servers are still there but you don’t have to think about the administrative stuff around that. This is all going to be handled by your cloud service provider. The serverless approach brings scalability, high availability and efficient resource usage and management with it. As mentioned, you can focus more on the development itself rather than thinking about servers. A connection to a CI/CD pipeline makes it easy and fast to release a new version of your application. But serverless also has its downsides. The functions have to be as small as possible to only fit one purpose and some Web-Apps can have higher latency due to a cold start (When a function isn’t used for quite some time it gets destroyed and needs to be instantiated again, which takes time). You are also going to have a bad time debugging your application since it isn’t as easy as you might be used to. In the end we went with a static frontend in a S3-Bucket, a backend running as AWS Lambda Functions and AWS API Gateway to connect them. 

Architecture

Our architecture is fully hosted on AWS and our code repositories are hosted on the HdM GitLab server. The clients can access our frontend via their favourite web browser. Our frontend application is hosted in an AWS S3-Bucket. The good thing here is that we don’t have to manage or deploy any web server by ourselves. This reduces the management overhead and in the end the costs. After the frontend is served to the client, the user can input their user credentials to access their grades from the third party service (HdM SB-Funktionen). A HTTP-Request will then be sent to a Lambda Function with an API-Gateway to receive the request. This Lambda Function contains a Python script which will parse the user credentials provided in the received HTTP-Request and use them to make a login at the SB-Funktionen platform and scrape the necessary grades and lecture data from the user. This scraped data will then be preprocessed and returned as a JSON-Object to the frontend.

From the developer side we used Git/GitLab for the version control of our code. In GitLab we created a CI/CD pipeline to build the frontend, the Python grade scraper and a Terraform image to deploy all our neccessary AWS resources. Thanks to the CI/CD pipeline the developer can just push the newest code base to the repository and it will be deployed automatically to AWS.

Architecture overview

Frontend

For our frontend we decided to build an Angular single page application. We made this decision because it’s an up-to-date framework to build fast and easy web applications.

When the user loads the website the header only displays a login component for the HdM SB-Funktionen credentials. This component triggers a POST request to the Lambda Function containing the login data. The Lambda Function then responds and returns several grade objects to the frontend which are identically defined in front- and backend. The grade object exactly maps the table structure of the HdM page. The response then triggers the rendering of the table and you will receive a login message. Also there is an error handling if the login failed. The table can be sorted according to the different values, the grade average and ECTS are calculated and displayed in the header of the page.

Screenshot of our frontend after successful login

Backend

Our backend consists of a Python script which is hosted in a Lambda Function with an API-Gateway to receive HTTP-Requests. The frontend sends a HTTP-Request with the user credentials in the request body to the API-Gateway. The request is then forwarded to the Lambda Function which then injects the HTTP-Request into our Python grade scraper script. The Python script then parses the request body and performs a login at the SB-Funktionen website of the HdM where all the student grades and lectures are stored.

Backend workflow

In our code example the event variable is the received HTTP-Request from the frontend. The received request body is a string, so the content of the body has to be parsed to JSON again. When there is no login data provided, the script will send a HTTP-Response with the status code 401 and a corresponding message.

In the next step our script scrapes all the data we need and parses them into a JSON format which our frontend can handle easily. This JSON data is then sent as response to the Lambda Function which will forward this response to the API-Gateway. The API-Gateway then also forwards this response back to our frontend application where the received data will be processed and displayed.

Code snippet – try-except

We also had to keep some other things in mind. For example what should happen when our backend throws an exception or the third-party-service isn’t available? In our backend we created an error handler which takes a HTTP-Status Code and an error message as parameter, converts the data in the right format for our frontend and then sends the response.

Code snippet – error handling

Our main lambda_handler function is then divided into different parts. Each part is surrounded by a try-except clause to catch exceptions. For example if the third party service is down or if there were no credentials provided by the frontend. This makes our backend more reliable and also gives the user enough feedback to know what’s going on. Since we use an external service we need to think of a solution for the case when the third party service is down, for example for maintenance reasons. A possible solution to this would be to implement a caching mechanism which we don’t provide in the current state.

CI/CD

To make our application as cloud native as possible we implemented a CI/CD pipeline in our project. This pipeline builds our Web-App as well as our Lambda Functions, tests our Python script and deploys them to AWS. For that we are using different stages (build, test, deploy) in our .gitlab-ci.yml file. The build_webapp stage first pulls a Node-image and runs a few lines of script to install all dependencies and then builds the Angular based frontend. While this part is running, a second instance is pulling an Alpine image and is also running a few lines of script to package our Lambda Function(s) into a ZIP file.

After that, the test stage is invoked to test the application before deployment. This is a crucial part in the pipeline since it can reveal mistakes that we made during development before going “live” with the application. When the tests succeed, the next stage is invoked.

In our case, we made the deployment stage manually since we didn’t want to push every small change to AWS and also the Student Accounts had some time limits that would forbid us doing that anyway. But what happens in the deploy stage is fairly simple. Like in the stages before we are pulling an image for Terraform to run the usual Terraform commands like init, validate, plan and apply. This initializes Terraform, validates our main.tf in the root of the repository, creates a plan for creating the different resources in this main.tf and finally applies it. 

But what exactly is in this main.tf file? This file contains every resource we need in AWS and creates it. First of all, we declared variables for our different buckets, one for the Lambda Function and one on which the Angular app is going to be hosted at. After that, we created the S3-Bucket for the Lambda Function and uploaded the ZIP file with the function to the bucket. From there, it gets deployed to AWS Lambda. We also needed to create a role and policy to give the bucket the correct access rights to execute their task properly. After that, the S3-Bucket for the Angular app is created and the needed files are uploaded. This bucket hosts the frontend as a static website which we also configured in our main.tf to do that.

.gitlab-ci.yml file for our pipeline (1/2)
.gitlab-ci.yml file for our pipeline (2/2)

Testing

Testing is one of the most important things when implementing a CI/CD pipeline and with automated deployment. When you don’t implement tests you don’t really know if your application works before deployment and after the deployment, it is too late. So implementing a stage for testing in our project was the way to go. For our Python backend we wrote some basic Unit-Tests to test functionality and also added a test stage for the backend to our CI/CD pipeline.

We also managed to write an End-To-End-Test for our frontend which checks if the Error-Snackbar is shown when the user puts in wrong credentials. The harder part in this scenario was to get it running in the CI/CD pipeline, which we unfortunatly didn’t manage to do.

What problems did we have and how did we solve them?

One of the biggest problems we encountered was due to the fact that we only had access to an AWS Student Account. It ensured that we only had restricted access to AWS. For example we needed to create different kinds of roles to deploy our Lambda Function with the correct set of rights to be executed. Due to the restrictions we were not allowed to give the roles the needed permissions which caused our CI/CD pipeline to fail and our project didn’t get fully deployed. This could only be solved by getting a “real” AWS Account which gives you all the permissions you would need.

Another problem we faced was CORS (Cross-Origin Resource Sharing). In the first steps of our development we always got a CORS-Error when our frontend was requesting the grades and lecture data from our backend service. The reason for that was because in our Python backend script we just sent back the JSON-Object containing all the data but without any HTTP-Headers to our frontend. The frontend then failed to receive the response because the URL of the API-Gateway was different from the URL that our frontend had. To fix this problem we had to set the Access-Control-Allow-Origin HTTP-Header in the response from our backend. 

Code snippet – http-headers (CORS)

After that, the request worked and our frontend could receive the scraped data.

Another problem we had was to integrate our End-to-End-Test in our CI/CD-pipeline, which we unfortunately didn’t manage to fix in time. It would’ve required us to have a runner that has a browser available but we weren’t able to set that up. We managed to implement an E2E-Test which is running locally without any problems. So at least we have a bit of code quality assurance here. Having to run the tests manually isn’t what you want to do for a fully automated cloud native approach.

Conclusion

It was quite a long way from where we started, but in the end we managed to get our Web-App running on AWS as we liked. We made it a bit difficult in the beginning because we said we wanted to learn some new technologies like Python and Angular, so we first had to learn those. But we also had to learn about serverless-architecture. It is also something to look forward to working with in the future.

At the presentations we found out about AWS Amplify, which is basically a tool by AWS to get serverless Web-Apps running as fast as possible without the need of S3-Buckets. It showed us that there isn’t really the “one and only” way to get something running in the cloud. There are many possible solutions. 

In our opinion we learned a lot about AWS, serverless-architecture and cloud in general. But also about developing an application where you don’t have to think about renting and maintaining a server. Maybe we can continue with this project in the near future and give the HdM SB-Funktionen a new look 🙂

Enterprise Social Audio – Research, Implementation and Opportunities

Audio in the form of podcasts has become increasingly popular as a digital medium in recent years. In the U.S., one in two people have already consumed podcasts and 32% are monthly listeners. In Germany, one in five listens to a podcast at least once a month. In addition to the podcast phenomenon, which has existed and established itself in the market for some time, a new medium is now blossoming – social audio. Unlike podcasts, which are a one-way broadcast medium (they are recorded to be listened to in the future), this is real-time audio. Listeners can actively participate in the dialogue.

Social audio apps like Clubhouse seem to benefit from several factors. Headphones and earbuds have become ubiquitous; Bluetooth-based offerings, like Apple’s Airpods, have built-in microphones, making communication easy and intuitive. The podcast boom also appears to be a driving factor. Audio-based content has an enormous reach, and users are now accustomed to audio formats. Last but not least, digital voice communication has become commonplace, driven by voice messaging and phone calls via messenger platforms like Whatsapp, among others.

The Corona pandemic also seems to have played its part, as people began to experience Zoom Fatigue after only a short time. On the one hand, text messages simply don’t convey the emotions and nuances that human character requires – especially during isolation. On the other hand, Zoom calls and video calls are simply too exhausting, too demanding for us humans in the long run. For example, we mainly look at our own faces to make sure that the vegetables from lunch are not still stuck between our teeth. In general, this can be summarized under the camera effect. Many people are blocked and do not dare to speak if they feel they are being watched.

Currently, there are more than 40 companies or apps that are active in the field of “social audio”. The largest include Clubhouse, Twitter Spaces, Facebook Live Audio, Spotify Greenroom and Reddit Talk. In June 2020, Discord announced a new tagline, “Your place to talk,” in an attempt to make the service seem less gamer-centric to capitalize on people’s need to connect during the pandemic. In response to the hype around Clubhouse, a new feature has now also been implemented that further supports this new direction – Discord Stages. Other notable mentions are Fireside, Cappucino and Angle Audio. Interestingly enough Angle Audio switched to a SAaaS (Social Audio as a Service) offering recently.
ProductHunt reported a significant increase in new audio products for 2020, explaining that face-to-face encounters are currently becoming more difficult to maintain due to social distancing, but social connections and exchange are needed more than ever.

Since audio as a medium is still a niche market in organizations, we at InspireNow wanted to find out whether this hype, this success in terms of audio-based content, can also find resonance in the business and professional environment. We perceive great potential, especially in terms of knowledge transfer.

That is why we have decided to delve deeper into the topic by means of an innovation project. The overall goal of this innovation project was to evaluate whether Enterprise Social Audio works, i.e. whether the added value and appeal of social audio can also be used in the context of companies, institutions and organizations. This was evaluated in the context of our existing SaaS solution InspireNow.


If you're looking for a step-by-step guide on how to include and implement 
social audio in your own mobile app, I'm afraid this blog post is not for you. 
Rather I'm going to give a birdseye view over the topic itself and depict the 
procedure of analyzing requirements for enterprise context. 
I'll describe some challenges encountered during development and 
provide insights into security, GDPR and compliance concerns. 


Approach

In the first step, a feasibility study was carried out on the basis of a proof of concept in order to obtain initial certainty for the technical viability.

Continue reading

Why It’s So Easy to Hack Your Smart Home

Every day, new smart home accessories go online for the first time to join the Internet of Things (IoT). Many of them enjoy the unwarranted trust of their owners. This blog post is a case study of the haunted smart home.

Earlier this year, I visited my family for a few days. After sitting and talking at the kitchen table for a bit, they told me about their new smart wall plugs that integrate into their Apple Home ecosystem. Using the plugs, they can turn on their kitchen lights from their phones — or automatically at sunset. Pretty cool. After I had a closer look at one of the plugs, I searched for the brand on the Internet, because I had never heard of it. Turns out, these “Meross Smart Plugs” are the first item that pops up on Amazon when you search for a HomeKit-compatible socket outlet that can switch “dumb” devices like lamps, coffee makers or hi-fi equipment on and off. At the time of writing, they cost about 17 € apiece.

As I had never heard of the brand and I would consider myself somewhat of a curious person, I thought it’d be a good idea to see if it was possible to control these plugs without being a part of the smart home environment. So I continued chatting with my family while investigating the local network.

Continue reading

Die elektronische Patientenakte – Wie sicher ist die zentrale Digitalisierung im Gesundheitswesen?

Oftmals ist es für Ärzte schwer Behandlungen optimal durchzuführen, weil Befunde fehlen oder der Arzt keine Informationen darüber hat wie frühere Behandlungen abgelaufen sind. Um dies in Zukunft vermeiden zu können, wurde am 01. Januar 2021 die elektronische Patientenakte (kurz: ePA) in einem 3 Phasen Modell eingeführt. In der ersten Phase konnten alle gesetzlich Versicherten eine ePA bei ihrer Krankenkasse beantragen. Im zweiten Quartal startete die Rollout-Phase um testweise Arztpraxen anzubinden. Seit dem 01. Juli 2021 sind alle Ärzte gesetzlich verpflichtet die ePA anzubinden. [11]

Dieser Blogbeitrag beschäftigt sich damit was die ePA eigentlich ist, wie die darunterliegende Technik funktioniert und welche Rolle der Datenschutz und die Informationssicherheit dabei spielt.

Continue reading

Unsafe Languages, Inadequate Defense Mechanisms and Our Dangerous Addiction to Legacy Code

bugs, bugs everywhere

A recent study found that 60-70% of vulnerabilities in iOS and macOS are caused by memory unsafety. Microsoft estimates that 70% of all vulnerabilities in their products over the last decade have been caused by memory unsafety. Google estimated that 90% of Android vulnerabilities are memory unsafety. An analysis of 0-days that were discovered being exploited in the wild found that more than 80% of the exploited vulnerabilities were due to memory unsafety.

(Gaynor, 2019)

Over the last 20 years, developing secure software has become increasingly important. To this day, we write a significant amount of code in languages with manual memory management. However, the Peter Parker principle states that “great power comes with great responsibility”. Many scoring systems classify, enumerate and rank prevalence of known vulnerabilities. In theory, developers should be aware of common programming mistakes leading to these bugs. Yet, the last 20 years are living proof that manual memory management is highly error-prone. Because most systems share memory between data and instructions, controlling small portions of memory can be enough to take over entire systems (Szekeres et al., 2013). The fight over attacking and defending the security measures on top of unsafe systems is often called the eternal war in memory.

In this blog post, I want to examine what properties make programming languages like C/C++ fundamentally unsafe to use. After that, I briefly discuss the inadequacies of our defense mechanisms. Last of all, I reflect on the sociopolitical implications arising from the continued use of unsafe languages.

Continue reading

Supply Chain Attacks – Die Lieferkette schlägt zurück

ein Artikel von Verena Eichinger, Amelie Kassner und Elisa Zeller

Nach SolarWinds schafft es eine neue Schlagzeile aus der IT-Welt in den Massenmedien ihre Kreise zu ziehen. Über 500 Supermärkte in Schweden mussten wegen eines Cyberangriffs schließen. Wie bereits bei SolarWinds handelt es sich auch hier um eine Supply Chain Attack (SCA). Mittlerweile fällt dieser Begriff immer häufiger und er schafft es nicht nur allgemein für Aufmerksamkeit zu sorgen, sondern führt auch zu großer Besorgnis in IT-Kreisen. [12]

Wir alle, die wir diesen Artikel lesen, sitzen gerade vor einem technischen Gerät, das ein komplexes Zusammenspiel aus Hardware und Software darstellt. Diese Komplexität können wir in der heutigen Zeit nicht mehr vollständig durchdringen, oder wissen Sie, woher die einzelnen Komponenten stammen und wer zu diesen Zugang hatte? Ist jegliche Software auf dem neuesten Stand und sind genutzte Bibliotheken auch wirklich vertrauenswürdig? Kann man sich sicher sein, dass in das letzte Softwareupdate keine Malware eingeschleust wurde? Das alles sind Fragen, die sich stellen, wenn man sich mit SCAs befasst und beginnt, die Tiefe der dahinterstehenden Problematik zu begreifen. Zwar waren bisher stets Firmen das Ziel der Angriffe, doch wie es der kürzliche Vorfall bei der Supermarktkette Coop in Schweden zeigt, sind deren Auswirkungen auch beim Endnutzer angekommen. An dieser Stelle lohnt es sich für jedermann, die Thematik genauer zu betrachten. Dazu wird im ersten Abschnitt dieses Artikels das zugrundeliegende Prinzip der SCAs erläutert und geklärt, womit wir es genau zu tun haben. Anschließend werden die genannten Beispiele SolarWinds und der Angriff auf Kaseya, zu dessen Opfern auch die Supermarktkette Coop gehört, betrachtet. Diese beiden Angriffe sind Musterbeispiele für die Gefahr und den Wirkungsgrad der SCAs. Zuletzt soll es darum gehen, was gegen die Bedrohung durch SCAs unternommen werden kann.

Continue reading

Wie man Menschen dazu bringt Dinge zu tun, die sie nicht tun sollten

Disclaimer

Der folgende Artikel bedient sich einer zynischen, teils sarkastischen Sprache und ist als “Anleitung für Manipulatoren” verfasst. Diese Perspektive ist selbstverständlich als stilistisches Mittel zu verstehen – das Ziel des Artikels ist Aufklärung und Sensilibisierung.

Einleitung

Nicht nur Maschinen lassen sich hacken; auch Menschen sind dazu hervorragend geeignet – wenn nicht sogar besser. Das sicherste System (das nicht autotom handelt) hat nach wie vor eine große Schwachstelle: Der Mensch.

Der Mensch ist ein Opfer seiner eigenen Psyche und kognitiver Verzerrungen. Diesen entkommt selbst der sorgfältigste, aufmerksamste und achtsamste Mensch nicht immer. Das öffnet Tür und Tor für Manipulation.

Zum Glück – muss man fast sagen. Denn wenn der Gesetzgeber mal wieder auf die Idee kommt, Ihnen als Unternehmen vorzuschreiben, wie Sie Ihre Kunden und Nutzer zu informieren haben, welche Auswahlmöglichkeiten Sie ihm zu stellen haben, so bleibt Ihnen immer noch ein geschickter Umweg, Recht umzusetzen, aber den eigentlichen Wesensgehalt zu umgehen.

Falls Sie ein windiger Hacker sind, dann scheren Sie sich wahrscheinlich ohnehin wenig um Gesetze. Wie schön: Dann stehen Ihnen sogar noch mehr unmoralische Manipulationsmöglichkeiten zur Verfügung.

Dieser Artikel gibt einen Überblick über verschiedene Methoden und psychologische Prinzipien, mit denen sich Menschen dahingehend manipulieren lassen Dinge zu tun, die sie eigentlich nicht tun möchten oder sollten – bezogen auf Computersysteme, Coorporate Security, aber auch auf den Alltag im WWW. Da der Artikel den Charakter eines Überblicks hat, kann er einen Ansatzpunkt geben, sich tiefergehend mit den einzelnen Prinzipien auseinander zu setzen.

Und Achtung: Diesen Manipulationen sind nicht etwa Zukunftsmusik – wir begegnen Ihnen bereits Tag für Tag.

Manipulation

Unter Manipulation versteht man das Horvorrufen einer Handlung, einer Handlungsänderung, einer Einstellung oder Einstellungsänderung unter Einflussnahme, die dem Betroffenen nicht unmittelbar bewusst ist. Die beste Manipulation ist diejenige, die nicht auffällt und bei der der Manipulierte davon überzeugt ist, eine freie, unmanipulierte Entscheidung getroffen zu haben.

Das an sich ist nicht zwangsläufig moralisch verwerflich. Gute Nutzerinterfaces können den Menschen dahingehend beeinflussen, dass sie Flüchtigkeitsfehler vermeiden. Der Begriff “Manipulation” hat jedoch eher eine negative Konnotation. In diesem Kontext wäre dies beispielsweise ein Nutzerinterface, das Flüchtigkeitsfehler bewusst herbeiführt oder fördert und als Methode der Einflussnahme ausnutzt.

Continue reading