it-swarm.com.de

Wie mache ich mich für teure Programmierer stark?

In unserem Unternehmen müssen wir viele scheinbar nicht komplizierte Dinge tun, wie die Entwicklung einer mobilen Benutzeroberfläche.

Nehmen wir an, die erfahrenen Programmierer kosten uns viermal so viel wie die Anfänger.

Beide sind grundsätzlich in der Lage, die scheinbar einfachen Dinge in der gleichen Zeit zu erledigen.

Der Unterschied besteht darin, dass die erfahrenen Programmierer weniger Fehler produzieren und ihr Code stabiler ist usw. Die Programmiereranfänger verschwenden viel Zeit von allen anderen (PM, Clients usw.). Sie sind aber deutlich günstiger.

Das Gegenargument ist, dass erfahrene und Anfänger die gleiche Zeit benötigen, um eine Tabelle in HTML zu erstellen. Daher ist es Luxus, erfahrene Programmierer einzustellen, um das zu tun, was Anfängerprogrammierer möglicherweise auch erreichen können.

Sollten wir in mehr und bessere Programmierer oder mehr und bessere PM investieren, da der Unterschied zwischen erfahrenen und neuen Programmierern in unserem Bereich 4x betragen kann.

33
user1721135

Ich habe aus erster Hand Erfahrung damit, dass beide Theorien in der realen Welt ausprobiert werden - tatsächlich im selben Projekt.

Bevor ich ankam, war die Entscheidung getroffen worden, teurere BAs und sehr billige Programmierer einzustellen - die Idee war, gute Qualitätsspezifikationen zu haben, die von sehr jungen Programmierern sklavisch befolgt wurden.

Nach mehr als 6 Monaten des Hauptprojekts übernahm ich die Rolle des Entwicklungsleiters. Nachdem ich einige Hygienefaktoren behoben hatte, blieb das Problem der Codequalität bestehen. Ich hatte ein freies Budget und stellte einen sehr erfahrenen Programmierer (eher ein Solution Architect) mit außergewöhnlichen Kommunikationsfähigkeiten und einem früheren Leben als Trainer in C # (der Sprache, in der das Projekt geschrieben wurde) ein. Die Idee war, die Qualität der anderen Programmierer durch Mentoring und effektiv kostenloses Training zu verbessern.

Nach ein oder zwei Monaten wurde schmerzlich klar, dass selbst das nicht funktionieren würde, so dass das ursprüngliche Team aus dem Projekt entfernt und ein paar weitere Top-Programmierer hinzugefügt wurden. Sie lieferten das Projekt, das das ursprüngliche Team in mehr als 8 Monaten, in denen es in drei einmonatigen Sprints von Grund auf neu gestartet wurde, überhaupt nicht umgesetzt hatte, da der ursprüngliche Code nicht einlösbar war.

Wenn Ihre Anforderungen sehr einfach sind, können Sie möglicherweise mit einem sehr jungen Programmierer davonkommen, aber die Wahrscheinlichkeit ist, dass sie auf lange Sicht viel mehr kosten. Manchmal entwickeln sich "einfache" Anforderungen zu einer großen Komplexität.

Wenn ich nicht die schwierige Entscheidung getroffen hätte, die Richtung zu ändern, würden sie wahrscheinlich immer noch daran arbeiten :) - Im Ernst, in diesem Beispiel bedeutete mangelnde Kommunikation und Kompetenz des ursprünglichen Teams, dass sie keine Probleme mit dem Team aufwerfen würden Spezifikation, würde aber nur versuchen, das zu tun, worum sie gebeten wurden ob es architektonisch sinnvoll war oder nicht. Ein erfahrener und selbstbewusster Entwickler stellte Fragen und ging auf die zugrunde liegenden Anforderungen ein und produzierte daher die - rechts Lösung zum ersten Mal.

Oh, noch etwas. Gehen Sie nicht davon aus, dass Sie sofort einen großartigen Programmierer einstellen können. Es gibt viele Leute mit langjähriger Erfahrung in der Mittelmäßigkeit, die fast so schlecht abschneiden wie ein Junior, aber das gleiche kosten wie ein Superstar (manchmal sogar mehr). Ich habe eine sehr gute "Trefferquote", aber das kommt mit Erfahrung und ich habe viel. Das ist das Thema eines ganz anderen Gesprächs, das hier nicht zum Thema gehört ...

TL; DR Gute Programmierer sind ein Schnäppchen. Das Schwierige ist, sie zu finden und ein Arbeitsumfeld zu schaffen, das attraktiv genug ist, um sie zu erhalten.

60
mcottle

