Embauchez-moi

Je suis freelance ! Besoin d'un professionnel du développement web ? Pourquoi ne pas me passer un coup de fil ?

Plus d'infos sur… http://thibault.jouannic.fr

mots-cles : Ingénieur web freelance Symfony eZ Publish Solr

Freelance, deux ans plus tard…

Freelance anteater

Voici maintenant un peu plus de deux ans, j’étais encore salarié dans une SSII sympa sur Montpellier. Le salaire fixe, la bonne ambiance de bureau, pas de problèmes pour trouver un appart’. C’était la belle vie.

Et puis, un jour, j’ai rédigé un document sur mon poste de travail. Je l’ai relu 50 fois. Je l’ai imprimé. Je l’ai à nouveau relu 50 fois. Je l’ai signé. Je l’ai encore relu quelques petites dizaines de fois, pour être sûr, puis je me suis levé, les jambes tramblotantes. J’ai avancé jusqu’au bureau de mon chouette directeur d’agence. J’ai frappé, suis entré, et lui ai tendu mon document. Je crois que ça a été le moment le plus stressant de toute ma vie[1] C’était ma lettre de démission.

Voici donc un peu plus de deux ans que je suis développeur web à mon compte, ou, comme j’aime me désigner, « ingénieur web freelance » (parce que ça claque mieux, je trouve). Avec le recul, le referais-je ? Hell Yeah !

Être freelance est un métier (si si) génial. C’est aussi un métier un peu aventureux, ou il n’existe pas vraiment de moule tout fait, et dans lequel chacun doit tracer son propre chemin.

Sans oser prétendre être un vieux routard du milieux, j’ai commis, en deux ans, quelques conneries qui ont données lieux à quelques leçons intéressantes. Voici donc un petit retour d’expérience, qui j’espère me fera bien marrer quand je le relirai dans deux ans.

Pourquoi devenir freelance ?

Étonnamment, quand j’ai annoncé mon intention à mes proches, « pourquoi ? » est une question qui est revenue assez peu, remplacée par des tonnes de « comment ? ». Et comment tu va trouver du boulot ? Et comment tu va payer ton loyer ? Et comment tu va arriver à te lever le matin ?

Comment n’est pas important. C’est pourquoi, qui est important.

Les « comment », on verra quand on y sera. Mais sans une bonne raison pour se lancer, point de salut. Voici quelques uns des arguments qui m’ont fait franchir le pas :

  • La liberté ! Être freelance, c’est avoir le choix :
    • de son mode de travail
    • de ses clients
    • de ses outils
    • de ses projets
    • de ses horaires
    • de sa charge de travail
    • de sa rémunération
  • La responsabilité : point de supérieur hiérarchique derrière qui se retrancher en cas de problème. Vous être responsable de vos projets et de vos clients. Et en cas de pépin, bing ! C’est pour votre pomme. Ça met un peu de sel, non ?
  • La pression positive : finie la vie de bureau pépère. Être freelance nécessitera le meilleur de vous même, et vous poussera dans vos retranchements.
  • Le respect : être freelance, c’est avoir le loisir de dire la vérité à son client. De lui offrir une relation de confiance et une prestation de qualité.
  • Le travail bien fait : on assiste dans certaines SSII à des débordements dus à la nécessité impérieuse de faire du chiffre ! En passant freelance, vous aurez la possibilité de devenir un artisan, et de ne pas transiger sur la qualité.
  • L’argument ultime : la cohérence ! Aujourd’hui, je ne raccroche pas ma casquette de développeur web quand je quitte mon boulot. Jour après jour, quand je mange, quand je respire, je suis freelance. Ce n’est pas simplement ce que je fais, c’est ce que je SUIS. Et j’aime ça.

Avant de se lancer, bien entendu, il faut également considérer les inconvénients, qui sont nombreux.

  • La paperasse ;
  • Il faut se motiver pour se lever le matin et prendre le contrôle de sa vie ;
  • La paperasse ;
  • Gestion financière incertaine
  • La paperasse ;
  • T’as déjà essayé de louer un appart’ en étant auto-entrepreneur ?
  • La paperasse ;
  • Nécessité d’assumer des métiers qui ne sont pas forcément les siens (commerce, gestion d’entreprise, gestion de projet, etc.)
  • Ai-je mentionné la paperasse ?

Ces inconvénients sont réels, et s’ils seront de simples obstacles pour certains, ils se révèleront insurmontables pour d’autres.

On trouve également les inconvénients complètement bidons, que j’appelle « les fausses excuses du tire-au-flanc » :

− Et la sécurité de l’emploi ?
− En étant freelance, vous allez monter en compétence, vous faire un réseau, une réputation, vous diversifier. Ce sont les meilleurs garants pour garder un taf’. L’employé de SSII qui se fait virer pour raisons économiques repart peu ou prou de zéro. Le jour ou il n’y aura plus de taf’ pour tout le monde, il sera le premier à jarter. Le freelance compétent avec un gros réseau aura toujours du travail.

− Je ne peux pas le faire !
− Si tu peux.

− Tu comprends, j’ai une femme des enfants…
− Moi aussi[2]

− J’ai peur !
− Bottes-toi le cul !

Comment se lancer ?

Évidemment, je ne dispose que de ma propre expérience, toutefois il me semble que les étapes pour devenir freelance sont peu ou prou toujours les mêmes :

  • Mettre du pognon de côté, histoire de voir venir  ;
  • Trouver un client  ;
  • Prendre son courage à deux mains  ;
  • Démissionner  ;
  • Taffer  ;
  • Facturer  ;
  • Recommencer  ;

Facile, non ?

Choisir un statut, créer une entreprise, trouver des locaux, etc.

J’ai l’air d’un avocat ? Il y a des bouquins trés bien qui expliquent ça.

Investir dans de p**ains d’outils

Je n’insisterai jamais assez sur l’importance des outils que l’on va utiliser plus de 8h par jour pendant toute sa vie. À titre d’exemple, ma chaise vaut actuellement plus cher que mon ordi, et c’est un achat que n’ai jamais regretté.

Trouver des clients

Aha ! Une des erreur que j’ai commise, et qui m’ont bien foutu dedans ! Le moment n’est pas encore venu de trouver des clients : tu n’es pas prêt, petit scarabée ! Mais n’ai crainte, nous y reviendrons.

