Environnement irréprochable: personne ne devrait écrire de code de qualité

Au RIT ++, Nikita Sobolevn ( sobolevn ) a prononcĂ©, comme il l'appelait lui-mĂȘme, un sermon sur la qualitĂ© du code et des processus dans l'entreprise. ParticuliĂšrement sensible, versez-vous du thĂ© Ă  la camomille, mais nous ne proposons pas de vous Ă©loigner des Ă©crans. Vous pouvez ĂȘtre en dĂ©saccord avec l'une des thĂšses, insister sur le fait que parler d'Ă©missions de tĂ©lĂ©vision est la clĂ© d'une atmosphĂšre saine dans l'Ă©quipe et affirmer que vous n'avez pas besoin d'un cadre strict de linter et de CI pour Ă©crire un bon code. Mais si jamais vous blĂąmiez les autres d'avoir Ă©chouĂ© au travail, vous devriez lire ou regarder l'histoire de Nikita.

Avez-vous déjà travaillé dans un mauvais travail?

J'ai travaillĂ© longtemps. Ma compagnie Ă©tait terrible. Tout Ă©tait trĂšs mauvais, pour rien, tout sort de l'ordinaire. Nous avions des processus dĂ©goĂ»tants, dĂ©testions les clients et les dĂ©veloppeurs incompĂ©tents. On ne pouvait rien y faire. Quand tout va si mal, vous ne savez pas quoi prendre, par oĂč commencer. Vous vous sentez comme un rouage misĂ©rable qui ne peut rien influencer.



Quand je dis que tout va mal, je veux dire que nous avons eu:

  • mauvais code - personne ne pensait Ă  la qualitĂ© du code, personne ne pouvait mĂȘme formuler quelle Ă©tait la qualitĂ© du code.
  • mauvais processus.
  • nous ne pouvions pas communiquer normalement,
  • nous n'avons pas fait ce que le client voulait.

Oui, c'était un développement externalisé, mais cela ne l'a pas rendu mauvais. Les gens l'ont fait comme ça.

"Les gens font un mauvais travail, ce sont les gens qui sont à blùmer pour le fait que les processus sont mauvais, le code est mauvais et les clients sont mauvais" - cette pensée m'a tourmenté pendant de nombreuses années. Les gens sont à blùmer pour le fait que je n'aime pas mon travail.



J'ai attribué tous les péchés possibles aux gens et j'ai pensé qu'ils étaient la principale source de problÚmes. J'espérais qu'un jour ils changeraient, ou que d'autres apparaßtront, et tout ira bien.

Sérieusement, j'ai pensé au fait que d'autres entreprises emploient des personnes fondamentalement différentes qui diffÚrent par leurs qualités internes et leur professionnalisme, et que ces autres personnes sont issues d'un test différent.

Mais Ă  un moment donnĂ©, j'ai commencĂ© Ă  deviner que peut-ĂȘtre les gens ne sont pas Ă  blĂąmer - peut-ĂȘtre une erreur Ă  un niveau diffĂ©rent, quelque part quelque chose s'est mal passĂ© tant plus tĂŽt. Et puis le chemin de la correction apparaĂźt. Ce n'est qu'alors que vous pourrez vous enregistrer en tant que dĂ©veloppeur.

J'ai réalisé que nous avons besoin d'une révolution, que tout doit changer: ma façon de travailler, ce que je ressens, qu'aller travailler ne devient pas un test pour moi. Je voulais travailler dans un bon endroit.

Il n'y avait qu'un seul problÚme - c'était mon entreprise .



Je suis la personne qui a commencé cette révolution.

J'ai rĂ©alisĂ© que vous devez tout changer pour profiter Ă  nouveau de votre entreprise prĂ©fĂ©rĂ©e. J'adore la programmation, je suis prĂȘte Ă  le faire 12 heures par jour et je l'appelle mon repos et mon travail.

