DevOps bedeutet, dass Entwickler jetzt die Verantwortung für die Infrastruktur und die Freigabe übernehmen - aber was sind die Treiber für diese Änderung?
Ich lege meine Karten auf den Tisch: Ich bin Entwickler und habe sowohl in "DevOps" als auch in Nicht-Kulturen gearbeitet. Sich um die Infrastruktur und Releases sowie die Qualitätssicherung und die damit verbundene Zeremonie sorgen zu müssen, ist eine enorme Ablenkung vom Schreiben von gutem Code.
Aber die Branche bewegt sich in diese Richtung. Was sind die Gründe dafür? Welche Probleme brachte das "alte" Modell der Rollenspezialisierung mit sich?
Antworten:
Der Hauptgrund ist die Wolke.
Früher wurde Ihr Code auf Diskette und dann auf CD ausgeliefert und dann auf einem Server und dann auf zwei Servern bereitgestellt (aus Gründen der Ausfallsicherheit). Die gesamte Bereitstellung konnte manuell erfolgen von einem Menschen, also wurden die Menschen darin geschult.
Heutzutage wird Ihr Code häufig von Dutzenden oder Hunderten von Servern verwendet. Das Bereitstellen, Konfigurieren und Bereitstellen auf diesen Servern kann von einem Menschen nicht realistisch manuell durchgeführt werden. Sie müssen Ihre Systemadministratoren mit genügend Skripten vertraut machen, um diesen Prozess zu automatisieren, da Sie jetzt Chef oder seine Verwandten verwenden. Aber ehrlich gesagt, gab es nicht genug Systemadministratoren, die das konnten. Also wurden Entwickler herangezogen, um die Lücke zu schließen.
Und ja, wenn man den ständig wachsenden Anforderungen von Entwicklern mehr Fähigkeiten hinzufügt, verringert sich natürlich auch ihre Kompetenz an anderer Stelle. Die Idee ist, dass Entwickler einen Einblick in den Build- / Release-Prozess erhalten, Probleme besser antizipieren können oder die Autonomie haben, diese zu verbessern. Die Idee ist, dass die Qualität von allem zunimmt, seit die Veröffentlichungsgewinne die Codeschreibverluste überholen.
Ich bin skeptisch, dass sich der Kompromiss so oft lohnt, wie die Leute es sich vorstellen.
quelle
Es gibt viele verschiedene Gründe für verschiedene Organisationen, zu DevOps zu wechseln.
Ich werde versuchen, diejenigen aufzulisten, die oft auftauchen.
Verkürzung der Zeit für den Änderungszyklus
Zwischen der Anforderung einer Änderung und der tatsächlichen Bereitstellung und Verwendung in der Organisation liegt häufig viel Zeit. Zunächst wird es von den Entwicklern in einem der Entwicklungszyklen geplant und nach der Auslieferung in einem der Release-Zyklen des Betriebs. Beide Zyklen beinhalten Tests und bei festgestellten Problemen werden beide Zyklen zurückgesetzt. Durch die Integration der Entwicklungs- und Betriebsabteilungen können wir beide Prozesse rationalisieren.
Probleme mit Software oder Hardware
Erinnern Sie sich an den Bugs Bunny-Cartoon, in dem sich Bugs und Daffy streiten, ob es Entenzeit oder Hasenzeit ist? Stellen Sie sich vor, wir haben es stattdessen mit Entwicklern und Vorgängen gemacht, bei denen Entwickler argumentieren, dass es sich um ein Hardwareproblem handelt, und bei Vorgängen, dass es sich um ein Softwareproblem handelt. Für den Endverbraucher ist dies eine Unterscheidung ohne Unterschied. Sie wollen nur, dass es repariert wird.
Indem sie Entwickler und Betriebe zusammenbringen, müssen sie die Probleme beheben. Und es könnte sich herausstellen, dass es sich um ein Software- und Hardwareproblem handelte.
Wir gegen sie
In vielen Unternehmen wuchs die Distanz zwischen Testern und Entwicklern, da es sich um separate Abteilungen handelte und der Entwicklungszyklus immer formalisierter und standardisierter wurde.
Mit dem Erscheinen von Agile haben Entwickler und Tester enger zusammengearbeitet und wir haben begonnen, die Sichtweise des anderen im Entwicklungszyklus zu sehen und vielleicht sogar zu respektieren.
Ähnliches muss zwischen Entwicklern und Betrieben geschehen, da mit der weiteren Formalisierung und Standardisierung der beiden Bereiche und Prozesse die Distanz zwischen diesen Abteilungen zunimmt. Eines der Probleme mit dem traditionellen Modell ist, dass es für Entwickler und Betriebe gleichermaßen wie "wir" gegen "sie" aussieht. Beide verstehen die Schwierigkeit der Verantwortlichkeiten des anderen nicht ganz.
Erwartungen / Vorteile
Mit DevOps lernen beide Fachbereiche einige der Fähigkeiten, die traditionell von den anderen ausgeübt werden. Niemand wird erwarten, dass ein Systemadministrator ein Softwareentwickler oder ein Entwickler ein Netzwerktechniker wird, aber von beiden wird erwartet, dass sie einen Teil der Verantwortung des anderen übernehmen. Das heißt, wenn Sie wirklich zusätzliche Hände brauchen, sind sie da.
Und es gibt einige Vorteile für Entwickler: Sie haben jetzt mehr Kontrolle über Ihre Testumgebungen, es ist einfacher, Software für die Benutzer bereitzustellen und mehr Mitarbeiter in Ihrem Unternehmen zu haben, mit denen Sie Ihre Vorliebe für das Handwerk teilen können.
quelle
Das Schreiben von Qualitätscode reicht einfach nicht aus. Sie sind entweder Teil des Problems oder Teil der Lösung.
Für viele Programmierer schreiben Sie Software, die von einem Endbenutzer bezahlt wird. Das Schreiben von Qualitätscode ist eine gute Sache, aber Kunden / Manager gehen auch davon aus, dass Sie immer schnell handeln sollten. Es ist, als würde man sagen, ein Tischler schneidet Bretter genau, aber baut man tatsächlich etwas, wofür jemand bezahlen möchte?
DevOps gibt den Entwicklern mehr Kontrolle und erzwingt hoffentlich, dass ihr Code mit dem Endergebnis übereinstimmt. Wer ist am besten geeignet, um den Betriebsprozess zu automatisieren? Die Zufriedenheit der Endbenutzer ist der wichtigste Maßstab. Sie müssen nicht nur einen Qualitätscode schreiben, sondern auch den Kunden zufrieden stellen. Entschuldigung, aber niemand verwendet mehr Codezeilen. Es ist ihnen egal, ob Sie Ihr eigenes ORM-Framework von Grund auf neu erstellt haben, genau wie es dem durchschnittlichen Käufer von Eigenheimen egal ist, ob Sie den Baum gefällt und Ihre eigenen Boards erstellt haben. Möchte jemand alle Konfigurationsdateien wiederholen, weil Ihr "Upgrade" sie auf die Standardeinstellungen zurücksetzt?
Sie möchten Ihre Entwickler-Chops zur Schau stellen? Bauen Sie etwas, das die Leute kaufen möchten und das die gesamte Benutzererfahrung einschließt. Es ist großartig, dass Sie Qualitätscode schreiben, aber leider erhalten Sie möglicherweise keinen Bonus, wenn er nicht zur Zufriedenheit des zahlenden Kunden freigegeben wird. Sie können QA gerne beschuldigen, aber Ihr Unternehmen hat immer noch nicht genug Geld, um Sie mehr zu bezahlen.
quelle
Es ist etwas, das mit Agile & Scrum Hand in Hand gegangen ist. Es gibt keine klar definierten Rollen mehr - jeder ist ein "Entwickler".
Und es ist nicht nur Ops. Entwickler müssen häufig Geschäftsanalysen, Tests, Datenbankadministration und Build-Manager übernehmen - die Liste geht weiter.
Im Zentrum des Problems stand die sogenannte Abwanderung . Je mehr verschiedene Rollen an einem Projekt beteiligt waren, desto mehr Besprechungen, Missverständnisse und Ressourcenkonflikte traten auf. Software schnell in den Griff zu bekommen, ist das Endspiel und alles, was dem in den Weg kommen könnte, ist auf der Strecke geblieben.
Das ist nicht ganz eine schlechte Sache. Ihr durchschnittlicher Entwickler erweitert seine Fähigkeiten, obwohl der Stau jetzt sehr dünn wird. Außerdem werden Streitigkeiten zwischen Programmierern und Serveradministratoren in Bezug auf mögliche Probleme bei der Bereitstellung vermieden. Entwickler möchten häufig Lösungen mit modernster Technologie herausbringen, und die Serveradministratoren haben oft keine Ahnung, was dies von einem Administrator-POV bedeutet, bis ihnen das Installationsset präsentiert wird.
Die klügeren und vorausschauenderen Unternehmen beginnen endlich zu begreifen, dass T-förmige Menschen eine gute Sache sind. Es gibt jedoch einen Unterschied zwischen der Annahme, dass sie eine gute Sache sind und der Erwartung, dass dies auf magische Weise geschieht, wenn zuvor eine traditionelle Kultur angenommen wurde.
quelle
Ich bin mir sicher, dass es nicht wenige gute Gründe für Entwickler gibt, auch die Abläufe und die Qualitätskontrolle (manchmal) zu verwalten. Hier sind drei davon:
Einige Entwickler möchten eigentlich alle Aspekte des Produkts bearbeiten. Wenn sie gut darin sind und eine Lücke im Team füllen oder vorhandene Teammitglieder in anderen Rollen gut unterstützen, gibt es möglicherweise keinen Grund, sie zu stoppen.
Große Unternehmen können sich spezialisierte Mitarbeiter leisten. Kleine Unternehmen können das manchmal nicht. In einigen dieser Unternehmen können 1 oder 2 oder 3 Entwickler eingestellt werden, die in der Lage sein müssen, einfach Arbeitsaufgaben zu erledigen.
Nicht jedes Projekt ist ein Mehrpersonenprojekt. Wenn Sie eine "kleine" Anwendung erstellen, kann es einfach übertrieben sein, wenn mehr als eine Person sie vollständig bearbeitet. Darüber hinaus sind kleine Projekte mit vielen Personen, die bestimmte Rollen spielen, beängstigend . Niemand hat genug zu tun - auch wenn Sie es sich leisten können , sie alle sechs Monate lang mit den Daumen zu drehen, bleiben die Guten nicht. Wenn sie sich nicht langweilen, bekommen sie Angst, oder Sie werden feststellen, dass Sie einiges für nichts bezahlen. In jedem Fall verlassen Ihre guten Mitarbeiter das Unternehmen und fordern alle auf, sich von Ihnen fernzuhalten.
... und andere Gründe, da bin ich mir sicher.
quelle
"Sich um die Infrastruktur und Releases sowie die Qualitätssicherung und die damit verbundene Zeremonie sorgen zu müssen, ist eine enorme Ablenkung vom Schreiben eines guten Codes."
Meiner Meinung nach macht sich DevOps Gedanken über Infrastruktur und Releases, und die Qualitätssicherung schreibt guten Code.
In früheren Rollen in Nicht-DevOps-Kulturen hatte ich zahlreiche Probleme, die eine DevOps-Kultur möglicherweise hätte verhindern können. Leistungsprobleme in Bezug auf Code, der auf nicht repräsentativen Plattformen entwickelt wurde, Zeichencodierungsprobleme, bei denen die Entwickler die von einem Client verwendeten Zeichencodierungen nicht kannten, Bereitstellungsanweisungen, die manuell codiert wurden und für das Ops-Team ohne ein gewisses Maß an Vermutung unzureichend waren -Arbeit.
Nun könnte man argumentieren, dass wir durch die zunehmende Spezialisierung sowohl auf der Dev- als auch auf der Ops-Seite einige dieser Probleme überwinden können. Dennoch können viele Probleme nur durch den Austausch von Wissen und Arbeit zwischen unseren Teams gelöst werden.
quelle
DevOps muss nicht "Dev jetzt auch Ops" bedeuten. Der Begriff bedeutete ursprünglich "Dev und Ops arbeiten eng in einem Team zusammen". Es tut , dass die Leute von Ops mehr wie Devs werden müssen, weil das Automatisieren von Dingen eine Art Programmierung erfordert und der alte manuelle Weg dies nicht verhindert (siehe die anderen Antworten für detailliertere Erläuterungen zu diesem Punkt).
Aus Wikipedia :
Meiner Meinung nach ist dies eine Fehleinschätzung des Managements, wenn Sie als Entwickler die gleichen alten Verantwortlichkeiten und zusätzlich jetzt die operativen Verantwortlichkeiten haben. Durch die Automatisierung ist es durchaus möglich, dass Sie weniger Ops-Mitarbeiter benötigen und somit tatsächlich Kosten einsparen. Aber DevOps bedeutet sicherlich nicht "Lasst uns alle Ops-Leute loswerden und die Devs der zusätzlichen Arbeit überlassen".
Wie so oft bei Buzzwords passiert eine semantische Diffusion und plötzlich denken die Leute: "Lassen Sie uns Devs dazu bringen, auch Ops zu machen, und ich denke, wir können Geld sparen ..."
quelle