Trouver son créneau

Mr. Dice
Creative Commons License photo credit : Bikerock

Si quand on vous demande en soirée « Et tu fais quoi dans la vie ? » vous répondez quelque chose du genre « euh… ben… en fait… je fais… genre des sites web, tu vois », je vous conspue.

Un bon créneau, c’est quelque chose qui claque ! C’est quelque chose que vous pouvez clamer haut en fort en pensant « Ouais, avec ça, sûr que je vais pécho ! ».

En soirée, quand on me demande ce que je fais, je réponds un truc comme « Tu vois, je travaille pour des entreprises qui ont besoin de systèmes d’information spécifiques. J’utilise mon expérience et mon expertise pour les aider à cerner leur besoin au plus juste, afin qu’ils puissent bénéficier d’une prestation de qualité sans faire exploser les coûts. Je les conseille quand aux meilleures techniques à employer, puis je leur développe un outil sur mesure en m’appuyant sur les technologies du web et les méthodologies agiles ».

Bam ! Je ne vous dit pas le nombre de verres que je me fais offrir après ça.

Débuter une carrière de freelance nécessite à mon avis de se poser quelques questions essentielles :

  • Qu’est-ce que je sais faire ?
  • Qu’est-ce que j’aime faire ?
  • Qu’est-ce que je veux faire ?
  • Qu’est-ce qui est vendeur ?
  • Quelle est ma spécialité ? Ma spécificité ? Mon « petit plus » qui fera la différence ?

Me poser ces questions m’a aidé à définir clairement les types de prestations que je voulais mettre en avant, et à définir un argumentaire cohérent et percutant. Au début, j’avais tendance à ratisser un peu large pour ne pas rater d’opportunité. Aujourd’hui, je ne réponds qu’aux demandes de prestations qui m’intéressent vraiment.

Définir ses conditions

Rapidement, je me suis retrouvé au téléphone avec des clients qui m’ont soumis à des demandes plus ou moins farfelues, auxquelles j’aurais du être mieux préparés. J’ai du définir clairement mes limites, ce que j’étais prêt à faire ou pas. Que d’emmerdes j’aurais pu éviter si j’avais pris ces quelques minutes dés le début…

  • Comment allez vous travailler ?
  • Accepterez vous les déplacements ?
  • Travaillerez-vous le week-end ?
  • Quelles seront vos horaires dans la journée ?
  • Quelles seront les horaires ou vous serez joignables ?
  • Travaillerez vous en dehors des horaires de bureau ?
  • Travaillerez-vous au forfait ? En régie ?
  • Commencerez-vous le travail avant la signature du contrat ? (indice : non)
  • Accepterez-vous des prestations de maintenance ?
  • Quelle sera le montant minimal de la prestation avant d’envisager un devis ?
  • Ferez-vous des sites porno ? (oui, on me l’a proposé)
  • Donnerez-vous des formations ?
  • Accepterez-vous vos clients sur Facebook ?
  • Travaillerez-vous sur site ? À domicile ? Au café du coin ?
  • Quel sera le délai maximum de facturation que vous accepterez (indice : comptant, c’est bien) ?
  • Accepterez vous de travailler pour moins cher en échange de parts dans la boite ?
  • Quel montant d’acompte demanderez-vous ?
  • À quelle fréquence facturerez vous ?
  • The Big Question : quel sera votre tarif ? (plus là dessus plus tard)

Répondre à ces questions à l’avance permet de pouvoir éviter les situations moisies, en opposant un « non » bien clair et bien franc à toute demande qui irait à l’encontre de vos intérêts et de vos souhaits.

Définir un argumentaire

The Devil That You Know
Creative Commons License photo credit : Thomas Hawk

Là est, je crois, la clé du succès. Peu importe l’immense étendue de vos compétences, si vous ne savez pas vous vendre, vous n’aurez pas l’occasion de les mettre en pratique.

Retenez-bien ceci : on peut tout vendre ! N’importe quelle condition, n’importe quelle prestation, du moment que vous présentez bien les choses, et que le client y trouve son compte. On peut vendre la journée à 5000€, si la prestation suit derrière. Évidemment, avant de convaincre quelqu’un que vous valez le coup[3], il va falloir cravacher sévère.

La négociation, ce n’est pas faire gober n’importe quoi à vos prospects, c’est leur faire prendre conscience de votre valeur.

J’ai dégagé quelques arguments à mettre en avant. Pas plus de 4 ou 5, ça me suffit. J’ai fait en sorte qu’ils soient percutants et cohérents avec mon créneau.

J’ai également préparé des réponses aux objections les plus courantes. Je me suis rendu compte que la plupart des entretiens, téléphoniques ou en vis à vis, suivaient toujours plus ou moins le même fil conducteur. Partant de ce constat, il devient assez facile, avec l’expérience, de fluidifier sa communication.

Un exercice intéressant est de tirer parti de ses (suposées) faiblesses, qui soulèveront probablement des objections, pour les transformer en arguments commerciaux.

Ex : Vous ne supportez pas de travailler plus de deux heures par jour, ce qui peut être handicapant. Prenez les devants, et annoncez à votre client que « c’est un choix délibéré, car cela vous permet de ne facturer que les heures ou vous êtes à 120% productifs dans la journée ».

Il ne s’agit pas de produire du bullshit au paragraphe, il s’agit de bâtir une cohérence entre vos envies, votre façon de travailler, vos prestations et votre argumentaire. La cohérence, c’est le secret de la confiance en soi, et du bonheur dans la durée.

Bien sûr, il n’est jamais possible d’être à 100% préparé. Un jour, un prospect a objecté que j’étais trop cher, parce que « j’avais les pieds dans l’eau » (j’habite à Montpellier), et qu’« étant donné que j’avais la belle vie, je pourrais faire un effort sur mes tarifs » (texto). Répondre à ce genre d’objection nécessite une sacré faculté d’adaptation[4].

Définir son tarif

Aaaahhhh… La vaste question du débutant. Là dessus, je ne m’étendrai pas trop, vu que d’autres le font trés bien. Si il y a une chose que je devais retenir, parmi mes leçons de ces deux dernières années, ce serait ceci :