Par conséquent, j'ai perçu tous les échecs trÚs douloureusement. Non seulement ils étaient liés à mon entreprise préférée, ils étaient liés à mes finances, à mon sens de soi et à mes relations avec les autres et étaient fortement reflétés dans toute ma vie. Quand quelque chose ne marchait pas pour moi, je ne pouvais pas me reposer, je ne pouvais penser à rien d'autre.

J'ai décidé que la chose la plus importante que je puisse faire maintenant pour améliorer ma vie est de bien faire mon travail. Pour cela, je devais repenser tout le chaos que nous avions et y mettre de l'ordre.



Mais quand vous regardez dans le chaos, vous ne voyez pas de modĂšles - rien qui n'indiquerait comment cela devrait ĂȘtre.

Créer de l'ordre à partir du chaos est un acte de création difficile.

Vous devez commencer dÚs le début pour comprendre quand tout s'est envolé dans le chaos. Vous devez déterminer une nouvelle commande et vous expliquer quoi faire. Ce sont de beaux mots: «Faisons tout bien!». Mais vous venez travailler et vous ne comprenez pas vraiment quoi entreprendre pour tout changer, il n'y a pas d'idées.

L'éducation que vous avez reçue et les livres que vous lisez n'aident pas, car tout ce que vous avez fait avant que vous avez appris de ces livres et de cette éducation.

ÉnoncĂ© du problĂšme


Alors j'ai pensĂ© - quel est le plus gros problĂšme? OĂč est le point le plus douloureux qui ne permet pas de vivre et de travailler? J'ai rĂ©alisĂ© qu'il s'agit d'un Ă©noncĂ© du problĂšme . Pour moi, dĂ©finir une tĂąche a toujours Ă©tĂ© assez facultatif.

Je pense que beaucoup d'entre vous ont vu la tĂąche d'une seule rubrique "Corriger le bug sur la prod." Nous en avions beaucoup, je les ai Ă©crits sur une seule ligne, puis les gens ont fait quelque chose de mal et ont essayĂ© de le rĂ©parer. J'ai pensĂ©: «Pourquoi ne pensent-ils pas de leur propre tĂȘte? Que fais-tu du tout? Vous devez corriger un bug simple et ne pas faire toutes ces bĂȘtises. "

Ensuite, je ne me suis pas rendu compte que j'avais vraiment mal réglé les tùches. Mais à un moment donné, j'ai toujours réalisé que je devais le faire d'une maniÚre complÚtement différente, et j'ai développé plusieurs principes.



Les tĂąches doivent ĂȘtre courtes . Pas en termes de description de la façon de «corriger un bogue sur la prod», mais de nature courte. De petites et courtes tĂąches sont pratiques Ă  rĂ©aliser. Ils sont comprĂ©hensibles par tous: un dĂ©butant, un dĂ©veloppeur moyen et expĂ©rimentĂ©. Tout le monde peut comprendre une telle tĂąche et le faire, par exemple, en une demi-journĂ©e de travail. Vous pouvez commencer par cela.

Les tĂąches doivent ĂȘtre ordonnĂ©es . Quand ils dĂ©finissent des tĂąches, ils ne pensent souvent pas dans quel ordre ils doivent ĂȘtre faits. Mais les tĂąches peuvent se bloquer, se parallĂ©liser ou ajouter de la complexitĂ© Ă  d'autres tĂąches si elles sont effectuĂ©es Ă  l'avance, etc.

TrÚs peu est dit sur l'ordre des tùches: elles sont amenées à Jira ou à Trello, puis elles sont emmenées de là. Mais peu pensent, et dans quel ordre, pourquoi et pourquoi l'ordre est juste ça.

Toutes les tĂąches doivent ĂȘtre individuelles . Qu'est-ce que cela signifie? Les tĂąches sont des entitĂ©s qui existent dans un projet et appartiennent toujours Ă  quelqu'un. Parfois, dans la description du problĂšme, vous pouvez trouver: «Sergey, Masha, veuillez corriger cela. Vous savez comment le faire. " Vous ne pouvez pas faire cela, vous devez donner tout le contexte pour que cette tĂąche devienne individuelle en elle-mĂȘme, afin que toute personne qui la lit puisse l'accomplir. De sorte qu'il n'y a pas de connaissances dispersĂ©es dispersĂ©es sur le projet, et il n'y a pas de significations cachĂ©es dans le cadre de cette tĂąche.

