Comment j'ai amené Ruby à DomClick





Fin 2017, j'ai fermement décidé que je voulais passer à un poste de direction.



La programmation elle-même m'a beaucoup moins attiré que ce qui s'est passé à un niveau supérieur, à savoir la réflexion sur les processus métier, la planification de l'architecture des applications et l'organisation du travail.



Je me sentais moins comme un jardinier labourant une petite parcelle de terre jour après jour, regardant les pousses germer à travers le sol, comme un agriculteur qui doit récolter puis vendre des récoltes dans un champ géant de la taille d'un pays européen.



L'ampleur et l'efficacité m'ont inspiré.



Je voulais faire ce que j'aimais, mais c'était impossible jusqu'à ce que je devienne un leader.



Entre-temps, ma carrière dans mon emploi actuel a clairement atteint le plafond. Pendant deux ans, j'ai élevé plusieurs projets, je suis devenu développeur senior ... Plus loin ici il était possible de progresser uniquement en jouant au baby-foot.



Par conséquent, quand on m'a proposé un emploi à la Sberbank, j'étais heureux de partir. Plus précisément - dans DomClick.



DomClick



Lorsque j'ai franchi le seuil du nouveau bureau, je me suis retrouvé dans une position unique: il s'est avéré que je serais le seul développeur Ruby de l'entreprise.



Dans une équipe de trois cents employés, il n'y avait tout simplement pas de service physiquement approprié. Je n'avais même nulle part où me mettre. Lorsque cette question s'est posée, le directeur informatique de l'entreprise a réfléchi pendant exactement deux secondes et a pointé du doigt une table voisine, qui était vide pour une raison évidente. C'est tellement inspirant quand la direction peut voir l'écran de votre ordinateur portable avec une légère torsion de la tête (non).



J'étais nécessaire pour une tâche spécifique. La direction était en train de décider d'acheter une startup bancaire américaine pour compléter la gamme de produits DomClick. Les dépenses étaient prévues pour être importantes, il a donc fallu adapter et lancer le projet pour démontrer aux gens qui tireront cet argent de leurs poches.



La startup était en Ruby, donc j'étais nécessaire. C'était une chance. S'ils l'achetaient, il faudrait plus de rubistes. et avec un degré élevé de probabilité, je deviendrais leur patron. Une petite larve extraterrestre piégée dans un organisme géant DomClick. J'aimais y penser de cette façon, imaginant qu'à partir de ce moment ma prise de contrôle de cet univers commence.



Mais deux mois plus tard, dans le nouveau lieu, il s'est avéré que le violoniste n'était plus nécessaire. Les hauts ont regardé le projet sur lequel je travaillais et ont décidé d'attendre.



Les rubistes n'ont pas leur place ici



Je me suis retrouvé sans travail, un seul programmeur Ruby entouré de dizaines d'équipes bien coordonnées de javistes, pythonistes et développeurs frontend. Il n'était pas prévu de recruter d'autres rubistes.



Heureusement, ma direction a généralement aimé la façon dont je faisais le travail, il n'était donc pas question de licencier. Ils ne savaient pas non plus quoi faire de moi. «Allez-y, réfléchissez à la manière dont vous pouvez être utile à l'entreprise. Peut-être pouvez-vous essayer du code Go? " - le chef m'a dit. J'étais tellement inutile qu'à un moment donné, cela a cessé de me sembler une mauvaise idée. Pour imaginer le désespoir de ma situation, il faut comprendre ce qui se passait dans l'entreprise à l'époque et ce qu'est DomClick en général.



Si au cours des 5 dernières années vous avez acheté / vendu un bien immobilier, vous devriez connaître ce site avec un degré de probabilité élevé. En particulier, à cause de lui, NTV ne fait plus de feuilletons sur les agents immobiliers sanglants et nous n'entendons pas ces histoires effrayantes sur la façon dont quelqu'un a été kidnappé / torturé / tué lorsqu'il a décidé d'échanger la pièce kopeck de sa grand-mère au centre. DomClick a offert au marché un moyen pratique et sûr d'acheter / vendre un logement.



Le projet était encore jeune, mais déjà à ce moment-là tout le monde comprenait qu'il était présent à la veille d'un nix grandiose. Un gigantesque site Web est né avec des dizaines de services qui seront utilisés dans tout le pays et au-delà. Il faudra des millions de lignes de code, ce qui signifie que de nombreux programmeurs pourront nourrir leur famille pendant des années, acheter des bons pour les belles-mères dans un sanatorium et des sceaux pour les épouses.





