Stop giving feedback, ask for it instead. Watch Jenni Jepsen’s webinar.

For many of us, being a leader means having every little thing under control, always knowing what is going on, and telling everyone what to do. However, this role model does not equal success and leadership. 

Many psychologists and managers agree that a new kind of leader should be able to shift the tasks and even give others control over something. In this scenario, not only the leader makes his or her life more comfortable, but also the team feels more motivated, responsible, and eager to do something. In other words, it is crucial for a leader to set the right environment for others to excel and act to the maximum extent of their creativity and intellect.

However, it is easier to say than to do it because the over-controlling way of behavior is hardwired in our brains. 

Neuroscience shows that „the language we use affects how our brains wire.“

That’s why we need to relearn and train our brains to behave differently: to trust, to ask for feedback, to learn that it’s okay not to have all the answers. 

This kind of leadership is called „Intent-Based Leadership„. Jenni Jepsen will explain how and why it works from the perspective of neuroscience during the workshop on 30 Nov – 1 December 2020

The crucial part of this leadership methodology is feedback. Feedback is useful and helpful. However, we need to stop giving it. Neuroscience shows that feedback works when we understand and believe that it will lead to good things for us.

We need to learn to ask for feedback because, in this case, it’s our choice to take in and use it for growth and improvement. We are thankful for the feedback then. It makes us better – that’s the point of feedback. Creating an ask-for-feedback mindset is key to it.

This way, people will feel free to share their thoughts and ideas. In order to do that, team members should have access to information. This will lead to a higher motivation level inside a working group.

Learn how to create an ask-for-feedback mindset, and why it can help to achieve excellence in your organization in this webinar by Jenni Jepsen. 

As a primer for the upcoming training course on Intent-Based Leadership, you can rewatch the online meetup we held with Jenni Jepsen in May 2020.

Hand-picked related content:

Create an Ask-for-Feedback Mindset Workshop with Jenni Jepsen from TechTalk Software AG on Vimeo.

Get to know TechTalk: Interview mit Senior Dev Michael Altmann

In unserer Interviewserie “Get to know TechTalk” stellen wir TechTalk Mitarbeitende vor. Diesmal verrät uns Senior Developer und Tech Lead Michael Altmann, der bereits seit 2013 bei TechTalk tätig ist, mit welchen Methoden er arbeitet, was die Rolle eines Tech Leads ausmacht und welche Herausforderungen es im Entwicklungsprozess gibt.

Was ist dein aktuelles Aufgabengebiet bei TechTalk?

An vier Tagen pro Woche arbeite ich als Tech Lead eines 7-köpfigen Developer Teams für einen Kunden aus dem öffentlichen Bereich. Freitags bin ich meist im TechTalk Büro. Dabei unterstütze ich unter anderem Teams und Developer innerhalb der TechTalk bei der Umsetzung von Projekten, führe Bewerbungsgespräche und trage durch die Organisation sowie Moderation von internen Formaten wie z.B. dem TechDiscuss zum Wissensaustausch bei.

Was macht die Rolle des Tech Leads aus und was gefällt dir besonders daran?

Ich finde die Rolle des Tech Leads sehr spannend und vor allem abwechslungsreich. Gemeinsam mit dem selbstorgansierten Team werden technische Lösungen entworfen und umgesetzt. In Zusammenarbeit mit Product Ownern sowie UX Designern bei der Anforderungserhebung ist man mit dem technischen Input auch am Produktdesign beteiligt. Die Rolle erfordert aber auch Leadership-Fähigkeiten. Die Skills jedes Teammitglieds müssen erkannt und Dynamiken im Team beobachtet werden. Nichtsdestotrotz muss auch Zeit zum Programmieren bleiben, damit die Beziehung zum Code nicht verloren geht.

Mit welchen Methoden löst du Herausforderungen im Entwicklungsprozess?

Als Tech Lead löse ich Herausforderungen an mehreren Fronten. Je nach Problem, Ziel und Team setze ich entweder eine spezifische oder eine Kombination aus mehreren Methoden ein, wobei ich darauf achte, dass mich die Methode im Daily-Doing unterstützt und nicht einschränkt. Dabei kommen immer agile Vorgehensweisen zum Einsatz, meistens Scrum, manchmal auch Kanban.

Darüber hinaus nutze ich bei komplexeren Domänen das Konzept des Domain Driven Designs. Das Ziel ist ein vereinfachtes Modell der Domäne, die das gesamte Team versteht, im Code abzubilden. Domain Driven Design lässt sich sehr gut mit Behavior Driven Development kombinieren, da beide eine gemeinsame Sprache zwischen Entwicklungsteam und Stakeholder als Ziel haben. Impact Mapping und Story Mapping sind ebenfalls Methoden, die ich regelmäßig verwende. Darüber hinaus ist Continuous Integration/Continuous Delivery wichtig, um in kurzen Zeitabständen das System in Betrieb zu setzen und Business Value liefern zu können. Wir experimentieren aber auch gerne mal und probieren unterschiedliche Methoden wie Event oder Story Storming aus.

In welchen Projekten hast du bei TechTalk bereits gearbeitet?

Zu Beginn meiner Karriere habe ich vor allem in In-House sowie Wartungsprojekten gearbeitet. Das waren eher kleine Teams, in denen ich meist mehrere Rollen übernommen habe, zum Beispiel die des Entwicklers und auch die des Product Owners. Besonders spannend war, in die verschiedenen Positionen hineinschnuppern zu können. Hierfür bin ich TechTalk sehr dankbar, dass so viel Vertrauen in mich gesetzt wurde. Mittlerweile bin ich hauptsächlich für Kundenprojekte zuständig. Beim aktuellen Kunden haben wir ein Scrum-of-Scrum Setup, welches aus 7 “cross functional teams” besteht.

Wie sieht dein Arbeitsumfeld aus?

Unabhängig vom Projekt ist es generell so, dass die TechTalk eine flache Hierarchie hat. Für mich bedeutet das, dass ich mich aktiv einbringen kann und so der Wissensaustausch unter Devs, UX Designern und Testern gefördert wird. Was ich zudem sehr schätze sind die netten Kolleginnen und Kollegen, von denen man sehr viel lernen kann. Ich bin bereits fast sieben Jahre bei TechTalk, dabei sind schon einige gute Freundschaften entstanden.

Wie kann man sich den Wissensaustausch unter EntwicklerInnen bei TechTalk vorstellen? Wie teilt ihr euer Wissen?

Zum einen gibt es den Austausch intern im Projektteam. Damit jedoch keine Wissenssilos entstehen, wurden bei TechTalk einige Formate etabliert, die dazu beitragen, den Austausch über Teamgrenzen hinweg zu fördern. In diesen Sessions werden unterschiedliche Themen diskutiert – von „Code Kommentare“ bis zu „Aufgaben des Tech Leads“ ist alles dabei. Aber auch Coding Dojos und Projektvorstellungen werden regelmäßig abgehalten. Dabei stehen immer die Diskussion sowie der Austausch im Vordergrund. Durch die verschiedenen Formate werden regelmäßig Entwickler-News, Updates oder Buchempfehlungen geteilt. Eine meiner Empfehlungen ist das Buch „Unit Testing Principles Practices Patterns“ von Vladimir Khorikiv.

Wie unterstützt dich TechTalk, damit du dich Themen abseits deiner Kundenprojekte widmen kannst?

In dem Rahmenbedingungen geschaffen werden, um Ideen zu diskutieren und diese auch umsetzen zu können. Das fördert den Mut, Experimente zu machen. Generell ist man nicht zu 100% seiner Arbeitszeit in Projekten verplant. Zudem gibt es sogenannte  Circles, Interessensgruppen, welche dazu motivieren, sich der Themen abseits des Arbeitsalltags anzunehmen und voranzutreiben. Hier kann man unabhängig einer Rolle beitreten und mitwirken.

Welche Konferenzen und Meetups würdest du Devs ans Herzen legen – auch in Zeiten von Corona?

Ich wähle Konferenzen und Meetups, die ich besuche, je nach persönlicher sowie beruflicher Weiterentwicklung und Interesse aus. Derzeit ist das Domain Driven Design, weil es mir eine Sammlung von Methoden bietet, mit denen ich gute Erfahrungen gemacht habe. Erst vor kurzem habe ich am remote DDD Meetup in London teilgenommen. Zum Schluss ein kleiner Tipp: Jetzt in Zeiten von Corona bieten die meisten Meetups Videoübertragungen an – wieso also nicht mal ein Meetup in New York, Oslo oder Sydney besuchen?