« Si tu es cher, on retiendra que tu es compétent. Si tu es bon marché, on retiendra que tu es bon marché. »

Ne pas travailler pour des clopinettes est à mon avis essentiel dans le métier, pour deux raisons. D’abord, pour une simple question financière. Pas besoin de vous faire un dessin. Ne pas avoir de salaire mensuel nécessite d’être préparé à éponger en cas de coup dur. Et puis, il faut pouvoir survivre aux longues périodes non facturées nécessaires à son auto-formation.

Mais surtout, bien se vendre pose un statut. Il y a là un effet psychologique assez intéressant : ce qui est cher ou difficile à obtenir a automatiquement plus de valeur à nos yeux. C’est étonnant de voir à quel point, à travail égal, l’on est mieux considéré, mieux respecté, dés qu’on monte les tarifs. Un client qui vous paie cher réfléchira à deux fois avant de vous appeler pour décaler ce petit carré d’un pixel à gauche. De ce simple fait, vous serez tout simplement à même de faire un meilleur travail. À méditer.

Trouver du travail (enfin)

Je vais vous avouer une chose. Je n’aime pas cherche du travail. Je n’aime pas prospecter. Prospecter, c’est hasardeux, long, fastidieux, ennuyeux, et ne représente pas un investissement. Plutôt que de chercher du travail, j’essaie de me donner une visibilité, pour laisser le travail venir à moi. Pour ce faire, il me parait essentiel de :

  1. Se rendre visible : tenir un blog, écrire des articles, aller à des soirées orientées pro, assister à des conférences, participer à l’organisation d’événements   ;
  2. Se tailler une réputation : participer à des projets open-source, s’investir dans une communauté, développer des logiciels et les exploiter soi-même  ;
  3. Se faire un réseau : rencontrer plein de monde, retenir les noms, les adresses, les métiers  ;

Ne pas s’isoler