Mais il fallait d'abord décider de ce que seraient rédigés ces services. Malheureusement pour moi, la discussion était close lorsque je suis arrivé - la coupe était partagée par les développeurs en Java et Python. Les javistes étaient principalement engagés dans les services internes et chargés, les intégrations avec la banque, et les pythonistes avaient davantage de tâches orientées client et de nouveaux lancements. Chacun d'eux se préparait à acheter un appartement et un bloc d'actions Tesla dans les 5 prochaines années, à aller à Ba̒li et à trouver une fille instamodèle.



Les coincer entre eux avec une autre technologie n'était pas réaliste.



Habituellement, la naissance d'un nouveau projet s'est déroulée de cette manière: l'entreprise avait une idée, ils sont allés voir le directeur informatique, et il sélectionnait déjà une équipe de programmeurs vacants pour le projet, ou en recrutait une nouvelle.



Que pourrait faire un Rubyiste dans une telle situation? Puis-je lever la main et dire: "Mais Ruby a déjà des gemmes prêtes pour tout cela"? Ce serait un cas complètement perdu pour trois raisons:



  1. Tout le monde pensait que Ruby était tout simplement inutile. Python et Java suffisent aux yeux.
  2. Outre le fait que Ruby n'est pas nécessaire, c'est aussi juste un mauvais langage de programmation. Absolument pas de frottement.
  3. Troisième raison, peut-être la plus grave: je suis le seul programmeur Ruby de l'entreprise, ce qui veut dire que je ne vais pas travailler sur quoi que ce soit de plus ou moins sérieux.


En général, d'une manière ou d'une autre, mais il y avait un consensus dans l'entreprise: il n'y a pas de place pour les rubisistes. Mon apparition était un accident, confirmant la règle - on m'a fortement conseillé de commencer à coder sur autre chose.



Mais une personne qui a appris la puissance des rails ne peut pas être facilement arrêtée.







Rubis



Malgré le statu quo de "Ruby est mauvais", tout le monde connaissait sa force - la vitesse de développement. J'ai décidé d'en profiter et j'ai proposé aux patrons de faire des prototypes des services dont le lancement était prévu. Un peu comme "laissez-moi écrire rapidement un échantillon de votre startup et il deviendra alors clair si cela vaut la peine de le réécrire dans un langage" normal ", ou mieux immédiatement pour la ferraille."



L'idée a été appréciée et bénie. C'était ma deuxième chance. L'oiseau bleu de la chance flottait pratiquement entre mes mains quand j'ai eu l'impression de perdre la course. Après un petit MVP, l'entreprise m'a lancé la fonctionnalité que je voulais voir dans la version d'essai de CRM, et c'était une quantité de travail complètement écrasante, malgré la vitesse du lancement initial. Par mes seules forces, même chargées de ne pas vouloir devenir pythonistes, il était impossible de faire la sonde requise dans un avenir prévisible.



Je m'assis devant mon ordinateur portable et observai d'un air sombre le fait que j'arrivais de plus en plus tard. Outre le dernier espoir de rester rubisiste, les ambitions de carrière avaient également disparu: un Pasta Monster sait combien de temps il faudra pour acquérir dans une nouvelle langue la compétence nécessaire pour crier à nouveau son nom lors de l'élection d'un nouveau Kraken.



C'est sans compter le fait qu'en changeant de langage, par exemple en Python, j'obtiens automatiquement 150 rivaux mérités de plus pour la promotion.



C'était une impasse.



La tâche m'a été retirée et est revenue à des pensées anxieuses sur mon avenir. J'ai regardé les batailles de Versus, écouté de la musique déprimante et bu du Dr Pepper. Apparemment, en raison de l'abondance de sucre, la solution est apparue assez rapidement.



J'ai appris une leçon du dernier fiasco: vous ne pouvez pas mordre un morceau que vous ne pouvez pas mâcher. Les gens voient comment vous avez été ridiculisé et se souviennent. Une ou deux autres tentatives de ce genre, et elles mettront fin à moi ici, décidant que je suis un échec.



Nous avons maintenant besoin d'une tâche dont je saurai avec certitude qu'aucun raté ne se produira. Assez grand pour être impressionnant, mais assez petit pour être à ma portée. Mais où puis-je en obtenir un et comment puis-je me le faire attribuer?