Auch die TechTalk organisiert regelmäßig Trainings und Workshops mit international hochkarätigen Speakern. Wirf einen Blick auf unser Trainingsangebot oder kontaktiere uns gerne direkt.

Möchtest Du uns als Arbeitgeber näher kennenlernen? Besuch unsere Karriereseite oder mach dir ein Bild von uns auf Kununu.

Wie funktioniert die Preisgestaltung bei agilen Verträgen?

Bei der Preisgestaltung für Softwareverträge prallen zwei vollkommen gegensätzliche Interessen aufeinander: Der Auftragnehmer möchte einen möglichst hohen Stundensatz für das Projekt erzielen. Der Auftraggeber wiederum möchte die Projektkosten möglichst niedrig halten und den maximalen Nutzen mit dem eingesetzten Budget erreichen. Das ist natürlich ausschließlich die trockene, vertragliche Sicht, denn die Realität sieht nicht immer so aus.

Dennoch möchten wir ein Vertragsmodell finden, dass diese Interessen auch auf dem Papier gleichmäßig berücksichtigt. Wir zeigen Ihnen mögliche Fallstricke sowie einen alternativen Lösungsansatz, von dem beide Parteien in einem agilen IT-Projekt profitieren.

Risikoteilung: Ein entscheidender Aspekt für Softwareverträge

Bei einer Zusammenarbeit in agilen Projekten ist das Risiko für beide Vertragsparteien unumgänglich. Denn selbst, wenn es ein sehr genaues Briefing gibt und Anforderungen klar erscheinen, können und sollen sich während der Umsetzung Änderungen ergeben dürfen. Dieses Risiko versucht man mit einem agilen Vorgehensmodell einzugrenzen.

Ein konkretes Risiko, das auftreten kann, ist, dass die Umsetzung einer User Story deutlich länger dauert als geplant. Daher ist es wichtig, sich vor dem Abschluss eines Softwarevertrags mit dem Thema Risikoteilung zu beschäftigen. Denn je nachdem, wie Sie Ihren Softwarevertrag gestalten, tragen Auftragnehmer und Auftraggeber einen unterschiedlichen Anteil des Risikos.

In Folge zeigen wir, wie bei zwei gängigen Preismodellen (T&M bzw. Arbeitspreis pro Teamstunde und Preis pro Story Point) die Risikoverteilung aussieht:

Preis pro Teamstunde

Eine weit verbreitetes Abrechnungsmodell ist die Abrechnung auf Basis von Teamstunden. Dies ist ein klassisches T&M-Modell, bei dem das Risiko beim Auftraggeber liegt. Er bezahlt den Auftragnehmer für die abgearbeiteten Stunden, unabhängig vom Ergebnis der geleisteten Arbeit. 

Preis pro Story Point

Bei diesem Modell wird der Auftragnehmer bezahlt, wenn er einen Story Point fertiggestellt hat. Das soll das Team des Auftragnehmers motivieren, effizient zu arbeiten. Das Risiko bei diesem Modell liegt ganz klar beim Auftragnehmer. Wenn er keine fertiggestellten Story Points liefert, erhält er auch keine Bezahlung. Das Risiko, das natürlich trotzdem beim Auftraggeber verbleibt, ist, dass er keine lauffähige Software hat und die „Time to Market“ darunter leidet.

Wie Sie leicht erkennen können, haben die beiden Varianten einen entscheidenden Nachteil: Sie verteilen das finanzielle Risiko für die Zusammenarbeit sehr ungleichmäßig. Das Risiko liegt hauptsächlich bei einer der beiden Parteien. 

Doch es geht auch anders. Im Video zu diesem Blogbeitrag erklärt Richard Brenner, Agile Coach bei TechTalk, diesen Unterschied ausführlich und stellt einen alternativen Ansatz vor. 

Interessen von Auftraggeber und Auftragnehmer vereinen

Bei TechTalk beschäftigen wir uns schon seit vielen Jahren mit der Lösung dieses Problems. Um das Risiko auf beide Parteien gleichmässig zu verteilen, haben wir ein Modell entwickelt, welches die beiden Varianten Preis pro Teamstunde und Preis pro Story Point kombiniert.

Unser Modell „Pay per Story Point and Hour“ teilt die Projektrisiken zwischen Auftragnehmer und Auftraggeber auf, indem wir die Abrechnung aus folgenden Komponenten zu unterschiedlichen Teilen kombinieren:

  1. Preis pro Story Point: Fixpreis-Anteil pro gelieferter Funktionseinheit gemäß der zu Beginn angenommenen Lösungskomplexität
  2. Reduzierter Preis pro Story Point: Reduzierter Fixpreis-Anteil pro gelieferter Funktionseinheit, wenn zum Beispiel ein unvorhergesehener Story Point dazukommt
  3. Arbeitspreis pro Teamstunde: Variabler Preis-Anteil pro tatsächlich geleisteter Teamstunde des Auftragnehmers

Sehen wir uns ein konkretes Beispiel an, um dieses Modell mit seinen Auswirkungen in unterschiedlichen Szenarien genauer zu verstehen. 

Beispielrechnung für das kombinierte TechTalk-Modell

Gehen wir für das Beispiel von folgenden Annahmen aus: 

  • Der Aufwand für einen Story Point ist erfahrungsgemäß 8 Stunden für dieses Team in diesem Projekt. 
  • Der Preis für eine Teamstunde liegt bei 100 EUR. 

Damit beträgt der kalkulierte Verkaufspreis für einen Story Point 800 EUR (8 * 100 EUR pro Stunde). 

Dieser wird geteilt in:

  • Einen fixen Anteil von 400 EUR pro Story Point
  • Einen variablen Anteil von 50 EUR/Stunde (800 EUR – 400 EUR / 8 Stunden pro Story Point)

Zusätzlich wird ein reduzierter Preis für einen unvorhergesehenen Komplexitätszuwachs mit 100 EUR pro Story Point festgelegt.

In unserem Beispiel möchten wir den Anteil gleichmäßig splitten. Die Abbildung unten zeigt die Auswirkungen im Vergleich zu einer ausschließlichen Abrechnung über Story Points oder Stunden. Bei einer Abrechnung ausschließlich über Story Points oder Stunden liegt das volle Risiko immer bei einer der beiden Vertragsparteien. Nicht so beim kombinierten Modell. Bei diesem Modell wird das Risiko aufgeteilt.

Wie kann die Aufteilung erfolgen?

Sehen wir uns im nächsten Schritt an, wie sich diese Aufteilung auf drei unterschiedliche Szenarien auswirkt. Gehen wir hierfür davon aus, dass der Gesamtumfang des Angebots 1.000 Story Points beträgt. 

1. Szenario: Genaue Einhaltung der Planung

Es wurden folgende Leistungen erbracht: 

  • 1.000 Story Points
  • 8.000 Stunden

Diese wurden wie folgt abgerechnet:

  • 1.000 Story Points * 400 EUR = 400.000 EUR
  • 8.000 Stunden * 50 EUR = 400.000 EUR

Damit ergeben sich Gesamtkosten von 800.000 EUR und ein durchschnittlicher Verkaufspreis einer Teamstunde von 100 EUR. Die anfänglichen geschätzten Kosten bzw. der Verkaufspreis pro Teamstunde werden damit für beide Seiten erfüllt. 

2. Szenario: 5 % weniger Komplexität, 10 % weniger Aufwand

Es wurden folgende Leistungen erbracht: 

  • 950 Story Points (5 % Reduktion)
  • 6.840 Stunden (10 % Reduktion der Stunden pro Story Point * Anzahl der gelieferten Story Points)

Diese wurden wie folgt abgerechnet:

  • 950 Story Points * 400 EUR = 380.000 EUR
  • 6.840 Stunden * 50 EUR = 342.000 EUR

Damit ergeben sich Gesamtkosten von 722.000 EUR. Die Projektkosten für den Auftraggeber sinken. Der durchschnittliche Verkaufspreis einer Teamstunde beläuft sich auf rund 106 EUR. Der Verkaufspreis für eine Teamstunde steigt für den Auftragnehmer.

3. Szenario: 30 % mehr Komplexität, 15 % mehr Aufwand

