Backlog Refinement

In diesem Artikel erläutere ich wie ich das Refinement interpretiere und wie ich es vom Sprint Planning 1 abgrenze.

Boris Gloger gibt in seinem Video interessante Hintergrundinformationen und erläutert die Entstehungsgeschichte des Backlog Refinement Meetings. Spannend finde ich dabei wie sich der Name über die Zeit verändert hat (Estimation Meeting => Backlog Grooming => Refinement) hat.

Ziel

Mit dem Backlog Refinement soll geklärt werden, ob das, was potentiell im nächsten Sprint umgesetzt werden soll, so weit vorbereitet ist, dass es auch umgesetzt werden kann.

Konkret klärt der Product Owner mit dem Entwicklerteam, ob

  • das Sprint Goal sinnvoll ist,
  • die User Stories verständlich sind,
  • die User Stories anhand einer groben Schätzung in den Sprint passen könnten
  • und ob die Priorisierung den besten Business Value liefern kann.

Oder anders formuliert: Der Product Owner stellt sich die die folgenden Fragen:

  • Habe ich das Backlog richtig priorisiert?
  • Haben die Entwickler ein Grundverständnis davon, was im nächsten Sprint auf sie zukommt?
  • Sind die User Stories, von denen ich tatsächlich annehme, dass sie Teil des Sprint Plannings 1 werden, S.M.A.R.T..

Beispiele

Die folgenden zwei Szenarien kennen vermutlich die meisten aus dem Alltag und zeigen, dass ein vorheriges Refinement helfen kann.

Der Product Owner stellt im Sprint Planning 1 eine User Story vor und das Team versteht diese nicht. Es entstehen lange Diskussionen, es werden Zeichnungen am Flipchart erstellt und (Domänen-)Begriffe definiert. Statt im Planning würde im Refinement frühzeitig das Verständnisproblem entdeckt und die User Story vom Entwicklerteam an den Product Owner „zurückgegeben“ werden. Der Product Owner kriegt somit Zeit die Story klarer zu formulieren oder das Feature sogar neu zu schneiden.

Eine User Story kann im Sprint Planning 1 nicht geschätzt werden, weil die Entwickler dafür zunächst technische Fragen klären müssen. Als Ergebnis des Refinements würde das Entwicklerteam den zugehörigen Quellcode nochmal untersuchen oder eine technische Gegebenheit recherchieren. Im eigentlichen Sprint Planning 1 oder einem etwaigen zweiten Refinement stünden dann alle notwendigen Informationen zur Verfügung.

Eine User Story ist deutlich größer und komplexer als der Product Owner dies vermutet hätte. Das Entwicklerteam spiegelt ihm das im Refinement, sodass er den Inhalt im Nachgang in kleinere Stücke schneiden kann.

Durchführung

Wie oft das Refinement innerhalb eines Sprints durchgeführt wird und wer daran teilnimmt, ist Geschmackssache. Nehmt die Leute mit rein, die anwesend sein müssen, um die Fragen zu klären bzw. das Ziel des Refinements zu erreichen. Und wenn der Product Owner sich ein zweites oder drittes Meeting wünscht, weil er sonst das Sprint Planning 1 nicht adäquat vorbereiten kann, dann sollten sich das Team auch Zeit dafür nehmen. Die Zeit wird ansonsten in jedem Fall im Spring Planning 1 benötigt werden (und vermutlich sogar mehr).

Gibt es bei euch ein Refinement Meeting? Wenn ja, wie trennt ihr selbiges vom Planning? Sind bei euch immer alle Entwickler oder sogar Stakeholder dabei? Schreibt es in die Kommentare.

Eigene Domain als Gmail Alias verwenden

