Im Leben fast jedes Entwicklungsteams kommt ein Moment, in dem die Erstellung unseres eigenen Frameworks vom Status „Was zum Teufel sollten wir Zeit verschwenden?“ Abwandert. auf den Status "Coole Idee!". Wir hatten vor ungefähr zwei Monaten einen solchen Moment, als wir begannen, die PSB Mobile-Client-Anwendung von PSB Mobile auf die Sprachsteuerungsfunktion von Übertragungen mit Siri zu schrauben. Wir haben unsere Erfahrungen analysiert und werden Ihnen anhand dessen erklären, wie Sie verstehen, dass die Zeit für Frameworks dennoch gekommen ist.

"Über welchen Rahmen, wovon redest du?"
Zuvor wurde der iOS-Client der Bank für Privatpersonen als Outsourcing entwickelt. Dann wurde beschlossen, alles von Grund auf neu zu schreiben. Wir haben einen SCRUM-Prozess mit zweiwöchigen Sprints entwickelt, die Arbeit begann zu kochen - wir haben aktiv nach neuen Funktionen gesucht und diese hinzugefügt, Chips. In dieser Phase der aktiven Suche war es schwierig vorherzusagen, was Wurzeln schlagen würde, was nicht. Alles 40 Schritte voraus zu planen macht keinen Sinn. Niemand dachte an Schnickschnack wie Universalität - erstellen Sie Ihr eigenes Framework, ordnen Sie Teile des Codes zur Wiederverwendung separaten Bibliotheken zu. Die Wahrscheinlichkeit, dass dies keinen Sinn ergibt, war zu hoch.
WWDC hat uns verbunden
Warum SCRUM gut ist - wir kontaktieren das Unternehmen oft als Kunden. Gleichzeitig begannen wichtige Veränderungen aufzutreten. Wir begannen, das Produkt, die Geschäftsaufgaben und die Geschäftsprozesse der Bank, an der die Anwendung beteiligt ist, besser zu verstehen. Und am wichtigsten war, dass das Unternehmen seinerseits begann, die Entwicklung der Anwendung als einen Prozess zu betrachten, besser zu verstehen, wie wir arbeiten, und uns zustimmte, dass es wichtige Aufgaben gibt, deren Lösung keinen spürbaren momentanen Effekt hat.
Es hat uns geholfen, mit dem Geschäft klarzukommen ... WWDC-Konferenz. Unsere Geschäftskunden sahen sich irgendwie die Ankündigungen neuer Apple-Möglichkeiten an und stiegen neugierig auf Apple Developer. Überraschenderweise war dort alles viel klarer als erwartet. Seitdem sind nicht nur wir in Geschäftsaufgaben involviert, sondern das Geschäft hat keine Angst mehr vor Technologie: Sie versuchen, Spezifikationen selbst zu lesen, Einblicke in die Probleme zu gewinnen, bei der Analyse zu helfen und sich mit den Problemen der Entwicklung zu befassen. Sie begannen zu begreifen, dass es sinnlos war, alle zwei Wochen auf eine deutliche Steigerung des Produkts zu warten - schließlich gibt es Service-Sprints, bei denen es kein konkretes Wachstum gibt. Das gegenseitige Verständnis erreichte den Punkt, an dem wir uns darauf einigten, 20% der Sprintzeit für das Refactoring bereitzustellen.
Die Entwicklung der Fahrräder
Mit dem Wachstum der Entwicklungsabteilung, dem Füllen der Anwendung mit neuen Funktionen, dem Erscheinen mehrerer Teams, die gleichzeitig an verschiedenen Aufgaben arbeiteten, tauchten neue Nuancen auf. Einige der Unteraufgaben für die Teams könnten ähnlich sein, und sofort bestand der Wunsch, das Rad nicht neu zu erfinden, sondern zunächst zu klären, ob jemand einen vorgefertigten Code hatte.
Es gibt normalerweise keine Beschwerden über den Code von unseren Entwicklern, so dass er wiederholt verwendet werden kann - und das nicht nur im Rahmen der üblichen Methode zur Wiederverwendung von Code. Wahrscheinlich entstand bereits zu diesem Zeitpunkt in unseren Köpfen die Idee, einige Dinge für das Gemeinwohl in separate Bibliotheken aufzuteilen. Im Rahmen der bestehenden Aufgaben konnte jedoch keine Zeit für diese Prozesse gefunden werden. Es brauchte einen Grund, und bald warf uns das Geschäft zu.
Erweiterung auslösen
Es gab eine Aufgabe, die Sprachschnittstelle zu unterstützen, damit Sie über Siri per Telefonnummer Zahlungen an andere Kunden der Bank leisten können. Er sagt: "Überweisen Sie so viel Geld an eine solche Person." Und wenn diese Person Kunde der Promsvyazbank ist, wird die Karte der Person auf dem Bildschirm angezeigt, der Überweisungsbetrag und die Frage "Geld senden?". und Senden-Schaltfläche. Eine ähnliche Funktion gibt es bereits in einigen Bankanwendungen, aber wir wollten sie so gestalten, dass sie einerseits sicher ist und der Kunde andererseits nicht in die Bankanwendung gehen muss.