Es wurden folgende Leistungen erbracht: 

  • 1.300 Story Points (30 % mehr Komplexität)
  • 15.600 Stunden (15 % mehr Aufwand pro Story Point * Anzahl der gelieferten Story Points)

Diese wurden wie folgt abgerechnet:

  • 1.000 Story Points * 400 EUR = 400.000 EUR
  • 300 Story Points * 100 EUR = 100.000 EUR (reduzierter Preis für unvorhersehbare Komplexität)
  • 15.600 Stunden * 50 EUR = 780.000 EUR

Damit ergeben sich Gesamtkosten von 1.280.000 EUR. Die Gesamtkosten für den Auftraggeber steigen. Der durchschnittliche Verkaufspreis einer Teamstunde liegt bei rund 82 EUR und sinkt demnach für den Auftraggeber.

Vereinfacht ergeben sich dadurch für Auftragnehmer und Auftraggeber folgende Konsequenzen abhängig vom jeweiligen Szenario:

Risikoteilung für Auftragnehmer und Auftraggeber

Die Bedeutung von Checkpoints

Eine wichtige Komponente des kombinierten Modells ist der Checkpoint. An diesem überprüfen Sie, ob die getroffenen Annahmen noch stimmen. Der Checkpoint kann zum Beispiel nach sechs Sprints gesetzt werden. Hier sollen Fragen geklärt werden, wie:

  • Stimmt die angenommene Effizienz der Umsetzung? 
  • Nimmt die Komplexität im Verlauf der Detaillierung sehr stark zu? 
  • Konnten wir die anfänglichen Annahmen prüfen und technische Risiken abmildern?

Erfahrung und Vertrauen sind entscheidend

Es ist wichtig, dass Sie den Aufwand pro Story Point und die Geschwindigkeit des Entwicklungsteams (Velocity) kennen. Daher sollte zumindest eine initiale Phase in genau dem Projekt-Setup starten, sodass eine realistische Einschätzung von Story Points möglich ist. Das kombinierte Modell ist somit ein Modell, dass auf Erfahrung basiert. Und auf Vertrauen. 

Sind Erfahrung und Vertrauen gegeben, ist diese Modell gut geeignet, um das Risiko zwischen den beiden Vertragsparteien gleichmäßig zu verteilen. Das kombinierte Modell schafft zwei Vertragsparteien, die gleichberechtigt miteinander kommunizieren und arbeiten können.


Richard Brenner TechTalk

Haben Sie Fragen?

  • Sie wollen mehr zum Thema Preisgestaltung für Software Verträge wissen ?
  • Sie wollen in Ihrem Unternehmen ein Umfeld entwickeln, um die Arbeit nach agilen Methoden zu ermöglichen?

BItte kontaktieren Sie Richard Brenner gerne via eMail oder auf LinkedIn mit Ihren Fragen.

 

Agile Test Engineers bei TechTalk: ein Blick hinter die Kulissen

In unserer Interviewserie “Get to know TechTalk” stellen wir TechTalk Mitarbeitende vor. Heute unterhalten wir uns mit Agile Test Engineer Philip Rockenbauer, der seit Februar 2018 Teil des Teams ist. Wie er seine Projekte meistert oder welche Technologien und Werkzeuge dabei zum Einsatz kommen, erfährst du in diesem Interview.

Was ist dein aktuelles Aufgabengebiet in der TechTalk?

Ich arbeite in einem Team aufgeteilt auf Product Owner, Developer und Test Engineers. Wir sind für verschiedene Projekte mit unterschiedlichen Kunden zuständig. Je nach Größe dauern manche Projekte nur wenige Monate, manche laufen aufgrund der Wartung auch mehrere Jahre. Gemeinsam mit einer Kollegin bin ich für das Testing im Team verantwortlich. Das beinhaltet hauptsächlich das Abschließen von manuellen Tests sowie die Unterstützung der Developer bei der Testautomatisierung. Zudem organisiere ich unter anderem TechTalk-interne Testing Veranstaltungen.

Was fasziniert Dich am Testing?

Am meisten Spaß am Testen macht mir das Erforschen einer Anwendung. Manchmal hat man das Gefühl, ein Puzzle lösen zu müssen. Man sucht Probleme sowie deren Zusammenhänge und versucht, diese mit seiner Erfahrung sowie Kreativität zu lösen. Spannend finde ich vor allem auch, dass nicht alles vorgegeben ist und man sehr selbständig arbeitet.

Was macht für dich einen guten Tester aus?

Man sollte aufgeschlossen für Neues sein und Spaß am Entdecken einer Anwendung haben. Das Mindset sollte nicht „make-it-work“ sondern „break-it“ lauten. Ein guter Tester analysiert Probleme, geht diesen auf den Grund und nimmt nichts als gegeben hin. Außerdem ist es wichtig, Selbstdisziplin mitzubringen. Das heißt, man forscht intensiv nach, hinterfragt vieles und deckt nicht nur den Happy Path ab. Der Happy Path ist das einfachste Szenario, bei dem die Anwendung funktioniert und wäre nur das Minimum. Es gibt jedoch auch Spezialfälle und das Kreative an der Position des Test Engineers ist es, sich diese einfallen zu lassen. Außerdem ist es wichtig, im Team gut zusammenzuarbeiten, dabei ist viel Fingerspitzengefühl gefragt wenn es um Feedback zu Fehlern in der Anwendung geht.

Wie arbeitest du im Team?

Generell arbeiten wir in unserem Team agil, dabei kommen je nach Projekt entweder Scrum oder Kanban zum Einsatz. Als Tester ist man in konstantem Austausch mit Product Ownern sowie Developern. Akzeptanzkriterien werden abgeklärt und sobald etwas gefunden wird, wie zum Beispiel ein Fehler in der Anwendung, wird in Absprache mit dem Product Owner entschieden, ob dieser behoben werden muss oder nicht. Manchmal verhält sich das System nur anders als erwartet und es ist unklar, ob wirklich ein Fehler vorliegt. Mit den Devs werden die Findings besprochen und dann Bugreports erstellt.

Mit welchen Testarten und -verfahren arbeitest du?

Bevor der Entwicklungsprozess beginnt, schaue ich gemeinsam mit dem Product Owner die Kundenanforderungen durch und prüfe, ob diese Sinn machen, wie wir sie testen würden und ob weitere Informationen benötigt werden. Als Tester brauche ich konkrete Spezifikationen, damit nachher keine Fragen auftauchen. Im Idealfall definiere ich Testszenarien in Form von Gherkins. Diese werden dann als Basis für die Entwicklung der automatisierten Tests verwendet. Manuelles Testen mache ich häufig explorativ. Generell führe ich unter anderem oft auch Regressions- sowie Smoke Tests durch.

Welche Technologien und Werkzeuge kommen in deinem Projektalltag zum Einsatz?

Wir arbeiten täglich mit Azure DevOps und verwenden es als Tool für Taskboards, um Fortschritte festzuhalten und als Build Pipeline, von der wir auf unsere Testumgebung deployen. Auch Pull Requests werden darüber ausgeführt. Außerdem nutzen wir Git Repository für unsere Projekte. Ich verwende das unter anderem auch, wenn ich etwas lokal deployen muss oder um Commitments zu überprüfen. Zudem kommt SSMS zum Einsatz, um etwa SQL Statements in Datenbanken zu kontrollieren bzw. zu verändern. Wenn ich Schnittstellen teste, verwende ich SoapUI und Postman. Für die automatisierten Tests nutzen wir SpecFlow.

Wie hältst du dich selbst am Laufenden und wie tauschen sich Software Tester untereinander aus? Wie fördert die TechTalk den Wissensaustausch?

Ich selbst halte mich unter anderem durch die von TechTalk organisierten Trainings am Laufenden. Da jeder Mitarbeitende ein individuelles Weiterbildungsbudget hat, besuche ich diese je nach Interesse. Außerdem hat die TechTalk eine Lizenz für das Testing Hub „Ministry of Testing“, da höre ich mir immer wieder Vorträge an. Zusätzlich haben wir in der TechTalk einen monatlichen Austausch, bei dem sich Testerinnen und Tester, aber auch alle, die Interesse am Testing haben, zusammensetzen. Da besprechen und diskutieren wir diverse Erfahrungen und lernen projektübergreifend voneinander. Außerdem tragen unterschiedliche Formate wie Pizza Talks, TechDiscuss oder Tech & Talk Sessions zum Wissensaustausch bei.