In dieser Schritt-für-Schritt Anleitung erläutere ich wie ihr andere Absender für eure Gmail-Adresse definiert. Dies ist z.B. nützlich, wenn ihr eine eigene Domain betreibt (wie ich mit http://www.uliarmbruster.de) und unter der Domain mit eurem Gmail Konto auch E-Mails empfangen und versenden wollt.

Ich nutze dies beispielsweise, um für meine Familie E-Mail-Adressen anzulegen und alle auf ein zentrales Gmail-Konto umzuleiten. Das ist unter anderem nützlich, wenn man so Dinge wie Handy-, Internet und Stromverträge für mehrere Leute managt.

Schritt 1: Weniger sichere Apps zulassen

Sofern nicht bereits aktiviert, müsst ihr noch unter dieser Adresse „Weniger sichere Apps zulassen“ anschalten.

Schritt 2: 2-Faktor-Authentifizierung aktivieren

Einfach diesem Link folgen und aktivieren.

Schritt 3: App-Passwort erstellen

Über diesen Link geht ihr wie folgt vor:


App_Settings_1

Bei „App auswählen“ selektiert ihr „Andere (benutzerdefiniert)“


App_Settings_2

Dann gebt ihr einen Namen dafür ein, z.B. für die externe E-Mail-Adresse, die ihr einbindet.


 

Schritt 4: Gmail konfigurieren

Jetzt geht ihr in euer Gmail-Konto und führt die folgenden Schritte aus:


  • Zahnrad in Gmail anklicken
  • Einstellungen auswählen
  • Tab Konten & Import auswählen

E-Mail-Settings 1


Unter „Senden als“ fügt ihr eine weitere Adresse hinzu. Daufhin kommt der folgende Dialog. Den Namen, den ihr dort eingebt, ist der, der als Alias beim Empfänger angezeigt wird. Als E-Mail-Adresse wählt ihr dann eure externe Adresse aus, die ihr einbinden wollt.

E-Mail-Settings 2


Im nächsten Schritt gebt ihr eure Gmail-Adresse (also die aktuell verwendete) als auch das in Schritt 2 generierte App Passwort ein. Den SMTP-Server und Port könnt ihr aus dem Screenshot übernehmen.

E-Mail-Settings 2-3


Im letzten Schritt müsst ihr dann den zugesendeten Code eingeben. Die E-Mail hierzu, die ihr erhalten müsstet, sieht so aus:

Sie haben angefordert, dass alias@euredomain.com Ihrem
Gmail-Konto hinzugefügt werden soll.
Bestätigungscode: 694072788

Bevor Sie Nachrichten von alias@euredomain.com aus über Ihr
Gmail-Konto (eure-gmail-adresse@gmail.com) senden können, klicken Sie
bitte auf den folgenden Link, um Ihre Anfrage zu bestätigen:

E-Mail-Settings 3

 

Das sollte es gewesen sein.

Freigrenze vs. Freibetrag

Heute bin ich von meinem Steuerberater auf die wichtige Unterscheidung zw. Freigrenze und Freibetrag aufmerksam gemacht worden, was ich bis dato synonym verwendet habe.

Dazu ein Beispiel:

  • 40€ sind die jeweilige Grenze
  • Der Kauf übersteigt die Grenze um 1€, sprich die Gesamtkosten belaufen sich auf 41€

Freigrenze

Im Fall der Freigrenze muss bei Übersteigung des Grenzbetrags die volle Summe versteuert werden, d.h. die vollen 41€ sind steuerpflichtig.

Freibetrag

Im Fall des Freibetrags muss lediglich der die Grenze übersteigende Betrag versteuert werden, d.h. 1€.

Bei Streuartikeln (bis 10€ netto) und Sachzuwendungen an Geschäftsfreunde (35€ pro Jahr und Person) bzw. Sachzuwendungen an Arbeitnehmer (44€ pro Mitarbeiter und Monat | nicht auf Folgemonat übertragbar) handelt es sich um Freigrenzen. Leider sind im betrieblichen Umfeld die meisten Grenzen Freigrenzen.

Ein Freibetrag wäre z.B. der sogenannte Rabattfreibetrag, bei dem der Arbeitgeber seinen Angestellten Rabatte auf die eigenen Waren oder Dienstleistungen gewährt.

Microservices don’t like thinking in conventional entities

I recently had one of these special AHA-moments in a workshop held by Udi Dahan, CEO of Particular. In his example he was using the classic entity of a customer.

To realise microservices means cutting functionality in a clean way and to transfer it into separate pillars (or silos). Each silo has to have the responsibility over it’s own data, on which it builds the respective business processes. So far, so good. But how can we realise this for our typical customer, who’s model is shown in the screenshot? Different properties are needed or changed by different microservices.

If the same entity is used in all pillars, there needs to be a respective synchronisation between all microservices. This results in a considerable impact on scalability and performance. In an application with lots of parallel changes of an entitiy the failing of the business processes will increase – or lead to inconsistencies in the worst case.

Conventional Customer

conventional entity of a customer

Udi suggests the following modelling

New Customer

Customer is modelled with independent entities

To identify which data belongs together, Udi suggests an interesting approach:

Ask the operating department if changing a property has a consequence for another property.

Would changing the last name of customer have an influence on the price calculation? Or on the way of marketing?

Now we need to solve the problem of aggregation, for example if I want to show different data from different microservices in my view. In a classic approach we would have a table with following columns:

ID_Customer ID_MasterData ID_Marketing ID_Pricing

This leads to the following two problems:

  1. The table needs to be extended if a new microservice is added
  2. If a microservice covers the same functionality in the form of data, you would have to add multiple columns for each microservice and allow NULL values as well

An example for the second point could be a microservice which covers the matter of payment methods. In the beginning you could only use credit cards and debit charges. Then Paypal. Bitcoin soon after. The microservice would have different tables on which the respective data for the payment method would be stored. In the aggregated table shown above it would be necessary to fill a separate column for each payment method the customer is using. If he doesn’t use it, a NULL value would be written. As you can see: This sucks.

Another approach is much more convenient for this. Which one this is and how it’s realised technically you can find on the GitHub repository of Particular.

 

Microservices mögen kein Denken in klassischen Entitäten

Einen ganz besonderen AHA Moment hatte ich kürzlich in einem Workshop bei Udi Dahan, CEO von Particular. In seinem Beispiel ging es um die klassische Entität eines Kunden.

Microservices zu realisieren bedeutet Fachlichkeiten sauber schneiden und in eigenständige Silos (oder Säulen) packen zu müssen. Jedes Silo muss dabei die Hohheit über die eigenen Daten besitzen, auf denen es die zugehörigen Geschäftsprozesse abbildet. Soweit so gut. Doch wie lässt sich dies im Falle eines Kunden bewerkstelligen, der klassischerweise wie im Screenshot zu sehen modelliert ist? Unterschiedliche Eigenschaften werden von unterschiedlichen Microservices benötigt bzw. verändert.

Wird die gleiche Entität in allen Silos verwendet, muss es eine entsprechende Synchronisierung zw. den Microservices geben. Das hat erhelbiche Auswirkungen auf Skalierbarkeit und Performance. In einer Applikation mit häufig parallelen Änderungen an einer Entität wird das Fehlschlagen von Geschäftsprozessen zunehmen – oder im schlimmsten Fall zu Inkonsistenzen führen.

Klassische Kundeentität

Klassische Kundeentität

 

Udi schlägt die folgende Modellierung vor:

Neue Modellierung eines Kunden

Der Kunde wird durch unabhängige Entitäten modelliert

Zur Identifikation, welche Daten zusammengehören, schlägt Udi einen Interessanten Ansatz vor:

Fragt die Fachabteilung, ob das Ändern einer Eigenschaft Auswirkung auf eine andere Eigenschaft hat. 

Würde das Ändern des Nachnamens einen Einfluss auf die Preiskalkulation haben? Oder auf die Art der Marketings?

Nun gilt es noch das Problem der Aggregation zu lösen, sprich wenn ich in meiner Anzeige unterschiedliche Daten unterschiedlicher Microserivces anzeigen möchte. Klassischerweise würde es jetzt eine Tabelle geben, die die Spalten

 

ID_Kunde ID_Kundenstamm ID_Bestandskundenmarketing ID_Preiskalkulation

 

besitzt. Das führt aber zu 2 Problemen:

  1. Die Tabelle muss immer erweitert werden, wenn ein neuer Microservices hinzugefügt wird.
  2. Sofern ein Microservices die gleiche Funktionalität in Form unterschiedlicher Daten abdeckt, müssten pro Microservices mehrere Spalten hinzugefügt und NULL Werte zugelassen werden.

Ein Beispiel für Punkt 2 wäre ein Microservices, der das Thema Bezahlmethoden abdeckt. Anfangs gab es beispielsweise nur Kreditkarte und Kontoeinzug. Dann folgte Paypal. Und kurze Zeit später dann Bitcoin. Der Microservices hätte hierzu mehrere Tabellen, wo er die individuelle Daten für die jeweilige Bezahlmethode halten würde. In oben gezeigter Aggregationstabelle müsste aber für jede Bezahlmethode, die der Kunde nutzt, eine Spalte gefüllt werden. Wenn er sie nicht benutzt, würde NULL geschrieben werden. Man merkt schon: Das stinkt.

Ein anderer Ansatz ist da deutlich besser geeignet. Welcher das ist und wie man diesen technischen realisieren kann, könnt ihr im GitHub Repository von Particular nachschauen.

 

Quellen zu Defensives Design und Separation of Concerns sind jetzt online

Den Quellcode zu meinen Vorträgen auf den Karlsruher Entwicklertagen und der DWX sind jetzt online:

  • Zu Super Mario Kata mit Fokus auf Defensivem Design geht es hier.
  • Zur Prüfsummen Kata mit fokus auf Separation of Concerns gelangt ihr hier.

Auf beiden Seiten findet ihr auch die Links zu den PowerPoint Folien. Im Juli 2018 werde ich den Code der Prüfsummen Kata noch in Form von Iterationen veröffentlichen und beide Talks als YouTube Video freigeben.

IMG_20180627_145405

Defensives Design Talk auf der DWX

Ihr wollt Teile davon in euren Vorträgen verwenden, ihr wollt ein Training zu dem Thema oder ich soll dazu in euerer Community einen Vortrag halten, dann kontaktiert mich über die auf GitHub genannten Kanäle.

Kausale Ketten: Gründe für das Scheitern von Softwareprojekten

Auf dieser Github Page habe ich begonnen die Problemen in Softwareprojekten, die uns täglich begegnen, genauer zu analysieren, um diese vermeiden bzw. beheben zu können.

In Gesprächen mit Teilnehmern meiner Workshops werden mir regelmäßig Symptome geschildert, von denen ich der Meinung bin, dass die Ursache wie so oft tiefer liegt.

Tituliert habe ich das als kausale Ketten und orientiere mich dabei an folgendem Schema:

  • Was ist das wahrgenommene Problem, also das Symptom
  • Wie kam es dazu, also die Verlaufsbetrachtung
  • Warum kam es dazu, was ist die Ursache

Zudem suche ich nach nachvollziehbaren Beispielen, um die Theorie zu untermauern.

Ich verstehe die Seite als Anreiz zum Nachdenken. Alle „Thesen“ sollen als Einstieg in eine lebendige Diskussion dienen.

Gebt mir gerne Feedback in Form von Pull Requests.

Termin nossued 2019

In diesem Jahr fand der #nossued noch vor Beginn der Sommerferien in den meisten Bundesländern statt. Das Feedback der letzten Jahren ging dahin, dass der ein oder andere aufgrund der Schulferien nicht kommen konnte.

Neben der Berücksichtung von zeitlich verschobener Ferien in den einzelnen Bundesländern gilt es natürlich noch auf etablierte Events wie die dotnet Cologne Rücksicht zu nehmen.

Der ein oder andere hadert mit Juni/Juli auch wegen den alle 2 Jahre stattfindenden Fußballturnieren oder weil die warme Sommerzeit lieber für Freizeitaktivitäten genutzt wird. Andere wiederum schätzen genau die strahlende Sonne und die Möglichkeit die Dachterrasse nutzen zu können.

Daher würden wir von der Organisation gerne wissen, wie ihr zu den möglichen Terminen 2019 steht. Denkbar wären auch frühere Termine wie die Zeiträume vom 08. März bis 04. April und 27. April bis 31. Mai. Wie steht die Community dazu?

Eure Rückmeldungen würden uns freuen, z.B. in Form von Nennung von guten Zeiträumen oder weniger geeigneten Monaten.

Beispiele für Zielvereinbarungen

Allgemeines

Dieser Beitrag soll als kleine Hilfestellung für all diejenigen dienen, die sich mit der Findung von guten Zielen schwertun. Wer wie wir darauf hinarbeitet, dass die Mitarbeiter sich aus der Unternehmensstrategie die individuellen Ziele selbst ableiten und der Vorgesetzte nur noch unterstützende Funktion (z.B. Bereitstellen von Resourcen) ausüben muss, der wird zuerst viel kommunizieren und beraten müssen.

Während die eine Seite erfolgreicher Zielvereinbarungen die Verlagerung der Zieldefinition auf den Mitarbeiter selbst ist, ist die andere das Sichtbarmachen der operativen und strategischen Unternehmensziele. Damit einher geht natürlich das kontinuierliche Gespräch über die gemeinsame Unternehmenskultur. Beispielsweise wird es schwierig über monetäre Ergebnisziele zu sprechen, wenn die Kennzahlen nicht transparent zur Verfügung gestellt und erklärt werden. Nicht jeder Chef ist davon begeistert, wenn die Angestellten die genauen Margen von Aufträgen kennen.

  • Der Kern guter Ziele sind die S.M.A.R.T. Kriterien, auf die an dieser Stelle nicht weiter eingegangen werden soll.
  • Die Ziele drüfen sich nicht gegenseitig beeinträchtigen. Stattdessen sollen sie sich vielmehr gegenseitig beflügeln.
  • Die Erreichung des Ziels soll immer einen direkten oder indirekten Benefit für das Unternehmen haben (Stichwort Return on Invest).

 

Auf den Punkt gebracht: Die Mitarbeiter müssen um die Unternehmsziele wissen und diese mittragen. Ein gemeinsames Verständnis der Modalitäten und eine dazu passende Informationstransparenz sind ebenso elementar wie das Mitwirkenwollen des Einzelnen.

 

Beispiele für individuelle Ziele

  • Community Auftritte
    • Bis 31.12.18 hält der Mitarbeiter in den User Groups Berlin, Dresden, Leipzig, Chemnitz, Karlsruhe und Luzern Vorträge
  • Fachartikel
    • Bis 31.12.18 publiziert der Mitarbeiter 3 Fachartikel in Fachzeitschriften (z.B. in der dotnetpro)
  • Öffentliche Auftritte auf Konferenzen
    • Bis 31.12.18 hält der Mitarbeiter auf mind. 3 unterschiedlichen, kommerziellen Konferenzen Talks oder Trainings (z.B. DWX, Karlsruher Entwicklertage etc.)
  • Kommerzielle Workshops
    • Bis 31.12.18 generiert der Mitarbeiter durch Workshops einen Gesamtumsatz von mind. 20.000€
  • Fakturierung
    • Bis 31.12.18 fakturiert der Mitarbeiter durch Consulting mind. 800 Stunden.
  • Zertifizierung

Ideen für das Format des NOSSUED 2018 gesucht

Vom 16-17. Juni 2018 findet wieder der NOSSUED in Karlsruhe statt. Der Termin wurde vorgezogen, um den unterschiedlichen Sommerferien der einzelnen Bundesländer Rechnung zu tragen.

Wie jedes Jahr soll die Konferenz als Open Space ausgerichtet werden. Darüber hinaus suchen wir als Orga nach Ideen, um das Format zu erweitern und neue Anreize einfließen zu lassen.

Beispielsweise wäre ein Mix aus Charity Development, Hackathon und Open Space möglich. Dabei würde im Vorhhinein, z.B. über einen Austausch auf Facebook oder am Vorabend des NOSSUED, ein Projekt ausgewählt werden, welches Schulen oder Vereine einsetzen können. Eine webbasierte Mitgliederverwaltung samt deren Mitgliedsbeiträge für Sportvereine wäre so etwas. Im Anschluss würden wir uns darüber austauschen welche Technologien dazu eingesetzt und wir die Architektur aufgebaut werden sollen. Die Sessions des Open Spaces würde dann auf diese Themen ausgerichtet werden. Parallel findet in Gruppen ein Hackathon statt, bei dem das Produkt entwivckelt wird. Ergeben sich dabei Fragen, Diskussionen oder Schwierigkeiten, dann kann daraus eine neue Open Space Session generiert und spontan abgehalten werden.

Was sagt ihr zu diesem Ansatz? Habt ihr andere Ideen? Oder wollt ihr vielleicht am bisherigen Format gar nichts ändern? Schreibt mir in die Kommentare.

Workshop: Conquer your Codebase – Bewährter Clean Code aus der Praxis (Materialien)

Einen herzlichen Dank an alle Teilnehmer des Workshops am vergangenen Freitag beim Developer Open Space 2017. Trotz des völlig unterschiedlichen Backgrounds – von Ruby, über PHP, zu Java oder gar nicht objektorientierte Sprachen wie JavaScript – war ebenso alles vertreten wie vom Azubi bis hin zum Entwickler mit 20-jähriger Berufserfahrung.

IMG_20171013_132904

Einer von vielen mutigen Freiwilligen

Den Code zur Super Mario Kata gibt es hier. Beachtet die neuen Anforderungen (9-12), die ich auf dem Heimweg im Zug noch hinzugefügt habe. Damit einhergehend habe ich noch ein Refactoring des Konzepts ‚Leben‘ durchgeführt, sodass keine Actions bzw. Funcs mehr an die Methoden übergeben werden müssen. Gleichfalls fällt das Branching-Statement raus und es ergibt sich eine nahezu völlig flexible Möglichkeit zur Erstellung von Spielmodi. Die Tests sind nun ebenfalls alle umgesetzt, was wir gegen Ende hin aufgrund von Zeitmangel ausgelassen haben. Eine Testmethode hat in der Regel eine Zeile und wie schon im Workshop erwähnt: Was gut zu testen ist, ist in der Regel auch eine saubere Lösung.

IMG_20171013_132938

20 Teilnehmer mit unterschiedlichen Backgrounds

Derjenige, der noch eine Lösung mit dem Command-Pattern umsetzt und dadurch das Anpassen bestehender Klassen völlständig vermeidet, erhält von mir einen Gutschein für unsere Trainings. Damit kann er kostenlos an jedem beliebigen 3-tägigen Workshop in unseren Karlsruher Büros teilnehmen (Fahrt- und Übernachtungskosten sind ausgeschlossen).

Alle, die über den Workshop bloggen oder twittern, erhalten darüber hinaus noch einen 30% Rabattcode. Einfach Link schicken, dann kriegt er diesen per Mail.

tweet-workshop

Ein Teilnehmer versucht sich in einer Lösung mit Java statt C#

Weiterführende Links

  • Das erwähnte Video zu Enumeration mit Verhalten könnt ihr hier anschauen.
  • Danke an Tim für den Link zum Case Converter für Visual Studio.
  • Außerdem lege ich euch die Reactive Extensions ans Herz, die es für unterschiedliche, gängige Programmiersprachen gibt.
  • Git Snippet
  • Wer noch ein wenig üben möchte, kann dies mit der erweiterten FizzBuzz Kata tun.
  • Blog Post über die Migration von NHibernate zu EntityFramework in 3 Tagen.

 

Demnächst geht ein Video mit dem theoretischen Teil (Why-How-What) online, in dem ich nochmal die Zusammenhänge zw. „schlechtem Code“ und den Gründen dafür erläutere. Wer automatisch informiert werden will, wenn es veröffentlich wird, abonniert einfach meinen Blog oder schickt mir eine Nachricht.

 

 

Workshop: Conquer your Codebase – Bewährter Clean Code aus der Praxis

Am Developer Open Space 2017 halt ich einen 1-tägigen Workshop zu obigem Thema. In reduzierter, kompakter Form werde ich dazu bewährte Inhalte aus meinem 3-tägigen Seminar nehmen und die Ursachen für folgende Probleme adressieren:

  • Unverständlicher bzw. schlecht wartbarer Code
  • Bugs
  • Skalierungsprobleme
  • Go Live Probleme
  • Verpasste Deadlines und lange Entwicklungszeiten

 

Wir werden uns anschauen wie es dazu kommen kann, z.B. weil

  • die Infrastruktur nicht wiederverwendbar ist,
  • die Domänenlogik nicht erweiterbar ist,
  • eine falsche Nutzung der API möglich ist,
  • der Code nicht ausdrucksstark ist,
  • oder starke Abhängigkeiten bestehen.

 

Wir werden das Open Closed Principle genauer besprechen und Seperation of Concerns am konkreten Beispiel umsetzen. Speziell für Freunde der Objektorientierung werde ich je nach verfügbare Zeit praktische Lösungen zur Vermeidung von If-Else-Zweigen und NULL-Checks zeigen.

 

Ein Laptop mit Visual Studio oder Visual Studio Code und .NET 4.6 wären wünschenswert. Prinzipiell ist der Workshop aber für alle Entwickler des objektorientierten Paradigmas geeignet, da bis auf Delegaten (Action/ Func) und Erweiterungsmethoden kaum Sprachspezifika verwendet werden. Darüber hinaus können Teilnehmer auch ohne Hardware beiwohnen, weil wir beim Live Coding am Präsentations-PC mit Code Monkey Runden arbeiten werden.

Gerne dürfen die Teilnehmer mir vorab Fragen und Probleme z.B. hier in Form von Kommentaren oder per E-Mail zukommen lassen.

Git History Commit Redos für Workshops

Mit diesem Snippet, das ich in meinen Workshops verwende, könnt ihr die Commits eines Branches vom ersten bis zum letzten Interaktiv durchsteppen, um so jede Änderung mit den Teilnehmern zu besprechen. Das ist vor allem dann nützlich, wenn das Live Coding mehr ablenkt oder die Zeit ein wenig knapp ist:

Blog Post

GIT_EDITOR=true git rebase -i --root -x 'git diff --name-only HEAD~1..HEAD;git show --oneline --no-patch; printf "Return for next commit"; read;clear'

 

Beim ersten Commit gibt es noch eine kleine Fehlermeldung, da versucht wird auf den vorherigen Commit zuzugreifen, den es beim 1 Commit logischerweise nicht geben kann.

Git History Commit Redo

Git History Commit Redo- First Commit

 

Ab dem zweiten Commit werden dann sowohl die Commit Message als auch alle alle geänderten Dateien angezeigt.

Git History Commit Redo

Git History Commit Redo – Next Commit

 

Am Schluss kommt noch diese Meldung.

Git History Commit Redo

Git History Tracking – Finished

 

Beachtet bitte, dass dies nur bei einer linearen Historie funktioniert, da es sich um einen Rebase handelt und dass ihr hierfür am besten einen Test-Branch abzweigt, um nicht ggf. Änderungen noch einzubauen, die dann im Master-Branch landen.

Programmieraufgaben für Bewerber

Ich habe in diesem Post beispielhaft eine unserer Programmieraufgaben herausgezogen, die kürzlich unser neuer Mitarbeiter Hr. Jörg Weißbecker gelöst hat. In der Regel ist das Ziel ein möglichst hochwertiges Ergebnis zu programmieren, das z.B. die Prinzipien OCP und SoC solide umsetzt.

Zeitdruck ist an der Stelle völlig sekundär, sodass die Bewerber die Aufgaben immer von zuhause in aller Ruhe entwickeln können. Sie erhalten dann von mir nach jeder Iteration die nächste Anforderung übermittelt.

Am Ende besprechen wir das Ergebnis, sprich sie stellen ihren Gedankengang vor, reflektieren Probleme und stellen sich meinen Fragen.

 

Allgemeines vorab:

  • Es ist keine Oberfläche notwendig, es genügt eine Konsolenanwendung
  • Welche Bibliotheken genutzt werden, ist freigestellt
  • Das Schreiben von Tests ist optional
  • Aber: Setzte das objektorientierte Paradigma so gkonsequent als möglich um (!)

 

Iteration 1: Entwickeln Sie ein Programm, welches prüft, ob 2 Dateien identisch sind. Beispiel für den Aufruf:

Dublettenfinder.exe file1.txt file2.txt

 

Iteration 2: Statt 2 Dateien sollen jetzt 2 Ordnerpfade übergeben werden, für welche das Programm prüft, ob das Ordnerpaar Dubletten enthält. Wenn ja, soll es pro Dublette die Dateipfade gruppiert ausgeben. Beispiel:

Hash: xyxzasdfadsf

  • Datei1: c:\abc.pdf
  • Datei2: d:\efg.pdf

 

Iteration 3: Es soll möglich sein eine Liste von Verzeichnissen zu übergeben, sodass beliebig viele Verzeichnisse verglichen werden können. Außerdem sollen, sofern vorhanden, auch die Unterverzeichnisse geprüft werden.

 

Iteration 4: Fügen Sie bitte eine optionale Konfigurationsmöglichkeit hinzu, um nur bestimmte Dateitypen vergleichen zu können, sodass entweder alle Dateitypen, genau einen Dateityp oder n-Dateitypen verglichen werden können.

 

Iteration 5: Machen Sie den Algorithmus austauschbar, sodass der Identitätscheck z.B. anhand von Sha256 Hashwerten oder Bildanalyse durchgeführt werden kann.

 

Iteration 6: Nutzen Sie einen IoC Container, um dynamisch beim Start der Anwendung alle vorhandenen Algorithmen zu laden und dann vom User in der Konsole auswählen zu lassen. Jeder Algorithmus soll in einer eigenen Assembly liegen. Machen Sie dann eine Assembly für MD5 und Sha256.

 

Die  Lösung zu diesem Zeitpunkt müsste sich Fragen bzgl. der Erweiterung der folgenden 2 Änderungen stellen:

  • Lösche Dubletten anhand eines bestimmten Patterns, z.B. alle in Verzeichnis ‚xy‘ oder mit Dateinamen, die ‚yz‘ enthalten.
  • Ermögliche die Erkennung von doppelten Bildern anhand der Bilderkennung und nehme immer die beste Auflösung.

 

Kürzlich gab es in der dotnetpro einen Artikel von Stefan Lieser, welcher eine recht ähnliche Kata gelöst hat. Die Lösung von Herrn Weißbecker befindet sich hier.

Angular Starthilfe – 2-tägiger Workshop in Leipzig

Zur Unterstützung des Developer Open Space 2017 bieten wir allen Teilnehmern, die uns eine Kopie ihres Tickets an schulung@co-IT.eu zukommen lassen, die Teilnahme an unserem 2-tägigen Angular 4 Workshop zum reduzierten Preis von 1250€ an.

Das Training ist vom 11-12. Oktober in Leipzig und damit direkt vorm #devspace selbst, sodass eine separate Anfahrt nicht notwendig ist. In unserem Firmenprofil könnt ihr euch vorab über uns informieren.

Angular_full_color_logo.svg

Für alle diejenigen, die meinen Blog lesen und nicht zur Veranstaltung gehen können, habe ich ebenfalls eine spezielle Aktion: Wer mir als erstes an die oben genannte E-Mail-Adresse eine Nachricht mit dem Titel „ich blogge“ schreibt und darin seinen Blog verlinkt, der erhält ebenfalls einen Rabattcode.

Die Anmeldung ist ab sofort auf Eventbrite freigeschaltet.

Einfachere Reisekostenabrechnungen für alle

Optimierung unserer Prozesse ist bei uns schon fast eine Leidenschaft, daher evaluieren wir regelmäßig neue Tools. Eines davon ist Einfach Reisekosten.

Unsere Anforderungen waren klar umrissen:

  • Skalierung auch mit 30 Mitarbeitern möglich
  • Reduzierung der benötigten Zeit pro Consultant auf 30 Minuten pro Monat
  • Reduzierung der Durchlaufzeit im Rechnungswesen
  • Auswertungen zur Kalkulation unserer Preise möglich
  • Einheiltung der immer aktuellen gesetzlichen Regelungen
  • Nice-to-Have: Integration in Debitoor (*)

*) Zu unserer Buchhaltungssoftware Debitoor kann ich gerne einen Artikel verfassen, wenn Interesse besteht. Schreibt mir einfach einen Kommentar.