Il peut être un peu déprimant, après avoir vécue une vie de bureau riches en contacts humains, de se retrouver à bosser seul chez soi. Il m’a été impératif de sortir le plus possible, de renouer des contacts et de rencontrer du monde avec qui je pouvais échanger sur mon métier. J’ai de la chance, il y a beaucoup de gens trés bien sur Montpellier (#fayot).

Ma vie de freelance

J’estime que ma vie de freelance se décompose comme suit :

  • 1/4 = travail
  • 1/4 = gestion de projet
  • 1/4 = gestion commerciale, réseautage, communication
  • 1/4 = Auto-formation, montée en compétence
  • 1/4 = compta, paperasse
  • 1/4 = Glander, se reposer, faire autre chose

Les plus sagaces d’entre vous auront remarqué qu’il y a plus de quatre quarts. Je vous répondrai en soupirant de lassitude tout en levant les yeux au ciel. Qui a dit qu’on se la coulait douce ?

Quelques tips and tricks

Ready To Draw
Creative Commons License photo credit : jaxxon

Allez, en vrac, quelques astuces, parfois apprises dans la douleur.

Choper les bon état d’esprit est important. « Je suis un professionnel compétent. Je suis là pour vous aider. J’offre des prestations de qualité. ». Toute situation qui ne cadre pas avec cette affirmation (de votre côté comme de celui du client) doit être recadrée d’urgence.

Toujours viser la satisfaction client en priorité. Avoir un projet pourri mais un client content paie les factures. L’inverse non.

Peu importe la qualité du travail fourni, si vous ne communiquez pas correctement avec votre client, il ne sera pas satisfait.

En cas de doute, la transparence et l’honnêteté sont en général les bonnes options.

Le cas échéant, avouer son incompétence sur certains points ne pose aucun problème. Surestimer ses compétences, en revanche, n’amène que des emmerdes.

L’auto-formation est vitale. Lisez des livres, allez à des conférences, réalisez des projets persos representant des défis techniques, ne vous reposez pas sous vos lauriers.

N’hésitez pas à dire non aux clients et projets qui puent. « C’est urgent ». « Tous mes développeurs précédents m’ont planté ». « Je ne paierai qu’à la livraison finale, dans six mois ». « Je cherche à constituer une équipe pour une régie de 500 jours qui commence la semaine prochaine »[5]. Autant de drapeaux rouges qu’on apprend à détecter et à fuire comme la peste numérique.

Le bénévolat, c’est le mal. « Tiens, tu fais des sites ? Tu ne veux pas faire le site de mon association de bienfaisance vite fait ? ». Dire oui à ce genre de requête est certe louable, mais c’est le début d’emmerdes sans fin et d’une perte de temps abyssale.

Le forfait, c’est le mal. Les méthodes agiles et le travail en régie, c’est plutôt sympa.

Le mot de la fin

Pour synthétiser un peu tout ça, je dirai qu’être freelance, avant d’être un métier, est avant tout un art de vivre. Et c’est ça que me plait. J’aurais encore des choses à dire, mais je me réserve pour l’année prochaine. Freelancers of the world, je serais curieux d’avoir vos retours concernant tous ces points. À pluche !

Notes :

  1. Ouah l’autre he ! Quel mélo ! [retour]
  2. En fait, non, mais c’était pour la beauté de la démonstration [retour]
  3. et avant que ce soit vraiment le cas [retour]
  4. J’avoue, sur ce coup là, je n’ai pas su quoi répondre [retour]
  5. Si si, véridique [retour]

Le Temps de Parole


Creative Commons License photo credit : Gueоrgui

− C’est à vous dans 5 minutes

Il parvenait à peine à maitriser les pulsations de son cœur. Finalement, après toutes ces années d’attente, c’était son tour.

Tout ce temps passé à s’entraîner, à répéter son discours, à le remanier, le réécrire un nombre incalculable de fois. Il en connaissait chaque mot, chaque syllabe, chaque intonation sur le bout des doigts. Ses phrases s’étaient imprimées dans son cerveau, années après années, au point de faire partie intégrante de sa personnalité.

La gorge sèche, l’estomac noué, il se demandait s’il allait être capable d’articuler un son. Il fallait bien, pourtant. Son Temps de Parole était venu.

Il se rappelait avec une surprenante acuité le jour de son inscription. L’ancien système achevait de s’effondrer. La Révolution Sociale battait son plein. Il reignait une atmosphère d’optimisme, de renouveau, de changement. Pour tous, l’espoir d’une vie meilleure. Le genre de sentiment qui parait devoir durer toujours, surtout quand on a 17 ans.

Lorsqu’il avait apprit l’ouverture d’un Bureau des Formalités Révolutionnaires dans sa ville, il avait sauté sur l’occasion. Un peu par conviction politique, beaucoup pour la frime, il avait couru remplir le formulaire. On lui avait donné son temps d’attente : 25 ans ! 25 ans avant de pouvoir exercer son Temps de Parole. Autant dire toute une vie.

Il se remémorait avec regret son insouciance d’alors. À cette époque, le Temps de Parole n’était qu’une mesurette, imaginée par quelque esprit révolutionaire fiévreux, en mal de proposition populaire. Qui avait imaginé qu’il prendrait autant d’importance ?

Flag Waver – Tiananmen Square, Beijing, China
Creative Commons License photo credit : cromacom

Le Temps de Parole était né juste après la fin de la Révolution Sociale. À cette époque, les grèves, blocages d’usines et d’universités et manifesations populaires étaient quotidiens. Dans ces moments là, tout le monde pouvait s’exprimer. Tout le monde pouvait monter sur l’estrade, harranguer la foule, proposer mesures et contre-mesures, louer ou critiquer, être acclamé ou hué. La démocratie brute, sans contrefaçons.

Cette liberté de parole quelque peu anarchique était rapidement devenu le symbole de la mort du vieux système pourri et du retour aux anciennes valeurs de la démocratie.

Mais comment éviter de retomber dans les anciens travers ? Comment éviter que les perversions du neo-capitalisme, chassées par la grande porte dans le sang et la douleur, ne reviennent pernicieusement sous une forme ou une autre ? Comment insuffler cette même ferveur démocratique aux générations futures, et assurer la continuité des valeurs portées par la Révolution Sociale ? C’est pour répondre à ces questions qu’avait été créé le Temps de Parole.

Le Temps de Parole, c’était la liberté d’expression institutionnalisée. C’était le droit pour chacun, pendant cinq minutes, de pouvoir s’exprimer, sans tabou ni censure, avec l’assurance d’être écouté de manière massive et globale.

Évidemment, tout le monde ne pouvait pas parler en même temps. Il fallait s’inscrire, et attendre son tour. Rapidement, la liste des candidats s’était allongée, ainsi que le temps d’attente. Peu à peu, à la surprise même de ses instigateurs, le Temps de Parole avait pris une d’importance prépondérante dans la vie quotidienne, et était devenu l’emblème du Gouvernement Révolutionnaire.

Radio Daze
Creative Commons License photo credit : Ian Hayhurst

C’était devenu une gigantesque industrie. 24h sur 24h, une chaîne de télé et un canal radio entièrement dédiés diffusaient les discours successifs des candidats de la journée, qui étaient traduits à la volée dans plusieurs dizaines de langues. À cela s’ajoutaient les rétrospectives, les bêtisiers, les best-of, les analyses sémantiques et les compilations par thèmes des meilleures prestations. Le Temps de Parole était le sujet de conversation préféré de monsieur et madame tout-le-monde. Aujourd’hui, ils étaient des millions à attendre leur tour. À l’inscription, le temps d’attente atteignait la durée ubuesque de 53 ans.

Le sujet était entièrement libre. Certains proclamaient leur amour de la paix, d’autres préchaient leur religion, d’aucuns déclamaient des vers, ou se lancaient dans des numéros comiques. Même si un quelconque esprit dérangé utilisait son Temps de Parole pour confesser le crime le plus horrible, on le laissait finir. Cela n’empêchait pas la police révolutionnaire de l’attendre à sa sortie, mais le Temps de Parole était sacré.

Certains sujets étaient plus valorisés que d’autres, évidemment, et l’Office de Gestion du Temps de Parole émettait des recommandations officielles. Il était déconseillé, par exemple, de parler du Temps de Parole lui même. Les méta-discours n’avaient que peu d’intérêt. Toutefois, ce n’était que des recommandations, le candidat restait seul maître de son sujet.

− Trois minutes !

Il songea à sa famille. Sa vieille mère, bien entendu, avait rabaché auprès de tout les voisins comment son rejeton allait bientôt avoir son Temps. Tous ses collègues savaient depuis des mois que son Temps approchait et sans nul doute, tous ceux qui le connaissaient de près ou de loin auraient l’oreille rivée à la radio au moment de son passage.

All the troubles lie on his shoulder
Creative Commons License photo credit : Ranoush.

S’il ne s’en sortait pas trop mal, il ferait la fierté de son quartier, et il pourrait profiter pendant quelques temps d’une certaine notoriété locale. S’il était particulièrement brillant, il pouvait espérer être cité dans l’une des quelques rétrospectives thématique quotidienne réalisée sur l’une ou l’autre des émissions consacrée au Temps, ce qui lui conférerait à vie un statut social enviable.

À l’inverse, s’il bégayait, se rendait coupable d’un contresens, ou ne parvenait pas à terminer dans le temps imparti, il serait la risée de tous pendant des semaines. La honte pour lui et sa famille.

Pendant ses heures de préparation, il se laissait aller à songer à la gloire que pourrait lui procurer un Temps de Parole brillant. Certaines carrières politiques avaient démarrées ou décollées suite à un Temps de Parole particulièrement magistral. Deux ou trois Temps étaient devenus aussi mythiques qu’un appel du 18 juin, ou qu’un « I had a dream ». Leurs auteurs étaient entrés dans l’Histoire, et n’importe quel gamin de 5 ans pouvait les réciter par cœur.

À l’inverse, quelques lapsus malheureux, ou confusions liées au stress avaient jeté l’opprobre sur leur auteur, les discréditant, les marquant à vie plus sûrement qu’un tatouage ridicule. Certains, incapables de supporter la honte de leur échec, avaient préféré mettre fin à leurs jours.

Il repensait à toutes ces heures à travailler son Temps. À trouver le thème de son discours, à l’écrire, le paufiner, le répéter, puis tout jeter et tout recommmencer à zéro. Tout cela, encore et encore pendant 25 ans. Comment un discours de cinq minutes avait-il pu nécessiter une préparation obsessionnelle qui l’avait tourmenté la majeure partie de sa vie ?

− Plus que une minute !

Quoiqu’il dise, quoi qu’il fasse, dans une poignée de secondes, ce serait fini. Qu’allait-il se passer ensuite ? Toute sa vie, depuis 25 ans, il avait eu un objectif à long terme : il allait avoir son Temps de Parole. Jamais il n’avait envisagé un horizon plus lointain. Son avenir, c’était son Temps. Et ensuite ? Ensuite, on verrait.

Il ne savait pas quelle serait sa réaction. Se sentirait-il vide ? Libéré ? Sûrement un peu des deux. À quoi allait-il pouvoir consacrer son temps libre ? Il trouvait bizarre, maintenant, de ne pas s’être posé cette question plus tôt.

Dans un surprenant mélange de terreur et de fébrilité, il se laissa guider par la régisseuse jusqu’à la petite cabine qui avait hanté tant de rêves angoissés. Il s’effondra plus qu’il ne s’assit sur la chaise en face des caméras, et tenta de calmer les tremblements de son corps. Il prit une profonde inspiration.

− C’est à vous dans trois, deux, un…

Symfony, c’est fini…

A POSTCARD FROM CAPRI
Creative Commons License photo credit : fabiogis50

Et dire que c’était le framework de mon premier amour ! Sous ce titre un peu ridicule[1] se cache un véritable cri du cœur. Ou pourquoi j’ai décidé de ne plus utiliser les technos de Sensio.

Un peu d’histoire

Comprendre les propos qui vont suivre nécessite d’avoir un aperçu de la vie du framework. Si vous n’aimez pas l’histoire, vous pouvez passer directement à la section suivante.

La première version de symfony est publiée en 2005. La version 1.0 voit le jour début 2007. Mi-2008 débarque la version 1.1, avec une refonte majeure de l’architecture interne, et l’arrivée (notamment) du framework du formulaire. La version 1.2 suit rapidement, fin 2008, ajoutant pas mal de fonctionnalités sympa. Enfin, fin 2009 sortent en parallèle les versions 1.3 et 1.4, avec l’intégration d’un beau mailer tout neuf, pas mal de travail sur les forms, et encore d’autres trucs sympa.

Ensuite ? Plus rien… Sensio a en effet décidé de ne pas poursuivre le développement de symfony en tant que tel, mais de réécrire le projet de zéro pour donner naissance à Symfony2. La branche 1.x ne verra donc pas d’ajout de nouvelles fonctionnalités, et ne sera plus supportée après 2012.

La nouvelle version du framework a été révélée la première fois en février 2010, mais l’idée de la réécriture date de bien avant. Je me souviens avoir assisté à une présentation Symfony par Fabien Potencier en 2008, et déjà, la réécriture du projet était évoquée.

Symfony2, au moment de la publication de cet article (juin 2011), est encore en beta, et la stable est attendue pour juillet.

Awesome framework is awesome !

Contrairement à ce que mon titre pourrait laisser croire, je tiens symfony 1.x et ses créateurs en haute estime. Malgré quelques erreurs de jeunesse et problèmes qui apparaissent à l’usage, le framework est de haute qualité. ORM, architecture MVC, formulaires, outils de tests unitaires et fonctionnels, gestion des caches, générateur d’admin, documentation abondante et j’en passe en font une solution complète et robuste.

Mais plus important, symfony a contribué à diffuser les bonnes pratiques et outils de développement à une grande échelle. Avant symfony, aucun projet dans le monde PHP n’avait autant insisté sur l’importance de la programmation objet, de l’architecture du code, des tests automatisés, des développements itératifs, etc.

La plus belle réussite du projet, à mon humble avis, est d’avoir aidé le monde du développement web à sortir de son amateurisme bon enfant, pour le hisser vers les standards de compétence qu’on peut trouver dans d’autres branches du développement logiciel.

Bien entendu, on trouvera toujours une palanquée de zigotos se prétendant développeurs web parce qu’ils ont écrits trois lignes de PHP. Mais en s’imposant, symfony a aidé à séparer le bon grain de l’ivraie en permettant l’émergence d’une communauté de véritables professionnels.

C’est grâce à symfony et à son écosystème que j’ai découvert le développement itératif, les tests automatisés, et que j’ai eu mon premier contact avec les méthodes agiles. Et rien que pour ça, je tire mon chapeau à ce framework.

Vis ma vie de freelance

I'm just here to look cute on the 165th Day
Creative Commons License photo credit : imNicholas

Mais alors, pourquoi aller voir ailleurs ? J’y viens.

Pour ceux qui ne sont pas encore au courant, sachez que je suis développeur web freelance. Ce qui signifie que je travaille seul, et que je dois assurer tous les aspects d’une prestation de développement web de A à Z (prospection, avant-vente, réponse aux appels d’offre, développement, gestion de projet, gestion administrative et commerciale, maintenance, etc.)

Nous vivons dans un monde qui évolue trés vite. Chaque semaine voit son arrivée de nouvelles technos, certaines demeureront, d’autres disparaitront. Mais décider d’apprendre à utiliser une certaine technologie, comme un framework, pour pouvoir ensuite l’inclure dans mes prestations, c’est un choix difficile, et un investissement trés lourd.

C’est un investissement trés lourd, puisque cela signifie que je vais devoir me former, lire de la doc, faire des tutos, tester sur des petits projets personnels, et tout cela prends beaucoup de temps. Et quand on est freelance et qu’on facture à la journée, je peux vous dire qu’on est trés conscient que le temps, c’est de l’argent.

C’est un investissement trés lourd, puisque cela signifie que j’accepte, pendant un temps plus ou moins long, d’être moins efficace dans mon travail. Une techno donnée ne me permettra d’être efficient que lorsque je la maîtriserai suffisamment pour passer plus de temps à produire qu’à chercher de la doc.

C’est un investissement trés lourd, puisque cela signifie aussi que le premier projet vendu dans cette techno sera hasardeux et commercialement risqué. Et comme je suis honnête, cela signifie aussi que je vendrai mon jour de travail moins cher à mes clients, parce que je ne peux garantir à 100% l’application des bonnes pratiques relatives à cette techno.

Bref, décider d’ajouter une techno à ma trousse à outil, c’est un investissement lourd, et comme pour tout investissement, j’en attends un bénéfice. Si je galère pendant 6 ou 9 mois pour redevenir efficient, j’espère que l’outil choisi restera valable pendant au moins 4 ou 5 ans.

Symfony, I am disappoint !

Mon véritable problème est qu’avec symfony, j’ai l’impression de ne jamais avoir récolté les bénéfices de mon investissement.

Symfony est une trés bonne techno. C’est aussi une techno qui est trés loin d’être parfaite, et qui aurait nécessité encore beaucoup d’ajustements. Sauf que… Dans le cul Lulu ! Parce qu’en 2009, boum ! Branche 1.x gelée ! Les nouvelles fonctionnalités ? Pas la peine, on est en train de tout réécrire ! Les bugs vraiment bloquants et complexes à corriger ? Trop dur, c’est un problème d’architecture ! Mais pas d’inquiètude, on est en train de tout réécrire, ça sera corrigé dans 2 ans.

Malgré tous mes efforts, je ne parviens pas à me débarrasser du sentiment que les nombreux arguments avancés à l’origine pour promouvoir symfony n’étaient que de la merde marketing.

Sensio mettait en avant que symfony était supporté par une entreprise, et pas une communauté de hippies pas sérieux. Qui a essayé de soumettre des bugs après le gel de la branche 1.x sait ce qu’il en est de ce fameux support. D’ailleurs, à ma connaissance, Kris Wallsmith, release manager de la dernière version stable, n’est pas un employé de Sensio.

Sensio mettait en avant que symfony était une techno pérenne, avec des LTS et tout le toutim. Sauf qu’une LTS ne sert pas à grand chose si le développement du projet s’arrête derrière. Ah, ça, mes clients à qui j’ai vendu une techno «  LTS  », ils vont bien rigoler en 2012, quand je leur dirai qu’ils faut réécrire leur site s’ils veulent continuer à bénéficier de mises à jour de sécurité.

Sensio mettait en avant que symfony était une techno bâtie sur l’expérience, inspirée par les meilleurs projets de l’époque. À l’utilisation, on s’aperçoit trés vite (et dans la douleur) que symfony est surtout bati empiriquement. Tous ceux qui ont essayé de créer un site multilingue, ou des formulaires imbriqués, ou d’utiliser le générateur de backend sur des « vrais » projets me rejoindront probablement.

Sensio mettait en avant que symfony était abondamment documenté. Sauf que l’info, elle peut être dans le livre d’introduction, ou dans le tuto de démarrage, ou dans le livre pratique de noël, ou dans le livre de référence, ou dans le tuto sur les formulaires, ou dans le tuto spécifique sur doctrine, ou dans un billet sur le blog, etc. Et attention à ne pas se gourrer entre la version doctrine ou propel du document. Qui plus est, les mêmes docs ne sont pas forcément disponible selon la version du framework, et bien évidemment, via un moteur de recherche, on ne sait jamais sur quelle version on va tomber. Bref, la doc de symfony, elle est trés bien sur le papier, mais en pratique, c’est vraiment casse-bombon.

D’ailleurs, c’est ça tout le problème de symfony. C’est toujours trés bien sur le papier, mais en vrai, ça laisse un petit goût bizarre dans la bouche Une petite impression de finalement, c’est pas si bien que ça. Symfony, c’est une techno pas finie, pas mature, et Sensio a choisi de tout reprendre à zéro plutôt que de terminer ce qu’ils avaient commencé.

Et maintenant ?

En tant que freelance, professionnel du développement web, j’ai maintenant deux possibilités :

  1. Je persévère, je me mets à Symfony2, je prends le temps de me former, je paie les pots cassés pendant quelques mois, j’attends que la techno soit stable, j’attends que les compétences se diffusent, j’attends que la communauté atteigne une taille suffisante, j’attends que les plugins et extensions apparaissent, j’attends les premiers retours d’expérience sur la mise en place de vrais projets, sans garantie que tout ne recommence pas dans 5 ans.
  2. Je vais voir ailleurs si je peux trouver mieux.
fly away
Creative Commons License photo credit : bernat…

Alors, à votre avis, je fais quoi ? Et bien, j’ai fait ce que tout bon développeur web doit savoir faire : j’ai été curieux. J’ai sauté une grande marche, et je suis carrément allé voir dans d’autres écosystèmes, d’autres communautés. J’ai testé python, j’ai testé flask, j’ai testé django, et ce que j’ai vu m’a plu.

Django, ce n’est bien sûr pas parfait, mais c’est aussi bien en pratique que symfony sur le papier. Ce n’est pas une techno de frimeurs, on n’en dit pas plus que ce qu’on en fait. L’avenir me dira si c’est un bon choix.

Pour conclure. Je ne dis pas que Symfony2 ne sera pas une techno géniale, et qu’elle ne doit pas être utilisée. Je ne dis pas que je ne toucherai jamais un projet en Symfony2. Je ne dis pas que prendre la décision de tout réécrire a été mauvaise. J’imagine que ce fut un choix trés difficile. Je dis et répète que j’admire et loue les équipes qui travaillent sur symfony, et que toutes ces remarques sont faites avec humilité, en ayant conscience que la critique est aisée, mais l’art est difficile.

Simplement, à mon niveau, pour mon cas personnel, je ne peux plus considérer symfony comme une techno viable.

Et rien ne me dit que dans 5 ans, le même schéma ne se reproduira pas. Rien ne me dit que dans 5 ans, Fabien Potencier ne va pas péter un boulon pour aller élever des chèvres dans le désert. Et alors, quel avenir pour symfony ?

Je suis allé voir ailleurs, et j’y ai trouvé mieux. Un petit pas pour l’humanité, mais un grand pas pour moi ?

Notes :

  1. en encore, vous ne me voyez pas le chanter devant mon écran [retour]

Les inscriptions pour Sud Web sont ouvertes !

The Empire Wants You!!!
Creative Commons License photo credit : leg0fenris

Toi là ! Oui, toi ! Derrière ton écran ! N’en as-tu pas marre du virtuel ? De l’intangible ? De l’abstrait ? Tu en as assez de faire ton associal, planqué derrière ton écran, à procrastiner sur reddit au lieu d’être productif ? Tu voudrais bronzer un peu cet été pour ne plus être le cachet d’aspirine de service ? Tu voudrais rencontrer des vrais gens, leur parler, boire des coups, faire des rencontre, nouer des liens ?

Et bien, ami amoureux du web, réjouis-toi, car tous tes souhaits vont être exaucés. En effet, depuis hier, les inscriptions pour la géniale conférence Sud Web sont ouvertes. Oui, tu as bien lu, tu peux dés maintenant te ruer sur la boutique, acheter ton billet, et aller frimer auprès de tes collégues. Ouais, parce que bientôt, il y aura deux catégories de personnes : ceux qui vont à Sud Web, et ceux qui n’y vont pas.

Comment ? Prendre le train pour une journée, ce n’est pas rentable ? Alors regarde, pour un prix dérisoire, on vous propose non pas une, mais deux journées de conférence, en partenariat avec Web UX. Elle est pas belle, la vie ?

Alors, camarade, dans quel camp es-tu ? Vas-tu rater l’occasion de rencontrer des gens sympas, de t’instruire, de boire des coups, et de visiter la splendide ville de Nîmes ? Non, n’est-ce-pas ?! Dans ce cas, pas d’hésitation, rue toi sur la boutique, et offre toi le précieux sésame. Fais-le maintenant. Demain, il sera trop tard.

Jouons avec les alarmes d’Android

21-06-10 Cause I'd Rather Pretend I'll Still Be There At The End ~ Explored #1
Creative Commons License photo credit : Βethan

Comme promis plus tôt, nous allons jouer avec les alarmes proposées par le système Android. Par alarme, il ne faut pas entendre « le truc qui sonne et qui vous empêche de dormir quand vous voulez faire la grasse mat’ », mais plutôt les alarmes systèmes qui vous permettront de déclencher des événements spécifiques à un moment précis.

Vous souvenez-vous du précédent article ? Il contenait le code permettant la création d’un widget basique. En cliquant sur ce widget, je déclenchais l’affichage d’une notification. Je vais réutiliser ce widget. Au lieu de déclencher l’action tout de suite, un clic sur le widget devra programmer l’affichage de la notification quelques secondes plus tard.

Vas-y Einstein, fais nous ton speech !

Comment fonctionnent les alarmes ? Vous savez déjà que l’interaction entre les composants Android se fait grâce à l’émission d’Intents. Programmer une alarme sous Android, c’est simplement programmer l’émission d’un intent.

Une chose importante à savoir : si vous rebootez votre téléphone, les alarmes ne seront pas conservées. Si vous voulez des alarmes persistentes, il faudra les stocker quelque part, et avoir un service se lançant au boot et reconfigurant toutes les alarmes.

Rien de bien sorcier là dedans, passons donc à la pratique.

Autant pour la théorie

Quand nous cliquons notre widget, nous ne voulons plus afficher la notification, mais démarrer l’alarme. Nous allons donc créer une nouvelle action dans le fichier NapplyWidget.java :

// En haut du fichier
// Ne pas oublier de déclarer l'action dans l'intent-filter du Manifest
private static final String ACTION_START_ALARM = "fr.miximum.widget.START_ALARM";

Dans la fonction updateAppWidget, remplacez l’action SHOW_NOTIFICATION par START_ALARM :

static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
    // Prepare widget views
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.napply_widget_layout);
    views.setTextViewText(R.id.nap_time, "Erase me");
 
    // Prepare intent to launch on widget click
    Intent intent = new Intent(context, NapplyWidget.class);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    intent.setAction(ACTION_START_ALARM); //ici
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
    views.setOnClickPendingIntent(R.id.napply_widget, pendingIntent);
 
    appWidgetManager.updateAppWidget(appWidgetId, views);
}