Wenn Sie über umfangreiche Leistungsstatistiken verfügen, können Sie den Business Case mit Mathematik erstellen. Diese könnten zeigen, dass die Entwicklungsgeschwindigkeit den Preisanstieg kompensieren würde oder noch besser, dass ein robustes Design mehr bei der Wartung und Entwicklung nachfolgender Versionen sparen könnte. Leider sind solche Zahlen nicht so oft verfügbar - insbesondere für neuere Technologien.

Ein weiteres Argument kann die Markteinführung sein. Dies ist für das obere Management leichter zu verstehen. Wenn die Zeit jedoch nicht wirklich kritisch ist, hilft dies nicht.

Als letztes Mittel finden Sie ein Bild von Red Adair , dem berühmten Feuerwehrmann , der nach mehreren erfolglosen Versuchen weniger erfahrener Männer in eine Katastrophe größeren Ausmaßes verwickelt wurde. Sein berühmtes Zitat:

Wenn Sie der Meinung sind, dass es teuer ist, einen Profi einzustellen, warten Sie, bis Sie einen Amateur eingestellt haben.

... verdient es, in Farbe gedruckt und prominent an Ihrer Bürotür angebracht zu werden, damit jeder versteht, worum es geht ;-)

19
Christophe

Ich mag die Antwort von mcottle und habe sie positiv bewertet, aber ich möchte einige andere Dynamiken und Argumente behandeln, die die anderen Antworten noch nicht angesprochen haben.

Erstens impliziert die Antwort von mcottle die Tatsache, dass unterhalb eines bestimmten Fähigkeitsniveaus einige Probleme einfach unmöglich sind. Leider können Sie dies herausfinden, indem Ihr Team versucht und versagt, was sehr teuer ist. Nach dem Scheitern gibt es zwei mögliche Lektionen, um daraus zu lernen. Eine Möglichkeit besteht darin, dass Sie lernen, dass Sie kompetentere Entwickler benötigen, diese einstellen und das Projekt deutlich über das Budget und den Zeitplan hinaus abschließen, aber zumindest für die Zukunft vorbereitet sind. Die andere Möglichkeit ist, dass ein solches Projekt für Ihr Team "zu schwer" ist und solche Dinge in Zukunft nicht mehr versucht werden sollten, d. H. Sie geben das Projekt und effektiv ähnliche auf. Natürlich wird es selten als "wir sind zu dumm, um dies zu tun" formuliert, sondern als "unsere Systeme sind sehr komplex" oder "wir haben viel Legacy-Code" oder einige andere rationalisiert. Diese letztere Sichtweise kann die Sichtweise eines Unternehmens darauf, was möglich ist und wie lange/teuer die Entwicklung sein sollte, erheblich verzerren. "Wenn es ein Jahr dauert, bis X nicht funktioniert, sind vielleicht sechs Monate sinnvoll, um das viel einfachere Y zu machen."

Eine Frage ist, was genau ist der Plan Ihres Unternehmens? Okay, sie werden billige Junior-Programmierer einstellen. Drei Jahre vergehen, was nun? Was machen sie mit Entwicklern, die in diesen drei Jahren bei ihnen waren? Haben sie ihm/ihr einfach nie eine Gehaltserhöhung gegeben? Folgende Optionen stehen zur Verfügung:

  • Sie erhöhen wettbewerbsfähig, um Mitarbeiter zu halten. Warum sollten sie jetzt Probleme haben, die Preise für leitende Entwickler zu bezahlen? Ich werde jedoch darauf zurückkommen.
  • Sie haben stagnierende Raten, was bedeutet, dass sie sich letztendlich auf Mitarbeiter "beschränken" werden, denen es an Antrieb und/oder Fähigkeiten mangelt.
  • Sie entfernen aktiver mehr leitende Angestellte.

Die zweiten beiden Fälle bedeuten einen hohen Mitarbeiterwechsel, was den Verlust von Unternehmenswissen und die kontinuierliche Bezahlung von Mitarbeitern bedeutet. Im zweiten Fall wählen Sie im Wesentlichen schlechte Entwickler aus, sodass die Kosten in Form steigender Zeitpläne steigen. Die Art und Weise, wie dies ablaufen wird, ist, dass bei Projekt X alles gut läuft, bis Jim plötzlich geht, der einer der besseren Entwickler war, weil er seit zwei Jahren keine Gehaltserhöhung mehr erhalten hat. Jetzt wird das Projekt "verständlicherweise" deutlich länger dauern Sie müssen neue Nachwuchsentwickler einstellen und ausbilden, die (vermutlich) nicht so gut sind wie Jim. So kalibrieren Sie die Erwartungen neu.