Nach mehreren Tests, unter anderem dank des schnellen und freundlichen Supports, welcher uns einen Demo Team Account zur Verfügung gestellt hat, haben wir jetzt das Abo gebucht. Besonders gefällt uns, dass Entfernungen anhand von Google Maps automatisch berechnet werden und längere Projekte, in denen immer die gleichen Fahrten anfallen, mit wenigen Schritten erfasst werden können. Das Synchronisieren in Debitoor und die korrekte Zuordnung gemäß DATEV-Kostenrahmen funktioniert problemlos. Selbst so seltene Vorgänge wie das Erfassen von W-LAN Kosten, SIM-Karten, Vignetten, Fähren u.v.m. lassen sich damit abbilden. Durch die genaue Zeiterfassung werden die jährlich aktualisierte Pauschalen automatisch erfasst. Eine Reduktion durch Eingabe der gestellten Verpflegung z.B. von Frühstück im Hotel rundet das Ganze ab. Die Administration der Mitarbeiter scheint auf den ersten Blick auch keine Wünsche offen zu lassen.

Schwächen sehen wir aktuell noch im Zusammenspiel mit Debitoor. So findet kein Abruf des Kundenstamms statt, um den Kunden bzw. das Projekt in der Abrechnung per Auswahl erfassen zu können. Die PDF mit der Abrechnung würden wir darüber hinaus gerne customizen. Preislich wäre ein Rabatt mit steigender Mitarbeiterzahl wünschenswert.