Le moyen le plus simple de trouver une telle tâche était dans le cadre d'un projet déjà développé. Le plan était de se faire passer pour un développeur Java.



Fauteur de troubles



Les javistes allaient bien. Au début, il m'a semblé que je suis entré dans une équipe de vrais vrais codeurs, travaillant avec des modèles et des interfaces clairs. Jamais auparavant je ne m'étais senti autant comme un programmeur que pendant ces quelques semaines.



En raison de ma connaissance superficielle de presque tous les langages Web populaires, je me suis rapidement adapté et j'ai commencé à être utile. Les travaux étaient en cours. Le projet a même été lancé dans plusieurs régions pour commencer à détecter les bogues. Le problème était que le mouvement était très tranquille, malgré le fait que nous étions cinq. J'ai fait une réduction sur le fait qu'il devrait en être ainsi, car il s'agit d'une entreprise, vous devez comprendre, mais il est rapidement devenu clair que tout est beaucoup plus grave.



L'équipe était en conflit avec le propriétaire du produit. Ils juraient, presque sans choisir d'expressions.



La première ligne de code a été écrite il y a un an et demi, mais le projet n'a toujours pas vraiment fonctionné. Une bonne idée commerciale s'est heurtée à des problèmes inexpliqués pendant la phase de mise en œuvre. La principale plainte de PO, agissant en tant qu'intermédiaire entre l'entreprise et les programmeurs, était l'impossibilité de faire des changements rapides. Lorsqu'on lui a demandé des révisions, il a entendu: «Mois, mois, mois». Et de nombreuses modifications ont été nécessaires. Le système était si peu pratique qu'un opérateur pouvait traiter au maximum une ou deux demandes par jour. La fonctionnalité semblait fonctionner, mais il y avait tellement de bugs qu'en la lançant dans tout le pays, on pouvait simplement se noyer dans les plaintes. Certaines opérations ont été effectuées uniquement sur un appel au programmeur, qui a modifié manuellement les données dans la base de données ou exprimé les informations nécessaires. L'interface utilisateur était tordue. Il n'était question d'aucune automatisation.



Et au milieu de tous ces problèmes, les programmeurs ont réussi à inventer des vélos comme un analogue auto-écrit de tables ou un service de liste de diffusion. Les moindres améliorations ont conduit au fait que quelque chose quelque part doit tomber. Toutes les échéances imaginables ont longtemps été gaspillées.



Et savez-vous comment les programmeurs se sont expliqués ce qui se passait? "PO est stupide et toutes ses suggestions ne concernent rien."



Il me semblait que le point n'était pas dans PO, mais dans le code. Lorsque la prochaine tâche urgente est arrivée, j'ai réalisé qu'il était temps d'arracher les masques. Il fallait faire un système de questionnaires, selon les résultats du passage desquels un document fini sera formé. Les programmeurs de ma nouvelle équipe, après consultation, ont fait savoir au PO qu'ils feraient le nécessaire en trois mois avec les efforts de deux développeurs.



Trois mois et deux programmeurs!



Le canapé sous le PO fumait. Il vire au vert, mais, appris par une expérience amère, se tait, sachant qu'il est inutile de demander, de plaider ou de se plaindre. La perspective d'un licenciement se profile à l'horizon. Mais les meubles ne fumaient pas seulement sous lui. Je savais pertinemment que la fonctionnalité que je viens d'annoncer serait disponible dans Ruby d'un simple clic.



«J'écrirai ceci dans une semaine», j'ai fait un geste. - Et j'ai encore le temps de revoir toutes les batailles avec Oksimiron.



La tâche était exactement ce que j'attendais pour entrer dans ce jeu de trônes.



PO n'y croyait pas. L'équipe aussi. Dans leur Univers, l'unité de temps minimum était d'un mois, mais les délais étaient vraiment brûlants, donc après un court règlement des formalités, une semaine m'a été donnée.



Comme vous le savez probablement, Ruby est divin pour le développement de la vitesse. Je me tordrais le cœur si je disais que je faisais de gros efforts ou que j'étais inquiet de ma troisième chance. La gemme qui a résolu mon problème a été perfectionnée en Ruby et a fonctionné comme une horloge.



Après une semaine, j'ai montré le résultat.



- Pourquoi ne faisons-nous pas tout en Ruby alors? Le propriétaire du produit a demandé. Pour être honnête, je ne connais toujours pas la réponse.



