Optimieren für die Iteration Teil 1: Bestimmen des Stapels

Wie wir bereits in einem früheren Blog-Beitrag besprochen haben, handelt es sich bei der Produktentwicklung um Hypothesentests. Dies gilt insbesondere in den frühen Phasen eines Unternehmens, wenn Sie Ihre Hypothese so schnell wie möglich bestätigen oder ablehnen müssen. Dieser Vorgang wird dann wiederholt, bis Sie (hoffentlich) eine marktgerechte Lösung finden. Um dorthin zu gelangen, muss Ihr Team in der Lage sein, in einem Tempo zu arbeiten und aufzubauen, das diese konstante und schnelle Iteration ermöglicht.

Dies ist der Beginn einer dreiteiligen Reihe unserer vorgeschlagenen technischen Entscheidungen und Methoden, um die Iterationsfähigkeit Ihres Teams zu maximieren. Vom Tech-Stack über die Organisation Ihres Codes bis hin zu den täglichen Best Practices werden wir detailliert darauf eingehen, wie wir bei Monolist vorgehen, um die Funktionen, die unsere Benutzer lieben, schnell bereitzustellen.

Monolist ist ein globaler Posteingang und ein intelligenter Assistent, der Ihnen hilft, der Beste zu sein. Erfahren Sie mehr oder fordern Sie Zugang an.

Der Tech-Stack Ihres Unternehmens ist ein wesentlicher Bestandteil der Arbeitsweise und Funktionsweise Ihres Engineering-Teams. Ihre Ingenieure sollten sich in jedem Bereich des Stapels wohlfühlen, insbesondere wenn Ihr Team klein ist. Aus diesem Grund ist es wichtig, bei der Auswahl Ihrer Technologien die richtigen Optimierungen vorzunehmen. Lassen Sie uns untersuchen, was wir hier bei Monolist verwenden und warum.

Server: Ruby on Rails

Ruby on Rails ist ein unglaublich beliebtes Webanwendungsframework, das erstmals im Jahr 2005 veröffentlicht wurde. Es verwendet Ruby als Programmiersprache. Ruby ist eine relativ einfach zu lesende und zu schreibende dynamische Sprache. In Verbindung mit Rails können Webanwendungen einfach erstellt und iteriert werden. Sie verfügen jedoch nicht über die Sicherheit und Selbstdokumentation von statisch typisiertem Code.

Aufgrund des Alters und der Popularität von Rails hat es auch eine unglaublich starke Community und ein starkes Ökosystem. Rails selbst verfügt über optionale Module für viele der allgemeinen Dinge, die Ihre App implementieren muss, wie z. B. ORM, WebSockets oder automatisierte E-Mails. Wir verwenden es für alle drei. Es gibt auch eine große Anzahl anderer Open-Source-Edelsteine, die mit Rails kompatibel sind.

Obwohl die Dynamik von Ruby zu offensichtlichen Fehlern führen kann, ermöglichen sie in Kombination mit Rails die schnelle und einfache Entwicklung von Funktionen für eine große Anzahl von Domänen.

Client: Typoskript, Reagieren

TypeScript ist eine Obermenge von JavaScript, die die statische Typprüfung für die Aktivierung ermöglicht. Als langjähriger JavaScript-Entwickler werde ich nie wieder auf einfaches JavaScript zurückgreifen. Durch die statische Typisierung wird eine ganze Klasse von Fehlern beseitigt und gleichzeitig die Testabdeckung verringert, die zum Erreichen des Vertrauens erforderlich ist. Das strikte Definieren Ihrer Typen und Verwenden von TypeScript führt auch zu Code, der einfach zu analysieren und sicherer zu ändern ist. Große Umgestalter unserer Kerngeschäftslogik, die nicht selten vorkommen, sind nicht länger nervenaufreibend, da wir immer wissen, mit welchen Daten wir wann arbeiten. Es ermöglicht uns auch, die gleichen Typen für alle unsere verschiedenen TypeScript-Anwendungen zu verwenden.

React ist eine der am häufigsten verwendeten JavaScript-Bibliotheken, die von Facebook geschrieben und verwaltet werden. Laut der Umfrage von StackOverflow aus dem Jahr 2019 steht jQuery an zweiter Stelle. Hiermit können Sie TypeScript- (oder JavaScript-) Komponenten in JSX schreiben, einer Syntaxerweiterung, die ähnlich wie HTML aussieht und sich auch so verhält. Obwohl es auf den ersten Blick seltsam erscheint, ist es einfach zu erlernen und schnell zu schreiben. Die Popularität von React bedeutet auch eine riesige Community und ein riesiges Ökosystem, auf dem man aufbauen kann. Dank einer großen Anzahl von React-Frameworks und sogar eines Gegenstücks zu nativen mobilen Anwendungen (mehr dazu weiter unten) ist es auch sehr einfach, denselben Code auf mehreren Plattformen zu lesen und zu schreiben.

Next.js

Weiter ist ein React-Framework von Zeit. Es kümmert sich um viele Dinge, vom serverseitigen Rendern bis zum Aufteilen von Code. Es macht es extrem einfach, performante, isomorphe Anwendungen zu erstellen. Darüber hinaus gibt es ein großes Community- und Plug-in-Ökosystem, das Unterstützung und Optionen bietet, wenn Ihre App immer komplexer wird.