Warum passt die TechTalk so gut zu dir und was sind deine persönlichen Highlights?

Eines der Highlights und auch einer der Punkte, die ich an der TechTalk sehr schätze, ist die wirklich gute Zusammenarbeit aller Mitarbeitenden. Dies betrifft nicht nur das Projektteam, sondern generell den zwischenmenschlichen Umgang aller TechTalker miteinander. Zudem war ich sehr positiv überrascht von der großen Wertschätzung, die man ab Tag 1 spürt. Man kann wirklich von einem kollaborativen agilen Team sprechen, in dem jeder gefordert ist.

Man bekommt außerdem ein gutes Maß an Verantwortung. Das zeigte sich bereits, als ich mein Praktikum machte. Ich war als einziger Tester im Projektteam, hatte jedoch jederzeit einen Coach sowie Buddy an meiner Seite. Beim Start bekommt man zusätzlich einen Mentor zur Verfügung gestellt. So kann man die Arbeitsweise der TechTalk kennenlernen und hat von Anfang an eine Person, die einem jederzeit weiterhilft. Zudem wird die Weiterentwicklung stark gefördert. Von Anfang an schaut man nicht einfach zu, sondern bringt sich aktiv ein. Ein weiterer wichtiger Punkt für mich ist das bereits angesprochene Weiterbildungsbudget. Dadurch hat man die Möglichkeit, je nach Interesse Konferenzen, Trainings oder Workshops zu besuchen.

Möchtest Du mehr zur Position des (Senior) Test Engineers, zu unseren Trainings oder generell zur TechTalk erfahren?

Accessibility Testing – Das Web-Zugänglichkeits-Gesetz und seine Folgen für Unternehmen

Barrierefreiheit und „Design for All ist ein Thema, welches immer mehr an Relevanz gewinnt und heute zur digitalen Strategie eines jeden Unternehmens gehört. Die rechtliche Umsetzung von inklusivem Webdesign für Webseiten und Apps war lange Zeit nicht geregelt, durch das Inkrafttreten des neuen Web-Zugänglichkeits-Gesetz (WZG) ist die barrierefreie Gestaltung von Webseiten und mobilen Anwendungen jedoch zur gesetzlichen Verpflichtung geworden.

Unternehmen die eigene Webseiten betreiben oder Apps anbieten sind nun gefragt, diese einem Accessibility Test zu unterziehen und nötige Anpassungen vorzunehmen. Auf welche Art und Weise der Accessibility Test durchgeführt werden kann, welche Aspekte hierbei zu beachten sind und wo Unternehmen Unterstützung bei der Durchführung erhalten stellen wir Ihnen im Folgenden übersichtlich dar.

Accessibility Review & Web-Zugänglichkeits-Gesetz

Österreichische Unternehmen müssen als Konsequenz auf das Inkrafttreten des Web-Zugänglichkeits-Gesetz (WZG) ein Zertifikat erwerben, welches bestätigt, dass ihre Webseite oder App barrierefrei ist. Vorab können Unternehmen anhand einiger Faktoren einen Selbsttest durchführen und anhand der neuen Kriterien definieren welche Anpassungen nötig sind, oder alternativ über einen Experten wie TechTalk einen solchen Test durchführen lassen. 

TechTalk ist Experte für Accessibility und das Testen von Accessibility in Apps und auf Webseiten. Wir unterstützen Unternehmen bei der Durchführung von Accessibility Tests ihrer Webseiten und Apps. Nehmen Sie Kontakt mit uns auf uns lassen Sie sich beraten.

Barrierefreiheit & Design – Web Accessibility in der Praxis

Inklusion und Barrierefreiheit spielen auch in der Wirtschaft sowie in der öffentlichen Verwaltung eine immer größere Bedeutung – nun hat auch der Gesetzgeber erkannt, dass Menschen mit Beeinträchtigungen in vielfacher Art und Weise Diskriminierung im Internet erleben.

Einen guten Einstieg in das Thema Accessibility Test erhalten Sie hier:

Das Betrachten von Inhalten in Apps und auf Webseiten kann für Menschen mit Beeinträchtigungen zu Komplikationen führen. Mit Hilfe einer Zumutbarkeitsprüfung können Unternehmen ermitteln, ob beim Betrachten einer Webseite oder App Barrieren bestehen und somit eine Diskriminierung vorliegt. Im Folgeschritt wird die Gestaltung der Seite unter die Lupe genommen und soweit wie möglich angepasst.

Eine 100% Anpassung mag nicht immer möglich sein. Ziel der Initiative ist es jedoch, dass möglichst viele Inhalte im Internet barrierefrei dargestellt werden und auf diese Weise zu mehr Inklusion von Menschen mit vermindertem Sehvermögen erreicht wird.

Web-Zugänglichkeits-Gesetz – Auswirkung auf Unternehmen

Gemäss des Web-Zugänglichkeits-Gesetzes müssen alle Webseiten des Bundes oder einer seiner Einrichtungen, die nach 23.9.2019 veröffentlicht wurden die im WZG aufgeführten Kriterien erfüllen. Für ältere Webseiten gilt die Frist 23.9.2020. Apps müssen die genannten Kriterien bis 23.6.2021 erfüllen.

Accessibility Testing in der Praxis – Unser Testbericht

Das TechTalk Team ist Experte in Sachen Accessibility Tests und testet sowohl Webseite als auch Apps anhand der durch das WZG festgelegten Kriterien. Welche Möglichkeiten Unternehmen haben um vorab einige der Kriterien zu testen haben wir anhand eines Tests einer App für Sie zusammengestellt.

Ziel hierbei war es den aktuellen Stand zur Barrierefreiheit der getesteten App festzustellen um im Anschluss gemeinsam mit den Entwicklern zu entscheiden, welche Verbesserungen mit höchster Priorität umgesetzt werden sollen.

Einige der gängigen Methoden zum Test der Barrierefreiheit sind bei einer Smartphone-App anders als bei einer Webseite nicht möglich – hierzu gehört die Nutzung eines Kontrast-Tools, oder die Entwicklertools des Browsers für einfachen Zugriff zum Programmcode.

Im Folgenden stellen wir vier verschiedene Ansätze zur Durchführung Accessibility Testings von Apps vor:

  • Kontrast-Check 
  • Screenreader-Check
  • Vergrößerung des Texts
  • Vergrößerung via Smartphone-Lupe

Mittels dieser vier Ansätze lässt sich bereits ein Großteil der WCAG-Guidelines (Web Content Accessibility Guidelines) abdecken und einen Einblick in die Barrierefreiheit der Smartphone-App bekommen. Die Ergebnisse zeigten dass die von uns getestete App nicht besonders gut an die Bedürfnisse von sehbehinderten Menschen angepasst ist.

Testmöglichkeiten im Überblick

Überprüfen der Lesbarkeit mit Kontrast-Check

Ebenso wie im Internet ist auch für die Nutzung von Smartphone Apps das Zusammenspiel von Farben bedeutsam für die Zugänglichkeit.

Ziel: Überprüfung des Kontrastes um sicherzustellen dass Menschen trotz einer Sehbehinderung oder einer Farbschwäche eine Applikation benutzen und verstehen können.
Zielgruppe: Menschen mit einer Sehschwäche oder einer Farbschwäche, wie zum Beispiel die Rot-Grün-Sehschwäche.
Kriterium: Die Applikation ist ohne Probleme bedienbar, Elemente unterscheiden sich nicht nur anhand von Farbe, sondern haben auch ein zusätzliches Unterscheidungsmerkmal (wie Icons oder Text).

Ein spezifisches tool um die Lesbarkeit von Inhalten in Smartphone Apps zu testen gibt es bisher nicht. Für unseren Test haben wir daher Screenshot erstellt und diese am PC bezüglich ihrer Lesbarkeit analysiert. Für das Testen von Webseiten im Browser empfehlen wir den Colour Contrast Analyser (CCA). Das Tool beinhaltet einen Farbpicker, zudem zeigt es an, welche WCAG Richtlinien der Kontrast der Webseite erfüllt.

Der Screenreader-Check

