Le Développeur FullStack n'existe pas

Ou alors nous sommes tous Fullstacks, potentiellement.

Aujourd'hui ça sera un format court ! 🔥🔥

WTF !?

Le problème prend deux formes. La plus évidente :

Fullstack se positionne pas loin de Growth Hacker et Business Developer dans le bestiaire startup. Là c'est une compilation de facebook et de jobboard startups.

Vous remarquerez que l'on trouve plein de choses avec FullStack, JS, PHP, Stage, Sénior, Swift, Prestashop, RoR et Python, RWD.responsive. Le dernier est un peu wtf, mais c'est un cas extreme. On a pas encore bien compris.

Symétriquement, tous les développeurs juniors sont fullstack. Faute de spécialisation et d'expertise, on est toujours FullStack !

Fullstack n’est pas fondamentalement mal, le problème c’est quand Fullstack a le même sens que "Homme à tout faire qui sait coder". On a personne dans l’équipe aujourd’hui, du coup on a besoin d’un Fullstack !

Bon le but n'est pas de tirer sur l'ambulance. Sur JeChercheUnDev.fr aussi on trouve beaucoup de postes "Développeur Fullstack". On ne modère pas le contenu, et parfois ça a du sens. Espérons que ce poste puisse éclairer le sujet et améliorer l'état général des choses 👼


Dans le fond c’est quoi un Fullstack ?

On retrouve souvent plusieurs assertions :

"C'est un dev qui fait du Front et du Back"

On a le droit à des schemas du style :

Ou encore, sur une fiche job de jobboard :

Il est capable de travailler avec le Product Manager, le designer, les ops, … un véritable couteau suisse !

On a même vu le terme de Fullstack Marketeur utilisé par des gens qui touchent à tout en terme de Marketing. Une forme de parallèle à la com360.

Fullstack n’est pas une compétence

Un développeur qui travaille dans un environnement MeteorJS/React et maitrise les deux compétences est dit “Fullstack”.
Ce développeur change de métier et rejoins une entreprise où l’existant est principalement en DotNet, mais on cherchait des gens qui font des choses avec React. Et dans ce contexte, il n’est plus Fullstack. 
Fullstack n'est pas un attribut qui suit le développeur mais qui dépend de son environnement de travail.

Pourquoi tu n'es pas un Fullstack Developer