Nous avons eu une conversation franche ce jour-là. Ostap a souffert, et il m'a révélé le véritable état des choses. Le projet s'est transformé en une construction infernale à long terme. Les patrons immédiats de PO avaient déjà directement fait allusion à son licenciement. Il a arrêté de dormir. J'ai sympathisé avec lui et lui ai demandé de décrire toute la logique que l'application devait exécuter. Au moment où il a terminé, il est devenu clair pour moi qu'avec deux camarades, je réécrirais tout le projet en trois mois.



Les programmeurs du projet n'étaient pas de mauvaises personnes ou des saboteurs. Ils ont vraiment essayé. C'est juste que leur outil n'était pas adapté à la tâche. Ils ont creusé une fosse de fondation avec des cuillères. Mais j'avais un bulldozer.



Quatrième chance



Quand PO et moi sommes arrivés au CIO, il semblait avoir déjà commencé à comprendre que ça n'avait pas fonctionné de me baptiser à nouveau, et il attendait curieusement ce que j'avais imaginé cette fois.



J'ai suggéré de réécrire le projet. En trois mois avec deux assistants, je vais complètement répéter la fonctionnalité que 5 programmeurs ont réalisée en un an et demi, et je jette également des puces par-dessus. À son tour, RO a confirmé que cela était nécessaire: le code du projet a commencé à vivre sa propre vie, ne réagit pratiquement pas aux tentatives de changement et, semble-t-il, commencera bientôt à exiger des sacrifices humains sous forme de vierges.



Il a été décidé que la décision finale sur cette question serait prise lors du prochain comité d'architecture - une réunion spéciale où les administrateurs se réunissent avec les architectes et approuvent une sorte de processus.



Comme vous pouvez le deviner, le fait que vous lisiez ces lignes suggère que j'ai été autorisé à réécrire le projet. Avec une majorité minimale de voix, l'Archcommission a donné le feu vert à cette aventure. Entre autres, j'ai pu recruter deux rubisistes comme assistants.



Je suis finalement devenu un leader.





Si je comprends bien, ce n'est pas le dernier rôle dans l'approbation de mon initiative qui a été joué par le fait que la direction a commencé à se rendre compte que certaines des équipes de programmation de l'entreprise étaient détendues et trop confiantes pour l'avenir.



Ils avaient besoin d'un fouet, d'une menace, pour les motiver à mieux travailler. Un mot gentil et une arme à feu peuvent faire bien plus qu'un simple mot gentil, comme disait Al Capone.



Et j'ai mis ce pistolet dans leur main.



Donnant le feu vert pour réécrire le projet, les patrons semblaient dire aux programmeurs de l'entreprise: "Si vous vous trompez, nous appellerons ce type et ils vous réécriront."



Mais d'abord, je devais ne pas échouer la tâche, qui est devenue ma quatrième chance. Quand je suis revenu de la réunion, c'était une entreprise complètement différente. Maintenant, ils me détestaient. Mon conflit avec l'écosystème logiciel DomClick, qui a commencé dès le début, a atteint son paroxysme. Ils ne m'ont pas parlé, ne se sont pas assis à la même table dans la salle à manger. Dès que je suis entré dans la salle, toutes les personnes présentes ont commencé à m'examiner. Ils ont chuchoté dans mon dos. Je me suis retrouvé dans un isolement complet.



Pour être honnête, une telle réaction m'a donné de la force. La vie est remplie de sens lorsque vous vous sentez comme la main coupante du Seigneur. J'ai décidé que je serais un très bon pistolet.



Littéralement ce soir-là, j'ai appelé un vieil ami qui codait en Ruby, et j'étais sûr de son professionnalisme. Il a accepté de rejoindre sans plus tarder. Quelques semaines plus tard, le deuxième développeur est venu et s'est avéré être un gars vraiment dur qui a grandement renforcé notre petit détachement.



L'organisme de programmation de l'entreprise nous a rejetés. Ils n'ont pas communiqué avec nous. Tout le monde attendait notre échec. Et paradoxalement, cela nous a rapprochés et nous a fait grandir.



Une caractéristique de Ruby est sa vitesse de développement élevée. Pour une raison quelconque, on pense que cela se fait au détriment de la qualité. Ils disent qu'un projet parfaitement exécuté en Ruby sera pire qu'un projet idéal dans n'importe quelle autre langue.



Mais où avez-vous vu les designs idéaux?



Les développeurs n'ont presque toujours pas assez de temps pour écrire du code de haute qualité, adhèrent strictement aux modèles et font tout comme dans les manuels. En conséquence, ce code le plus idéal, que tout le monde menace tant, n'apparaît jamais.



