In unserem Unternehmen müssen wir viele scheinbar nicht komplizierte Dinge tun, wie beispielsweise die Entwicklung einer mobilen Benutzeroberfläche.
Nehmen wir an, die erfahrenen Programmierer kosten uns 4x 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 ist, dass die erfahrenen Programmierer weniger Bugs produzieren und ihr Code stabiler ist usw. Die Anfängerprogrammierer 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 auch Anfängerprogrammierer erreichen können.
Sollten wir in mehr und bessere Programmierer oder in mehr und bessere PM investieren, kann der Unterschied zwischen erfahrenen und neuen Programmierern in unserem Bereich viermal so groß sein.
quelle
Let's say the experienced programmers costs us 4x as much as the beginners.
- Das ist unwahrscheinlich. Das Verhältnis ist eher 2x oder 3x. Wenn Sie Programmierer so schlecht bezahlen, ist das, was Sie wirklich tun, Amateure anzuheuern und sie für die Arbeit auszubilden, die Sie brauchen, damit sie Ihr Unternehmen für umweltfreundlichere Weiden verlassen, sobald sie ein Minimum an Erfahrung haben.Both are basically able to complete the seemingly simple things in the same amount of time.
- Nun, der erfahrene Programmierer spart auf lange Sicht beträchtliche Zeit, weil Sie ihm keine genaueren Anweisungen geben mussten, was genau zu tun ist.Antworten:
Ich habe Erfahrungen aus erster Hand, wie beide Theorien in der realen Welt erprobt werden - tatsächlich im selben Projekt.
Bevor ich ankam, war die Entscheidung gefallen, 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 Leitung der Entwicklung. Nachdem ich einige Hygienefaktoren behoben hatte, blieb das Problem der Codequalität bestehen. Ich hatte ein wenig Geld übrig und stellte einen sehr erfahrenen Programmierer (eher einen 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 zu verbessern, indem Mentoring und effektiv kostenloses Training angeboten werden.
Nach ein oder zwei Monaten wurde schmerzlich klar, dass auch das nicht funktionieren würde, so dass das ursprüngliche Team aus dem Projekt entfernt und ein paar weitere Top-Drawer-Programmierer hinzugefügt wurden. Sie lieferten das Projekt, das das ursprüngliche Team innerhalb von mehr als 8 Monaten nach drei einmonatigen Sprints, die von vorne anfingen, nicht erfolgreich abgeschlossen hatte, da der ursprüngliche Code unwiderruflich war.
Wenn Ihre Anforderungen sehr einfach sind, können Sie vielleicht mit einem sehr jungen Programmierer davonkommen, aber die Wahrscheinlichkeit ist, dass sie auf lange Sicht viel mehr kosten werden. Manchmal entwickeln sich "einfache" Anforderungen zu einer großen Komplexität.
Wenn ich nicht die harte Entscheidung getroffen hätte, die Richtung zu ändern, würden sie wahrscheinlich immer noch daran arbeiten :) - In diesem Beispiel bedeutete der Mangel an Kommunikation und Kompetenz durch das ursprüngliche Team, dass sie keine Probleme mit dem aufwerfen würden Spezifikation, würde aber nur versuchen, das zu tun, was auch immer sie tun sollten, ob es architektonisch sinnvoll war oder nicht. Ein erfahrener und selbstbewusster Entwickler hat Fragen gestellt und sich mit den zugrunde liegenden Anforderungen befasst und daher beim ersten Mal die richtige Lösung entwickelt.
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 schlechte Ergebnisse erzielen wie ein Junior, aber genauso viel kosten wie ein Superstar (manchmal sogar mehr). Ich habe eine sehr gute "Trefferquote", aber das hängt mit der Erfahrung zusammen und ich habe eine Menge. 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 attraktives Arbeitsumfeld zu schaffen, um sie zu behalten.
quelle
Wenn Sie umfangreiche Leistungsstatistiken haben, können Sie den Business Case mit Mathe erstellen. Dies könnte zeigen, dass die Entwicklungsgeschwindigkeit den Preisanstieg kompensieren würde, oder noch besser, dass ein robustes Design mehr Wartung und Entwicklung nachfolgender Versionen einsparen könnte. Leider sind solche Zahlen nicht so häufig verfügbar - insbesondere für neuere Technologien.
Ein weiteres Argument kann Time-to-Market sein. Dies wird vom oberen Management leichter verstanden. Wenn die Zeit jedoch nicht wirklich kritisch ist, hilft dies nicht.
In letzter Instanz finden Sie ein Bild von Red Adair , dem berühmten Feuerwehrmann, der nach mehreren erfolglosen Versuchen weniger erfahrener Männer in eine Katastrophe verwickelt wurde. Sein berühmtes Zitat:
... verdient es, in Farbe gedruckt und prominent an Ihrer Bürotür angebracht zu werden, damit jeder versteht, worum es geht ;-)
quelle
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 hervorgebracht haben.
Erstens impliziert die Antwort von mcottle die Tatsache, dass einige Probleme unterhalb einer bestimmten Fähigkeitsstufe einfach unmöglich sind. Die Art und Weise, wie Sie dies herausfinden, liegt leider daran, dass Ihr Team versucht und versagt, was sehr schwierig istteuer. Nach dem Scheitern gibt es zwei mögliche Lektionen, um daraus zu lernen. Eine Möglichkeit besteht darin, dass Sie feststellen, dass Sie kompetentere Entwickler benötigen, diese einstellen und das Projekt deutlich über das Budget und den Zeitplan hinaus abschließen. Sie sind jedoch zumindest für die Zukunft vorbereitet. 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, dh Sie geben das Projekt und praktisch alle ähnlichen Projekte auf. Natürlich wird es selten so formuliert: "Wir sind zu dumm, um das zu tun", sondern es wird rationalisiert: "Unsere Systeme sind sehr komplex" oder "Wir haben viel Legacy-Code" oder einige andere. Diese letztgenannte Sichtweise kann die Sichtweise eines Unternehmens in Bezug auf die Möglichkeiten und die Dauer und die Kosten einer Entwicklung erheblich beeinträchtigen. "
Eine Frage ist, was genau ist Ihr Unternehmensplan? Okay, sie werden billige Nachwuchsprogrammierer einstellen. Drei Jahre vergehen, was nun? Was machen sie mit Entwicklern, die in diesen drei Jahren bei ihnen waren? Haben sie ihm / ihr nie eine Gehaltserhöhung gegeben? Folgende Optionen stehen hier zur Verfügung:
Die beiden zweiten Fälle bedeuten einen hohen Umsatz der Mitarbeiter, was zu einem Verlust des Unternehmenswissens und zu einer kontinuierlichen Ausweitung der Zahlungen an die Mitarbeiter führt. Im zweiten Fall wählen Sie im Wesentlichen schlechte Entwickler aus, sodass die Kosten in Form von zunehmenden Zeitplänen steigen. Die Art und Weise, wie dies ablaufen wird, ist, dass auf 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 als Sie müssen neue Nachwuchsentwickler einstellen und ausbilden, die (vermutlich) nicht so gut sind wie Jim. So kalibrieren Sie Ihre Erwartungen neu.
Wenn Sie nur Junior-Entwickler haben, wo und wie sollen sie lernen, selbst wenn es um wettbewerbsfähige Erhöhungen geht? Sie hoffen im Grunde, dass einer von ihnen trotz seiner Arbeitsumgebung selbständig gute Praktiken lernt und letztendlich andere betreut (im Gegensatz dazu, dass er auf grünere Weiden geht). Es wäre viel sinnvoller, die Pumpe mit einigen guten Entwicklern zu "entlüften". Wahrscheinlicher ist, dass Sie eine Kultur erfahrener Anfänger entwickeln . Das Ergebnis ist, dass Sie Senior-Entwickler-Raten an Personen zahlen, die nur geringfügig besser sind als Junior-Entwickler und kulturell toxisch.
Ein Vorteil, vor allem, sehr guter Entwickler, dass ich überrascht sonst niemand erwähnt hat , ist sie leicht sein , kann Multiplikationsfaktor. Es kann durchaus vorkommen, dass sich ein Junior-Entwickler und ein Senior-Entwickler die gleiche Zeit nehmen, um einen Tisch zu erstellen. Ein guter Entwickler wird das jedoch nicht tun. Sie werden einen Tabellengenerator erstellen, der die Zeit für alle reduziert , um eine Tabelle zu erstellen. 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, selbst wenn die Benutzervon MapReduce sind absolut nicht in der Lage, selbst eine massiv verteilte Version ihres Algorithmus zu erstellen, was mit MapReduce jetzt problemlos möglich ist. Oft ist diese Dynamik weniger offensichtlich. Bessere Methoden für die Quellcodeverwaltung, das Testen und die Bereitstellung verbessern beispielsweise alle Beteiligten. Es kann jedoch schwieriger sein, die Zuordnung zu einer bestimmten Person zu finden.
Um ein bisschen über die andere Seite zu streiten, sind die Höheren vielleicht richtig. Möglicherweise sind erfahrenere Entwickler nicht erforderlich. In diesem Fall scheint die Entwicklung jedoch kein wesentlicher Bestandteil des Unternehmens zu sein. In diesem Fall würde ich Entwickler einfach komplett eliminieren und auf Anfrage Standard-Software verwenden oder Auftragnehmer einstellen. Es könnte sich lohnen, zu untersuchen, warum nicht nur Auftragnehmer, sondern ein internes Team hinzugezogen werden. Wenn Sie ohnehin eine Menge Abwanderung von Mitarbeitern haben, sollte es kein Problem sein, Fremdfirmen hochzufahren.
quelle
Dies ist keine Entweder-Oder-Situation.
Vor allem bei einem größeren Projekt haben Sie regelmäßig ein paar relativ erfahrene Mitarbeiter in Führungspositionen und einige weniger erfahrene Mitarbeiter in Führungspositionen. Auf diese Weise können die Senioren nicht nur direkt am Projekt mitarbeiten, indem sie Code schreiben und die schwierigeren Entscheidungen treffen, sondern sie können auch indirekt mithelfen, indem sie die Junioren betreuen.
Mit etwas Sorgfalt kann dies auch dazu beitragen, dass die leitenden Ingenieure nicht schnell ausbrennen, da sie ständig aufgefordert werden, Arbeiten auszuführen, die für sie keine Herausforderung oder kein Interesse darstellen. Zumindest meiner Erfahrung nach kann ein Sprint viel interessanter werden, wenn man einige begeisterte Nachwuchskräfte (oder sogar Praktikanten) betreut.
Fairerweise sollte ich hinzufügen, dass diese Art von Position wahrscheinlich nicht für alle leitenden Ingenieure geeignet ist. Es erfordert ein stark erhöhtes Augenmerk auf Architektur und Design, Kommunikation, Dokumentation und so weiter. Besonders früh erfordert es häufig auch viel Disziplin - für jemanden, der Karriere als Programmierer gemacht hat, ist es verlockend, einfach nur in den Code einzusteigen, anstatt einen Junior-Ingenieur zu unterrichten, wie man das macht. Es ist auch häufig verlockend, ein vollständiges Neuschreiben von Grund auf durchzuführen, wenn Code nicht so ist, wie Sie es persönlich bevorzugen - auch wenn er für den Job vollkommen ausreichend ist.
Wenn jedoch, kann man wirklich nicht das Management überzeugt mit einer Mischung aus Erfahrungsstufen zu gehen, gibt es im Grunde gar keine Frage , dass Sie haben , um weitere Erfahrung zu gehen. Wenn Sie ein Projekt ausschließlich dem Nachwuchs überlassen, stehen die Chancen gut, dass Sie nie ein brauchbares Produkt erhalten. Schlimmer noch, sie werden nicht bemerken, dass das, was sie tun, keinen wirklichen Fortschritt in Richtung eines brauchbaren Produkts bringt. Sie werden also in einer bestimmten Richtung weiterarbeiten, lange nachdem eine erfahrenere Person erkannt hätte, dass sie ein Produkt hergestellt hat Frühzeitig ein grundlegender Fehler, der es erforderlich macht, sich zu sichern, neu zu gruppieren, sich zu orientieren und eine neue Richtung einzuschlagen, um die Hoffnung zu haben, ein sinnvolles Ziel zu erreichen.
quelle
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, Aufgaben mit geringer Komplexität auszuführen, besteht darin, den Kunden wiederholt das Wort "Nein" zu sagen, zu dem keine Vertriebsabteilung bereit ist, von der ich jemals gehört habe.
Wenn Sie nur Junior-Entwickler haben, bedeutet dies, dass Sie nur die Aufgaben mit geringer Komplexität ausführen können und daher nur ein Produkt mit geringem Wert entwickeln und auf dem Markt härter darum kämpfen können, Ihre Produkte zu differenzieren. Wenn Sie differenzieren möchten, müssen Sie eine hochwertige Funktionalität erstellen, die sich zwangsläufig in hochkomplexen Aufgaben niederschlägt. Wenn es einfach wäre, wäre es schließlich nicht wertvoll. Das heißt, Sie brauchen Mitarbeiter, die diese hochkomplexen Aufgaben ausführen, und Sie brauchen leitende Entwickler.
Wenn Sie nur hochrangige Entwickler haben, verschwenden Sie ihre Fähigkeiten auf minderwertige Arbeit, haben Probleme, sie zu behalten, wenn Sie sie zu dieser Arbeit zwingen, und riskieren, dass sie in das Land der Architekturastronomie aufbrechen, um einfachere 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 hängt von Ihrer Geschäftsstrategie ab. Wenn Sie aktiv nach großen Mengen leicht verständlicher Cookie-Cutter-Arbeiten mit geringen Gewinnspannen suchen, werden Sie nicht viele hochkomplexe Aufgaben haben und wahrscheinlich hauptsächlich Junior-Entwickler einstellen. Wenn Sie aktiv versuchen, unterversorgte Nischen mit höheren Gewinnspannen zu differenzieren und anzuvisieren, haben Sie viele hochkomplexe Aufgaben und suchen meistens hochrangige Entwickler.
quelle
In meiner Antwort behaupte ich, dass erfahrene Programmierer nicht unbedingt schneller programmieren als junge Entwickler. Tatsächlich sind die schnellsten Programmierer im Durchschnitt Leute, die gerade die Universität verlassen haben.
Domain-Wissen ist ein Schlüssel zum Senior-Entwickler. Ein guter Senior-Entwickler sollte über fundierte Fachkenntnisse verfügen, über die Junior-Entwickler möglicherweise nicht verfügen. 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.
Das Programmieren ist relativ billig, es ist das Expertenwissen, das zählt.
quelle
Versuchen Sie nicht, "den Fall zu machen". Der Markt bestimmt den Preis für die Mitarbeiter. Wenn der Markt bereit ist, viermal mehr für Erfahrung zu zahlen, dann liegt es daran, dass die Unternehmen insgesamt festgestellt haben, dass es eine vierfache Produktivitätssteigerung gibt.
Jetzt könnte der Markt natürlich falsch liegen, vielleicht 3,5 oder 5x, aber es sei denn, Sie sind eine digitale Agentur, treten gegen den Markt an oder solche Nuancen sind unwichtig.
Ihr eigentliches Problem ist: Sind Sie in Interviews gut genug, um zwischen einem guten erfahrenen Entwickler und einem alten Entwickler zu unterscheiden, der es übertreibt?
Deine zweite Frage von PM vs. Entwicklerbudget. Ich würde sagen, dass ein Entwickler auf eine PM verzichten kann, aber eine PM kann nicht auf einen Entwickler verzichten. Lassen Sie Ihre Entwicklungsmaschine zuerst sortieren, und holen Sie sich dann eine PM, um den Administrator aus ihren Händen zu nehmen.
quelle
Sie werden für ein Viertel der Kosten eines wirklich guten Entwicklers niemanden in Ihrem eigenen Land finden. Vielleicht finden Sie jemanden für die Hälfte des Gehalts, 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, mit Menschen, die sich blindlings an die Vorgaben halten, und mit allen Arten von Problemen.
Sie brauchen einen guten Entwickler. Wenn Sie mehr 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 glücklich sein, 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 nicht mit Stackoverflow gelöst werden können. Und Sie werden Code haben, der stinkt und nicht mehr zu warten ist, da Junior-Entwickler nicht wissen, wie man wartbaren Code erstellt. Sie können es lernen, aber sie werden es nicht ohne einen guten Entwickler im Team tun.
quelle
Es gibt ein paar Hürden, die Ihr Unternehmen überwinden muss, bevor Sie entscheiden können, ob die Einstellung besserer Programmierer kostengünstig ist. 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.
Tut mir leid, aber ich habe das Gefühl, dass Ihr Unternehmen nicht weiß, was es mit einem guten Programmierer anfangen soll. Sie möchten ihn vielleicht davon überzeugen, zuerst bessere Manager einzustellen und diese internen Probleme zu lösen.
quelle