Lorsque les tùches sont devenues individuelles, courtes et ordonnées, les gens ont commencé à les faire comme je le souhaitais.

En changeant simplement le mode de communication, je me suis assurĂ© que les personnes mĂȘmes qui avaient fait ce non-sens commençaient Ă  faire ce que je voulais - n'est-ce pas magique? N'est-ce pas la preuve que beaucoup de choses sont faciles Ă  changer. Et j'ai commencĂ© Ă  approfondir cette question.

Nous avons souvent échoué le client, n'avons pas fait ce qui lui serait bénéfique. Je pensais que si les développeurs commençaient à comprendre nos tùches et à les faire comme ils le devraient, peuvent-ils comprendre ce que le client veut vraiment et faire comme le veut le client?

J'ai essayé de combiner cela en une sorte de figure à deux visages qui, d'une part, pense comme un développeur, d'autre part - comme un client.



Ce n'est pas une nouvelle tĂąche. En gĂ©nĂ©ral, cette approche est appelĂ©e conception pilotĂ©e par domaine et a Ă©tĂ© appliquĂ©e avec succĂšs pendant de nombreuses annĂ©es. J'ai dĂ©cidĂ© de prendre le meilleur - un moyen de communication, des outils, des technologies et d'essayer de faire comprendre aux dĂ©veloppeurs ce qui doit ĂȘtre fait pour satisfaire les dĂ©sirs du client.

La tùche a été trÚs difficile et je travaille toujours sur sa solution. Mais j'ai développé une formule simple pour moi.

Exigences . Tout commence par eux, le client exprime sa volonté à nous, développeurs, sous forme d'exigences. Le client dit conditionnellement: "J'exige que la page de connexion fonctionne." Leur prise de conscience commence, gribouillant sous forme de tableaux, de listes, de graphiques, etc. Les exigences restent avec vous comme la partie la plus importante de votre projet. C'est ce que vous faites au plus haut niveau.

Mais ces exigences ne sont pas exploitables pour le développeur, elles sont trop élevées et brutes. Pour commencer, le programmeur a besoin de documentation.

La documentation et les exigences sont des frÚres jumeaux, c'est une double unité. Exigences - c'est ce que vous devez faire et la documentation - comment le faire.

Lorsque j'ai rĂ©alisĂ© qu'en principe, la documentation peut ĂȘtre gĂ©nĂ©rĂ©e Ă  partir des exigences, cela est devenu une partie importante de notre processus opĂ©rationnel. Nous avons appris Ă  enregistrer les exigences dans un format spĂ©cial et Ă  gĂ©nĂ©rer de la documentation.

Tests . La prochaine étape logique consiste à vérifier que cela fonctionne. Nous avons commencé à tester nos exigences pour nous assurer que nous faisons vraiment ce qui est nécessaire.

La chose la plus intéressante est que je n'ai rien inventé - je n'ai pas écrit une seule ligne de code pour que cela fonctionne. Je viens de prendre les technologies existantes et de recevoir: des exigences, ce sont de la documentation, ce sont des tests.

La prochaine étape logique consistait à extraire le code de l'ensemble, car le code est ce dans quoi nous sommes directement impliqués.

Code - pour le bien de laquelle tout est rĂ©ellement dĂ©marrĂ©. Pour que le client et le dĂ©veloppeur se connectent, il semblerait que vous devez entrer dans l'un d'eux dans la tĂȘte et vous assurer qu'ils se comprennent. Mais pour entrer dans la tĂȘte, vous pouvez prendre les mĂȘmes outils et les connecter pour que le dĂ©veloppeur commence Ă  comprendre ce qui se passe. Ici, vous pouvez lire comment je le fais dans la pratique.

