Stoppen Sie die Entwicklung von Software mit einem gewissen Spielraum

Oder mach es richtig


Wenn Sie sich für eine Idee entscheiden, die die meisten Produkte tötet, ist dies die Schaffung einer Reserve für die Zukunft (Zukunftssicherheit).

Normalerweise manifestiert sich die Idee in einem Muster.

Wir brauchen {X} , und obwohl es viel einfacher ist, {Y} zu machen, wird die erste Option mit dem Einsetzen von {Z} unser Leben vereinfachen.

Wobei {Z} ein Ereignis ist, das in ferner Zukunft auftreten kann.

Hier einige Beispiele:

  • Die Infrastruktur benötigt Kubernetes und Docker , obwohl ein großer Server viel einfacher ist, aber wenn Sie auf 11 Server skalieren müssen , wird dies unser Leben vereinfachen.
  • Die Datenverarbeitung erfordert ein verteiltes Design , obwohl eine zentralisierte Lösung viel einfacher ist. Wenn der Client jedoch eine Verfügbarkeit von 99,999% in der SLA benötigt , wird dies unser Leben vereinfachen.
  • Wir müssen ein Entwicklungsteam einstellen und unsere eigene Software erstellen , obwohl Wordpress und Shopify viel einfacher sind, aber wenn die Kundenbasis 100-mal wächst , wird dies unser Leben vereinfachen.
  • Wir müssen ein Design verwenden, das auf Typvererbung basiert , obwohl die Komposition viel einfacher ist , aber nach 5 Jahren der Erhöhung der Codebasis wird dies unser Leben vereinfachen.
  • Wir müssen Code in C ++ mit Repräsentations-Caching schreiben, obwohl ein Python-Skript mit direkten Anfragen an Postgres viel einfacher ist, aber mit einer großen Zunahme der Datenmenge wird dies unser Leben vereinfachen.

Ich habe kürzlich einen Artikel über imaginäre Probleme geschrieben , die Menschen aus Langeweile und nicht für immer von sich denken. Die Bevorratung für die Zukunft fällt normalerweise in diese Kategorie. Ich würde sogar sagen, dass dies der beliebteste Fehler in den meisten kleinen Unternehmen ist.

Dies ist jedoch eine weitere Diskussion wert, da die Erstellung eines Bestands für die Zukunft dem Produkt wirklich helfen kann. Es muss alles richtig gemacht werden. Die meisten Menschen machen jedoch Fehler und schaden der Arbeit.



Erfolg ist schwieriger als damit zu leben


Egal wie seltsam es klingen mag, ich denke, einer der Hauptgründe für das, was passiert, ist der Kult der Prominenten.

Menschen haben eine seltsame Besessenheit, sich in die Lage eines erfolgreicheren Menschen zu versetzen. Dann machen sie Pläne von dieser Position aus und denken nicht auf ihre eigene Weise.

Jeder fantasiert, was er mit dieser erstaunlichen Kraft anfangen soll, die er nicht hat. Als wäre er der Präsident des Landes, ein Milliardär, eine Berühmtheit, ein virtuoser Darsteller oder ein Übermensch mit übermenschlichen Fähigkeiten.

Das Problem mit Entwicklern ist, dass sie sich diesen Fantasien zu sehr hingeben. Jeder kann Software schreiben. Facebook ist nicht nur in der Lage, eine Medienplattform zu erstellen, die Milliarden von Nutzern unterstützt, sondern Sie verschwenden auch Ihre Zeit. Die Magie von Facebook bestand darin, diese Milliarden von Nutzern anzulocken, und die Skalierung des Systems war der einfache Teil.

Es gibt zwei Aspekte:

  • a) Wachstum zu erzielen ist viel schwieriger als es technisch sicherzustellen.
  • b) Die bekanntesten und bekanntesten Ingenieure arbeiten an Produkten, die skaliert werden müssen.

Der erste Punkt ist offensichtlich, wenn Sie darüber nachdenken. Wie viele Softwareunternehmen sind gescheitert, als sie einen Umsatz von Milliarden oder Millionen von Benutzern erreicht haben? Vielleicht 80% ... wenn Sie "Fehler" sehr streng definieren.

Von allen jemals gegründeten Softwareunternehmen haben jedoch vielleicht nur 0,05% jemals diese Größenordnung erreicht.