Gerne ziehe ich Vorschläge vom Leser in Betracht. Postet diese in die Kommentare.

ebuero leider nicht für alle geeignet

Kürzlich haben wir für uns den Dienst von ebuero evaluiert. Danke an dieser Stelle an Hans-Peter Schelian und Thomas Bandt für die Empfehlung.

Das Ziel war es, dass unsere Kunden 24/7 365 Tage im Jahr immer jemanden erreichen können – wohlgemerkt einen Menschen! Das muss nicht zwingend jemand sein, der sofort weiterhelfen kann, aber es sollte damit gewährleistet sein, dass der Anrufer darauf vertrauen konnte, dass sich um sein Anliegen asap gekümmert wird.

Mir hat besonders gefallen, dass unser Kunden immer Telefonistinnen aus der gleichen „Sekretärinnen-Gruppe“ bekommen hätten, sprich 3-4 Mitarbeiter von ebuero wären immer für unsere Anrufer zuständig gewesen. Dass diese bereits alle fließend Englisch sprechen, war ein weiterer  Pluspunkt. Gegen einen Aufpreis wären Muttersprachler möglich. Die Preise waren für mein Empfinden durchaus akzeptabel.

Leider konnten einige unsere must-have Anforderungen nicht erfüllt werden:

  • Freigabe von Nummernblöcken in der VIP-Liste: Leider müssen Nummern einzeln eingetragen werden. Bereiche der Form +49-721-1234-XXX, wie sie für größere Kunden notwendig sind, werden nicht unterstützt. Speziell hierfür fehlt mir das Verständnis, wieso das nicht möglich ist. Während des Schreibens fällt mir auf, dass es interessant zu wissen wäre, ob CSV-Dateien hochgeladen werden können. So ließe sich diese Einschränkung vielleicht umgehen.
  • Benutzerbezogene Benachrichtigungen sind nicht möglich, d.h. die Notifikation über einen Anruf geht an genau eine anzugebende E-Mail-Adresse. Eine Zuordnung zu der Person, die vom Kunden versucht wurde anzurufen, gibt es nicht. Eine Anpassung der E-Mail, um per Regeln in unserem Exchange die automatische Weiterleitung zu gewährleisten, ist ebenfalls nicht möglich.
  • Das direkte, automatisierte Weiterleiten der VIP Anrufer ist nicht möglich, sprich in jedem Fall landet der Kunde erst im virtuellen Sekreteriat.
  • Das Kalender-Sharing Feature, um der Sekretärin Zugriff auf die Termine von uns zu geben, um dem Kunden zu erwartende Rückrufzeiten zu nennen, unterliegt Einschränkungen, die ich hier nicht weiter aufzählen will.

 