DĂšs que nous avons combinĂ© (le Code en est un!) Les dĂ©veloppeurs et le client Ă  l'aide d'une imbrication si ingĂ©nieuse de diffĂ©rentes entitĂ©s, nous avons atteint un objectif trĂšs important: nos dĂ©veloppeurs ont finalement commencĂ© Ă  faire ce dont l'entreprise avait besoin . Ils ont arrĂȘtĂ© d'introduire quelque chose comme ça, parce qu'ils ont vu les exigences et les ont comprises, ont compris ce qui devait ĂȘtre fait.

Pour nous assurer que nous exĂ©cutons, nous avons des tests qui sont Ă©crits sous forme d'exigences, et ces exigences sont suffisamment claires pour ĂȘtre implĂ©mentĂ©es dans un langage comprĂ©hensible dans le code, et Ă©crire du bon code en fonction de ces exigences.

La communication


J'ai déjà mentionné à plusieurs reprises la «communication». J'adore parler avec mes amis et ma famille, mais pas au travail. Au travail, je dois communiquer avec les gens - je ne les ai pas choisis sur cette base. TrÚs souvent, la communication au travail n'aide pas .

Nous communiquons tous avec des collÚgues sur des sujets qui ne fonctionnent pas (discuter des émissions de télévision, etc.), parce que nous sommes des gens. Heureusement, cette faille est réparable. Afin de comprendre à quel point la communication est vraiment désastreuse pour nous, vous pouvez consulter divers exemples.

Tout d'abord, les gens se distraient et se déchirent d'un état de flux. L'homme vient d'arriver et dit quelque chose - que dois-je faire avec ça maintenant? Pourquoi m'a-t-il dit qu'il voulait transmettre cela?

Ou des rassemblements. Je les dĂ©teste, je me sens toujours comme un idiot quand je m'assois en rĂ©union. Tout le monde semble comprendre quelque chose, ils ont des visages intelligents, et j'en manque un et je pense quand cela se terminera. Je veux partir parce que tout ce dont nous discutons peut ĂȘtre discutĂ© beaucoup plus rapidement.

Les rallyes volent énormément de temps et ne servent à rien.

Il y a plusieurs autres problĂšmes importants, par exemple, les gens commencent Ă  jurer lors de ces rassemblements. Imaginez que vous Ă©tiez placĂ© dans une petite piĂšce pleine de gens que vous ne voulez pas vraiment voir. Vous voulez partir, et ces gens vous font prendre des dĂ©cisions sĂ©rieuses. Tout naturellement, les abus commencent - d'abord l'agression passive, puis les insultes Ă©videntes. Malheureusement, rien ne peut ĂȘtre fait avec cela, car les gens sont des ĂȘtres en conflit. Peu importe comment vous essayez de modĂ©rer la situation, peu importe comment vous choisissez de bonnes personnes qui ne jurent pas - les gens jurent, et c'est normal .

Il y a un autre problÚme dans notre entreprise - les gens disparaissent . Votre front-end ou devops peut facilement cesser de répondre un jour. En particulier, les personnes qui travaillent à distance peuvent simplement éteindre le téléphone et mettre fin à la conversation unilatéralement.

Ces problĂšmes et certains autres semblent insolubles. Vous ne pouvez pas apprendre Ă  tout le monde Ă  ĂȘtre bon, non conflictuel, responsable - c'est tout simplement impossible.

Mais vous pouvez vivre avec. En étant réaliste, vous pouvez comprendre que la vie est comme ça: les gens vont disparaßtre, maudire, ne pas vouloir communiquer avec vous - c'est normal. J'ai résolu ce problÚme comme suit - communication structurée.



Pour structurer la communication, il suffit de prendre deux étapes:

  • Allez dans Telegram maintenant et supprimez-le. Une fois que vous aurez supprimĂ© toutes vos pages sur les rĂ©seaux sociaux, les gens ne pourront plus vous Ă©crire.
  • AprĂšs cela, dĂ©marrez un canal et dites que vous ne pouvez communiquer que de cette façon.