Dans la méthode onReceive, nous allons traiter les deux actions :

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
 
    if (ACTION_SHOW_NOTIFICATION.equals(intent.getAction())) {
        showNotification(context);
    }
    else if (ACTION_START_ALARM.equals(intent.getAction())) {
        startAlarm(context);
    }
}

Enfin, il ne nous reste plus qu’à créer la méthode qui configure l’alarme :

protected void startAlarm(Context context) {
    // Prepare intent to launch notification
    Intent intent = new Intent(context, NapplyWidget.class);
    intent.setAction(ACTION_SHOW_NOTIFICATION);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
 
    // The alarm manager is an android system service
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 5000, pendingIntent);
}

La fonction set de la classe AlarmManager me permet de configurer l’alarme. Deux possibilités : je peux la configurer pour se déclencher à une heure précise, ou à un delta par rapport au démarrage du système. La constante ELAPSED_REALTIME_WAKEUP signifie que j’ai choisi cette seconde possibilité, et que l’alarme réveillera le téléphone si celui-ci est en veille.

Comme je veux que l’alarme se déclenche dans 5 secondes par rapport à maintenant, j’ajoute 5000 au nombre de millisecondes passées depuis le démarrage du système.

Enfin, je passe le pendingIntent qui sera envoyé.

On compile tout ça, on recharge le widget, on clique dessus, on attends 5 secondes, et Ô miracle ! La notification survient.