Der Test mit hilfe des Screenreader Checks nimmt etwas mehr Zeit in Anspruch. Hierzu wurde der NVDA Screenreader verwendet, folgende Punkte wurden getestet:

  1. Fokus auf die Navigation
    1. Kann ich jeden Menüpunkt erreichen?
    2. Kann ich jeden Menüpunkt auch wieder verlassen / wechseln?
    3. Wo ist der Fokus beim Öffnen einer neuen Seite platziert?
    4. Ist der Wechsel einer Seite nachvollziehbar?
  2. Fokus auf die einzelnen Elemente (Buttons, Formularelemente, Einstiegspunkte, Links ..)
    1. Welcher Text wird beim Anklicken der einzelnen Elemente vorgelesen?
    2. Sind die Elemente verständlich beschrieben?
    3. Verstehe ich den Aufbau der Seite, ohne dass ich etwas sehe? 
  3. Fokus auf die “Führung” des Benutzers
    1. Ist verständlich, auf welcher Seite ich mich befinde? 
    2. Ist beschrieben, was ich auf der Seite “zu tun” habe?
    3. Ist verständlich, was ich zu tun habe wenn sich die Tastatur / die Kamera / ein Popup öffnet? 
    4. Kann ich die Tastatur / die Kamera / ein Popup / das Menü wieder verlassen?

Ein Beispiel aus der Praxis möchten wir genauer beschreiben:

Zur einfacheren Veranschaulichung haben wir den Homescreen nachgebaut.

Im Idealfall liest der Screenreader beim ersten Menüpunkt (siehe Wireframe „Torte Schalter“) vor. Bei der getesteten App liest der Screenreader, wenn der Fokus zum ersten Menüpunkt ”Torte” kommt, statt ”Torte Schalter” – ”Text Unterstrich 18 Schalter” vor. Durch den Begriff ”Schalter” erkennt der Benutzer des Screenreaders, dass es sich um einen Button handelt und dieser anklickbar ist. Durch die Wörter ”Text Unterstrich 18” erkennt er aber nicht um was es sich bei diesem Menüpunkt handelt. Als blinder Benutzer sieht man das Icon nicht, deshalb ist es hier unmöglich zu wissen, was passiert, wenn man auf den Button klickt und auf welche Seite man dann kommt.  Wenn man den Fokus nun auf den Menüpunkt ”Kaffee” setzt, hört man statt ”Kaffee Schalter” – ”Text Unterstrich 12 Schalter”. Dies geschieht mit allen Menüpunkten, was es unmöglich macht sich bewusst durch die App zu navigieren.

Ein weiteres Problem befindet sich auf der Schaltfläche links unten am Screen. Die Schaltfläche mit dem Icon und dem Text “Mehr Infos” wird vom Screenreader als “TBD” vorgelesen. Natürlich ist es damit auch nicht möglich zu wissen, was sich auf der Seite verbirgt, auf die man darauf navigiert.

Der Screenreader Test wurde sowohl am iPhone als auch am Android durchgeführt, in den Einstellungen des Smartphones kann man den Screenreader einschalten.

Vergrößerung des Texts

Eine weiteren Testoptionen ist die Veränderung des Textgröße in den Smartphone Einstellungen und die Analyse der Folgen bei der Nutzung der App.

Ziel: Sicherzustellen, dass sich die Schriftgröße dynamisch angepasst, wenn dies in den Einstellungen so eingestellt wurde.
Zielgruppe: Menschen mit einer Sehschwäche.
Kriterium: Unabhängig davon welche Schriftgröße eingestellt ist ist der Text ist lesbar und auch Schaltflächen und Tabellen werden dementsprechend angepasst. Die Textgröße passt sich nicht nur im Smartphone, sondern auch in der Applikation an und wird automatisch vergrößert.

In der getesteten Applikation was das Ergebnis ernüchternd, die Änderung der Schriftgröße hatte keine Auswirkung auf die getestete Applikation. Weder der Text der Menüpunkte noch der Text innerhalb der Applikation (z.B. im Impressum, Beschreibungstext) wurden vergrößert dargestellt. Stattdess einer dynamischen bzw. relativen Schriftgröße wurde eine fixe Schriftgröße verwendet wurde (wie px).

Vergrößerung via Smartphone-Lupe

Eine weitere Testoption ist die Vergrößerung mit der Smartphone Lupe.

Ziel: Sicherstellen, dass Menschen, welche die Smartphone-Lupe verwenden, deine Applikation benutzen können.
Zielgruppe: Menschen mit einer Sehschwäche.
Kriterium: Die Lupe ist wie gewohnt verwendbar und hat den gewünschten Effekt. Die Lupe lässt sich auch in der Applikation aktivieren und ist wie gewohnt bedienbar.

Bei der von uns getestete Smartphone-Applikation hat dies gut funktioniert.

Barrierefreiheit professionell testen und optimieren

Unternehmen die sich bisher noch wenig mit dem Thema Accessibility Testing und Barrierefreiheit von Webseiten und Apps auseinander gesetzt haben sind nun in der Pflicht, die im WZGs gelisteten Kriterien umzusetzen und ihre Webseiten und Apps dementsprechend zu aktualisieren.

Die von und beschriebenen Möglichkeiten eines vorab Tests bieten eine praktische Heranführung an das Thema Barrierefreiheit von Apps für sehbehinderte Menschen und helfen Unternehmen, Handlungsbedarf zu erkennen. Bei der gründlichen Analyse und der technischen Umsetzung von vorhandenen Defizienten helfen UX Experten und Web Designer, die über das nötige Know how verfügen.


Haben Sie Fragen?

Unser Team unterstützt Unternehmen bei der Umsetzung des WZGs und hilft Ihnen Schritt-für-Schritt bei der Umsetzung. Kontaktieren Sie uns um ein unverbindliches Erstgespräch zu vereinbaren.

Lernen Sie unser UX Team kennen.
Bitte kontaktieren Sie mich gerne via eMail mit Ihren Fragen.

Questions About Test Frameworks: Q&A Part #3 with J.B. Rainsberger

This is the third chapter of our three-part Q&A blog series with J. B. Rainsberger. In this chapter he adresses questions about „Questions About Test Frameworks. The first chapter and the second chapter is in our blog in case you missed it.

On June 3, 2020 J.B. Rainsberger spoke in our remote Intro Talk about managing the various kinds of uncertainty that we routinely encounter on projects that involve legacy code. He presented a handful of ideas for how we might improve our practices related to testing, design, planning, and collaboration. These ideas and practices help us with general software project work, but they help us even more when working with legacy code, since legacy code tends to add significant uncertainty and pressure to every bit of our work. Fortunately, we can build our skill while doing everyday work away from legacy code, then exploit that extra skill when we work with legacy code.


J. B. Rainsberger helps software companies better satisfy their customers and the business that they support.

Our next remote course Surviving Legacy Code from 14-17 September 2020.


If the code base is too old even for any available test frameworks, how you handle it?

**Testing does not need frameworks. Testing never needed frameworks.** You can always start by just writing tests and refactoring them. If you do this long enough, you will extract a testing framework. If you’ve never tried it, then I recommend it! Kent Beck’s _Test-Driven Development: By Example_ included this exercise.

Every test framework began life with `if (!condition) { throw Error(„Test failure.“) }`. If you can write this, then you can build a testing framework; if this suffices, then you don’t need a testing framework. Start there!

If you can execute one part of the system in isolation from the rest, then you can write unit tests. In the early days of web browsers, we could only execute Javascript in the browser, because even so, we could (and did!) write unit tests without frameworks. We merely had to run those tests in a browser window. Eventually, someone decided to run Javascript outside the browser, which made it easier to write microtests for Javascript code. This made it _easier_ to write tests, but we were writing tests long before NodeJS existed.

If you can invoke a function (or procedure or division or block of code) and you can signal failure (such as by raising an error), then you can write tests without waiting for someone else to build a framework.

In addition, you don’t need to write your tests in the same language or environment as the running system. Golden Master technique helps us write tests for any system that offers a text-based interface. Any protocol could help us here: for example, think of HTTP as „merely“ a special way of formatting requests and responses with text. If you have (or can easily add) this kind of interface or protocol to your system, then you can write tests in any language that might offer a convenient test framework. Use Python to test your COBOL code. Why not?

Finally, not all testing must be automated. As I wrote earlier, programmers have a strong habit of forgetting alternatives to techniques that they’ve found helpful. If you don’t know how to automate your tests easily, then don’t automate them yet. Instead, make them repeatable and document them. One day, someone will have a good idea about how to automate them.