Selbst für den Fall, dass Wettbewerbserhöhungen angeboten werden, wenn Sie nur Junior-Entwickler haben, wo und wie sollen sie lernen? Sie hoffen im Grunde, dass einer von ihnen selbst gute Praktiken lernt trotz ihrer Arbeitsumgebung und schließlich andere betreut (anstatt auf grünere Weiden zu gehen). Es wäre viel sinnvoller, mit einigen guten Entwicklern die Pumpe zu "entlüften". Wahrscheinlicher ist es, dass Sie eine Kultur von Expert Beginners entwickeln. Das Ergebnis ist, dass Sie am Ende Senior Developer Raten an Personen zahlen, die nur geringfügig besser als Junior Developer sind und kulturell toxisch sind.

Ein Vorteil insbesondere von sehr guten Entwicklern, dass ich überrascht bin, dass niemand anderes erwähnt hat, ist, dass sie leicht ein multiplikativer Faktor sein können. Es kann durchaus vorkommen, dass ein Junior-Entwickler und ein Senior-Entwickler die gleiche Zeit benötigen, um eine Tabelle zu erstellen. Ein guter Entwickler wird das jedoch nicht tun. Sie werden einen Tabellengenerator erstellen, der die Zeit für alle zum Erstellen einer Tabelle verkürzt. Alternativ/zusätzlich erhöhen sie die Obergrenze dessen, was für alle möglich ist. Zum Beispiel waren die Entwickler, die das MapReduce-Framework von Google implementiert haben, wahrscheinlich äußerst qualifiziert, aber selbst wenn die Benutzer von MapReduce überhaupt nicht in der Lage sind, eine massiv verteilte Version ihres Algorithmus selbst zu erstellen, können sie dies jetzt problemlos tun kann mit MapReduce. Oft ist diese Dynamik weniger offensichtlich. Zum Beispiel verbessern bessere Methoden zur Quellcodeverwaltung, zum Testen und zur Bereitstellung alle, aber es kann schwieriger sein, eine bestimmte Person zu finden.

Um ein bisschen über die andere Seite zu streiten, vielleicht haben die Höheren Recht. Vielleicht sind erfahrene Entwickler nicht notwendig. In diesem Fall scheint die Entwicklung jedoch kein wesentlicher Bestandteil des Unternehmens zu sein. In diesem Fall würde ich Entwickler einfach vollständig eliminieren und Standardsoftware verwenden oder Auftragnehmer auf Anfrage einstellen. Es könnte sich lohnen zu untersuchen, warum sie nicht nur Auftragnehmer, sondern ein internes Team einsetzen. Wenn Sie ohnehin eine Menge Mitarbeiter abwandern werden, sollten hochgefahrene Auftragnehmer kein Problem sein.

10

Dies ist keine Entweder-Oder-Situation.

Insbesondere bei einem größeren Projekt haben Sie ziemlich routinemäßig einige relativ erfahrene Personen in Führungspositionen und eine Reihe weniger erfahrener Personen in Führungspositionen. Auf diese Weise können die Senioren nicht nur direkt am Projekt helfen, indem sie Code schreiben und die schwierigeren Entscheidungen treffen, sondern sie können auch indirekt helfen, indem sie die Junioren betreuen.

Mit einiger Sorgfalt kann dies auch dazu beitragen, dass die leitenden Ingenieure nicht schnell ausbrennen, indem sie aufgefordert werden, ständig Arbeiten auszuführen, für die es an Herausforderung oder Interesse mangelt. Zumindest meiner Erfahrung nach kann selbst ein wenig Zeit als Mentor für begeisterte Junioren (oder sogar Praktikanten) einen Sprint viel interessanter machen.

Fairerweise sollte ich hinzufügen, dass diese Art von Position wahrscheinlich nicht für alle leitenden Ingenieure geeignet ist. Es erfordert eine stark verstärkte Betonung von Architektur und Design, Kommunikation, Dokumentation usw. Besonders früh erfordert es auch häufig viel Disziplin - für jemanden, der Karriere als Autor von Code gemacht hat, ist es verlockend, einfach den Code zu schreiben, anstatt einem Nachwuchsingenieur beizubringen, wie man das macht. Es ist auch häufig verlockend, eine vollständige Neufassung von Grund auf vorzunehmen, wenn Code nicht so ist, wie Sie es persönlich bevorzugen würden - selbst wenn er für den Job vollkommen ausreichend ist.