C’est tout ?!

Autre fonctionnalité : les alarmes avec fréquence de répétition. À utiliser si vous souhaitez déclencher une action régulièrement, genre toutes les heures ou toutes les dix minutes. C’est enfantin, remplaçons la fonction set par setRepeating.

// Repeat every five seconds
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 5000, 5000, pendingIntent);

L’alarme se répétera tant que vous ne l’aurez pas annulé. Tiens, mais comment annule-t-on une alarme, d’ailleurs ? Facile, il suffit d’appeler la fonction cancel(), et de lui passer le même pendingIntent que celui passé à la fonction set().

C’est tout pour aujourd’hui. La prochaine fois, nous apprendrons à jouer avec le blocage / déblocage de l’écran et du clavier.

Awesome QR Codes are awesome!

Faisons une pause dans notre série sur les articles sur le développement android pour aborder le sujet des QR codes. Même si vous ne savez pas ce qu’est un QR Code, vous en avez probablement déjà aperçu. Un QR Code, c’est ça :

Coucou, je suis un QR code Scan me, I'm famous Sud Web ical event

Un QR Code, c’est bien plus qu’un carré noir et blanc rigolo. Un QR Code est tout simplement un code barre sans barres, mais à deux dimensions pouvant contenir un paquet d’infos. Quelles infos ? Du texte, tout simplement. Mais là où ça devient intéressant, c’est que ce texte peut contenir des urls, des adresses email, des numéros de téléphones, des coordonnées géographiques, des vcard, des liens ical, etc.