Lorsque vous ĂȘtes en mesure de dicter votre volontĂ© Ă  d'autres personnes, vous leur apprenez Ă  communiquer. Vous montrez que la communication doit ĂȘtre structurĂ©e et utile pour tous les participants .

Nous avons choisi la communication via GitLab. Si vous avez une question, posez-la dans GitLab. Si vous voulez poser une question Ă©trange, posez-la ici. Si vous comprenez qu'il n'y a aucun endroit oĂč vous pouvez poser une telle question, il n'est peut-ĂȘtre pas nĂ©cessaire de la poser.

Nous ne communiquons que sur des sujets de travail . Si quelqu'un veut discuter du Game of Thrones - dĂ©solĂ©, nous travaillons et discutons du Game of Thrones avec vos amis. Si vous souhaitez discuter d'une nouvelle technologie, crĂ©er un ticket, discutons-en: cela bĂ©nĂ©ficiera peut-ĂȘtre au projet. Mais "Game of Thrones" n'apportera certainement pas d'avantages au projet.

Une communication structurĂ©e rend diffĂ©rentes personnes identiques. GitLab a mĂȘme des avatars Ă  peu prĂšs les mĂȘmes - l'un a la lettre K, l'autre C, et je ne sais pas qui sont ces gens. Peu m'importe ce qu'ils sont, l'essentiel est qu'ils communiquent au sein de la structure.

AprÚs avoir structuré la communication, établi un travail avec le client, appris à écrire des tickets compréhensibles, il est temps de passer au code.

Code


Et ici, un nouveau problĂšme attend: les gens ne savent pas Ă©crire du code, et c'est normal . J'avais l'habitude de penser que d'autres Ă©crivaient du mauvais code, et je suis bon. Mais j'ai rĂ©alisĂ© que j'Ă©crivais moi-mĂȘme du mauvais code. Et aprĂšs un certain temps, j'ai rĂ©alisĂ© que tout le monde Ă©crivait du mauvais code , et c'est trĂšs bien.

Les gens ne sont pas faits pour écrire du code. La programmation est un environnement agressif auquel une personne n'est pas prédisposée. Le code a beaucoup de complexités: l'architecture et une énorme quantité d'informations. Dans les systÚmes distribués, c'est terrible en général. Il est difficile pour une personne de faire face à la circulation de l'information. Et c'est normal.

Mais si c'est le cas, vous pouvez faire quelque chose avec cela et apprendre Ă  travailler dans ces conditions.



Pour travailler avec cela, vous avez besoin de rigueur - CI et des tests qui seront aussi stricts que possible sur ce que vous faites. Ce doit ĂȘtre le Jugement dernier - un outil qui rĂ©pond Ă  la question, bon ou mauvais. Ce n'est qu'en le regardant que l'Ɠil qui voit tout de CI dira si votre travail ira au maĂźtre ou restera quelque part sur scĂšne.

Un tel IC, bien sĂ»r, devrait ĂȘtre inĂ©vitable. DĂšs que quelqu'un obtient le droit exclusif de s'engager Ă  maĂźtriser, toutes les tentatives de crĂ©ation de processus s'effondrent, car cette personne commence Ă  faire toutes sortes de bĂȘtises.

Le CI inévitable et rigoureux fournit des fonctionnalités plus intéressantes. C'est une opportunité à développer, car maintenant il y a une barre de base à partir de laquelle vous pouvez construire: chaque morceau de code suivant est meilleur que le précédent. Chaque morceau de code suivant ajoute de la valeur au projet et améliore le CI. Chaque morceau de code suivant est une étape vers le développement.

Une fois la fondation prĂȘte, vous pouvez continuer.

Mais les gens feront toujours des erreurs, car aucun CI, mĂȘme configurĂ© de la maniĂšre la plus rigoureuse, ne peut dĂ©tecter toutes les erreurs . Et ils apparaĂźtront dans des endroits auxquels personne d'autre ne pensera.