Wenn Sie das Management jedoch wirklich nicht davon überzeugen können, eine Mischung aus Erfahrungsstufen zu wählen, steht außer Frage, dass Sie haben, um mehr Erfahrung zu sammeln. Wenn Sie ein Projekt ausschließlich Nachwuchskräften überlassen, stehen die Chancen gut, dass Sie einfach nie ein brauchbares Produkt erhalten. Schlimmer noch, sie werden nicht erkennen, dass das, was sie tun, keinen wirklichen Fortschritt in Richtung eines brauchbaren Produkts bringt. Sie werden also weiter in eine gewählte Richtung arbeiten, lange nachdem eine erfahrenere Person erkannt hätte, dass sie ein Produkt hergestellt hat Grundlegender Fehler frühzeitig, und Sie müssen sichern, sich neu gruppieren, sich orientieren und in eine neue Richtung gehen, um die Hoffnung zu haben, an einem sinnvollen Ziel anzukommen.

6
Jerry Coffin

Jedes reale Projekt wird von der Kundennachfrage bestimmt und beinhaltet daher Aufgaben mit geringer Komplexität (z. B. Erstellen von CRUD-Formularen) und hoher Komplexität (z. B. Erstellen eines ereignisgesteuerten Benachrichtigungssystems). Die einzige Möglichkeit, nur Aufgaben mit geringer Komplexität zu erledigen, besteht darin, den Kunden wiederholt das Wort "Nein" zu sagen, zu dem keine Verkaufsabteilung, von der ich jemals gehört habe, bereit ist.

Wenn Sie nur Nachwuchsentwickler haben, bedeutet dies, dass Sie nur die Aufgaben mit geringer Komplexität ausführen können und daher nur ein Produkt mit geringem Wert erstellen und auf dem Markt härter darum kämpfen können, Ihre Produkte zu differenzieren. Wenn Sie differenzieren möchten, müssen Sie hochwertige Funktionen erstellen, die sich zwangsläufig in hochkomplexen Aufgaben niederschlagen. Wenn es einfach wäre, wäre es schließlich nicht wertvoll. Das bedeutet, dass Sie Mitarbeiter benötigen, um diese hochkomplexen Aufgaben auszuführen, und dass Sie hochrangige Entwickler benötigen.

Wenn Sie nur hochrangige Entwickler haben, verschwenden Sie ihre Fähigkeiten mit geringwertiger Arbeit, haben Probleme, sie zu behalten, wenn Sie sie zu dieser Arbeit zwingen, und riskieren, dass sie in das Land der Architekturastronomie gehen, um einfache Aufgaben zu erledigen interessant zu arbeiten. Dies bedeutet, dass Sie auch einige unerfahrene Entwickler benötigen, um diese Aufgaben zu erledigen.

Ein gesundes Team, das an kundenorientierten Produkten arbeitet, ist normalerweise eine Mischung. Das Verhältnis zwischen Junior- und Senior-Entwicklern hängt vom Verhältnis zwischen Aufgaben mit geringer und hoher Komplexität ab, und das hängt von Ihrer Geschäftsstrategie ab. Wenn Sie aktiv nach großen Mengen leicht verständlicher Ausstecharbeiten mit geringen Gewinnspannen suchen, werden Sie nicht viele hochkomplexe Aufgaben haben und wahrscheinlich hauptsächlich Entwickler auf Junior-Ebene einstellen. Wenn Sie aktiv versuchen, unterversorgte Nischen mit höheren Gewinnspannen zu differenzieren und anzuvisieren, haben Sie viele hochkomplexe Aufgaben und suchen hauptsächlich hochrangige Entwickler.

5
Joeri Sebrechts

In meiner Antwort werde ich argumentieren, dass Senior-Programmierer nicht unbedingt schneller codieren als Junior-Entwickler. Tatsächlich sind die schnellsten Programmierer im Durchschnitt Leute, die gerade die Universität verlassen haben.

Domänenwissen ist ein Schlüssel für leitende Entwickler. Ein guter Senior-Entwickler sollte über fundierte Fachkenntnisse verfügen, was Junior-Entwickler möglicherweise nicht haben. Erfahrene Entwickler verstehen das Problem, was zu lösen ist und wie es zu lösen ist. Sie können kompliziertere Probleme für das Unternehmen lösen als die meisten Nachwuchsentwickler.

Programmieren ist eine relativ billige Fähigkeit, es ist das Expertenwissen, das zählt.

3
HelloWorld

Versuchen Sie nicht, den Fall zu vertreten. Der Markt legt den Preis für die Mitarbeiter fest. Wenn der Markt bereit ist, viermal mehr für Erfahrung zu zahlen, dann deshalb, weil die Unternehmen insgesamt herausgefunden haben, dass es eine vierfache Produktivitätssteigerung gibt.