Ok, mais pourquoi est-ce si génial ? Parce que grâce aux QR codes, vous disposez d’un moyen de transmettre de l’information à la vitesse de la lumière, et ce avec une facilité déconcertante. Je vois un QR Code, je sors mon smartphone, je le scanne, et paf ! L’info est sur mon mobile, prête à être exploitée.

Comme pour twitter, la puissance des QR codes réside dans leur simplicité d’utilisation. Cette simplicité et cette efficacité font que les QR codes sont massivement adoptés dans certains pays comme le japon, où chaque jour plus de qr codes sont scannés que de sms envoyés. Et en France ? Et bien, nous sommes en retard, comme toujours, mais la démocratisation massive des smartphones devrait accélerer les choses.

Non, mais c’est juste un code-barre ?! Pourquoi en faire tout un foin ?

Pour vous donner une idée du potentiel du truc, voici quelques situations imaginaires (ou pas) qui me passent par la tête, vite fait comme ça.

  • Sur ma carte de visite, j’ai le QR Code de ma vcard. Un scan, et mon contact est enregistré dans le téléphone de mon correspondant.
  • Au restaurant, sur le menu, je scanne le code QR du plat qui m’intéresse, et j’obtiens sa recette et des photos.
  • En voyage, j’ouvre mon guide touristique, je scanne le QR code d’un l’hôtel, et sa position géographique s’ouvre dans mon gps.
  • Lors d’un tsunami, un QR Code est relayé massivement par les internautes. En le scannant, j’envoie un sms vers un numéro surtaxé me permettant ainsi de faire un don à la croix rouge.
  • Sur mon tee-shirt, j’ai le QR Code de mon profil facebook.
  • Sur le site de Sud Web, je scanne un QR Code, et l’événement est automatiquement enregistré dans mon calendrier. Pour les curieux, ce QR Code existe bien.
  • Je suis un artiste, et je cache des messages profonds dans mes œuvres en y intégrant des QR Codes déguisés.