Die frühesten Iterationen von Monolist basierten auf einem hausgemachten isomorphen Gerüst. Es war voller Bugs und schwer zu debuggen. Das hat den Entwicklern sehr wehgetan, und wir haben zu viel Zeit damit verschwendet und uns nicht genug auf das Produkt konzentriert. Wir haben uns aus den oben genannten Gründen für Next entschieden und wurden sogar vom Zeit-CEO geliebt, als er auf unsere Next-powered-App stieß.

GatsbyJS

Gatsby ist ein React-Framework zum Generieren statischer Websites. Obwohl Next über diese Funktion verfügt (und Gatsby viele der gleichen Aktionen ausführen kann wie Next), ziehen wir es dennoch vor, beide für unterschiedliche Zwecke zu verwenden. Da beide React verwenden und TypeScript unterstützen, können wir weiterhin alle gemeinsamen Module verwenden.

Gatsby verwendet GraphQL zum Abrufen von Daten aus verschiedenen Quellen, wenn Sie statische Dateien generieren, z. B. eine API oder sogar lokale Markdown-Dateien. Dies macht es ziemlich vielseitig, wozu es verwendet werden kann. Unsere Marketing-Website wird von Gatsby betrieben und wir verwenden verschiedene von der Community unterstützte Plug-ins, um unsere Blog-Posts und Stellenanzeigen über einfache Markdown-Dateien zu verwalten. Dies ermöglicht sogar Nichtingenieuren, sie relativ einfach zu aktualisieren.

Das Endprodukt von Gatsby ist eine statische Site, die aus Ihren React-Komponenten generiert wird. Da es sich um statische Dateien handelt, werden sie schnell geladen und Sie müssen sich keine Gedanken über SEO-Auswirkungen bei der Verwendung eines JavaScript-Frameworks machen. Sie können dann zu einem Cloud-Anbieter wie Amazon S3 oder Google Cloud Storage hochgeladen werden, die beide die Bereitstellung statischer Websites unterstützen. Dies ermöglicht auch eine im Wesentlichen unbegrenzte Skalierung (auf Kosten von Anforderungen), wenn Sie das Glück haben, große Verkehrsspitzen zu erhalten.

Mobil: Reagiere einheimisch

React Native ist eine sehr beliebte Bibliothek, die auch von Facebook geschrieben und gepflegt wird. Es funktioniert mit weitgehend denselben Paradigmen und Modulen wie das browserbasierte React, was es zu einem äußerst starken Kandidaten macht, wenn man die Möglichkeit in Betracht zieht, Code einmal für alle Plattformen zu schreiben. Bei Monolist teilen wir unsere interne Geschäftslogik zwischen Web, iOS und Android, sodass wir auf einfache Weise alle erforderlichen Änderungen in allen drei Bereichen vornehmen können. Wir werden in Teil 2 mehr darüber sprechen.

React Native ist jedoch nicht ohne Nachteile. Sie handeln mit der Leistung und einigen Funktionen einer nativen Anwendung, um Ihre App in JavaScript zu schreiben. Wenn Sie versuchen, dies auszugleichen, indem Sie den Code mit systemeigenem Code ergänzen, können Probleme auftreten, die eine Brücke zwischen beiden schlagen. Airbnb schrieb einen populären Beitrag über die Schwierigkeiten, auf die sie stießen, und ihre Entscheidung, wegzuziehen.

Wenn Ihr Unternehmen wächst, ist dies möglicherweise nicht die beste Option. Wenn Ihr Team jedoch klein ist, können Sie mit vertrauten Konzepten arbeiten und große Teile Ihres Codes wiederverwenden. Auf diese Weise kann jeder Techniker in Ihrem Team auf jeder Plattform schnell iterieren.

Wofür optimieren?

Wir haben für drei Dinge optimiert, als wir uns für die verschiedenen Teile unseres Tech-Stacks entschieden haben:

  • Einfach zu verstehen: Suchen Sie nach Sprachen oder Technologien, die sicherstellen, dass Ihre Codebasis sowohl für neue als auch für bestehende Ingenieure funktionsfähig bleibt. Dies kann in Form von getippten Sprachen, bekannten Sprachen oder Frameworks, Code Sharing (DRY) oder selbstdokumentierendem Code geschehen. Jeder Versuch, kryptischen Code zu debuggen, zu verstehen oder zu erklären, ist Zeitverschwendung.
  • Plug and Play: Bevorzugen Sie Technologien, die sich einfach in Betrieb nehmen lassen. Dies kann ein großes Ökosystem mit Bibliotheken oder Plugins für Ihre späteren Anforderungen bedeuten, oder nur Tools, die nur wenig oder gar keine Erstkonfiguration erfordern. Ziel ist es, die Zeit zu minimieren, die Ihr Team für nicht funktionsspezifische Konstruktionsarbeiten benötigt.
  • Entfernen Sie die schwierigen Aspekte: In der Anfangsphase Ihres Unternehmens haben Sie nicht die Zeit, sich auf kleinere Details wie Networking, SEO oder die Optimierung von Millisekunden außerhalb Ihres TTFB zu konzentrieren. Obwohl es sich um „Black Boxes“ handelt, sind Technologien, die diese Dinge abstrahieren, vorerst Ihr Freund.

In Teil 2 dieser Serie werden einige der Themen behandelt, die wir hier angesprochen haben, darunter das Verwalten und Organisieren Ihres Codes für schmerzfreie Refactors sowie das Maximieren des gemeinsamen Codes zwischen Ihren Repos.

Möchten Sie Monolist ausprobieren?

Fordern Sie einfach den Zugang an. Sobald Sie Zugriff haben, können Sie Ihre Freunde und Kollegen einladen, die Warteliste zu überspringen.

Ursprünglich veröffentlicht unter https://monolist.co.