Maitriser correctement toutes ces technos, ça demande d'une part beaucoup de séniorité, mais également beaucoup d'entrainement. Faire des requêtes SQL complexes, réfléchir à des solutions de fragmentation horizontale à base d'algèbre relationnelle, il faut pratiquer tous les jours, sinon quand on s'y remet ça pique (c'est pas du vélo !). Faire du Flexbox, du CSS, de l'intégration, même combat. 
Les journées ne durent que 24h et on ne peut pas maintenir un niveau d'expertise aussi bien sur Ansible, React Native et MongoDb et Asterisk dans la même journée.

Pourquoi tu ne dois pas embaucher de Fullstack Developer

Si jamais un tel développeur existait : 
- Il serait tellement rare que ça prendrait un an ou deux pour le trouver
- Il sera tellement demandé que Google/Facebook lui proposeront 80K de prime à l'embauche et il serait très dispendieux

Je vous propose d'en lire plus ici, ça parle du mythe du dev qui est 10x plus productif que les autres. C'est un cousin du Dev Fullstack.

Il y a bien des gens qui aiment toucher à tout !

Oui ! Et c'est important de sortir de sa zone de confort, cela nous permet d'apprendre plein de choses. Ce n'est pas parce que ta zone de confort c'est le back, qu'il faut refuser de faire de l'intégration.
Il y a aussi des développeurs qui aiment faire du Haskell, mais aussi du Javascript ou du Python. On peut avoir fait du Rails pendant des années et trouver agréable de faire une implémentation avec Django ou même avec Play framework !

Ich bin Polyglotte

On a vu ça dans plusieurs postes décrire le profil des candidats comme "plus ou moins" polyglottes. Et ça c'est plutôt clair. Cela désigne quelqu'un qui n'a pas envie de s'enfermer dans une techno ou dans un environnement.

Fullstack est une posture

Dans une gestion de projet agile, un Romain le développeur doit pouvoir prendre une User Story et l'amener jusqu'à l'état Done. Si l'état "Done" correspond à "Déployé en production", on pourra peut-être meme parler de DevOps. Cela signifie que Romain doit être capable d'agir sur tous les tiers de l'infrastructure. Si le gros de la fonctionnalité est vertical sur une architecture client-serveur, avec un client en Qt et un serveur en Node. Romain devra intervenir sur les deux tiers.

Romain n'a pas besoin d'être un expert sur les deux technologies pour développer la fonctionnalité.

Romain n'a pas besoin de le faire seul ! Il peut demander de l'aide à un collaborateur. Peut-être que pour chaque Tiers, un référent est désigné, il a la responsabilité du tiers et il pourra aider Romain à implémenter sa fonctionnalité avec assurance, dans une démarche qualitative.

Romain va apprendre en cours de route. J'ai appris pas mal de choses sur Spring et JPA quand je faisais de l'iOS chez Tripndrive. Parce que Nicolas et Léo étaient très cool, ils m'ont appris beaucoup de choses et leur code était particulièrement clair et compréhensible, je pouvais le comprendre et le reprendre rapidement. Mais clairement dès que ça devenait un peu trop compliqué, je demandais de l'aide. Ne me demandez pas de poser un Spring à partir de 0. Je n'utiliserais pas spontanément Spring pour résoudre un problème. Bref, en un mot : Je n'ajouterai pas Spring en compétence sur Linkedin (Par contre, tu peux me recommander pour ma compétence en Gif > Seriously).

Bref, apprendre c'est cool 👇

En un mot, Fullstack, c'est pas un état, mais une posture. C'est le fait d'être prêt à apprendre, prêt à rentrer dans n'importe quel code pour livrer une feature.

Un poste peut être Fullstack 🏄

C'est pour ça qu'il y a une différence entre "Poste de développeur Fullstack" et "je cherche un dev fullstack". Dans une annonce, on peut utiliser Fullstack pour décrire l'auto-organisation de l'équipe. 
"Tous les membres de l'équipe sont Fullstack, et vous le serez aussi !" ✅
Mais ce n'est pas approprié pour donner les pré-requis d'un candidat. 
"Le candidat idéal est fullstack" ⛔️

Dans une annonce, il faudra donc prioriser :
① Le PoC a été fait avec PHP, on va rester sur cette techno
② Symfony est une bonne idée, avoir une première expérience sur ce framework c'est mieux. 
③ On déploie avec Docker, si vous avez des expériences sur ce sujet, c'est encore mieux.
④ Notre traffic est très mobile, avoir une bonne maitrise de flexbox, media query et des bonnes notions en RWD, c'est très apprécié. On a pas d'outils de type Bootstrap ou Foundation en place, mais ça peut être une bonne idée.
⑤ On voudrait faire une WebApp sur certaines parties, avoir une expérience sur VueJS c'est une bonne idée ! (Ou React, ou Angular)

Pour le candidat, ça veut dire que même si on est particulièrement passionné par le front, on peut être intéressé et postuler à un poste Fullstack.

Comment on Scale en Fullstack 🎢

Dans la Startup-Nation, on doit toujours poser la question : "Mais comment ça Scale ?".

C'est un vrai sujet en fait. C'est très agréable de pouvoir travailler dans ce type d'environnement. Par contre, il y a toujours un moment où ne peut plus tout faire. C'est important de bien être clair sur le cadre, le périmètre, la notion de "Done".

Par exemple, certaines équipes expliquent clairement que le front est accessoire Bootstrap ou un UIKit suffisent pour le moment.

Rapidement, on voit des formes de cloisonnement arriver. LA séparation entre Dev et Build&Run est historiquement la plus répandue ! "Done" devient "ça marche sur ma machine" pour l’équipe Dev. Et l’équipe Build&Run est en mode pompier. Est-ce que quelqu’un a mentionné le MCO ?

Très couramment on voit chez les éditeurs des cloisonnements par tiers. Une équipe est responsable d'une API, de son Dev/Build/Run. L'autre est responsable du backoffice. On a également la team qui fait l'appli iOS dans la pièce à coté. Au moins, le paradigme DevOps est encore là. Mais souvent, on voit apparaitre des couches de managements qui viennent spécifier les interfaces entre les équipes. Ainsi que des intégrateurs qui vont venir assembler les briques pour envoyer chez le client.

Enfin, les Craftmans prôneront les features teams et la mise en place de tribus transversales. Les Features teams sont hétéroclites. On n'y trouve rarement deux profils similaires. Pourtant chaque individu, le SysAdmin barbu par exemple, fera parti d'une tribu de SysAdmin qui va se mentorer et le stimuler pour être le meilleur dans cette verticale.

L'outillage est aussi une partie de la solution. Pas les moyens d'investir dans une équipe DevOps / Build&Run ? Est-ce que Clever Cloud peut résoudre le problème ? (met le PaaS que tu veux à la Plaas) 
On va pas recoder un système de facturation, on prend ce bon vieux Stripe !
Est-ce que Zapier peut faire le job pour ça ?
Intégrer des formulaires c'est relou, on peut pas s'en sortir avec Typeform ?
J'ai mentionné Asterisk plus tôt, mais c'est évident que tu devrais utiliser Twilio.

Les outils coûtent de l'argent, mais permettent aux humains de se concentrer sur le métier et créer de la valeur pour les utilisateurs. 👍

Bref, au final, tout le monde peut-être Fullstack 🎉

Si tu es encore là, est-ce que tu peux taper le bouton 👏 ?
Il faut rester appuyé ! Ça monte jusqu'à 50 ! Merci 🙏

w3l0v3d3v5.c0m 15 c0m1n6 8 j4nu4ry
βμτ ιτ’s αℓяεαδλ ℓιvε

Credits : CommitStrip.com : http://www.commitstrip.com/en/2016/11/07/which-full-stack-developer-are-you/