Les possibilités sont infinies. La contrainte la plus importante se situe au niveau de votre imagination.

Pourquoi les QR Codes sont si géniaux ?

Outre leur élégante simplicité et leur redoutable efficacité, les QR Codes présentent quelques avantages :

  • Les QR Codes sont libres d’utilisation, et leur format est normalisé par l’ISO.
  • Les QR Codes sont non intrusifs. Vous en voyez un, vous le scannez ou pas. Ça ne fait pas de bruit. Ça ne prend pas de place. Pas besoin de se faire greffer une saleté de puce rfid sous la peau.
  • C’est local. Le texte est directement contenu dans le code, et immédiatement disponible après un scan. Pas besoin de se connecter à un quelconque serveur.
  • C’est gratuit. Produire un code QR ne coûte rien, l’imprimer pas beaucoup plus.

Comme je peux lire des QR Codes ?

Si vous disposez d’un téléphone équipé d’un appareil photo, vous pouvez scanner un QR Code sans problème. Des applications existent pour tous les smartphones disponible sur le marché.

Je recommande l’utilisation du projet open-source ZXing, qui fournit tous les outils pour l’encodage / décodage des codes QR, y compris les applications pour Android (BarcodeScanner) et iPhone.

Et comment je créé des QR Codes ?

Naples  :  Palazzo Reale di Napoli - Explore
Creative Commons License photo credit : Pantchoa

Le projet sus-mentionné propose une application web de création de code QR, bien suffisante dans la plupart des cas. L’application mobile peut également créer des codes QR.

Si cela ne vous suffit pas, une petite requête « QR Code creator » sortira des centaines de résultats.

Bon à savoir : les deux raccourcisseur d’urls bit.ly et goo.gl permettent de générer des QR codes pour les urls qu’ils raccourcissent. Par exemple, l’url raccourcie pour http://sudweb.fr est http://bit.ly/ig1sSR. Pour obtenir le qr code de cette uri, il me suffit de rajouter un « .qrcode » à la fin.

Attention aux imitations

Même si c’est le plus répandu, le code QR n’est pas le seul format de code matriciel. Vous avez peut-être déjà observé des codes d’un autre format, sur votre relevé de compte à la poste, à un arrêt de la RATP, ou ailleurs.

Cette petite saloperie s’appelle un flashcode. Il s’agit d’un format de code-barre créé par l’AFMM (Association Française du Multimédia Mobile), qui regroupe les gros opérateurs téléphoniques (Bouygues, Orange, SFR, etc.).

Pourquoi est-ce une saloperie ? Pour plusieurs raisons.

D’abord, dans la version normalisée de ce code (version indirecte), on n’encode pas du contenu, mais un identifiant unique. Obtenir des données à partir de ce code nécessite de se connecter à un serveur. Pas de connexion, pas de contenu. Qui plus est, le code en question est périssable, et peut être recyclé pour pointer vers quelque chose de complètement différent, voire vers rien du tout.

La création de flashcode dans son format indirect n’est pas libre, il faut passer par le système d’attribution de l’AFMM, et payer !

Enfin, c’est un système franco-français. Demandez à un japonais de passage de scanner un flashcode, qu’on rigole un coup.

Bref ! Plutôt que d’utiliser l’ouverture et la simplicité du système pour essayer d’être innovant, ces pignoufs ont décidé de faire bande à part, et de réinventer la roue pour facturer ce qui est gratuit. À cause d’eux, la France prendra du retard dans l’adoption des codes QR, comme elle avait pris du retard dans l’adoption d’Internet à cause du minitel. Chapeau les gars !

Pour terminer sur une note posivite, je vous encourage à poster en commentaire tous les killer-usages que vous pouvez imaginer pour les codes QR. Ce devrait être captivant. Allez hop ! C’est l’heure du brainstorming.