You may have to write your own test framework but it can prove a daunting task.

In addition to what I wrote in the previous answer, I encourage you to follow the general advice about building any software with a Lightweight (Agile, Lean, …) approach: build the first feature that you need, then start using it, then add more features one at a time. You don’t need to build a fully-featured testing framework before you start to benefit from it. Start with `if (!assertion) throw Error()` and then use it! The testing framework SUnit was built incrementally. All the testing frameworks you know began from there. You can do it, too. Merely start, then take one step at a time.

You also need this refactoring-without-tests skill, to effectively refactor your tests!

Maybe! I don’t say you _need_ it, but it would probably help you. Your production code helps you to refactor your tests: if you change your tests and they now expect the wrong behavior, then your production code will fail that test for „the right reasons“. It doesn’t provide perfect coverage, but it helps more than you might expect. In that way, the production code helps to test the tests.

There are testing frameworks for COBOL and NATURAL. What could be older?

Indeed, the „framework“ portion of testing relates to identifying tests, collecting test results, and reporting them in a unified way, as well as adding standard mechanisms for „set up“ and „tear down“. We don’t need those things to start writing tests, although eventually we will probably want to have them. **Simply start writing tests, then remove duplication in any way that your programing language allows.** I don’t know what might be older than COBOL or NATURAL.


➡️ Also read our last two Q & A Blogposts with J.B. Rainsberger Part #1 „Managing the Uncertainty of Legacy Code“ and Part #2 „The Risks Related to Refactoring Without Tests„! Follow us on Twitter or LinkedIn to get new posts.


Gamification, Mixed Reality, Barrierefreiheit: Die Trends und Highlights der German CHI Week

Vom 25. bis 29. Mai hat Veronika Winter von Techtalk an der German CHI Week teilgenommen und die virtuelle Konferenz genutzt, um neue UX Trends zu erforschen und einen Einblick in Tendenzen rund um das Thema Human-Computer-Interaction (HCI)  zu bekommen. Über ZOOM kamen Experten der User Experience (UX) Community zusammen und lernten in über 120 Präsentationen die Arbeit von Forschungseinrichtungen deutscher Universitäten kennen.

Bei der diesjährigen German CHI Week standen die Themenschwerpunkte Mixed Reality, Games and Gamification, CSCW and InfoVis (Cross-Device-Interaction and InfoVisualisations), Eye and Brain, Accessibility & Well-Being, Wearables, VR (Virtual Reality), Artificial Intelligence & Smart Home Data, Usable Security and Privacy, Input, Methodology, Automotive & Robots and At the Workplace auf dem Programm.

Highlights zu den unterschiedlichen Themenbereichen

Die präsentierten Inhalte stammen direkt aus der Forschung und bieten die Möglichkeit, Trends von Anfang an zu beobachten und auf dem neuesten Stand zu bleiben. Von den verschiedenen Vorträgen zu neuen Technologien und zukünftigen Entwicklungen haben wir daher viel mitnehmen können und sind gespannt, wie diese sich in den nächsten Jahren positionieren werden und welche Themen sich durchsetzen.

Forschungsarbeiten aus dem Bereich “Games und Gamification”

Im Bereich “Games und Gamification” gibt es viele vielversprechende Forschungsprojekte:

  • Eine der Präsentationen hat sich mit verschiedenen Aspekten von Social Interaction und Social Anxiety in Spielen auseinandergesetzt und eine Methode entwickelt um toxisches und schädliches Verhaltens von Spielern in Online-Spielen zu erkennen.
  • Normalerweise werden Gamification Elemente vom Development-Team ausgesucht. In einem der vorgestellten Forschungsprojekte konnten die User einer Anwendung ein eigenes Gamification-Konzept auswählen. Auf diese Weise wurde getestet, welches Konzept die höchste User Motivation hervorbringt.

Forschungsarbeiten aus dem Bereich “Barrierefreiheit”

Die Themen Barrierefreiheit und Accessibility werden in der Zukunft mehr Aufmerksamkeit erhalten. Hierzu wurden verschiedene Benutzerstudien präsentiert, welche speziell mit älteren Menschen durchgeführt wurden. Besonders Projekte in den Bereichen Mobilität, Coaching und physikalisches Training von älteren Menschen standen dieses Jahr mehrfach im Fokus der Veranstaltung. Einige spannenden Projekte haben uns besonders beeindruckt:

  • Ein besonders innovatives Team hat zum Beispiel ein Prototyp präsentiert, der den typischen Blindenstock mit Virtual Reality kombiniert
  • Ein weiteres Beispiel war ein Forschungsprojekt zum Thema Augmented Reality for Older Adults, welches das Thema Augmented Reality mit älteren Menschen in den Fokus stellt und untersucht, ob die Zielgruppe mittels eines virtuellen Coaches besseres Balance-Training erleben können.

TechTalk hat zum Thema Barrierefreiheit für Webseiten und mobilen Anwendungen bereits in einem anderen Kontext berichtet.

Forschungsarbeiten aus dem Bereich “Cross-Device-Interaction and InfoVisualisations

Forschungsarbeiten aus dem Bereich “Mixed Reality”

Die Forschungsarbeiten im Bereich “Mixed reality” boten einen spannenden Einblick in den aktuellen Forschungsstand. Einige Projekte in diesem Bereich waren besonders interessant: Ein System namens Ambi plant arbeitet mit künstlichen Pflanzen die sich zu Musik, Spielen oder bei Filmen bewegen. Auch eine Forschungsarbeit mit Benutzerstudien zur Sicherheit von Fahrradfahrern im Straßenverkehr sowie ein Experiment zur Visualisierung von Objekten in einer neuen Umgebung welches AR glasses Hololense sowie 3D Modelle nutzt um Usern eine bessere Vorstellung zu ermöglicht boten neue Erkenntnisse.

Forschungsarbeiten aus dem Bereich “Wearables”

Ein weiterer Themenschwerpunkt waren Wearables, also tragbare Computertechnologien, wie zum Beispiel die Smart Watch. Hierzu gibt ein Forschungsprojekt zur Erhöhung der Bildschirmgröße einer Smart Watch, indem auch das Uhrband als Screen verwendet wird. Weitere Projekte gibt es zu den Themen Smart Textiles, also smarte Kleidungsstücke, welche mit Sensoren ausgestattet sind und zum Beispiel Druck und Verformung erfassen können.

Trends auf der Spur: 120 Sessions an fünf Tagen

Das Format der German CHI Week ermöglichte es, dass viele verschiedene Themen in kurzer Zeit behandelt werden konnten:

  • Programm von Montag bis Freitag je 17.00 – 19.00 CET
  • Täglich drei Sessions hintereinander, je 40 Minuten

Für jedes Paper wurden vorab von den Autoren aufgezeichnete Videopräsentationen von je 3 Minuten vorbereitet. Auf diese Weise erhielten die Teilnehmenden einen kurzen Überblick zum Thema und konnten dann direkt in die 20-minütige Podiumsdiskussion starten.

Videoaufnahmen der German CHI Week & UX Support

Alle Videoaufnahme der German CHI Week finden Sie auf Youtube, die Publikationen sind auf der Webseite des Veranstalters online.


Haben Sie weitere Fragen rund um UX?

Unser Team unterstützt Sie bei Ihren Herausforderungen im Bereich UX um sicherzustellen dass ihre AnwenderInnen zufriedene Benutzer werden.

Lernen Sie unser UX Team kennen.
Bitte kontaktieren Sie mich gerne via eMail mit Ihren Fragen.


The Risks Related to Refactoring Without Tests: Q&A Part #2 with J.B. Rainsberger

This is the second chapter of our three-part Q&A blog series with J. B. Rainsberger. In this chapter he adresses questions about „The Risks Related to Refactoring Without Tests. The first chapter and the third chapter is in our blog in case you missed it.

On June 3, 2020 J.B. Rainsberger spoke in our remote Intro Talk about managing the various kinds of uncertainty that we routinely encounter on projects that involve legacy code. He presented a handful of ideas for how we might improve our practices related to testing, design, planning, and collaboration. These ideas and practices help us with general software project work, but they help us even more when working with legacy code, since legacy code tends to add significant uncertainty and pressure to every bit of our work. Fortunately, we can build our skill while doing everyday work away from legacy code, then exploit that extra skill when we work with legacy code.


J. B. Rainsberger helps software companies better satisfy their customers and the business that they support