Que peut-on faire à ce sujet? Vous pouvez revenir à la tactique habituelle et dire: «Vous avez fait une erreur, corrigez-la. Vous avez écrit un mauvais code - allez apprendre à écrire du code. " C'est une mauvaise voie qui ne mÚne pas au développement.

Pour vraiment écrire correctement et développer votre produit, vous avez besoin d'une nouvelle approche et d'une nouvelle mentalité.

Environnement irréprochable


J'ai appelĂ© cette approche un environnement irrĂ©prochable - cela signifie que je ne blĂąme jamais les gens pour rien . Si un bogue est entrĂ© dans votre projet, c'est un problĂšme de projet. Ce bug doit ĂȘtre corrigĂ© afin qu'il ne se reproduise plus. S'il s'agit d'un bogue dans le code, vous devez Ă©crire un test de rĂ©gression. S'il s'agit d'un bogue dans l'infrastructure du projet, vous devez Ă©crire un outil qui Ă©vitera ce bogue.



Lorsque vous commencez non seulement Ă  corriger des bogues et Ă  espĂ©rer que tout ne se dĂ©sagrĂšge pas en production, mais Ă  les corriger au niveau du systĂšme, vous commencez Ă  crĂ©er et Ă  crĂ©er - crĂ©er de nouveaux outils, dĂ©velopper de nouvelles approches et modĂšles architecturaux. Vous commencez Ă  penser avec votre tĂȘte et assurez-vous que les bogues ne se reproduisent pas.

Un travail constant sur les erreurs amÚne le développeur à un niveau fondamentalement différent. Vous commencez à inventer des outils pour les développeurs, à les implémenter, à promouvoir, etc.

La création dont je parle maintenant est massive. Lorsque vous essayez d'utiliser cette approche, vous découvrirez que tout ce qui existe maintenant, en particulier pour certains langages de programmation, n'est pas assez strict.

Une fois, je me suis demandĂ© si je pouvais Ă©crire un linter qui ferait Ă©crire Ă  tout le monde le mĂȘme code. J'Ă©tais trĂšs strict et incluais toutes les rĂšgles possibles que je pouvais trouver. Mais les gens Ă©crivent toujours un code diffĂ©rent . C'est trĂšs similaire, mais je peux toujours comprendre que ce code a Ă©tĂ© Ă©crit par diffĂ©rentes personnes. Donc, mon linter n'est pas encore assez strict - attendez les nouvelles versions.

L'approche reste, on attend que la machine réponde, le programme est bien fait ou pas. Et cela fonctionne, car ces outils aident au travail.

Mais nous ne devons pas oublier que les gens sont des participants nécessaires au processus . Quels que soient les excellents paramÚtres techniques que vous effectuez, si l'apparence expérimentée de la personne n'a pas traversé votre code, il peut toujours y avoir quelque chose qui fait que vos cheveux restent debout, bien que CI soit passé.

D'une part, nous avons réglé notre problÚme et nous avons rejeté un trÚs mauvais code. Mais, néanmoins, nous ne sommes pas complÚtement isolés de lui. Un processus de révision du code est requis . Si le code n'a pas réussi l'examen du code, alors tout ce que vous avez fait auparavant est inutile.

Chaque étape suivante n'a de sens que lorsqu'il existe une base pour la précédente.

, , , - CI . , , . - — .



— .

— . . : « , ?!» , , .

: , . , , , — : . , .

- — . , , , : « ? . , - ». — , - , - . .

— , — .

— , . , .

, , . . . , .

, , , , . , , , .

, , , , , , , .

— . , — , , , .

, . , , . open source , .


. , , , — .

. , , , , . , — , — . , .

. , . : — , — . .

. , , — ? , , , . .

. , , — , . - , , . , . open source.

. , , , , , . , , , .. !

. : . - , . , , . . , , . .

. , , - , . -, .

. , . - — , . , .

, . , . , .

Agile , . QualityConf , ++, — . , , .

Source: https://habr.com/ru/post/fr462113/


All Articles