Wenn ein Leser uns einen alternativen Dienst empfehlen kann, wäre ich dankbar. Gerne dürfen auch die Nutzer von ebuero hier Verbesserungsvorschläge in die Kommentare posten, da ich den Artikel meinem Ansprechpartner in der Hoffnung zusenden werde, dass diese Punkte noch verbessert werden.

Train the Trainer

Kürzlich haben wir für unsere Trainer in der co-IT.eu nach Workshops gesucht, um diesen neue Werkzeuge zur Optimierung ihrer Seminare an die Hand zu geben. Die ein oder andere Stellschraube lässt sich bekanntlich immer noch drehen, um das Wissen noch effizienter zu vermitteln. Dabei stellt das Fachliche nicht die Herausforderung dar, vielmehr ist es eine Kunst komplexes Wissen möglichst einfach zu vermitteln, sodass der Teilnehmer das Neue im Alltag auch reproduzieren kann.

Daher waren wir v.a. an Erkenntnissen aus Lernpsychologie und der Pädagogik interessiert. Wie funktioniert das Gedächtnis, wie erzeuge ich Bilder oder erzähle ich meinen Themenstoff als Story (Storytelling). Darüber hinaus waren uns Themen wie Auftreten, Charisma, Schlagfertigkeit oder aber Kritikfähigkeit wichtig, da diese den fruchtbaren Boden für Wissensvermittlung darstellen.

In einer Workshopprofil Präsentationstechniken haben wir brainstormartig alles notiert, was wir in irgendeiner Form gerne in dem Workshop sehen und hören wollten. Zu dem Zeitpunkt war bereits klar: Wir werden jährlich ein solches Training absolvieren. Demzufolge war nicht das Ziel möglichst viel in kurzer Zeit abzudecken, sondern dedizierte zusammenhängende Themen in einer notwendigen Tiefe. Mit der Wunschliste und der Bitte um eine Konzeptausarbeitung schrieb ich dann mehrere Unternehmen an. Natürlich nicht ohne über Facebook und Twitter nach Empfehlungen zu fragen. Danke Daniel an dieser Stelle für deine Rückmeldung.

Folgende Unternehmen haben wir kontaktiert:

Mit jedem der Unternehmen habe ich telefoniert, um die Konstellation und den Rahmen sauber abzustecken. Nachdem aufgrund terminlicher Konflikte zwei Anbieter weggefallen waren, haben wir demokratisch in der Gruppe der Teilnehmer die persönlichen Rankings erfasst. Weil ohnehin alle die Rhetorikhelden auf Platz 1 gelistet hatten, war die Sache schnell geklärt.

Der Beitrag soll dem Leser ein paar Anlaufstellen vermitteln und mit der oben verlinkten Wunschliste einen schnelleren Einstieg ermöglichen.

Angular Fundamentals Workshop in Karlsruhe

Zur Unterstützung des NOSSUED Software Entwicklungs Open Space bieten wir den ersten 2 Teilnehmern, die uns eine Kopie ihres Tickets an schulung@co-IT.eu zukommen lassen, die Teilnahme an unserem 3-tägigen Angular 4 Fundamentals Workshop kostenlos an.

Das Training ist vom 11-13. Juli in unseren modernen, klimatisierten Büros mit höhenverstellbaren Tischen im Herzen von Karlsruhe. Unser Firmenprofil verrät euch mehr.

Angular_full_color_logo.svg

Für alle diejenigen, die meinen Blog lesen und nicht zum #nossued gehen können, habe ich ebenfalls eine spezielle Aktion: Wer mir als erstes an die oben genannte E-Mail-Adresse eine Nachricht mit dem Titel „ich blogge“ schreibt und darin seinen Blog verlinkt, der darf auch kostenlos an der Schulung teilnehmen.

#NOSSUED SOFTWARE ENTWICKLUNGS OPEN SPACE 2017

Es ist mal wieder so weit: Zum achten Mal findet #nossued, der Software Open Space der .NET Usergroup in Karlsruhe statt. Termin ist der 14-16 Juli. Zur Anmeldung geht es hier. Der Teilnahmebeitrag kann wie immer frei gewählt werden.

nossued_eventbrite_2180x1080

Impressionen der letzten Open Spaces findet ihr in meinem Blog. Meinen Artikel zum Open Space Format hat die dotnetpro freundlicherweise freigegeben.

Wir du vielleicht schon am Titel erkannt hast, hat sich der Name geändert: Dieser lautet nun Software Entwicklungs Open Space, um dem breiteren Fokus Rechnung zu tragen. Das spiegelt sich im Logo ebenso wieder. Der Hashtag #nossued und die Webseitenadresse sind gleich geblieben.