Our next remote course Surviving Legacy Code from 14-17 September 2020.


What we should say to project planners who are afraid to let us do refactoring without tests, because some folks in our team are not very good at refactoring and make mistakes? How to convince them it can work for some good programmers?

First, I recognize that if I were the project planner, then I would worry about this, too! I probably don’t know how to judge the refactoring skill of the programmers in the group, so I wouldn’t know whom to trust to refactor without tests. Moreover, I probably can’t calculate the risk associated with refactoring without tests, so I wouldn’t know when to trust _anyone_ to refactor without tests, even if I feel confident in their skill. Once I have thought about these things, it becomes easier to formulate a strategy, because I can ask myself what would make _me_ feel better in this situation? I encourage you to ask yourself this question and write down a few ways that you believe you could increase your confidence from the point of view of the project planner. I can provide a few general ideas here.

I encourage you to build trust by telling the project planner that you are aware of the risks, that you care about protecting the profit stream of the code base, and that you are prepared to discuss the details with them. It often helps a lot simply to show them that you and they are working together to solve this problem and not that you are doing what helps you while creating problems for them.

I would ask the project planners what specifically they are worried about, then matching my strategies to their worries. For example, microcommitting provides one way to manage the risk of refactoring without tests, because it reduces the cost of recovering from a mistake. At the same time, if the project planner worries about different risks than the ones I have thought about, then my strategies might not make them feel any more secure! If I know more about which risks affect them more or concern them more, then I can focus my risk-management work on those points, which also helps to build trust.

I would emphasize that we do not intend to do this as a primary strategy forever. We don’t feel comfortable doing it, either! Even so, we _must_ make progress _somehow_. We refactor without tests because it would be even more expensive to add „enough“ tests than to recover from our mistakes. Of course, we have to be willing to explain our judgment here and we have to be prepared that we are wrong in that judgment! I am always prepared to take suggestions from anyone who has better ideas, but outside of that, they hired me to do good work and make sound decisions, so if they don’t trust me, then I must try to earn their trust or they should give my job to someone that they trust more. I don’t mean this last part as a threat, but merely as a reminder that if they hire me to do the job, but they never trust me, then they _should_ hire someone else!

How about pair-refactoring?

I love it! Refactoring legacy code is often difficult and tiring work, so pair-refactoring fits well even in places where „ordinary“ pair programing might not be needed. Refactoring legacy code often alternates periods of difficulty understanding what to do next with long periods of tedious work. Working in pairs significantly increases the profit from both of those kinds of tasks.

You also need this refactoring-without-tests skill, to effectively refactor your tests!

Maybe! I don’t say you _need_ it, but it would probably help you. Your production code helps you to refactor your tests: if you change your tests and they now expect the wrong behavior, then your production code will fail that test for „the right reasons“. It doesn’t provide perfect coverage, but it helps more than you might expect. In that way, the production code helps to test the tests.

Moreover, tests tend to have simpler design than the production code. This means that we might never need to refactor tests in certain ways that feel common when we refactor production code. I almost always write tests with a cyclomatic complexity of 1 (no branching), so the risk when refactoring tests tends to be much lower than when refactoring legacy code. This makes refactoring tests generally safer.


➡️ Also read our two Q&A Blogposts with J.B. Rainsberger Part #1 The Risks Related to Refactoring Without Tests“ and Part #3 „Questions About Test Frameworks„! Follow us on Twitter or LinkedIn to get new posts.


Agile at Scale: How „The Spotify Model“ came to life and how it can be applied in a remote-work environment

Joakim Sunden
Consultant at Crisp

Joakim Sunden was one of the Agile Coaches at Spotify working together with the CTO to develop a new approach to Agile at scale, aka “The Spotify Model” with Tribes, Squads, Chapters and Guilds. He is also a well-known figure in the agile community, having organized and spoken at many international conferences and community events over the years. In 2016 he held a keynote at Agile Tour Vienna, since then we partner with Joakim and also offer a training course about „The Spotify Model“. For this post, we asked Joakim how „the Spotify Model“ came to life and how it evolved since then.

How would you explain the Agile at Scale (Spotify Model) to someone who has never heard about it?

There’s no short answer to that so you’ll have to bear with me for some background story. Back in 2011 when I joined Spotify we had fewer than ten teams, or squads as we could come to call them. But we already experienced some growing pains and we knew that we would grow a lot as we had big plans and a lot of VC funding. We wanted to desperately avoid the increased bureaucracy and slow speed many of us had experienced with other big companies so we tried to come up with a new way of organizing ourselves to stay agile even at scale.

At it’s core it’s all about trusting the people you hire to do a great job and support them the best you can without getting in their way. This is why we called the core of our org an “autonomous squad”, a 5-10 people small and empowered product development team who are free to make a lot of more choices than any other team I had ever worked with in the past. Not just how to build things, but also to a large extent what to build. Within bounds of course.

One example of such bounds is the product direction, or goal, of your tribe. Each squad was part of a mission, or product area, called a “tribe”, together with maybe four to ten other squads. The Tribe Trio leadership would set a direction in dialogue with the squad and upper management, within which the squads would have freedom to explore different experiments to push the metrics the right way. Leadership is all about supporting you, making sure you have clarity of direction and everything you need to get there, in terms of skills, resources, decision power, etc.

That’s also true for your closest manager who leads the functional area, or Chapter as our name was, you’re part of together with 5-10 coworkers with similar skill sets. Kind of a matrix model where the manager is a servant leader responsible for your development and success rather than for making decisions and relaying information, and so on.

On a surface level this is what most people understand as “the Spotify Model”; Squads, Chapters, and Tribes. Because that’s the visible most apparent structural parts of it. In practice it’s much more about mindset, culture, leadership, all those things that’s really different and makes it tick, but harder to observe and understand. And that’s what we drill down into in the course. That and the finer mechanics of some of what we learned along the way and from living with this model and evolving it  for several years.

So the first white paper on the Spotify model came out in 2012. What has happened since then?

Wow, a lot really… One of the most concrete things that we abandoned rather quickly after the paper came out was the idea that a Chapter Lead, that is, an engineering manager, should work 50% as a manager and 50% as an individual contributor in a squad. That simply didn’t work, it was too much. Which is not to say that it’s not the right thing for other companies to be doing, but it didn’t work for us with very high expectations on the people development part of the role.

Great experience. Completely realistic view. Down to earth presenter.

– Attendee feedback, Agile at Scale Workshop with Joakim Sunden in 2019

This is by the way a reason I don’t want to talk a lot about changes to Spotify’s way of working, since people seem to perceive it as some kind of evolution and “what Spotify’s doing now must be so much better than the old white paper, so let’s take a short cut and go straight to where they are now”. How Spotify evolved is not necessarily the way your organization needs to evolve. What was working well at some point in one context may not be working well in another context. In an organizations of Spotify’s size there’s now also multiple different solutions to similar problems in different parts of the company. Some held on to the Chapter Lead model while others tried other approaches to solve for other problems, reach other goals.

So rather than talking about the evolution of a specific model we spend a lot of time in the course talking about what we learned from different things, the thinking behind it, how things evolved. All with the goal of course participants being better equipped to solve their own issues themselves when they get back to work. Using Spotify as an inspiration, for different types of solutions, but also the approach to change and problem solving that we applied. And not just Spotify, we drew inspiration from plenty of sources ourselves, and so should you of course.

Can the Spotify model also be applied in a remote work environment?

Absolutely! Spotify was early on a distributed company with product development in Stockholm, Gothenburg, New York and San Francisco. Later we added Boston, where I lived and worked for a few years, and more recently London. So a remote work environment was there pretty much from the start for me.

Working in a remote environment it’s even more important to let go of control and trust your people and teams to work autonomously to solve problems. It’s even more important to have good practices in place for collaborating and communicating, to create clarity of direction and communicate progress when working remotely.

When I left Spotify and started consulting with companies I was shocked to learn how bad most of them were at remote work practices and how many companies just lack the tools to be able to collaborate efficiently in a remote environment. Even though the course is very little about remote work practices per se, indirectly it’s a lot about supporting that way of working. Since we’re also running it remote, participants will be able to learn some really good tools for remote workshops, should they not already be familiar with them.  

Managing the Uncertainty of Legacy Code: Q&A Part #1 with J.B. Rainsberger

In this first chapter of our three-part Q&A blog series he adressed questions that came up during his session.

