Das läuft auf das hinaus, was ich mir als "The Eternal Conflict" (zwischen Business und Engineering) vorgestellt habe. Ich habe keine Lösung, da es sich um ein Problem handelt, das nie verschwindet, aber Sie können Maßnahmen ergreifen, um Abhilfe zu schaffen.
Was die Leute oft nicht merken, ist, dass wir als Ingenieure einfach davon ausgehen, dass das Problem des "erfolgreichen Geschäfts" immer eine Selbstverständlichkeit ist. Wir möchten, dass unser Code schön und ordentlich ist und gewartet werden kann, damit wir neue Funktionen hinzufügen und bestehende schnell und mit einem Minimum an Kunden, die für uns die Qualitätssicherung übernehmen, optimieren können, indem wir bizarre Randfälle entdecken, die durch besseren Code vereitelt worden wären. Kunden zu halten und einen Wettbewerbsvorteil mit Funktionen und Finessen zu erzielen, die niemand sonst schnell genug erreichen kann, sind beides Geschäftserfolge, zu denen guter Code direkt beiträgt und die viel darüber informieren, warum wir überhaupt besseren Code wollen.
Also buchstabiere es. "Wir möchten X in unserer Codebasis implementieren, da sich dies, wenn wir dies nicht tun, negativ auf das Geschäft auswirkt" oder "... weil dies unsere Wettbewerbsfähigkeit verbessert, indem wir unsere Fähigkeit verbessern, neue Verbesserungen und Funktionen schneller umzusetzen . "
Geben Sie Ihr Bestes, um konkrete Beweise dafür zu erhalten, dass Verbesserungen funktionieren. Wenn das Verbessern einer Teilmenge einer App zu einer schnelleren Funktion / Verbesserung geführt hat, überprüfen Sie, welches Backlog-Tool Sie möglicherweise verwenden, um Beweise dafür zu erhalten, und weisen Sie bei entsprechenden Besprechungen darauf hin.
- Holen Sie sich das Team auf die gleiche verdammte Seite
Egos sind oft ein Problem. Eine Sache, die Ingenieurteams dringend benötigen, ist es, den Wert eines einheitlichen Ansatzes zur Lösung bestimmter Arten von Problemen zu ermitteln, den jeder hat, der seine eigene Tasse Kool Aid d'jour trinkt, weil er es besser weiß. Es ist in Ordnung zu glauben, dass die Präferenz des anderen schlechter ist als Ihre, aber Wertekonsistenz über mehr Recht, wenn sein Ansatz funktioniert und es ein Argument ist, das Sie nicht gewinnen können. Kompromisse aus Gründen der Konsistenz sind der Schlüssel. Wenn die Dinge konsistent sind, ist es schwieriger, sie falsch zu machen, da der konsistent festgelegte Weg normalerweise auch der schnellste ist.
- Wählen Sie die richtigen Werkzeuge
Es gibt zwei Schulen von Frameworks / Toolsets / Bibliotheken / was auch immer. "Setze 99% davon für mich ein, damit ich sehr wenig wissen / tun muss" oder "um mir aus dem Weg zu gehen, wenn ich dich dort nicht haben will, aber hilf mir sehr schnell und konsequent mit Sachen, die ich eigentlich will auf der Karotte anstatt Peitsche Prinzip zu verwenden. " Bevorzugen Sie den zweiten. Flexibilität und granulare Kontrolle sollten auf dem Altar des schnellen Turnaround niemals geopfert werden, da die Frage "Wir können das nicht, weil uns unsere eigenen Tools nicht lassen" niemals eine akzeptable Antwort ist und die Frage immer für Nicht-Experten auftaucht. Trivial / Einweg-Produktentwicklung. Nach meiner Erfahrung werden unflexible Werkzeuge fast immer weit aufgerissen oder unelegant bearbeitet und verursachen ein großes, nicht zu wartendes Durcheinander. Meistens nicht, Die flexiblen / einfacher zu modifizierenden Lösungen sind auf kurze Sicht genauso oder nahezu genauso schnell. Schnell, flexibel und wartbar sind mit den richtigen Werkzeugen möglich.
- FFS, wenn Ingenieure sich nicht entscheiden, lassen Sie sich zumindest vom Ingenieur bei der Auswahl der Werkzeuge beraten
Ich habe das Gefühl, dass dies eine Frage aus Entwicklersicht ist, aber ich war in viel zu vielen Situationen, in denen Technologieentscheidungen ohne Ingenieursaufwand getroffen wurden. Was zum Teufel ist das? Ja, irgendjemand muss letztendlich den letzten Anruf tätigen, aber wenn Sie kein technischer Manager sind, sollten Sie sich eine qualifizierte Meinung einholen. Alles, was verspricht, Geld zu sparen, weil die Leute nicht so schlau sein müssen oder weil es die Entwickler vor sich selbst schützt, ist eine schmutzige, schmutzige Lüge. Stellen Sie Talente ein, denen Sie vertrauen können. Sagen Sie ihnen, was Sie von einem Stack oder einer anderen technischen Lösung erwarten, und nehmen Sie deren Input ernst, bevor Sie sich für einen technischen Zug entscheiden.
- Fokus auf Design über Implementierung
Die Tools sind für die Implementierung gedacht und können Ihnen als solche helfen. Oberste Priorität muss jedoch die Architektur haben, unabhängig davon, welches Spielzeug Sie für die Erstellung dieser Architektur haben. Am Ende des Tages sind KISS und DRY und alle hervorragenden Philosophien, die von dieser Angelegenheit ausgehen, wichtiger als die Frage, ob es sich um .NET oder Java handelt oder um etwas, das sowohl kostenlos als auch nicht scheiße ist.
- Protokollieren Sie Ihre Bedenken
Wenn die Geschäftsleitung darauf besteht, dass Sie es falsch machen, speichern Sie diese E-Mail, insbesondere den Teil, in dem Sie angegeben haben, warum es Sie kosten würde. Wenn alle Ihre Vorhersagen zutreffen und schwerwiegende geschäftsschädigende Probleme auftreten, haben Sie eine Menge Argumente, um die Bedenken der Ingenieure ernst zu nehmen. Aber pass mal gut auf. Inmitten des lodernden Infernos ist eine schlechte Zeit für ein "Ich-habe-dir-so" beim Befolgen des Feuerkodes. Löschen Sie das Feuer und bringen Sie Ihre Liste der zuvor ignorierten Bedenken zu einer nachträglichen Besprechung / Konversation. Versuchen Sie, sich weiterhin auf technische Bedenken zu konzentrieren, die geäußert und ignoriert wurden, und begründen Sie, warum sie ignoriert wurden, und nicht auf die Namen der tatsächlichen Personen die Entscheidung zu ignorieren. Du bist ein Ingenieur. Bleiben Sie bei den Problemen, nicht bei den Menschen. " Wir äußerten Besorgnis über X, weil wir befürchteten, dass dies zu Y-Problemen führen würde. Uns wurde gesagt, Z und damit fertig zu werden. "