Natürlich könnte der Markt falsch sein, vielleicht 3,5 oder 5x, aber wenn Sie keine digitale Agentur sind, ist es unwichtig, gegen den Markt zu konkurrieren oder etwas Ähnliches.

Ihr eigentliches Problem ist: Sind Sie gut genug im Interviewen, um zwischen einem erfahrenen Entwickler und einem alten Entwickler unterscheiden zu können, der es prahlt?.

Ihre zweite Frage von PM vs Entwicklerbudget. Ich würde sagen, dass ein Entwickler auf ein PM aber ein PM) verzichten kann Ich kann nicht ohne Entwickler auskommen. Lassen Sie Ihre Entwicklungs-Engine zuerst sortieren und dann eine PM, um den Administrator von ihren Händen zu nehmen.

2
Ewan

Sie werden für ein Viertel der Kosten eines wirklich guten Entwicklers niemanden in Ihrem eigenen Land finden. Sie können jemanden für die Hälfte des Gehalts finden, und das wird ein absoluter Anfänger sein. Für jemanden mit einem Viertel des Gehalts müssen Sie ins Ausland gehen, und dann haben Sie Probleme mit der Kommunikation, Menschen, die blindlings den Spezifikationen folgen, und alle Arten von Problemen.

Sie brauchen einen guten Entwickler. Wenn Sie weitere Junior-Programmierer hinzufügen, benötigen Sie einen guten Entwickler mit ausgeprägten Kommunikationsfähigkeiten, der bereit und in der Lage ist, die Junioren im Auge zu behalten. Ohne einen guten Entwickler sind Sie verloren. Sie können sich glücklich schätzen, einen außergewöhnlich talentierten Anfänger zu finden, aber sobald er oder sie herausfindet, dass sie gut sind, werden sie ein höheres Gehalt wollen.

Wenn Sie keinen guten Entwickler haben, haben Sie niemanden, der das Gesamtbild sieht, und niemanden, der Probleme lösen kann, die mit Stackoverflow nicht gelöst werden können. Und Sie werden Code haben, der stinkt und nicht gewartet werden kann, da Junior-Entwickler nicht wissen, wie man wartbaren Code erstellt. Sie können es lernen, aber ohne einen guten Entwickler im Team.

2
gnasher729

Es gibt einige Hürden, die Ihr Unternehmen überwinden müsste, bevor Sie entscheiden können, ob die Einstellung besserer Programmierer kostengünstig wäre. Es tut mir leid, wenn ich negative Annahmen darüber mache, wo Sie arbeiten, aber ich bin nicht überzeugt, dass sie wissen, was sie tun.

  1. Haben sie genau eingeschätzt, wie komplex die von Ihnen erstellte Software ist? Es hört sich so an, als ob sie nicht denken, dass das, was Sie tun, sehr schwer ist. Warum also bessere Leute einstellen? Haben Sie den Fall gemacht, dass Fehler gemacht werden und wie bessere Lösungen und Produktivität Geld verdienen würden? Zeit zu sparen ist großartig, aber viele Unternehmen würden lieber eine ganze Woche Zeit mit einem Programmierer verschwenden, als ihnen das Geld für den Kauf eines Mauspads zu geben.
  2. Ist Ihr Unternehmen für gute Programmierer attraktiv? Können sie sie identifizieren? Nichts schlimmeres als einen Senior Dev einzustellen, ihnen mehr Geld zu zahlen und das gesamte Team aufgrund mangelnder Fähigkeiten und/oder Führungsqualitäten nach unten zu ziehen.
  3. Kann Ihr Unternehmen einen guten Programmierer einsetzen? Wenn alles, was sie tun werden, ist, schlampige Brillen auf sie zu werfen und ihnen zu sagen, sie sollen es einfach bauen, worum geht es dann? Werden sie ihnen die Freiheit geben, die Dinge auf ihre Weise zu tun? Schließlich weiß eine gute Programmiererin per Definition, wie sie ihre Zeit besser nutzen kann. Sie wirken sich auf die Menschen in ihrer Umgebung aus und bewirken, dass sich andere Programmierer verbessern. Sie führen bessere Designs und Architekturen ein, auf denen der Rest aufbaut, um das Produkt so viel besser zu machen.

Tut mir leid, aber ich glaube, Ihr Unternehmen würde nicht wissen, was es mit einem guten Programmierer anfangen soll. Vielleicht möchten Sie ihn davon überzeugen, zuerst bessere Manager einzustellen und diese internen Probleme zu lösen.

1
JeffO