Wir würden uns freuen, wenn ihr ein wenig Werbung macht und dieses Plakat bei euch in der Firma aushängt. Ihr könnt mich gerne anschreiben, dann senden wir euch Postkarten, Flyer und Plakat zu. Schaut auch auf der dedizierten Facebook Veranstaltung vorbei und teilt diesen Beitrag.

Speedtests vom Coworking auf Teneriffa

Wie versprochen veröffentliche ich die Speedtests aus Teneriffa.

Im Apartment, welches ich über Airbnb gebucht habe, ist das Internet in Ordnung. Der Upload ist noch ausbaufähig und sporadisch treten Probleme mit Skype auf. Bisher konnte ich dies allerdings nur abends feststellen, was unter Umständen damit zu tun hat, dass dann viele gleichzeitig auf das Internet zugreifen. In der Regel klappen die Skype Telkos vormittags gut, Teamviewer funktioniert ebenfalls problemlos.

Speedtest Apartment

Speedtest Apartment (Test mit LAN)

 

Die Uploads meiner YouTube Videos oder die Downloads meiner Pluralsight Kurse führe ich dann trotzdem in den Büros durch. Das folgende Bild verdeutlicht warum.

Speedtest Büros

Speedtest Büros (Test mit LAN)

 

Weder zuhause noch im Coworking Space gab es bisher Ausfälle, wie ich sie fast regelmäßig mit Unitymedia zuhause habe. Die Firewall sind offensichtlich alle weit geöffnet, sodass ich bisher keinerlei Probleme hatte. Lediglich wie W-LAN Reichweite an beiden Orten ist ein wenig dürftig. In jedem Fall hat man direkten Zugang zum LAN.

Ich wette du hast nie geglaubt ich fahr, jetzt coworke ich schon ein Jahr auf Teneriffa

Lange war es ruhig in meinen Channels, was schlicht und ergreifend der vielen Arbeit in unserer neuen Firma co-IT.eu geschuldet war. Ich habe eine ganze Liste an Themen, die ich noch veröffentlichen will, aber starten werde ich mit Berichten aus Teneriffa – die Coworking Location meiner Wahl für den Monat März.

Was waren meine Beweggründe?

  • Die Zeit für Urlaub ist bei mir aktuell nicht gegeben, sodass ich eine urlaubsähnliche Umgebung angestrebt habe. Zudem schlägt mir das Wetter in Deutschland schon seit Jahren aufs Gemüt, sodass ich nach einer Möglichkeit gesucht habe dem künftig jährlich zu entfliehen.
  • Als Firma muss man mehr denn je für Mitarbeiter attraktiv sein, um beim War for Talent nicht den Kürzeren zu ziehen. Gepaart mit Ausflügen als Teambuilding Maßnahme planen wir kommendes Jahr für einige Tag hier her zu kommen. Vor Ort wollen wir Fachartikel schreiben, Social Media Content produzieren, Trainingsinhalte ausarbeiten und offene Diskussionen über Unternehmenswerte führen. Speziell letzteres ist meinem Verständnis nach für ein Startup elementar.
  • Effizienz: Bei meinen regelmäßigen Reflexionen sind mir Punkte aufgefallen, die primär das Thema Effizienz adressieren. Trotz Mehrarbeit – so scheint es mir – kommen am Ende weniger produktive Ergebnisse heraus. Der Wertstrom ist aber für mich persönlich die elementare Kennzahl, die stimmen muss. Wenn das nicht der Fall ist, muss am bestehenden System etwas geändert werden. Wer sich mit Effizienz beschäfigt, wird früher oder später über die Eisenhower-Matrix, die Theory of Constraints und vielleicht auch über das Standardwerk von Stephen Covey stolpern. In einem weiteren Beitrag werde ich hierauf noch eingehen.
  • Entschleunigung: Zwangsläufig musste ich mich nach dem Erkennen der obigen Probleme auch mit dem Thema Entschleunigung auseinander setzen.Dies gelingt am besten in einer neuen Umgebung. Bekanntlich haben unsere Nachbarn aus dem Süden diesbezüglich eine andere Mentalität als wir Deutschen. Deshalb bin ich gespannt, was ich hier für mich mitnehmen kann.

Wie wollte ich das lösen?

  • Zunächst einmal raus aus der alltäglichen Umgebung, raus aus der Telefonhölle und der täglichen Klein-Klein-Arbeit.
  • Weg, aber nicht zu weit weg, sodass ich, sollte ich künftig im Winter für 2-3 Monate in den Süden entfliehen, im Zweifel auch schnell für wichtige Meetings oder private Notfälle zuhause sein könnte.
  • Warm, aber nicht zu warm, denn bei der feuchtwarmen Hitze wie sie in Thailand oder der Dominikanischen Repulibik vorherrscht lässt es sich nicht mehr gut arbeiten.
  • Schnelles Internet ist die Grundvoraussetzung in meinem Beruf. Ich wollte mich nicht auf verkäuferähnliche Aussagen verlassen, sodass ich in meinem Bekanntenkreis nach Kontakten gesucht habe, die mir aus erster Hand von den Bedingungen vor Ort erzählen konnten.
  • Separate Büros standen ebenso auf meinem Zettel, da das Arbeiten in der Wohnung zwangsläufig wieder zur Mehrarbeit führen würde.

Was habe ich also gemacht?

Ich habe meine 7 Sachen gepackt, dazu jegliche Art der Elektronik und bin mit einer guten Freundin, die ebenfalls in der IT-Branche bei unserer befreundten Firma inovex arbeitet, nach Puerto de la Cruz in Teneriffa geflogen. Die Büros im Coworking Space kosten pro Monat 200€. Nach inzwischen 7 Tagen hier kann ich sagen, dass es sich problemlos produktiv arbeiten lässt.

In meiner Playlist auf YouTube könnt ihr das Experiment verfolgen. Inzwischen kam mir zu Ohren, dass Ralf Westphal zu dem Thema schon in der dotnetpro geschrieben hat. Den Artikel werde ich lesen, sobald ich wieder Zugriff auf den Leserbereich habe (danke Chris für den Hinweis!). Zum Bericht über das Internet vor Ort geht es hier.

Eine kleine Notiz am Rande: Den Beitrag habe ich nach dem Ansatz „Start with why“ von Simon Sinek verfasst.

Session Die 4 tierischen Menschentypen

Eine spannende Session mit dem Namen „Die 4 tierischen Menschentypen“ gab es dieses Jahr beim Developer Open Space. Das Video habe ich euch in meinem YouTube Kanal zur Disposition gestellt.

Leider bin ich ein wenig zu spät eingestiegen, sodass ein Teil der Einführung fehlt. Macht nichts, denn hier hat Tobias Beck das toll erklärt.

Feedback ist wie immer willkommen. Wenn euch das Video gefällt, dann teilt/liked diesen Beitrag. Wer noch den Link zum Online Self Test möchte, kann mir das in die Kommentare schreiben. Den Blog von Gregor gibt es hier.

Session Unternehmenswerte

Auf das Thema Unternehmenswerte konnte ich schon aus vielen Blickwinkeln schauen: Ob als Mitarbeiter, als Geschäftsführers, als Selbstständiger oder Dienstleister. Umso mehr hat es mich gefreut, dass Daniel Marbach dazu eine Session vorgeschlagen hat. Teilnehmer gab es reichlich. Ich hätte mir zwar  gewünscht, dass mehr aktive Teilnehmer ihre Meinung bei der nach dem Fishbowl-Konzept geführten Diskussion geäußert hätten, aber insgesamt war es eine wirklich gelungene Session. Die Aufnahme hat ein wenig mit Schwächen bei Bild und Ton zu kämpfen, aber unser Schüler Tim hat sein Bestes gegeben, um in der Nachbearbeitung die nötige Qualität rauszuholen.

Das Video darf man gerne als Einladung zur Diskussion verstehen. Deshalb halte ich hier die Punkte fest, die mir im Kopf geblieben sind:

Duzen/Siezen: Ein diskussionswürdiger Punkt, bei dem die Meinungen sicherlich auseinandergehen. In jedem Fall springen immer mehr Unternehmen auf den „Du-Zug“ auf. Klar ist aber auch: Die Anrede muss zur Unternehmenskultur passen. Ein Beispiel aus meinem Alltag sei genannt: Wenn unser Tim, Schüler, kürzlich erst 18 geworden, mit mir arbeitet, dann würde durch das Siezen aus meiner Sicht eine Hürde aufgebaut werden, die ihn bei der Arbeit weniger kreativ und in Bezug auf seine Lösungsansätze weniger „probierfreudig“ machen würde. Die Angst Fehler zu machen und sich an die Vorgaben des Chefs halten zu müssen, wird durch das Duzen einfach gemindert.

Kommunikationsnähe: Kommunikation findet bekanntlich zum Großteil nonverbal statt. Deshalb ist es umso wichtiger, eine möglichst hohe „Kommunikationsnähe“ zu erreichen. Sei es durch regelmäßige Treffen vor Ort (bei verteilten Mitarbeitern) oder durch Videokonferenzen. Chats und E-Mails sollten mehr durch die vorher genannten Punkte ersetzt werden. Für mich wird dabei einfach mehr Menschlichkeit vermittelt, die auch größere Meinungsunterschiede überwinden lässt.

Rituale: Halte ich ebenfalls für sehr effektiv. Seien es nun das Kickern oder Schachspielen in der Mittagspause, das Feierabend-Darts, das TGIF-Bierchen oder das Daily (als Videokonferenz!): Alles trägt zur besseren Kultur bei. Daniel hat mir einmal erzählt, dass bei Particular Videogespräche häufig mit einem „Kaffee-Gespräch“ über das allgemeine Befinden beginnen, bevor über Geschäftliches gesprochen wird.

Loben: Das ist nun mein persönliches Steckenpferd, wobei ich mit meiner Meinung vermutlich eine Minderheit vertrete. Ich halte Lob für Gift. Ein paar Argumente könnt ihr dazu im Video hören. Auf Twitter wurde dazu auch noch etwas gesagt. Dieser Link wurde in dem Kontext empfohlen. Weitere Informationen gibt es hier.

Persönlichkeitsanalyse: Das finde ganz spannend. Mehrere Firmen haben schon Persönlichkeitsanalysen für ihre Mitarbeiter durchführen und diese dazu schulen lassen, um Konfliktpotential zu erkennen und jedem Werkzeuge an die Hand zu geben, sich auf den Kollegen/die Kollegin einzustellen. Im Nachhinein hat mir noch ein Teilnehmer erzählt, dass bei ihnen die Projektgruppen nach dem Ergebnis zusammengestellt wurden. Alle, bei denen dies umgesetzt wurde, haben sich dazu positiv geäußert.

Wenn euch der Artikel geholfen hat, dann liked oder teilt ihn und hinterlasst einen Kommentar

Hinweis: Das Beitragsbild hat mir Andreas Richter zur Verfügung gestellt.

Schneller zur besseren Webseite mit einer Business Analyse

Für unseren größten Kunden die heco gmbh haben wir eine Business Analyse durchgeführt, um vor der anstehenden Neuentwicklung die richtigen Entscheidungen treffen zu können. Wie wichtig die Informationen über Markt, Mitbewerber, Anwender und Kunden sind und welche Schlussfolgerungen sich daraus ziehen lassen, zeige ich in diesem Video:

Während dies bei „normalen“ (im Sinne von offline bzw. intern) Software-Projekten schon eher Usus ist, kann man davon bei Web-Projekten  noch lange nicht sprechen. Meiner Erfahrung nach spielen hier Aussehen und „etwas auf die Leinwand bringen“ die erste Geige. Eine schier riesige Zahl an Feature-Wünschen, die man auf anderen Seiten gesehen hat, lässt die Stakeholder träumen.
 

Der Langsamste, der sein Ziel nicht aus den Augen verliert, geht noch immer geschwinder, als jener, der ohne Ziel umherirrt. – Lessing

 

Aus unserer Sicht ist es elementar sich die Zeit zu nehmen, um sich als Dienstleister in die Domäne des Kunden einzuarbeiten. Denn viele hoch priorisierte Wünsche sind eher nice-to-have Anforderungen. Oder schlimmer: Das „Warum“ ist gar nicht geklärt und das Produkt bzw. die Webseite wird am eigentlichen Zweck vorbei entwickelt. Da wird dann auch mal der Wunsch nach einem News-System laut, obwohl im Jahr nur 1-2 Neuigkeiten auf der Webseite eingepflegt werden sollen. Dabei wäre es unter Umständen geradezu eine Revolution in der Branche, würde man im Gegensatz zu den Mitbewerbern Echtzeitbestände und -preise auf der Webseite anbieten.

Um richtig priorisieren und die Technologie auswählen zu können, ist deshalb ein solides Know How der Domäne des Kunden notwendig, denn sonst verbaut man sich schnell Möglichkeiten, die dann teuer und langwierig umgebaut werden müssen. Setze ich beispielsweise auf SignalR, so kann ich jedem Besucher, der ein bestimmtes Produkt geöffnet hat, Änderungen am Bestand aktiv mitteilen. Auf der anderen Seite muss ich mir nicht unnötig Komplexität ins Projekt holen, wenn der Bestand von vor 2 Stunden völlig ausreichend ist. Oder wenn der Besucher gar nicht in der Lage ist bestimmt Funktionen zu bedienen (ja, das gibt es durchaus => kenne deine Anwender).

Viel Spaß mit dem Video, auch wenn es etwas lang wurde. Daran merkt man aber schon wie weitreichend das Thema ist. Schreibt mir in die Kommentare, ob ihr auch schon zu solchen Projekten gestoßen seid, bei denen das fehlende Domänenwissen zu Entwicklungsproblemen führte.

Vorlage zum Antworten bei unberechtigten Mahnungen

Kürzlich erhielt meine Oma ein Mahnschreiben der Sirius Inkasso GmbH, vertreten durch die Fachanwälte Wagner, Pauls und Kalb, welche eine Forderung der Communication Services Tele2 GmbH eintreiben wollten. Die Mahnung war in ihrem Fall völlig ungerechtfertigt und höchst fragwürdig, vermutlich Teil einer größeren, breit angelegten Abmahnwelle:

 

mahnung.

 
Ich habe mir daraufhin die Mühe gemacht und entsprechende Informationen für ein Antwortschreiben zusammengetragen. Darüber hinaus habe ich meinen Lieblingspassus aus dem Datenschutzrecht (zum Blog Post) angehängt, um denen – salopp gesagt – ans Bein zu pissen.

Meiner Meinung nach sollte man immer auf solche Schreiben antworten – idealerweise per Einschreiben. Im vorliegenden Fall habe ich das jedoch per E-Mail gemacht. Gerne könnt ihr die Vorlage nutzen, aber wie immer ohne Gewähr! Die Stellen, die ihr mit eigenen Angaben ausfüllen müsst, habe ich entsprechend markiert. Streicht ggf. die Passagen, die nicht passen sollten. Und wenn keine Antwort kommt, zögert nicht das an den Datenschutzbeauftragten des Bundeslandes des Inkassobüros weiterzuleiten. So etwas kann – leider sehr langsam – am Ende sehr teuer für die werden.

 

Sehr geehrte Damen und Herren,

bezugnehmend auf Ihr Schreiben vom {{Datum}} teile ich Ihnen hiermit mit, dass ich bezüglich Ihres Mahnschreibens sowohl die Hauptforderung als auch Ihren Anspruch auf jegliche Inkassokosten vollumfänglich bestreite.

Ich weise darauf hin, dass Ihrem Schreiben eine Bevollmächtigung im Original seitens Ihres Mandanten für den Inkassoauftrag gem. § 174 BGB nicht beilag.

Zudem befindet sich in Ihrem Schreiben keine Originale Abtretungsurkunde gem. § 410 BGB bei.

Außerdem möchte ich darauf hinweisen, dass eine Angabe des Rechnungsdatums fehlt. Falls das Rechnungsdatum der Tag des Vertragsabschlusses war, ist die Forderung sowieso verjährt, da seither bereits 3 Jahre verstrichen sind.

Eine ladungsfähige Anschrift des Forderungsstellers geht aus Ihrem Schreiben nicht hervor. Solange Sie Ihre Mandantin bzw. den ursprünglichen Forderungssteller nicht gegenüber mir als rechtsfähige, bestimmbare Partei identifizieren, bestreite ich schon Ihre Aktivlegitimation zur Beitreibung der Forderung.