Mais Ruby, en raison de sa rapidité, vous permet d'obtenir le même temps supplémentaire que celui que vous pouvez consacrer à la réflexion sur l'architecture et à la recherche de meilleures abstractions. Le code qui en résulte, paradoxalement, s'avère également de la plus haute qualité.



Lorsque nous avons déployé une nouvelle version du projet trois mois plus tard, mis à part des bugs mineurs, cela fonctionnait parfaitement. Les utilisateurs finaux du projet - les avocats de Domclick - étaient au départ mécontents, car les interfaces utilisateur avaient changé, mais après quelques semaines, leurs voix se sont éteintes. Le projet a fonctionné comme une horloge. Il a été déployé presque immédiatement dans toute la Russie.



RO était content. L'ancienne équipe de projet a été dissoute.



J'ai été autorisé à recruter deux autres programmeurs.







Mon petit peloton de barrage s'est transformé en une compagnie à part entière. Ils nous détestaient, mais ils ne pouvaient rien faire.



Mes gars ont senti la particularité de leur position. Ils se sont précipités et ils ont réussi. Il y avait une sensation de fluidité - un état de concentration maximale et de préparation à l'action. Nous pourrions réécrire rapidement et efficacement tout le monde ici.



Cela a stimulé toute l'entreprise.



En plus de la peur d'être écrasé, il y avait une saine sensation de concurrence. Si ces nouveaux arrivants peuvent travailler si rapidement et efficacement, alors pourquoi sommes-nous pires? Nous défendrons notre propre entreprise! Rejetons ces parvenus dans le monde souterrain d'où ils sont venus!



Une partie de l'équipe a soulevé le gant lancé par les rubistes, ce qui a profité à toute l'entreprise. En fait, l'équipe s'est divisée en frères et en lachers.



Les frères sautent les schémas, sont toujours prêts à aider, réfléchissent aux avantages de l'entreprise et au succès de leur projet. Les Lachers jouent pour le temps, n'admettent pas les erreurs, ne veulent pas réapprendre et négocier. Vous le faites clairement - frère. Vous êtes stupide, vous mettez un rayon dans les roues, vous faites du mal, vous voulez gagner beaucoup, mais faire peu est un lacher.



Nous avons fait un excellent travail et avons placé la bannière Ruby sur le DomClick conquis lorsque le boss final de cette histoire est sorti sur moi.



Lors d'une des réunions dans les hauts bureaux, après une longue histoire sur un nouveau projet, un homme très intelligent a demandé à voix basse: «Montre-moi ça lundi».



Et il n'y avait rien à montrer. C'était vendredi soir. Quand j'ai été appelé dans la salle de réunion, des visages tendus étaient assis autour et se tenaient la tête avec leurs mains, pensant quoi faire. La période minimale pendant laquelle les autres étaient prêts à terminer le projet était «d'au moins deux semaines», mais elle était de trois jours. J'ai été d'accord.



Toute l'entreprise attendait comment cela finirait. Employés ordinaires avec curiosité, patrons avec un sentiment de catastrophe imminente. Et quand le soleil s'est levé lundi, personne n'a eu à écrire une lettre de démission, à se tirer une balle ou à fuir à travers la frontière de l'État.



Tout a fonctionné en production. Les boutons ont été pressés, les pages ont été rafraîchies et tout le monde était content. Et quelque part à Moscou, trois programmeurs mal rasés dormaient comme la mort.



Quand j'ai pris le téléphone le soir, on m'a dit les trois mots principaux de ma vie: «Embaucher plus de programmeurs».



À ce jour, le département Rubyists compte environ 20 personnes, 6+ projets de complexité variable, et nous continuons à nous développer.



Et maintenant la morale de l'histoire.



Une fois, lors d'une des réunions trimestrielles, une question a été posée à notre chef permanent: "Comment puis-je devenir un chef?", À laquelle la citation a été donnée: "Ils ne donnent pas le pouvoir - ils prennent le pouvoir." Soyez efficace, aspirez au succès et si vous êtes vraiment prêt à vous améliorer chaque jour, vous réussirez.



En général, la vie est trop courte pour écrire du code long. Utilisez des gemmes, amis!



PS Voici également une vidéo avec nos performances, à partir de laquelle vous pouvez comprendre ce qui nous permet d'être rapides et efficaces:








All Articles