Die Arbeit mit Siri beinhaltet das Schreiben einer separaten Erweiterung. Als wir mit der Planung begannen, wurde uns klar, dass es Zeit war, unsere eigenen Frameworks zu entwickeln. In unserem Anwendungsprojekt wurde eine Netzwerkschicht implementiert, und es ergab sich die Wahl (tatsächlich nein): Schreiben Sie diese Schicht erneut oder legen Sie sie in einen separaten Container, der sowohl in der Hauptanwendung als auch in einer separaten Erweiterung verfügbar ist.
Dabei entstand eine architektonische Unteraufgabe, um einen Teil des Codes in separaten Frameworks herauszunehmen. Insgesamt waren es vier:
- Netzwerk (mittlere) Schicht - hier finden Sie alle Arbeiten mit dem Netzwerk, Modellklassen und API-Diensten. Diese Ebene wird vollautomatisch generiert.
- Login
- Dienstprogramme - Dienstprogramme und Helfer
- Lagerung - Sichere Lagerung
Es ist klar, dass dies nicht unser Know-how ist. In solchen Situationen ist dies üblich. Dies ist die beste Vorgehensweise aller Entwickler mit Selbstachtung. Aber es ist wichtig, wie wir dazu gekommen sind. In diesem Moment kamen
drei Schlüsselzeichen zusammen, um den Rahmen zu schaffen:
- Wir haben eine ausreichende Codebasis entwickelt
- Das Geschäft begann unsere (d. H. Seine) architektonischen Bedürfnisse zu verstehen.
- Eine geeignete Aufgabe hat sich ergeben
Neue Horizonte
Nach der Erkenntnis stellte sich heraus, dass alles einfach war. Beim nächsten Entwicklertreffen haben wir die Details besprochen, das
Opfer der verantwortlichen Person ausgewählt, die am Haupt-Refactoring beteiligt sein wird, und ihm Zeit zugewiesen - eine Vollzeit für diese Aufgabe. Den Rest der Entwickler hatte es fast nicht betroffen. Als wir jedoch begannen, die Netzwerkschicht in das Framework einzufügen, tauchten sofort Ideen auf, welche anderen häufig verwendeten Teile des Codes in die Bibliothek aufgenommen werden sollten. Unsere architektonischen Möglichkeiten haben sich plötzlich erweitert. Wir haben das Leben mit einem zusätzlichen Freiheitsgrad begonnen.
Aber wir benutzen es ohne Fanatismus. Um zu entscheiden, ob der Code in einem separaten Modul codiert werden soll oder nicht, sehen wir uns die Rückstände an und bestimmen, ob dieses Modul an mehreren Stellen wiederverwendet wird. Wenn nicht, dann stören Sie sich nicht.
Sehen wir die Vorteile der Verwendung unserer Frameworks? Auf jeden Fall ja. Jetzt sehen wir, welche Teile des Codes, die als Teil der neuen Aufgabe benötigt werden, bereits im Repository vorhanden sind. Die Entwicklung neuer Dienste ist schneller, weniger Programmierfehler, die Qualität der endgültigen Dienste ist höher.
Wenn Sie neue Erweiterungen für iOS benötigen, haben wir bereits die erforderlichen Frameworks, Sie können sofort experimentieren. Der bereits mit Siri implementierte Dienst steht Bankbenutzern seit mehr als einem Monat zur Verfügung. Jetzt sammeln wir Bewertungen, auch um zu verstehen, wie und wofür die Sprachschnittstelle noch verwendet werden soll.
Ein bisschen Zukunftsforschung
Die Geschichte mit Siri ließ uns nicht nur über Frameworks nachdenken, sondern auch über Schnittstellen im Allgemeinen. Die Menschheit hat noch nicht gelernt, die Konzentration der Aufmerksamkeit zu messen, nur irgendwie indirekt. Je schlechter beispielsweise UX und UI sind, desto größer ist die Verschwendung von Aufmerksamkeit, desto enger wird der Conversion-Trichter mit jedem Schritt. Eine regelmäßige Überweisung über eine Bankanwendung erfordert eine Reihe von Aktionen des Benutzers: Öffnen Sie die Anwendung, melden Sie sich an, suchen Sie in einer Liste, geben Sie in der zweiten den Adressaten ein. Bei Siri ist dies ein Entsperr- und ein Sprachbefehl. Die Autorisierung erfolgt im Vordergrund über die Gesichts-ID. In einigen Szenarien müssen Sie das Telefon nicht einmal zu sich bringen. Wenn Sie beispielsweise fahren und das Telefon in der Nähe montiert ist, kann die Kamera Sie leicht erkennen.
Schauen Sie sich um: Sprachassistenten beginnen, den umgebenden Raum aktiv zu erobern. Der Hype um den Yandex Smart Speaker, die Waschmaschinen, die die Befehle sprechen und verstehen, die TV-Fernbedienungen, die die Stimme erkennen. Je mehr Benutzer von Sprachschnittstellen umgeben sind, desto besser können sie mit Bankanwendungen kommunizieren.
Grafische Schnittstellen verlieren in dieser Situation ihr Monopol. Von den Hauptkommunikationsmitteln werden sie einfach zu einer visuellen Bestätigung der Aktion, um zu signalisieren, dass der Computer Sie richtig verstanden hat.
Für den Entwickler ist eine solche Änderung im Prinzip nicht beängstigend. Mit der richtigen Architektur kann die Anwendung über eine beliebige Anzahl von Schnittstellen verfügen: visuell, sprachlich, neurologisch. Die Hauptsache ist, Ansätze zu verwenden, die dem aktuellen Reifegrad des Teams entsprechen.