Ich arbeite für ein kleines, unabhängiges Softwareentwicklungs-Startup. Wir sind jetzt seit fast drei Jahren im Geschäft und die Dinge laufen ziemlich gut. Wir haben einen ziemlich stetigen Strom von Projekten für einen ständig wachsenden Kundenstamm und haben daher vorsichtig damit begonnen, neue Mitarbeiter und Aushilfen einzustellen. Wir haben jetzt fünf feste Mitarbeiter, von denen zwei Vollzeitentwickler sind und einer seine Zeit zwischen Entwicklung, Design und Verwaltung des Unternehmens aufteilt.
Da die Arbeitsbelastung immer höher geworden ist, sind wir auf einige Probleme gestoßen: Wir arbeiten viele Stunden, verpassen Fristen, können keine genauen Schätzungen darüber abgeben, wann ein Projekt abgeschlossen sein wird, und die Qualität unseres Codes lässt nach. Ich wurde gebeten, einen Entwicklungsprozess zu entwickeln, der besser zu unserem Unternehmen und unseren Projekten passt.
Normalerweise arbeiten wir an mehreren Projekten gleichzeitig – das ist aufgrund der Menge an Projekten, die wir übernommen haben, und der geringen Anzahl an Entwicklern, die wir haben, unvermeidlich. Derzeit teilen wir das mehr oder weniger in zweiwöchige Intervalle auf: Arbeite zwei Wochen an Projekt A, arbeite zwei Wochen an Projekt B, und dann taucht unweigerlich ein Problem mit Projekt A oder C auf und wir verbringen einen bestimmten Tag damit für Projekt B auf Projekt A und C.
Unsere Kunden kommen aus dem ganzen Land und haben unterschiedliche Hintergründe. Manche sind gesprächig, manche nicht. Einige erwarten wöchentliche Updates, andere haben kein Problem damit, zwei Monate lang nichts von uns zu hören. Wir arbeiten lieber in kleinen Iterationen: Bringen Sie einen Prototypen so schnell wie möglich aus der Tür und in die Hände des Kunden (normalerweise etwa einen Monat nach Beginn der Entwicklung) und wiederholen Sie ihn dann alle zwei bis vier Wochen. Wir haben festgestellt, dass dies für die Art von Projekten, die wir durchführen, von entscheidender Bedeutung ist, und für die Tatsache, dass unsere Kunden oft keine wirkliche Vorstellung davon haben, was sie wollen, bis sie eine Zeit lang etwas in der Hand hatten, das ihren Wünschen nahe kommt.
Im Moment ist unser Entwicklungsprozess ziemlich geradlinig, aber offensichtlich mangelhaft. Unser Designer hat eine Idee für eine Anwendung und ein rudimentäres Grafikdesign, und unsere Entwickler (einer, zwei oder alle drei) teilen sich die Arbeit ad hoc auf und beginnen mit der Entwicklung. Hin und wieder prüfen wir, wo wir stehen, und passen gegebenenfalls an. Es gibt nicht viel mehr als das.
Ich habe darüber nachgedacht, Code-Reviews durchzuführen: Jedes Stück Code wird von mindestens einem Entwickler überprüft, der es nicht geschrieben hat. Dies scheint ein guter Weg zu sein, um die Qualität unseres Codes zu verbessern, aber es kostet viel Zeit, die wir einfach nicht haben. Dasselbe gilt für Unit-Tests: Wir haben Wochen damit verbracht, Tests zu schreiben, und mussten oft die Tests ständig optimieren, weil wir herausfanden, dass sie nicht die richtigen Dinge oder nicht genug testeten. Dieses Projekt hat deutlich länger gedauert als Projekte, bei denen wir keine Komponententests durchgeführt und nur Fehler beseitigt haben, wenn wir sie gefunden haben. Auch hatten wir dem Kunden wochenlang nichts zu zeigen. Vielleicht haben wir es natürlich nur falsch gemacht.
Ich habe auch darüber nachgedacht, unserem Team einen engagierten Tester hinzuzufügen: jemanden, der Fehler findet, kategorisiert und uns meldet, damit die Entwickler weniger Zeit damit verbringen müssen, Fehler zu finden und Support für unsere Kunden zu spielen, und mehr Zeit haben tatsächlich Fehler beheben und die Anwendung entwickeln. Offensichtlich ist dies eine erhebliche Investition für ein kleines Team wie unseres, aber ich habe den Verdacht, dass es eine effektivere Art ist, Geld auszugeben, als einfach mehr Entwickler auf ein Projekt zu werfen.
Was bessere Schätzungen betrifft, habe ich keine wirkliche Ahnung. Wir haben uns mit der Planung von Poker beschäftigt, aber meiner Erfahrung nach war das kaum mehr als die völlig ungenauen Vermutungen, die wir bereits gemacht haben. Schließlich möchte ich den Designprozess bis zu einem gewissen Grad stärker formalisieren. Offensichtlich können wir aufgrund der iterativen Entwicklung kein Design wirklich in Stein gemeißelt haben, aber es würde wahrscheinlich nicht schaden, wenn wir im Vorfeld etwas mehr Zeit damit verbringen würden, sowohl die Anwendungsarchitektur als auch das grafische Design zu formalisieren.
Grundsätzlich habe ich eine vernünftige Vorstellung davon, was wir verbessern können und was uns derzeit fehlt, aber ich habe keine wirklich konkreten Vorstellungen, wie wir dieses Ziel erreichen können. Daher wende ich mich an Stack Exchange. Wahrscheinlich gibt es viele von Ihnen in ähnlichen Unternehmen wie unserem, die mit denselben Problemen zu kämpfen hatten. Wie hast du sie überwunden oder in welche Fallen bist du getappt, die wir deiner Meinung nach vermeiden sollten?
Sie haben vier Probleme identifiziert. Von diesen würde ich die folgenden beiden als Ihre Hauptprobleme ansehen (lange Arbeitszeiten und verpasste Fristen sind wahrscheinlich die Folge davon):
Die Qualität Ihres Codes lässt nach : Wenn die Qualität schlecht ist, erledigen Sie am Ende viel ungeplante Arbeit. Dies führt zu langen Arbeitszeiten und verpassten Fristen, nicht zu vergessen, die Moral des Teams.
Es ist nicht möglich, genaue Schätzungen darüber abzugeben, wann ein Projekt abgeschlossen sein wird : Dies würde auch zu langen Arbeitszeiten und entweder schlechter Codequalität oder verpassten Fristen oder beidem führen.
Sie scheinen mehrere Optionen zur Verbesserung der Qualität Ihres Codes ausprobiert oder in Betracht gezogen zu haben:
Code-Reviews : Bei meinem vorherigen Auftrag hatten wir Probleme mit der Codequalität. Durch die Einführung der Codeüberprüfung konnten wir Fehler vor der Veröffentlichung erkennen und die Veröffentlichungsqualität erheblich verbessern. Überprüfen Sie zumindest den Code mit hohem Risiko.
Unit-Tests : Wir hatten große Probleme damit, Unit-Tests einzuführen. Wenn Sie es bereits eingeführt haben, ist mein Vorschlag, es zumindest in einigen Projekten fortzusetzen. Einige Benutzer haben von enormen Vorteilen durch Unit-Tests berichtet. Stellen Sie selbst fest, dass es nicht die Vorteile bringt, bevor Sie es aufgeben.
Engagierter Tester : Ich würde dringend einen engagierten Tester empfehlen. Entwickler haben blinde Flecken. Außerdem haben Entwickler nicht die Geduld, sich wiederholende Aufgaben zu erledigen, die oft für sorgfältige Tests erforderlich sind.
Zur besseren Einschätzung habe ich drei Vorschläge:
Continue Planning Poker : Es zerlegt das monolithische Projekt zumindest in kleinere Teile (Epics/Stories). Indem Sie die Schätzungen mit den tatsächlichen Zahlen vergleichen, können Sie sehen, in welchen Bereichen Ihr Team tendenziell Fehler macht. Außerdem bringt es die Teammitglieder dazu, frühzeitig über den Arbeitsumfang, den Entwicklungsansatz und etwaige Risiken/Annahmen zu sprechen. Erfasse diese in der Story/dem Epos.
Zeitplanvorkehrungen : Treffen Sie die folgenden Vorkehrungen, wenn Sie Zeitpläne für neue Projekte erstellen:
10 % (ein Tag in allen zweiwöchigen Sprints) für Wartungsarbeiten an bestehenden Projekten.
10 % für Urlaub, Schulungen und Hilfe bei Ausschreibungen für zukünftige Projekte.
Verfeinern Sie Ihre Schätzungen und planen Sie nach dem Prototyp-Feedback : Wenn Sie das Feedback von Ihrem Kunden erhalten, ist der Umfang klarer (für Ihren Kunden und für Sie). Es ist an der Zeit, Ihre Schätzung zu verfeinern und Ihrem Kunden jede Änderung im Zeitplan mitzuteilen.
Es gibt viele Bücher über Ihre Situation und Bücher zu jedem Punkt, den ich hier erwähnt habe. Der wichtigste Punkt, den ich noch einmal wiederholen werde, ist der Umgang mit Ihrer aktuellen Situation. Sie müssen vor allem anderen stabilisieren und eine feste Grundlage schaffen. Ich habe zu viele Unternehmen in der Situation erlebt, dass sie „Häuser auf Sand gebaut“ haben.
Ich glaube, du stellst hier vielleicht die falsche Frage. Sie haben erwähnt, dass das Problem darin besteht, dass Sie Fristen verpassen und nicht in der Lage sind, genaue Schätzungen darüber abzugeben, wann die Arbeit abgeschlossen sein wird. Der natürliche Instinkt der meisten Techniker ist es, nach einer Delivery-Management-Lösung zu suchen – und genau das haben Sie getan.
Ich würde jedoch vorschlagen, dass das, was Sie erleben, ein Problem mit der Kundenbeziehung ist. Wenn sich Kunden über verpasste Fristen und ungenaue Lieferschätzungen beschweren, könnten Sie diese Probleme angehen, indem Sie die Beziehung zu Ihren Kunden besser verwalten.
Ich würde empfehlen, dass Sie für jeden Kunden jemanden, vielleicht pro Kunde eine andere Person, als Ansprechpartner benennen. Sie sollten eine Beziehung zu diesem Kunden aufbauen, die es ihnen ermöglicht, über Fristen und Liefererwartungen zu verhandeln. Dadurch wird der Druck abgebaut, den Sie derzeit verspüren, lange zu arbeiten und unter engen Zeitvorgaben zu liefern.
Möglicherweise finden Sie auch einige Prozessverbesserungen, die Ihnen helfen, aber die Realität ist, dass sich der Großteil der Forschung in diesem Bereich auf größere, besser strukturierte Teams bezieht. Wie Sie festgestellt haben, ist der Versuch, „Best Practice“ für die Branche anzuwenden, für kleine Start-up-Gruppen tendenziell sehr problematisch.
Ich könnte der Antwort, die vorschlug, "keine Arbeit mehr zu übernehmen", nicht mehr widersprechen. Das Gewinnen von Arbeit ist das Lebenselixier kleiner Organisationen, und Sie sollten unbedingt jeden Kunden gewinnen, den Sie erreichen können. Aber tappen Sie nicht in die Falle des Ingenieurs und denken Sie, dass die einzige Lösung für ein Problem mit der Kundenwahrnehmung darin besteht, die Lieferqualität zu verbessern. Kunden können leichter mit verbessertem Kundenservice und etwas persönlicher Aufmerksamkeit zufrieden sein.
Ich kann James Shores „Art of Agile Development“ wärmstens empfehlen, um die Migration zu einer agilen Kultur anzukurbeln.
Eingebettet in die im Buch vorgeschlagenen Praktiken sind Konzepte wie „Weniger ist mehr“ zusammen mit einer guten Definition von „Erfolg“ (Schnittpunkt von technischem, persönlichem und organisatorischem Erfolg) und wie man ihn erreicht.
Es klingt, als stünden Sie vor der klassischen „Opfer Ihres eigenen Erfolgs“-Situation. Der Prozess, der Sie erfolgreich gemacht hat, behindert Ihr zukünftiges Wachstum.
Ich würde vorschlagen, dass Sie zunächst alle Gründe verstehen, warum Sie Fristen verpassen. Es ist unwahrscheinlich, dass es nur einer ist. Ich würde vorschlagen, ein Tool wie ein Ishikawa-Diagramm zu verwenden, http://en.m.wikipedia.org/wiki/Ishikawa_diagram . Stellen Sie sicher, dass Ihr Team daran beteiligt ist, alle Gründe zu identifizieren.
Zweitens priorisieren Sie die Themen, welche Gründe in kürzester Zeit die größte Wirkung haben werden. Dies ist das Problem, das zuerst angegriffen werden muss.
Sobald Sie sich entschieden haben, ein einzelnes Problem zu verbessern, seien Sie hartnäckig. Wenn Sie beispielsweise feststellen, dass Fehler Sie daran hindern, Fristen zu verpassen, implementieren Sie frühzeitige Codeüberprüfungen. Bleiben Sie dran, bis Sie eine Verbesserung sehen und die Veränderung in Ihre Kultur übernommen wird.
Versuchen Sie außerdem, wo immer möglich, Daten zu Ihrem Prozess zu erfassen, wie viele Verzögerungen Sie feststellen und was sie verursacht hat. Dies wird Ihnen helfen, den Wert Ihrer Verbesserungsbemühungen zu demonstrieren.
Ich würde Ty auch raten, nicht mehr als ein Problem gleichzeitig zu beheben.
Morten Kirsbo
Peter Török
Bas
Bas