On June 3, 2020 J.B. Rainsberger spoke in our remote Intro Talk about managing the various kinds of uncertainty that we routinely encounter on projects that involve legacy code. He presented a handful of ideas for how we might improve our practices related to testing, design, planning, and collaboration. These ideas and practices help us with general software project work, but they help us even more when working with legacy code, since legacy code tends to add significant uncertainty and pressure to every bit of our work. Fortunately, we can build our skill while doing everyday work away from legacy code, then exploit that extra skill when we work with legacy code.

Our next remote course Surviving Legacy Code from 14-17 September 2020.

J. B. Rainsberger helps software companies better satisfy their customers and the business that they support.

Here are some questions that came up during this session and some answers to those questions.

One of the issues is that the legacy code base consists of useful code and dead code and it’s hard to know which is which.

Indeed so. Working with legacy code tends to increase the likelihood of wasting time working with dead code before we feel confident to delete it. I don’t know how to avoid this risk, so I combine monitoring, testing, and microcommitting to mitigate the risk.

Microcommits make it easier to remove code safely because we can recover it more safely. Committing frequently helps, but also committing surgically (the smallest portion of code that we know is dead) and cohesively (portions of code that seem logically related to each other) helps. If our commits are more independent, then it’s easier to move them backward and forward in time, which makes it easier to recover some code that we mistakenly deleted earlier while disturbing the live code less. We will probably never do this perfectly, but smaller and more-cohesive commits make it more likely to succeed. This seems like a special case of the general principle that as I trust my ability to recover from mistakes more, I feel less worried about making mistakes, so I change things more aggressively. When I learned test-driven development in the early years of my career, I noticed that I become much more confident to change things, because I could change them back more safely. Practising test-driven development in general and microcommitting when working with legacy code combine to help the programmer feel more confident to delete code—not only code that seems dead.

Even with all this, you might still feel afraid to delete that code. In that case, you could add “Someone executed this code” logging statements, then monitor the system for those logging statements. You could track the length of time since you last saw each of these “heartbeat” logging messages, then make a guess when it becomes safe to delete that code. You might decide that if nothing has executed that code in 6 months, then you judge it as dead and plan to remove it. This could never give us perfect confidence, but at least it goes beyond guessing to gathering some amount of evidence to support our guesses

More testing, especially microtesting, puts more positive pressure on the design to become simpler: less duplication, better names, healthier dependencies, more referential transparency. I have noticed a pattern: as I simplify the design, I find it easier to notice parts that look irrelevant and I find it clearer that those parts are indeed dead code. Moreover, sometimes obviously dead code simply appears before my eyes without trying! This makes it safer to delete that code, using the microcommitting and monitoring as a recovery strategy in case I get it wrong.

So not all legacy code adds value to the business… but it is hard to know which part does.

Indeed so. We have to spend time, energy, and money to figure this out. I accept responsibility as a programmer to give the business more options to decide when to keep the more-profitable parts running and to retire the less-profitable parts. As I improve the design of the system, I create more options by making it less expensive to separate and isolate parts of the system from each other, which reduces the cost of replacing or removing various parts. Remember: we refactor in order to reduce volatility in the marginal cost of features, but more-generally in the marginal cost of any changes, which might include strangling a troublesome subsystem or a less-profitable feature area.

The Strangler approach describes incrementally replacing something in place: adding the new thing alongside the old thing, then gradually sending traffic to the new thing until the old thing becomes dead. Refactoring the system to improve the health of the dependencies makes this strangling strategy more effective, which gives the business more options to replace parts of the legacy system as they determine that a replacement would likely generate more profit. As we improve the dependencies within the system, we give the business more options by reducing the size of the smallest part that we’d need to replace. If we make every part of the system easier to replace, then we increase the chances of investing less to replace less-profitable code with more-profitable code.

This illustrates a general principle of risk management: if we don’t know how to reduce the probability of failure, then we try reducing the cost of failure. If we can’t clearly see which parts of the legacy code generate more profit and which ones generate less, then we could instead work to reduce the cost of replacing anything, so that we waste less money trying to replace things. This uses the strategy outlined in Black Swan of accepting small losses more often in order to create the possibility of unplanned large wins.

What do you think about exploratory refactoring? Do you use this technique sometimes?

Yes, I absolutely do! I believe that programmers can benefit from both exploratory refactoring and feature-oriented refactoring, but they need to remain aware of which they are doing at any time, because they might need to work differently with each strategy to achieve those benefits.

When I’m refactoring in order to add a feature or change a specific part of the code, I remind myself to focus on that part of the code and to treat any other issues I find as distractions. I write down other design problems or testing tasks in my Inbox as I work. I relentlessly resist the urge to do those things “while I’m in this part of the code”. I don’t even follow the Two-Minute Rule here: I insist on refactoring only the code that right now stands between me and finishing the task. Once I have added my feature, I release the changes, then spend perhaps 30 minutes cleaning up before moving on, which might include finishing a few of those Two-Minute tasks.

The rest of the time, I’m exploring. I’m removing duplication, improving names, trying to add microtests, and hoping that those activities lead somewhere helpful. This reminds me of the part of The Goal, when the manufacturing floor workers engineered a sale by creating an efficiency that nobody in the sales department had previously thought possible. When I do this, I take great care to timebox the activity. I use timers to monitor how much time I’m investing and I stop when my time runs out. I take frequent breaks—I use programming episodes of about 40 minutes—in order to give my mind a chance to rise out of the details and notice higher-level patterns. I don’t worry about making progress, because I donI ’t yet know what progress would look like—instead I know it when I see it. By putting all these safeguards in place, I feel confident in letting myself focus deeply on exploring by refactoring. I avoid distracting feelings of guilt or pressure while I do this work. I also feel comfortable throwing it all away in case it leads nowhere good or somewhere bad. This combination of enabling focus and limiting investment leads me over time to increasingly better results. As I learn more about the code, exploratory refactoring turns into feature-oriented refactoring, which provides more slack for more exploratory refactoring, creating a virtuous cycle.

What is your experience with Approval Tests, in cases where writing conventional unit tests might be to expensive?

I like the Golden Master technique (and particularly using the Approval Tests library), especially when text is already a convenient format for describing the output of the system. I use it freely and teach it as part of my Surviving Legacy Code course. It provides a way to create tests from whatever text output the system might already produce.

I get nervous when programmers start going out of their way to add a text-based interfaces to code that doesn’t otherwise need it only for the purpose of writing Golden Master tests. In this case, checking objects in memory with equals() tends to work well enough and costs less. I notice it often that programmers discover a helpful technique, then try to use it everywhere, then run into difficulties, then invest more in overcoming those difficulties than they would invest in merely doing things another way. Golden Master/Approval Tests represents merely another situation in which this risk comes to the surface.

I get nervous when programmers start choosing to write integrated tests for code where microtests would work equally well. When programmers think about adding Golden Master tests, they tend to think of these as end-to-end tests, because they often judge that as the wisest place to start. Just as in the previous paragraph, they sometimes fall into the trap of believing that “since it has helped so far, we must always do it this way”. No law prevents you from writing unit tests using Golden Master/Approval Tests! Indeed, some of the participants of my Surviving Legacy Code training independently discover this idea and use it to great effect. Imagine a single function that tangles together complicated calculations and JSON integration: it might help a lot to use Approval Tests to write Golden Master tests for this function while you slowly isolate the calculations from the JSON parsing and formatting. The Golden Master tests work very well with multiline text, such as values expressed in JSON format, but probably make the calculation tests awkward, compared with merely checking numeric values in memory using assertEquals().

When programmers use Golden Master/Approval Tests, they need to treat it as just one tool in their toolbox. This is the same as with any technique! I tend to treat Golden Master as a temporary and complementary technique. I use it when I focus on writing tests as a testing technique, even though I tend to prefer to write tests for design feedback. Not everyone does this! If you find yourself in the stage where you’re drowning in defects and need to focus on fixing them, then Golden Master can be a great tool to get many tests running early. Once you’ve stopped drowning, it becomes easier to look at replacing Golden Master with simpler and more-powerful unit tests—eventually microtests.


➡️ Also read our two Q&A Blogposts with J.B. Rainsberger Part #2 The Risks Related to Refactoring Without Tests“ and Part #3 „Questions About Test Frameworks„! Follow us on Twitter or LinkedIn to get new posts.