Das Problem beim Erstellen eines Bestands besteht darin, dass er normalerweise für Szenarien erstellt wird, die niemals zum Leben erweckt werden. Sei es das Wachstum auf 1.000 Mitarbeiter, 10.000.000 Benutzer oder 10 Großkunden mit drakonischen Anforderungen.

Und es ist schwierig, solche Pläne aufzugeben, weil sie die Erfolgsgedanken beeinträchtigen. Verhindert, dass Menschen sich vorstellen, wie sie Amazon besiegen, sondern zur Realität zurückkehren. In Wirklichkeit haben Sie jedoch 50 Kunden, von denen die Hälfte Verwandte und Freunde sind.

Der zweite Punkt verschlechtert die Situation nur. Natürlich bekommen die besten Programmierer die besten Plätze in führenden Unternehmen. Sie haben entweder geholfen, sie zu schaffen, oder sie zahlen Millionen für die Unterstützung dort.

Das Pareto-Prinzip wirkt gegen uns, weil die besten Programmierer die meisten Bücher schreiben und die meisten Vorträge halten. Wir hören ständig von verteilten Diensten auf Tausenden von Computern, die Petabyte an Daten verarbeiten und um jeden Prozentsatz der Leistung kämpfen. Die meisten von uns müssen jedoch nicht darüber nachdenken, wie groß oder zuverlässig Systeme wie Facebook oder Google sind.

Wenn also Fantasien über die Zukunft nicht helfen, müssen Sie nicht planen?

Nein, natürlich. Über die Zukunft nachzudenken ist wichtig. Es sollte auf ihn gelegt werden, aber mach es richtig.



Design für Flexibilität schafft Unvollkommenheit


Wenn es darum geht, an die Zukunft zu denken, ist weniger besser, aber besser.

Sehr seltene Produkte passen genau zu den Bedürfnissen der Benutzer, der Rest ist unterwegs abgestimmt.

Es ist kaum möglich, dass Sie Service A bereitstellen, und 90% der Benutzer benötigen genau dies. Normalerweise stellen Sie Dienst A bereit, und 90% der Benutzer benötigen Dienst Z. A ist jedoch die nächstgelegene Alternative zu Z, und niemand bietet Z an. Einige Kunden entscheiden sich daher dafür.

Das ist gut. Wenn Kunden sich mit Ihrem Produkt abfinden, können Sie es genau nach ihren Bedürfnissen ändern. Im Wesentlichen helfen Benutzer dabei, eine Marktnische zu identifizieren. Sobald Sie diese Nische besser füllen können, werden Sie anfangen zu wachsen.

Dies ist ein produktives Paradigma des Denkens, da es einen „weniger ist mehr“ -Ansatz für die zukünftige Entwicklung fördert. Die künftige Reserve bedeutet keine Erhöhung der Komplexität, sondern eine maximale Vereinfachung. Sich anpassen können.

Je einfacher Ihre Codebasis ist, desto einfacher ist es, sie für die Ausführung einer anderen Aufgabe zu konfigurieren.

"Ich hasse Code und möchte, dass er in unserem Produkt so klein wie möglich ist." - Jack Diderich

Perfektes Design erfordert Opfer. Normalerweise sind sie mit Flexibilität verbunden.

Oft ist es unvollständige Software, die weltweite Probleme löst, da unvollständige Software flexibler ist. Unvollkommenheit lässt per Definition Raum für Verbesserungen.



Optimistisch gestalten, die Zukunft kann Sie überraschen


Es ist auch wichtig, sich daran zu erinnern, dass die Welt nicht statisch ist.

Zukünftige Probleme müssen durch zukünftige Technologien angegangen werden.

Viele Menschen denken nicht nur nicht an zukünftige Werkzeuge, sondern verwenden im Allgemeinen Werkzeuge von vor einem Jahrzehnt. Sie legen Beschränkungen auf, die seit langem aufgehoben wurden.

Lassen Sie mich ein spezifisches Problem erklären: das Design verteilter Software. Einer der häufigsten Gründe für die Entwicklung solcher Software ist, dass ein einzelner Server nicht auf die erforderlichen Spezifikationen skaliert werden kann. Obwohl dies in einigen Situationen zutrifft, ist es schwer, an die Perspektiven der meisten Projekte zu glauben, insbesondere an Startups, die fast keine Kunden haben.

Ich denke, ein Grund dafür ist, dass die meisten Entwickler im Jahr 2018 immer noch an 2005-Server denken. Aber Computer verbessern sich jedes Jahr und viele Anbieter verkaufen billige dedizierte Server.