Wie bereits ausgeführt, wird daher die Forderung vollumfänglich bestritten. Dies haben Sie dem Forderungssteller mitzuteilen. Forderungen, die weder qualifiziert dargelegt noch in der Sache begründet sind, und die dem Forderungssteller daher nicht zustehen, werde ich nicht begleichen.

Einem gerichtlichen Mahnbescheid werde ich fristgemäß widersprechen. Von weiteren Mahnschreiben an meine Adresse ist Abstand zu nehmen. Die bei unseriösen Inkassobüros übliche Taktik, mit fortwährenden Mahnbelästigungen die Zahlung eines ungerechtfertigten Anspruchs zu erreichen, verfängt bei mir nicht.

Ich warne unter Hinweis auf § 28a BDSG eindringlich vor widerrechtlicher Weitergabe meiner Daten an die SCHUFA oder andere Datenbanken. Eine solche ungerechtfertigte Maßnahme werde ich mit einstweiliger Verfügung sowie ggf. Schadenersatzforderungen aus § 824 BGB sowie mit Beschwerde an den zuständigen Landesdatenschutzbeauftragten beantworten.

Sie haben mir den Zugang des Schreibens sowie die Unterlassung weiterer Mahnschreiben in dieser Sache zu bestätigen. Hierfür habe ich mir eine Frist bis zum {{14 Tage ab Schreiben}} notiert. Andernfalls erfolgt umgehend Beschwerde bei der für Ihre Zulassung zuständigen Stelle.

Darüber hinaus fordere ich Sie außerdem auf, wie im § 19 BDSG Abs. 1 vorgesehen, mir mitzuteilen, welche Daten Sie über mich gespeichert haben, aus welcher Quelle Sie diese Daten haben und an wen Sie diese Daten weitergegeben haben. Des Weiteren erwarte ich, dass, gemäß § 20 BDSG Abs. 2, meine Daten gelöscht werden. Wenn dies aufgrund eines Gesetzes nicht möglich ist, sind die Daten zu sperren (vgl. §20 BDSG Abs. 3). Sollten Sie der Aufforderung nicht nachkommen, behalte ich mir vor die Sache beim Datenschutzbeauftragten Ihres Bundeslandes einzureichen

Quelle: https://www.antispam-ev.de/wiki/Antwortbrief_gegen_ungerechtfertigte_Inkassoforderung

Gitolite Berechtigungssystem

In diesem Video gebe ich einen Einblick in das Berechtigungssystem von Gitolite. Ich spreche über Zugriffsgruppen, über das Vererbungssystem, über Wild Repos, über mögliche Einsatzszenarien und einiges mehr. Eine ausführliche Dokumentation findet ihr hier.

Die 2 im Video genannten Befehle waren

  1. Prüfung der Berechtigungen für ein Repository (zur Doku): Im Beispiel wird geprüft, ob der User ‚uli.armbruster‘ Berechtigung zum Löschen des ‚master‘-Branch im Repository ‚co-it/homepage‘ hat.gitolite access -s co-it/homepage uli.armbruster D refs/heads/master 
  2. Übersteuern von Berechtigungen am Repository selbst: In dem Beispiel würde mir Gregor auf sein userspezifisches-Repository ‚users/gregor.woiwode/spike1‘ Lesezugriff geben.ssh git@ci.heco.de perms users/gregor.woiwode/spike1 + READERS uli.armbruster

 

Bei Fragen einfach nutzt die Kommentarfunktion oder kontaktiert mich direkt.

Gewährleistung und das Übel mit der Beweislastumkehr

Disclaimer
Dieser Beitrag entspricht meiner privaten Recherche und darf nicht als rechtlich verbindend angesehen werden. Es soll eher als Einstieg in das Thema dienen, um einen groben Überblick zu kriegen.

Abgrenzung Garantie und Gewährleistung
Zuerst einmal ist zu beachten, dass Gewährleistung nicht gleich Garantie ist. Viele denken, dass es sich bei den Begriffen um das Gleiche handelt, jedoch ist die Garantie nur eine freiwillige Leistung des Verkäufers, zusätzlich zur gesetzlich geltenden Gewährleistungspflicht.
„Mit der Garantie sichert der Verkäufer eine unbedingte Schadensersatzleistung zu, während die Gewährleistung eine zeitlich befristete Nachbesserungspflicht bei Mängeln beschreibt.“

Gewährleistungszeit
Normalerweise gilt die Gewährleistung 2 Jahre ab Übergabe der Kaufsache, jedoch kann die Frist auch verkürzt bzw. sogar ausgeschlossen werden. Zu unterscheiden ist v.a. zw. Neuware und gebrauchter Ware und zw. Unternehmer und Privatpersonen.

Neuware

Unternehmer verkauft an Unternehmer Gewährleistung kann auf 1 Jahr verkürzt werden
Unternehmer verkauft an Privatperson 2 Jahre, keine Verkürzung möglich
Privatperson verkauft an Privatperson Gewährleistung kann auf 1 Jahr beschränkt werden


gebrauchte Ware

Unternehmer verkauft an Unternehmer Gewährleistung kann ausgeschlossen werden
Unternehmer verkauft an Privatperson Gewährleistung kann auf 1 Jahr verkürzt werden
Privatperson verkauft an Privatperson Gewährleistung kann ausgeschlossen werden

 

Beweislastumkehr
Beim Verbrauchsgüterkauf (Privatperson ist der Käufer, ein Unternehmen ist Verkäufer) ist zu beachten, dass der Verkäufer in den ersten 6 Monaten im Falle eines Mangels beweisen muss, dass dieser nicht schon beim Verkauf vorlag. Nach den 6 Monaten tritt die Beweislastumkehr in Kraft und der Käufer muss beweisen, dass der Mangel bereits beim Verkauf vorhanden war. Obwohl Privatpersonen also rechtlich 2 Jahre Gewährleistung zustehen, wird es nach 6 Monaten schwierig diese in Anspruch zu nehmen. Denn um den benötigten Nachweis zu erbringen, bedarf es in der Regel ein spezielles Gutachten.

Handelt es sich bei dem Käufer um ein Unternehmen, so wird davon ausgegangen, dass man sich mit dem Kauf von Waren auskennt und deshalb die Ware direkt begutachten und etwaige Fehler gleich reklamieren kann. Sprich hier gilt die Beweislastumkehr sofort bzw. spätestens nach 14 Tagen.

Bei Verkäufen unter Privatpersonen liegt die Beweislast immer beim Käufer.

Fazit
Die Gewährleistungspflicht hilft Privatpersonen nur in den ersten 6 Monaten. Besser ist es beim Kauf auf eine möglichst lange Garantie seitens des Herstellers zu achten. Persönlich habe ich außerdem die Erfahrung gemacht, dass ein entsprechend kulanter Verkäufer wie Amazon in solchen Fällen sehr hilfreich sein kann. Mit Cyberport habe ich hingegen sehr schlechte Erfahrungen gemacht.

Quellen

Should I stay or should I go: Wechselmotive analyisieren

In unserem Video, welches sich an Bewerber für die co-IT.eu GmbH richtet, sprechen wir das Thema Wechselgründe an. Die folgende Linksammlung soll euch bei eurer Entscheidung helfen.

 

 

Wir werden die Liste kontinuierlich erweitern, sofern wir gut Artikel finden. Der geneigte Leser kann gerne weitere Vorschläge einreichen oder von seinen Erfahrungen berichten.

Tools for Developers Session vom NET Open Space 2016

Zur Session „Tools & Practices for Developers“ habe ich mir Notizen gemacht. Wie versprochen findet ihr hier aufgelistet die genannten Tools. Ich habe nicht alle aufgeschrieben, also postet gerne weitere, wenn euch eines fehlt.

Mein Antrieb hinter der Session war der, dass ich meine tägliche Arbeit versuche so weit es geht zu optimieren und automatisieren. Wenn ich pro Tag 10 Minuten einsparen kann,was z.B. alleine durch TotalCommander möglich ist, so ergibt sich pro Jahr eine freigewordene Zeit von 43,5h.

 

Keepass Plugins

meine Keepass Plugins

Wenn ihr noch wichtige Tools aus eurer täglichen Arbeit nicht aufgelistet findet, dann schreibt mir und ich füge sie hinzu.