Projekte finden
Hier geht es in der Regel darum, neue Projekte zu starten, aber es ist nicht zu unterschätzen, wie wertvoll es ist, bei der Arbeit eines anderen mitzuhelfen. Eine großartige Möglichkeit zu lernen und zu wachsen ist es , mit anderen zusammen Software zu schreiben. Wenn man Teil einer Gruppe ist, die versucht, ein Stück Software zu implementieren, lernt man oft etwas über ihre Prozesse und Bedürfnisse.
Abgesehen davon müssen Sie, wenn Sie ein neues Projekt beginnen wollen, anstatt sich einem bestehenden Projekt anzuschließen, ein Problem finden, das Ihrer Meinung nach behoben werden muss. Diese Inspiration kann von allen möglichen Orten kommen. Meine Porjektinspirationen kommen in der Regel von verschiedenen Seiten:
=> Etwas in Ordnung bringen, das mich stört
Das ist mehr eine Form der Selbstfürsorge als alles andere. Wenn ich mich über etwas beschwere , sollte ich es in Ordnung bringen. Ein Beispiel ist, dass es mir nicht gefällt , dass einige unserer Dienste bei First Look Media nicht Ende-zu-Ende-verschlüsselt sind, also plane ich, einen generischen SSL (Secure Sockets Layer)-Kürzungsproxy für unsere Anwendungen auf jedem Server zu implementieren. Wahrscheinlich gibt es auch Dinge , die Sie nicht stören und die aufgeräumt werden müssen, worauf wir später in dieser Liste eingehen.
=> Verhindern, das Menschen sich selbst verletzen
Hier geht es darum zukünftige Ausfälle oder unbeabsichtigte Folgen zu verhindern. Ein Beispiel wäre das hinzufügen von Werkzeugen, die Konfiguraitonsänderungen testen, bevor sie bereitgestellt werden, oder das Verhindern, dass ein Benutzer Befehle ausführt, die die Produktion beeinträchtigen.
=> Dinge aufräumen
Oft geht es nur darum, technische Schulden zu beseitigen. Bei der ersten Implementierung einer Software wird der kürzestmögliche Weg gewählt, wobei der Schwerpunkt auf der Auslieferung und nicht auf der langfristigen Wartbarkeit liegt. Sich die Zeit nehmen, um einen Hack in etwas Stabileres und Langlebigeres zu verwandeln, ist eine wichtige Arbeit. Dazu kann das Refactoring von Codeabschnitten gehören, um sie an moderne Standards anzupassen, Abhängigkeiten zu aktualisieren , etwas umzuschreiben, um es leistungsfähiger zu machen, oder ungenutzten Code zu entfernen.
=> Automatisieren von Aufgaben , die jemand von Hand erledigt hat
Dies ist eine der klassischsten SRE-Aufgaben. Indem Sie etwas automatisieren, gewinnen Sie Zeit für sich und andere, um an anderen Dingen zu arbeiten. Dies ist eine große Kategorie, aber sie könnte jeden menschlichen Prozess oder jede Checkliste umfassen, die in Code automatisiert wird.
=> Verbesserung einer Abhängigkeit , um sie widerstandsfähiger zu machen
Die Analyse von Abhängigkeiten und Teilen Ihrer Infrastruktur auf mögliche Ausfälle ist wertvoll, denn oft ist man mit dem Zustand eines Dienstes zufrieden, bis er ausfällt. Das Analysieren und Reparieren einer solchen Lösung kann undankbar sein, erspart Ihnen aber in Zukunft viel Ärger. Dies könnte dadurch geschehen, dass man mehrere Kopien des Dienstes laufen lässt, Backups anlegt oder den Failover- oder Bereitstellungsprozess verbessert.
Definition von Projekten
Sobald Sie Ihre Aufgabe oder Ihr Problem haben, müssen Sie sich überlegen, wie Sie es angehen wollen. Ich persönlich beginne damit, das Problem in ein Notitzbuch zu schreiben und mir Notizen darüber zu machen, was ich nicht weiß, was ich weiß und wie ich versuchen könnte, es zu lösen. In dieser Recherephase suche ich oft im Internet , um herauszufinden , wie andere Leute das Problem gelöst haben, ob es Open-Source-Tools gibt, die bereits veröffentlicht wurden und das Problem betreffen, oder wenn niemand sonst dieses Problem hat, warum das so ist.
Durch die Bewertung der Lösungen anderer lernen Sie, wie das Problem in verschiedenen Umgebungen auftritt. Es ist auch nützlich, um herauszufinden, ob ein Stück Open-Source-Software Ihr Problem lösen oder fast lösen könnte. Jede Situation ist anders, aber oft können Sie ein Softwareprojekt finden, das 90% dessen erfüllt, was Sie wollen, und Sie können es entweder erweitern oder mit dem Betreuer zusammenarbeiten, um zu sehen, ob die Software für Ihre Situation geeignet ist. All diese Nachforschungen ersparen Ihnen Arbeit und stellen sicher, dass Sie wissen, worauf Sie sich einlassen. Lassen Sie sich durch Ihre Nachforschungne jedoch nicht entmutigen! Wenn Sie auf ein Problem stoßen, das noch niemand gelöst hat, bedeutet das nicht, dass es zu schwierig ist: Es bedeutet nur , dass es mehr Unbekannte gibt , die das Projekt betreffen.
Sie müssen ständig überprüfen, ob das Projekt , an dem Sie arbeiten, das Problem löst, das Sie zu lösen versuchen (und ob das Problem immer noch dasselbe ist).
Planung von Projekten
Sobald Sie eine ungefähre Vorstellung davon haben, was Sie bauen wollen, und dies in gewissem Umfang dokumentiert haben, müssen Sie mit der Arbeit am Projekt beginnen: die Arbeit planen und vorankommen.
Es gibt viele Definitionen von Agile und viele ähnliche Philosophien (einschließlich Scrum und Extreme Programming), aber die grobe Idee ist ein Periode oder Iteration, in der sich das Team nach jeder Periode neu gruppiert, die Prioritäten und Pläne auf der Grundlage von Feedback anpasst und sich dann wieder an die Arbeit macht. Wie bei allem in der Technik gibt es Eiferer , die Ihnen sagen, was richtig und was falsch an Agile ist. Denken Sie einfach daran: Wenn es für Sie und Ihr Team funktioniert, dann ignorieren Sie die Eiferer, denn Sie können Ihnen nicht sagen, was Sie tun sollen. Einige Teams arbeiten beispielsweise ausschließlich mit Pair Programming, während ander Teams dies nicht tun können , weil sich nicht alle in derselben Zeitzone befinden oder weil es MItarbeiter gibt, die aufgrund familiärer Verpflichtungen unterschiedliche Arbeitszeiten haben. Es geht nicht darum, die Leute zu ignorieren , sondern zu bewerten, was sie sagen, und herauszufinden, ob das für Ihr Team funktionieren würde.
Viele moderne Teams nutzen Agile als Mittel, um das Team zu organisieren und sicherzustellen, dass ein einzelnes Teammitglied nicht zu sehr im Unkraut versinkt. Indem Sie sich in regelmäßigen Abständen melden (einmal pro Tag, Woche oder zwei Wochen), können Sie den Fortschritt im Auge behalten und Ihren Kollegen helfen zu verstehen, woran Sie arbeiten und was Sie behindert.
Wenn Sie entscheiden müssen, woran Sie arbeiten und wie Sie ein großes Projekt angehen wollen, ist es am besten, das Projekt in kleine Teile zu zerlegen. Anstatt darüber nachzudenken, wie Sie alles implementieren können, überlegen Sie, welche Funktionen Sie haben wollen. Wählen Sie dann eine Funktion aus und erstellen Sie eine Liste der Funktionen oder Teile, die Sie implementieren müssen, damit die Funktion funktioniert.
Retrospektiven und Standups
Zwei Aspekte von Agile , über die wir noch nicht gesprochen haben und die ich sehr schätze , sind Retrospektiven und Standups. Ein Standup ist ein tägliches Treffen, bei dem alle Teammitglieder darüber sprechen, woran sie gestern gearbeitet haben, was sie heute tun und wo sie blockiert sind. Dies ist die Möglichkeit, die Mitarbeiter über ein Projekt auf dem Laufenden zu halten und über alle Änderungen zu informieren. Selbst wenn jeder an etwas anderem arbeitet, können die Teilnehmer auf diese Weise auf dem Laufenden bleiben.
Retrospektiven sind eine Möglichkeit, die Pläne der vergangenen Woche, des vergangenen Monats , der vergangenen zwei Wochen oder was auch immer Revue passieren zu lassen. Dabei handelt es sich um regelmäßige Treffen, bei denen sich die Teilnehmer darüber austauschen, was gut , was schlecht und was ganz okay gelaufen ist.
Ein Instrument für Retospektiven sind die 4Ls. Wie bei der obigen Idee erstellen Sie eine Tafel mit vier Kategorien: Gefallen, Gelernt, Vermisst und Ersehnt. Die Teammitglieder kleben dann Post-it-Zettel in jede Kategorie. Anschließend werden die Post-it-Zettel nach Topics gruppiert und diskutiert.
Versuchen Sie herauszufinden , wie viel Arbeit eine Person pro Zeiteinheit bewältigen kann, und stellen Sie sicher, dass sie das Gefühl hat, die zugewiesene Arbeit bewältigen zu können. Hinzu kommt, dass sich die Menschen überfordert fühlen können. Es besteht die Gefahr , dass sich die Mitarbeiter in ihrer Arbeit ineffektiv fühlen, weil sie nicht in der Lage sind, die ihnen zugewiesene Arbeit zu erledigen. Dieses Gefühl der Ineffizienz sowie körperliche und emotionale Erschöpfung sind Anzeichen für chronischen Stress und Burnout , die sich negativ auf das Wohlbefinden des Arbeitnehmers auswirken und ihn dazu bringen können, zu kündigen.
Builds
Sobald die Arbeit geplant und zugewiesen ist, können Sie sich hinsetzen und mit der Codierung beginnen. Als Entwickler müssen Sie sich bei der Einführung von neuem Code in ihre Infrastruktur an alle vorherigen Hierarchieebenen erinnern. Als SRE wird Ihre Arbeit oft als Vorbild dafür angesehen, was die übrigen Entwicklerteams tun sollten.
Eine einfache Checkliste für neue Software , die Sie auf der Grundlage unseres Hierarchieframeworks schreiben, lautet wie folgt:
=> Überwachung
Verfügen Sie über grundlegende Metriken, die von dem Code stammen, den Sie schreiben? Werden Sie gesammelt und gespeichert?
=> Reaktion auf Vorfälle
Erstellen Sie eine Dokumentaiton über den Betrieb Ihres Dienstes? Gibt es Warnmeldungen, so dass jeder , der sie erhält , weiß, was zu tun ist, wenn er entlassen wird?
=> Postmortem
Wenn Ihr Code ausfällt, behandeln Sie ihn dann wie anderen Code, der ausfällt, und schreiben Sie einen Postmortem?
=> Testen und Freigeben
Schreiben sie Unit-und Integrationsstests für Ihren Code? Dokumentieren Sie sowohl den Freigabeprozess als auch den Rollback-Prozess?
=> Kapazitätsplanung
Dokumentieren Sie, wie sich dies auf die Leistung Ihres Systems auswirken wird?
Ratschläge zum Schreiben von Code
=> Verwenden Sie die Versionskontrolle
Dies ist der Sonnenschutz der Computerprogrammierung. Es gibt kein Projekt , das zu klein ist, als dass man nicht die Versionskontrolle verwenden könnte. Menschen machen Fehler , und mit der Versionskontrolle können Sie Fehler leicht rückgängig machen oder sehen, wann ein Fehler eingeführt wurde.
=> Führen Sie immer Code-Reviews durch
Als Entwickler wissen Sie nur so viel, dass es Ihnen hilft, Ihre Arbeit mit anderen Augen zu lesen, um Fehler zu finden und Annahmen zu beseitigen, die Sie möglicherweise gemacht haben. Ihr Code verdient mindestens einen Redakteur, der Ihnen hilft, die Zahl der Fehler zu begrenzen.
=> Alle Projekte sollten einen Verantwortlichen haben:
Irgendwann werden alle Projekte Fragen von externen Parteien aufwerfen. Für alle Projekte sollte ein Verantwortlicher benannt werden, damit es jemanden gibt, der diese Fragen beantworten kann. Dies ist auch wichtig, wenn Sie über Prioritäten entscheiden. Ein Verantwortlicher bedeutet, dass es eine Person gibt, die die endgültige Entscheidung darüber treffen kann, was am wichtigsten ist.
=> Das Problem sind immer die Menschen
Wie Sie vielleicht aus den drei vorangegangenen Vorschlägen entnommen haben, ist der Mensch oft das Problem. Es ist sehr wichtig, mit Code zu arbeiten und zu wissen, dass er von Menschen genutzt werden wird. Dies könnte dadurch geschehen, dass Sie sicherstellen, dass Prozesse vorhanden sind, um mit der Tatsache umzugehen, dass Menschen an dem Code arbeiten müssen, oder indem Sie Ihre Programmierung dahingehend ändern, dass Sie davon ausgehen, dass alle Eingaben in Ihre Software von Menschen stammen (entweder direkt oder indirekt) und daher widerstandsfähig sein müssen. Menschen werden oft Anforderungen ändern, Bedürfnisse falsch kommunizieren oder einfach nur Chaos verursachen. Seien Sie immer bereit, sich in andere hineinzuversetzen und Ihre eigenen Fehler zu korrigieren. Die Bereitschaft, anderen gegenüber freundlich zu sein und ihre Gefühle zu verstehen, wird die Stimmung der Menschen verbessern und wahrscheinlich die Wahrscheinlichkeit erhöhen, dass sie Ihnen helfen werden, wenn Sie scheitern. Denken Sie daran, dass Misserfolge passieren werden, also lächeln Sie und machen Sie weiter.
Trennung von Belangen
Ein Aspekt von Software, der in der Entwurfs- und Entwicklungsphase berücksichtigt werden sollte , ist die Trennung von Belangen. Der Gedanke dahinter ist, dass der gesamte Code für den Umgang mit bestimmten Datentypen an einem Ort angesiedelt ist, und seine API bereitgestellt sein sollte; jede andere Software , die mit diesen Daten arbeiten möchte , tut dies dann über die API. Das bedeutet , dass Ihre Daten von anderem Code oder anderen Diensten nicht berührt werden. In einigen Fällen ist dies einfach, aber in den meisten Fällen kann eine stärkere Trennung der Daten durch eine API zu Datenduplizierung oder schlechter Leistung führen. Das liegt daran, dass eine verteilte Zustandsverwaltung schwierig ist.
Wenn beispielsweise vier Softwareprogramme wissen müssen, wie viel Geld ein Benutzer auf seinem Bankkonto hat, mag es einfacher erscheinen, die Datenbank abzufragen, aber auf lange Sicht macht der Aufruf einer klar definierten API das Leben leichter.
Wenn Sie diese Trennung gut hinbekommen, können Sie theoretisch bei Bedarf einen Teil herausreißen und durch einen Dienst ersetzen. Ein gängiges Beispiel hierfür ist die Authentifizierung. Oft beginnen Teams mit der Authentifizierung innerhalb ihrer Anwendung , aber wenn andere Dienste die Authentifizierung benötigen, ersetzen sie den Code in der Anwendung durch den Aufruf eines externen Dienstes, der eine ähnliche API bietet.
Eine etwas ähnliche Idee ist die Unix-Philosophie. Diese Philosophie hat einige Grundsätze , aber die beiden, auf die ich mich gerne konzentriere, sind das Schreiben von Software, die nur eine Sache tut, und das Schreiben von Software , die zusammenarbeitet. Sie können dies in den meisten gängigen Linux-Befehlszeilenprogrammen sehen.
Beachten Sie, dass die Trennung von Belangen und die Unix-Philosophie oft als Begründung für den Wechsel zu einer serviceorientierten Architektur oder zu Microservices herangezogen werden. Beide Begriffe stehen für die Idee, den Code in viele kleinere Dienste oder Teile aufzuteilen. Es gibt Probleme mit einer solchen Infrastruktur (mehr zu überwachende Teile, möglicherweise teuer udn eine höhere Wahrscheinlichkeit eines Netzwerkausfalls), aber in der Regel ist die Trennung von Belangen kein gutes Argument, wenn es das einzige Argument für einen Wechsel ist. Sie können Bedenken innerhalb Ihres Codes trennen, wenn Sie wollen, indem Sie einfach separate Klassen oder ander Organisationstechniken verwenden.
Langfristige Arbeit
ein weiterer Faktor, über den wir in Bezug auf die Entwicklung sprechen sollten, ist das langfristige Planen und Denken. Die moderne Entwicklung ist so sehr auf schnelle Iterationen ausgerichtet, dass die Leute oft nicht mehr daran denken, sich anzuschauen, wo sie stehen sind und wohin sie gehen. Ich mache gerne eine vierteljährliche Retrospektive und plane für mich selbst, um dieses Problem zu lösen. Bei einigen Unternehmen ist dies bereits in den Planungsprozess integriert, aber sie können es auch selbst tun.
Ein allgemeiner Rahmen , den einige Unternehmen verwenden , kann man auch für die persönliche Plannung nutzen. Er nennt sich Ziele und Schlüsselergebnisse (OKRs). Die Idee hinter den OKRs ist, dass Sie eine Liste von Dingen aufstellen, die Sie erreichen wollen, also Ziele, udn dann messbare Kontrollpunkte als Ihre Schlüsselergebnisse erstellen. Am Ende des Quartals schauen Sie sich dann Ihre OKRs an und prüfen , was Sie vorhatten zu tun, bevor Sie es mit dem vergleichen, was Sie erreicht haben.
Projekte dokumentieren und pflegen
Ein letztes , aber sehr wichtiges Detail ist die Dokumentation und Wartung des von Ihnen erstellten Codes. Hoffentlich hält Ihr Code so lange, wie er gebraucht wird. Die frühzeitige Festlegung guter Standards für die Dokumentation fördert die Bereitschaft anderer , in Zukunft Dokumente zu schreiben.
Beim schreiben von Dokumentation ist es wie beim Schreiben von Code: Ihr Team wird einen eigenen Stil haben und das Ziel sollte Genauigkeit und Konsistenz sein, nicht Perfektion, den Perfektion ist unmöglich.