Hier ist zum Beispiel ein billiger großer Server:

  • Zwei Xeon E5-2680v4 (28 Kerne, 56 Threads, Taktrate von 2,4 GHz bis 3,3 GHz)
  • 512 Gigabyte DDR4-2400 RAM
  • 2 NVMe-SSDs mit 1,2 TB (jeweils ~ 3 GB / s lesen, ~ 1,5 GB / s schreiben)

Ich wette, die meisten verteilten Programme erfordern weniger als die Hälfte der Arbeitslast dieses Amateur-Servers.

Ein solcher Server kostet je nach Standort zwischen 800 und 1300 US-Dollar pro Monat. Sie können ein Dutzend für das Gehalt eines erfahrenen DevOps-Ingenieurs in London nehmen.

Noch angenehmer ist, dass der Server in zwei oder drei Jahren halbiert wird.

Die Computer verbessern sich weiter und werden dies bis Ende der 2020er Jahre linear tun. Wer weiß, welche Erfindungen erscheinen werden. Bis dahin können wir sogar die offene Eisenrevolution sehen .

Die Menschen entwickeln jedoch Anfang der 2000er Jahre weiterhin Software für Hardwarespezifikationen und -preise, obwohl es 2018 notwendig ist, 2019 Software für Maschinen zu entwickeln.

Dies gilt nicht nur für Server. Wenn Sie an die Zukunft denken möchten, denken Sie an alle zukünftigen Peripheriegeräte. Ich bin sicher, dass die Leute, die 2016 eine Sprachschnittstelle für ihr Gerät bereitgestellt haben, 2018 ziemlich glücklich sind.

Auf welche Peripheriegeräte sollten Sie sich 2018 vorbereiten? Der Teufel kennt ihn. Aber ich weiß, dass sie noch nicht populär geworden ist. Wenn es populär wird, hilft es Ihnen, eine Monopolstellung auf dem Markt einzunehmen, da Sie Ihre Software bereits dafür angepasst haben.

Und es geht nicht nur um Hardware, der Fortschritt in der Software ist absolut erstaunlich. Mit dem Aufkommen von WASM werden Browser zu universellen virtuellen Maschinen. Nach zwei Jahren können Sie eine Hochleistungsanwendung erstellen, indem Sie sie für eine einzige Plattform kompilieren: WebAssembly.

Trotzdem erstellen die Leute immer noch Software für Heimcomputer des Modells 2012. Sie verwenden Babel, obwohl über 99% der Benutzer ES6-fähige Browser haben.

Es erscheinen ständig neue Sprachen, und einige von ihnen sind sehr gut. Erst in den letzten 8 Jahren erschienen Go, Rust, Scala und D, die das Paradigma der Systemprogrammierung völlig veränderten. In den nächsten zwei Jahren scheint es mir, dass Julia die gleiche Revolution im wissenschaftlichen Rechnen machen wird ... und dies sind nur Bereiche, mit denen ich mich persönlich befasse, und die Gesamtzahl der zukünftigen erstaunlichen Dinge ist einfach unglaublich.

Aber ich schweife ab ...


Es ist einfach, die Zukunft zu genießen. Aber niemand weiß wirklich, was in einem Jahr, zwei oder fünf Jahren passieren wird. Es gibt einige Vorhersagen, aber sie sind natürlich nicht ideal.

Wenn Sie jedoch wirklich eine Reserve für die Zukunft schaffen möchten, dann verstehen Sie zuerst, was die Gegenwart bietet. Darüber hinaus erstellen Sie auf diese Weise eine genauere konservative Prognose auf der Grundlage realer Daten.

Software mit einer Reserve für das Jahr 2020, die im Geiste der frühen 2000er Jahre erstellt wurde, hilft Ihnen nicht weiter.

Hören Sie also nicht auf, an die Zukunft zu denken


Beginnen Sie einfach richtig zu planen.

Design unter Berücksichtigung nicht nur Ihres Produkts, sondern des gesamten umgebenden Ökosystems.

Design für Flexibilität, nicht für Perfektion. Flexibilität wird letztendlich dazu beitragen, Software für die Zukunft anzupassen. Es hilft, neuen Herausforderungen zu begegnen und schützt nicht vor dem Imaginären.

Source: https://habr.com/ru/post/de421895/


All Articles