Hallo,
meine Frage richtet sich an Entwickler (kleinere Gruppe) - welchen
Workflow nutzt ihr (z.B. mit git) - es gibt im Netz zahlreiche mit allen
möglichen Vor- und Nachteilen. Was nutzt ihr und warum? Wo gibt es
Probleme?
Viele Grüße,
Das ganze Team committet nach Belieben direkt auf master, vermurkst
dabei gerne auch die Zeilenendungen (Windows vs. Unix), und bei
Merge-Konflikten fragt man den git-Guru im Team.
Theoretisch bietet Git das genialste Feature überhaupt. Die einzelnen
Teams committen ihren Murks in ihr eigenes Repository. Und die
Maintainer pullen nur das Brauchbare in den Master.
Funktioniert in der Praxis nicht. Wahrscheinlich, weil alle Firmen
lieber wirr zusammen gestückelten Murks ausliefern, als zugesagte
Termine verschieben. Und da der Maintainer eh nicht entscheiden kann,
was in den Master aufgenommen wird, committen alle Chaoten direkt in den
Master.
Die verschiedenen Push-Workflows unterscheiden sich eigentlich gar
nicht. Die Entwicklerteams schieben ihre größten Knalltüten in
irgendwelche Meetings ab, in denen sie über Worksflows und sonstige
irrelevante Themen diskutieren.
Außerdem hoffe ich, das mit den irrsinnig komplexen Workflows geht bald
wieder zu Ende. Und wir bekommen wieder Prozesse, bei denen jeder
Programmierer durchblickt, weiß wo er bei Problemen hin langen muss.
Noch ein Kommentar schrieb:> Wahrscheinlich, weil alle Firmen lieber wirr zusammen gestückelten Murks> ausliefern, als zugesagte Termine verschieben.
Es gibt auch Firmen die beide Verfahren kombinieren!
Noch ein Kommentar schrieb:> Außerdem hoffe ich, das mit den irrsinnig komplexen Workflows geht bald> wieder zu Ende.
Überhaupt keinen Prozess zu haben ist auch unschön. Da weiß man auch
nicht wo man Probleme suchen soll.
Noch ein Kommentar schrieb:> Funktioniert in der Praxis nicht.
Du hast wohl schlimme Erlebnisse hinter dir. Wo arbeitest du? Nicht dass
ich mich aus versehen mal dort bewerbe.
Noch ein Kommentar schrieb:> Funktioniert in der Praxis nicht.
Bei uns funktioniert das.
> Und da der Maintainer eh nicht entscheiden kann,> was in den Master aufgenommen wird,
Genau da ist der Fehler. Der Maintainer muss das Standing haben um sowas
ablehnen zu können. Bei uns ist der Maintainer ein erfahrener
Entwickler, der auch am Produkt mitentwickelt. Welche Features
aufgenommen werden wird in Absprache mit ihm entschieden. Sein Chef
steht dabei hinter ihm.
Und ja, ich kenne jemanden der das wirklich so ähnlich gemacht hat....
da gab's dann regelmäßig eine Kopie von seinem Working-dir mit dem Datum
im Ordnernamen...
Für mich ist Git kein Tool um Arbeitsabläufe zu koordinieren, sondern um
die Änderungen von Team-Mitgliedern zusammen zu führen und zu
protokollieren.
Wegen der Protokoll-Funktion nutze ich es auch zu hause für mich ganz
alleine.
Wo ich gerade arbeite werden Arbeitsabläufe mit Jira Ticket koordiniert.
Das ist nicht gerade das allercoolste und komplexeste Produkt, aber für
uns reicht es.
gitter schrieb:> welchen Workflow nutzt ihr (z.B. mit git)
Bei uns in der Firma entspricht der offizielle Workflow weitestgehend
dem gitflow:
https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow
Wie sehr der dann auch tatsächlich gelebt wird, steht auf einem anderen
Blatt und hängt auch vom jeweiligen Projekt ab. Er kann aber immer als
Orientierung dienen.
Programmierer schrieb:> Das ganze Team committet nach Belieben direkt auf master, vermurkst> dabei gerne auch die Zeilenendungen (Windows vs. Unix), und bei> Merge-Konflikten fragt man den git-Guru im Team.
So ungefähr sieht es öfter mal aus :)
Stefan ⛄ F. schrieb:> Für mich ist Git kein Tool um Arbeitsabläufe zu koordinieren, sondern um> die Änderungen von Team-Mitgliedern zusammen zu führen und zu> protokollieren.
Das stimmt, aber die Durchführung und Zusammenführung der Änderungen
muss auch wiederum koordiniert werden, sonst hat man das oben genannte
Chaos. Alle commiten wild kreuz und quer ihr Zeug, der Code läuft
ständig nicht oder compiliert gar nicht erst, keiner hat den Überblick
und die Leute überschreiben sich gegenseitig ihre Änderungen, was
nebenbei dann noch zu Merge-Konflikten führt. Und eine vernünftige
Release kann man auch nicht machen.
Daher ist es besser, wenn man die einzelnen Features und Bugfixes in
eigenen Branches bearbeitet und nach Abschluss dann einen Merge macht.
Damit lässt sich nachher auch viel leichter nachvollziehen, wofür man
eine bestimmte Änderung gemacht hat und umgekehrt, welche Änderungen man
konkret für ein bestimmtes Thema durchgeführt hat.
Bei git ist branching und merging ein integraler Bestandteil eigentlich
aller gängigen Workflows. Das muss man erst mal lernen, wenn man von
anderen Versionierungstools kommt, wo das meistens nicht so intensiv
gemacht wird.
> Wegen der Protokoll-Funktion nutze ich es auch zu hause für mich ganz> alleine.
Solange man es alleine nutzt, braucht man meistens nicht viel workflow.
> Wo ich gerade arbeite werden Arbeitsabläufe mit Jira Ticket koordiniert.> Das ist nicht gerade das allercoolste und komplexeste Produkt, aber für> uns reicht es.
Hmm, Jira ist ein Issue-Tracker. Ich weiß nicht so ganz, was du in dem
Zusammenhang mit "Arbeitsabläufe koordinieren" meinst.
Rolf M. schrieb:> Hmm, Jira ist ein Issue-Tracker. Ich weiß nicht so ganz, was du in dem> Zusammenhang mit "Arbeitsabläufe koordinieren" meinst.
In einem Issue-Tracker kann man Anforderungen, sich daraus ergebende
Arbeitspakete, und natürlich Bugs verwalten. Diese kann man dann
untereinander sowie mit Branches, Merge Requests und Commits verlinken,
sodass immer nachvollziehbar ist, wo was warum(!) bearbeitet/repariert
wurde. Wenn ein Fehler erneut auftritt, kann man über das Issue sofort
alle relevanten Änderungen im Code finden und schauen, was da noch getan
werden muss. Diese Funktionen bieten alle gängigen Issue Tracker, wie
z.B. die in GitLab, GitHub oder Azure DevOps integrierten. Die
Verwendung von Merge Requests mit daran gekoppelter CI und Acceptance
Tests ermöglicht die Prüfung von Änderungen.
So bekommt man eine natürlich wachsende Dokumentation des Codes, und
jedes Teammitglied kann nebenbei auch verfolgen was im Projekt so
geschieht. Wer drauf steht kann sich auch Burn-Down-Charts anzeigen
lassen.
Letzten Endes spart man sich so viel Arbeit und Unsicherheit. Das ist
natürlich alles nicht mehr git-spezifisch und funktioniert auch mit
anderen VCS. Viele Unternehmen scheuen aber die Umgewöhnung und
verfolgen eben lieber ihre Lieblingsstrategie:
Programmierer schrieb:> Das ganze Team committet nach Belieben direkt auf master
Bei sicherheitskritischer Zertifikation ist es auch wichtig
nachvollziehen zu können, was warum implementiert/verändert wurde - bei
dieser "nach Belieben"-Strategie ist das natürlich nicht möglich, und es
gibt dann früher oder später ein böses Erwachen. Ich habe gehört dass
manche Projekte daher doppelt so lange brauchten wie geplant, weil bei
der Zertifizierung auffiel dass nichts dokumentiert ist und alles
nachgearbeitet werden musste.
Rolf M. schrieb:> Jira ist ein Issue-Tracker. Ich weiß nicht so ganz, was du in dem> Zusammenhang mit "Arbeitsabläufe koordinieren" meinst.
Aufgaben verteilen und den Bearbeitungsstatus dokumentieren.
Programmierer schrieb:> Diese Funktionen bieten alle gängigen Issue Tracker, wie> z.B. die in GitLab, GitHub oder Azure DevOps integrierten.
Deswegen hatte ich gefragt, ob er eventuell GitLab anstatt Git meinte.
> People and interactions over processes and tools.
Die Sache ist total aus dem Ruder gelaufen.
Bis 2000 rum hatten uns die Tools immer mehr Arbeit abgenommen.
Inzwischen sind die Hilfsmittel so umfangreich - wir brauchen mehr Zeit
für Konfiguration, Einarbeitung und Fehlersuche als wir mit den neuen
Prozessen und Tools einsparen.
Ich selbst arbeite an einem 20 Jahre alten Programm. Die Firma hat
mehrmals die Tools gewechselt. Der einzige Effekt: Wir können nicht mehr
rekonstruieren, warum wir damals so unsinnige Entscheidungen getroffen
hatten. Die alten Bugreports und Diskussionen sind verschwunden.
Dieser ganze Srum-Kult - jeder kann alles und jeder darf überall
mitreden - funktioniert einfach nicht.
Ein Softwareprojekt braucht einen kompetenten charismatischen Leiter.
Und Spezialisten, die Talent für Teilbereiche wie Architektur, User
Iterface, Kodierung, Testfälle und so weiter haben.
Die Tools sind gut genug. Da kann man irgend eines der weit verbreiteten
benutzen. Macht keinen Unterschied.
Noch ein Kommentar schrieb:> Dieser ganze Srum-Kult - jeder kann alles und jeder darf überall> mitreden - funktioniert einfach nicht.
Naja, für das, wofür er gedacht war, funktioniert er.
Früher™ haben gute Programmierer gute Software geschrieben.
Markt ist leer, "echte" Programmierer findet man kaum noch.
SCRUM ist eine Methode, wie man mit einem Sack voll Affen eine
halbfertige Bananen-Software hinbekommt.
Dafür funktioniert es gut.
Über die Architektur macht sich da keiner Gedanken, es wird halt "agil"
hingepfuscht bis das CI-Tool nicht mehr meckert.
Und am Schluss wundert sich das Controlling, warum man für den
Software-Betrieb monatlich viele $$$$$ an AWS überweisen muss, obwohl es
vom reinen Durchsatz & Rechenleistungsanspruch auch ein (überspitzt)
RasPi erschlagen hätte.
Εrnst B. schrieb:> Noch ein Kommentar schrieb:>> Dieser ganze Srum-Kult - jeder kann alles und jeder darf überall>> mitreden - funktioniert einfach nicht.>> Naja, für das, wofür er gedacht war, funktioniert er.
Ja, das tut er.
> Früher™ haben gute Programmierer gute Software geschrieben.> Markt ist leer, "echte" Programmierer findet man kaum noch.> SCRUM ist eine Methode, wie man mit einem Sack voll Affen eine> halbfertige Bananen-Software hinbekommt.
Nein.
> Dafür funktioniert es gut.
Nein, dafür funktioniert keine Methode.
> Über die Architektur macht sich da keiner Gedanken, es wird halt "agil"> hingepfuscht bis das CI-Tool nicht mehr meckert.> Und am Schluss wundert sich das Controlling, warum man für den> Software-Betrieb monatlich viele $$$$$ an AWS überweisen muss, obwohl es> vom reinen Durchsatz & Rechenleistungsanspruch auch ein (überspitzt)> RasPi erschlagen hätte.
Tatsächlich war es in der alten Welt der "echten Programmierer" so daß
sich am Anfang ein paar Rübennasen hingesetzt und Lasten- und
Pflichtenhefte gebastelt haben. Das hat aus Gründen leider eher schlecht
als recht funktioniert. Gründe waren und sind:
- Software wird zunehmend komplexer
- Entwicklerteams werden größer
- Anforderungen ändern sich
- Vorgaben ändern sich
- Vorhersagen sind Unfug
- ... und tausend andere Gründe.
Das Ergebnis war daß die meisten Softwareprojekte ihre Zeitpläne und
Budgets nicht einhalten konnten.
Das fanden alle Beteiligten nicht so richtig gut und ein paar Cleverle
haben daraufhin Methoden ersonnen wie man es besser machen kann. Ein
zentraler Punkt dieser Ideen war unter anderem auch die altbekannte
Weisheit daß Fehler umso schwerer und teurer werden sind je länger sie
existieren.
Wie wäre es wenn man den Kunden früher in den Entwicklungsprozeß
einbeziehen würde damit die Fehler und Schwächen in den Lasten- und
Pflichtenheften früher auffallen und behoben werden können? Wie kann man
die Entwickler dazu bringen besser miteinander zu kommunizieren?
Und genau um diese Themen geht es bei den Agilen Methoden. Mir stellen
sich die Fußnägel auf wenn ich lese oder höre daß das
Entwicklungsmodelle seien. Es sind Kommunikationsmodelle die dabei
helfen sollen die zunehmende Komplexität in der Entwicklung besser
beherrschen zu können und mehr Projekte innnerhalb der Zeit- und
Budgetgrenzen umzusetzen.
Daß so etwas in einem Form wie diesem auf Ablehnung stößt wundert mich
jedoch keineswegs. Große und komplexe Projekte sind auf Mikrocontrollern
bereits aus Ressourcengründen eher die Ausnahme und schon einige
C-Bibliotheken für diese Plattformen enthalten nicht einmal eine
dynamische Speicherallokation.
Aus ähnlichen Gründen sind die Entwickler von Mikrocontrollersoftware
auch die einzigen Communities auf der Welt in denen noch über Assembler
versus C versus C++ versus Python gestritten wird. Nur die wenigsten
Mikrocontrollerentwickler haben je an hochkomplexer Software mit
mehreren hundertausend Zeilen Code (plus Bibliotheken) gearbeitet und
kennen diese Art von Komplexität nicht. Sie kennen ohne Frage eine
andere Art von Komplexität. Die ist aber nicht dasselbe!
Agile Softwareentwicklung kann eine feine Sache sein wenn man sie
richtig macht. Wenn nicht sind es Schmerzen an einem Ort über die der
Gentleman nicht redet.
Sheeva P. schrieb:> Es sind Kommunikationsmodelle die dabei helfen sollen die zunehmende> Komplexität in der Entwicklung besser beherrschen zu können
Was hier unauffällig unter den Tisch fallen gelasden wird ist die zu
beherrschende, ebenfalls ansteigende Komplexität der Methoden und Tools
selber. Bürokratie mit Bürokratie zu bekämpfen ist eine heikle
Angelegenheit die schnell aus dem Ruder läuft = alles unter dem Strich
noch komplizierter macht. Hier hinterfragt man besser zuerst die
Komplexität des Produkts selber und die der Werkzeuge zu seiner
Herstellung.
Noch ein Kommentar schrieb:> Ich selbst arbeite an einem 20 Jahre alten Programm. Die Firma hat> mehrmals die Tools gewechselt. Der einzige Effekt: Wir können nicht mehr> rekonstruieren, warum wir damals so unsinnige Entscheidungen getroffen> hatten. Die alten Bugreports und Diskussionen sind verschwunden.> Dieser ganze Srum-Kult - jeder kann alles und jeder darf überall> mitreden - funktioniert einfach nicht.> Ein Softwareprojekt braucht einen kompetenten charismatischen Leiter.> Und Spezialisten, die Talent für Teilbereiche wie Architektur, User> Iterface, Kodierung, Testfälle und so weiter haben.
Weder schafft dir Scrum an deine Tools wie Unterhosen zu wechseln, noch
dass du keine Spezialisten haben darfst.
Sheeva P. schrieb:> Große und komplexe Projekte sind auf Mikrocontrollern bereits aus> Ressourcengründen eher die Ausnahme
Es gibt jede Menge Controller mit vielen Megabytes an Speicher, mehreren
Cores, Hunderten MHz an Taktfrequenz, und einer Leistung wie ein PC vor
20 Jahren. Und da laufen auch entsprechend komplexe Projekte drauf, mit
vielen 100kLoC. Die ganzen Hobbyfrickler hier im Forum haben halt sowas
nicht auf dem Schirm.
Sheeva P. schrieb:> Wie wäre es wenn man den Kunden früher in den Entwicklungsprozeß> einbeziehen würde damit die Fehler und Schwächen in den Lasten- und> Pflichtenheften früher auffallen und behoben werden können? Wie kann man> die Entwickler dazu bringen besser miteinander zu kommunizieren?>> Und genau um diese Themen geht es bei den Agilen Methoden.
Auch. Für mich ist das Stichwort "Änderungen". Das Problem bei
klassischen Entwicklungsmethoden ist, dass Änderungen eher
stiefmütterlich behandelt werden. Beim Wasserfall sind sie überhaupt
nicht vorgesehen. Da wird am Anfang einmal alles komplett durchgeplant
und dann nur noch abgearbeitet. Wenn sich nun irgendwann die
Anforderungen ändern (was sie heute in dynamischen Projekten oft tun)
oder man merkt, dass der Ansatz nicht passt, muss man noch mal ganz
zurück und hat einen sehr hohen Aufwand, um die Änderungen einzubauen.
Du schreibst es ja eigentlich schon selbst oben:
> - Anforderungen ändern sich> - Vorgaben ändern sich> - Vorhersagen sind Unfug
Bei agilen Modellen sind Änderungen dagegen ein integraler Bestandteil
des Entwicklungsprozesses. Die Planung wird nicht einmal beim Start
gemacht und ist dann in Stein gemeißelt, sondern wird zyklisch an die
aktuelle Situation angepasst. Die Schleife, die man drehen muss, um
Änderungen zu integrieren, ist viel kleiner und daher weniger aufwändig.
Natürlich spielt die Kommunikation da auch eine wesentliche Rolle.
Ich habe SCRUM in zwei Konzernen an den Rahmenbedingungen scheitern
erlebt.
- Es wird ein Auftrag nach Wasserfall Modell erstellt
- Es wird ein Angebot erstellt und angenommen
- Danach beginnt die Entwicklung in Iterationen ungefähr nach SCRUM,
aber ohne Beteiligung des Auftraggebers (Ziel und Kosten stehen ja fest)
- Zu einem festen Termin muss geliefert werden, weil genau dann und nur
dann die Testsysteme + Personal bereit stehen.
- Man findet Fehler, die zwangsläufig nach dem Liefertermin behoben
werden.
- Die Korrekturen können mangels Ressourcen nicht ordentlich getestet
werden
Will sagen: Wenn man agil entwickelt, dann gilt das auch für die
Mitarbeit des Auftraggebers, sein Budget und die Verfügbarkeit von
Test-Ressourcen. Sonst funktioniert es nicht.
Die Vorstellung, dass SCRUM eine Arbeitsmethode alleine für das
Programmier-Team sei, ist völlig falsch. Steckt aber leider so in den
Köpfen einiger Entscheider. Vermutlich wurde SCRUM teilweise falsch
vermarktet.
Seit ungefähr 5 Jahren arbeite ich woanders, wo man agile Methoden
vernünftig und erfolgreich anwendet.
Jürgen schrieb:> Was hier unauffällig unter den Tisch fallen gelasden wird ist die zu> beherrschende, ebenfalls ansteigende Komplexität der Methoden und Tools> selber. Bürokratie mit Bürokratie zu bekämpfen ist eine heikle> Angelegenheit die schnell aus dem Ruder läuft = alles unter dem Strich> noch komplizierter macht. Hier hinterfragt man besser zuerst die> Komplexität des Produkts selber und die der Werkzeuge zu seiner> Herstellung.
Vielen Dank daß Du meinen Beitrag gelesen hast. Aber das Problem bei der
neuen Komplexität sind nicht zunehmend komplexer werdende Werkzeuge
sondern zunehmend komplexer werdende Anwendungsfälle. Oder anders gesagt
lösen wir heute ganz neue Probleme und die Werkzeuge und
Entwicklungsprozesse passen sich dem an. Wenn Du magst empfehle ich Dir
gerne den folgenden Beitrag:
https://www.youtube.com/watch?v=zIKZKkPtmNs
Rolf M. schrieb:> Bei agilen Modellen sind Änderungen dagegen ein integraler Bestandteil> des Entwicklungsprozesses. Die Planung wird nicht einmal beim Start> gemacht und ist dann in Stein gemeißelt, sondern wird zyklisch an die> aktuelle Situation angepasst. Die Schleife, die man drehen muss, um> Änderungen zu integrieren, ist viel kleiner und daher weniger aufwändig.> Natürlich spielt die Kommunikation da auch eine wesentliche Rolle.
Das ist der Punkt auf den ich hinaus wollte. Es passiert mir zunehmend
oft daß ich einen Beitrag von Dir lese und insgeheim niederknien möchte.
Einer mehr. :-]
Stefan ⛄ F. schrieb:> Ich habe SCRUM in zwei Konzernen an den Rahmenbedingungen scheitern> erlebt.
Was Du im Folgenden beschreibst ist nicht agil und schon gar nicht
SCRUM.
> - Es wird ein Auftrag nach Wasserfall Modell erstellt> - Es wird ein Angebot erstellt und angenommen
An dieser Stelle ist jedes agile Entwicklungsmodell aber schon tot.
> - Danach beginnt die Entwicklung in Iterationen ungefähr nach SCRUM,> aber ohne Beteiligung des Auftraggebers (Ziel und Kosten stehen ja fest)> - Zu einem festen Termin muss geliefert werden, weil genau dann und nur> dann die Testsysteme + Personal bereit stehen.> - Man findet Fehler, die zwangsläufig nach dem Liefertermin behoben> werden.> - Die Korrekturen können mangels Ressourcen nicht ordentlich getestet> werden
Was Du da beschreibst ist in der agilen Entwicklung einfach nur Mist.
Daß das so ist liegt weder an Deiner völlig korrekten Beschreibung
dessen was heute leider immer noch stattfindet noch daran daß agile
Kooperationsmodelle falsch wären.
Agile Entwicklung ist zuerst eine organisatorische Angelegenheit.
Kommunikation halt. Das hat auch mit Vertrauen zu tun: mit dem Vertrauen
Deiner Vorgesetzten und dem des Kunden. Dem Vertrauen seiner und Deiner
Leute zueinander. Vertrauen entsteht aber nicht von allein...
Seitdem ich agile Methoden kenne und die Software in meinem Kopf
aktualisiert habe arbeite ich wesentlich entspannter und entwickle
bessere Software. Kunden sind jetzt Freunde und ich bin (meistens)
zufriedener mit meinen Ergebnissen.
Sheeva P. schrieb:> An dieser Stelle ist jedes agile Entwicklungsmodell aber schon tot.
Erzähle das Managern. Leider ist es dafür zu spät, das Kind ist längst
in den Brunnen gefallen. Wie sie es wieder heraus geholt haben, habe ich
nicht mehr mit bekommen. Nur die Info, dass meine ehemalige Abteilung
kurz nach meinem Weggang geschlossen wurde.
Sheeva P. schrieb:> Es passiert mir zunehmend oft daß ich einen Beitrag von Dir lese und> insgeheim niederknien möchte. Einer mehr. :-]
Oh, danke. Ich fühle mich geehrt.