# BearStudio > BearStudio is a French development studio based in Normandy, specializing in UX design, web and mobile development, and AI integration. We support digital project founders from idea to production. ## About (FR) BearStudio accompagne les porteurs de projet pour les aider techniquement sur le développement web ou mobile de leurs idées. Que vous lanciez un projet numérique innovant ou que vous ayez besoin de renforcer, refondre ou accélérer un produit existant, BearStudio est là pour vous ! ## About (EN) BearStudio supports project founders by providing technical assistance with the web or mobile development of their ideas. Whether you are launching an innovative digital product or looking to improve, redesign, or scale an existing one, BearStudio is here to help! ## Services ### Design de vos applications Nous concevons des interfaces utilisateur modernes et intuitives qui placent l'expérience utilisateur au coeur de chaque projet. Notre approche UX/UI garantit des applications esthétiques, accessibles et ergonomiques pour maximiser l'engagement de vos utilisateurs. ### Développement d'application web et mobile Nous développons des applications performantes et évolutives en utilisant les technologies les plus adaptées à vos besoins. Du web au mobile, nous créons des solutions robustes et maintenables qui accompagnent la croissance de votre activité. ### Booster vos projets Nous intervenons en renfort de vos équipes pour accélérer vos développements et apporter notre expertise technique. Notre accompagnement flexible permet de débloquer vos projets et d'atteindre vos objectifs dans les meilleurs délais. ### AI Ready Nous intégrons l'intelligence artificielle dans vos applications pour automatiser et optimiser vos processus métier. Notre expertise IA vous permet de tirer parti des dernières avancées technologiques pour rester compétitif. ## Team ### Rudy Baer Founder & CTO Après un diplôme en informatique, j'ai fait mes armes en tant que développeur avant de devenir directeur technique (CTO). Mes années chez SmartPanda m'ont permis de développer d'autres compétences, telles que la gestion et l'administration de projets, tout en me familiarisant avec l'état d'esprit « startup ». J'ai alors voulu tenter l'aventure entrepreneuriale en lançant mon studio de développement. C'est ainsi qu'est né BearStudio en 2016. Basés à Rouen, mais avec un réseau de clients internationaux, notre objectif est d'aider les chefs de projet à concrétiser leurs idées (site web, application...). Ma motivation première est d'aider les gens, d'avoir des conversations mutuelles, de se comprendre et, finalement, de faire progresser la collectivité. Je suis également l'un des fondateurs et organisateurs de Fork it! Community. J'ai créé cette communauté après avoir fait un simple constat : je ne trouvais aucune communauté véritablement orientée vers le partage d'expériences, sans distinction de localisation géographique ou de technologie abordée. Au cours de mes voyages, j'ai remarqué que même les grandes communautés, bien qu'influentes dans leur région ou leur domaine technologique, restaient souvent confinées dans leur bulle. ### Ivan Dalmet Co-founder & Lead Designer UX/UI Ivan Dalmet est Lead Designer, product builder et co-fondateur de BearStudio. Avec plus de 15 ans d’expérience, il fait le lien entre design et développement pour concevoir des interfaces accessibles, efficaces et centrées utilisateur. ### Nhung Duong Head Of Operations Déterminée et pleinement investie, Nhung met son sens des affaires et son énergie au service de BearStudio depuis sa création.Polyvalente, elle intervient aussi bien en gestion de projet qu’en RH et en finance.Manager à l’écoute, elle accompagne les équipes au quotidien et contribue à une dynamique de travail positive, portée par son enthousiasme et sa rigueur. ### Yoann Fleury Lead Front-End Developer Avec une forte expertise en React et TypeScript, Yoann est Lead développeur Front-end et met un accent fort sur l'expérience développeur (DX), l'expérience utilisateur (UX) et aime concevoir des interfaces réactives, légères et accessibles. Il s'investit également beaucoup dans le partage, notamment en tant que mainteneur de projets Open Source (dont Start UI), l'organisation de conférence à travers le monde via Fork it! Community et une veille technologique accrue. ### Renan Decamps Front-End Developer Développeur Front et continuellement à la recherche du meilleur framework JavaScript, Renan aime tester toutes les nouvelles technos du moment. Il rend fonctionnel l'ensemble des maquettes produites afin de donner vie à vos projets les plus fous ! ### Nicolas Torion Full-Stack Developer Développeur Full-stack, Nicolas peut s'occuper aussi bien de l'implémentation de la logique de vos applications web côté back-end, de leur connexion à des APIs externes, que de leur intégration visuelle côté front-end. Considérant les technologies et langages comme des outils qui ont chacun leur intérêt selon le type de projet, il recherche toujours les solutions techniques les plus adaptées à votre projet. ### Hugo Pérard Front-End Developer Hugo est un front-end développeur passionné par le développement et la technologie. Son esprit avisé saura trouver la solution adéquate pour n’importe quel problème. ### Hugo Perez Back-End Developer Développeur Back-end, Hugo surnommé Hub possède également des compétences en Ops et en cybersécurité qu'il met à profit au BearStudio. Il aime relever les défis et résoudre les problèmes sur les différents projets. Sa détermination et son expertise en font un atout précieux pour votre projet. ### Zouhair Mkassmi Back-End Developer Passionné par son travail, Zouhair incarne la rigueur même dans ce qu'il fait. Notre développeur back touche à tout, il s'intéresse à ce qui touche au front aussi. Toujours à la recherche de solution, il n'hésite pas à consacrer tout son temps au problème ! ### Aziz Ouertani Back-end Developer Développeur Back-end, Aziz met son énergie et sa curiosité au service des projets du BearStudio. Solide dans la conception et la logique métier, il est aussi sur la route du développement mobile et n’hésite pas à mettre les mains dans le front quand il le faut. Toujours motivé à apprendre et à explorer de nouveaux horizons, il sait s’adapter aux besoins et relever les défis techniques avec engagement. ### Grégoire Protas Front-End Developer Développeur Front, Grégoire a été plongé dès le début de son parcours dans les technologies de front React et React Native. Il fera son maximum pour vous proposer une solution adaptée à vos besoins. ### Noé Tatoud Full-Stack Developer Développeur Full-stack, Noé est toujours partant pour apprendre ou transmettre. Il construit des interfaces accessibles et évolutives et aime les projets où l’on prend le temps de bien faire les choses. ### Dylan Campbell Front-End Developer Développeur front-end, Dylan accorde une importance toute particulière à la Developer eXperience et la maintenabilité des applications. Il s'efforce de toujours trouver la meilleure solution, tant pour l'utilisateur que pour le prochain développeur. ### Marie Douet Full-stack Developer Tombée dans l'informatique au lycée lorsqu'elle a découvert la programmation, Marie privilégie la fiabilité, la simplicité et la cohérence dans ses projets. Curieuse et adaptable, elle sait tirer parti de chaque expérience pour progresser et donner vie à de nouvelles idées. ### Paul Smacque Back-end Developer Développeur back-end, Paul aime transformer des besoins en solutions concrètes et performantes. Toujours content d'apprendre en explorant de nouvelles expériences, son approche repose sur la résolution de problèmes complexes avec rigueur, fiabilité et efficacité. Il met un point d’honneur à fournir un travail de qualité, alliant sens du détail et pragmatisme. ### Daryl Avila Bonnet UX/UI Designer Sportif dans l’âme et curieux de nature, il aime apprendre et n’a pas peur de se tromper pour mieux avancer. UX/UI Designer passionné, il transforme les idées en expériences fluides et les défis en terrains de jeu créatifs. ### Héloïse Guillaume Full-Stack Developer Toujours prête à rendre service, que ce soit dans le quotidien ou dans ses projets tech, Héloïse aime participer à des initiatives variées, du web au mobile. Polyvalente et organisée, elle apprécie particulièrement jongler entre plusieurs projets en parallèle et contribuer là où elle peut avoir un impact. ### Hend Fellah Manager du Camel Studio Avec ma passion pour les échanges authentiques et les relations humaines, la gestion d’équipe n’a plus pour moi le caractère d’une contrainte professionnelle. ### Manuela Roberto Office Manager Manuela est office manager avec plus de 20 ans d’expérience en ESN, au cœur des univers de la dématérialisation documentaire et du jeu vidéo. Toujours en mouvement, elle jongle avec les priorités, anticipe, coordonne et fait avancer les projets avec une énergie communicative. Fonceuse et ambitieuse, elle aime être sur tous les fronts et relever les défis sans jamais perdre le sens du collectif. Le théâtre d’improvisation, qu’elle pratique avec passion, reflète parfaitement son tempérament : réactive, audacieuse et résolument tournée vers l’action. ### Soraya Benchakroune Assistante Full-Stack Assistante en renfort sur la partie admin et compta, Soraya sait répondre à toutes les problématiques sans aucun stress ### Mariem Mkassmi Full-Stack Developer Curieuse, patiente et toujours désireuse d’apprendre, Mariem s’est reconvertie afin de développer des solutions techniques utiles, aussi bien en back-end qu’en front-end. Aujourd’hui, elle poursuit son parcours dans la tech avec enthousiasme, rigueur et la volonté de progresser chaque jour. Développeuse passionnée et curieuse, toujours prête à concevoir des solutions utiles avec rigueur. ### Dylan Flandrin Front-End Developer Dynamique et autodidacte, Dylan (appelé "Trylan" en interne) sait mettre son énergie à profit dans la réalisation de vos projets. Très motivé et ayant soif d'apprendre, il ne lâche rien ! ### Houssem Balti Full-Stack Developer Passionné par le web et la recherche de solutions, j’aime partager mes idées et échanger avec des personnes qui partagent la même curiosité. Toujours motivé par l’envie d’apprendre et de grandir ensemble. ### Jeanne Grenet Junior Developer À 12 ans, Jeanne savait déjà qu'elle serait développeuse. Elle a à coeur de concevoir et développer des interfaces utiles et cohérentes, au plus proche des besoins des utilisateurs. Curieuse de nature et toujours en quête d’apprentissage, elle s'investi autant sur les projets que dans l'organisation de conférences avec Fork it! Community. ### Vivien Murguet Junior Developer Passionné d’informatique depuis l’adolescence, Vivien a commencé à développer sa créativité sur RPG Maker XP avant d’explorer de nombreuses évolutions technologiques. Ingénieur de recherche et biologiste de formation, il s’est reconverti dans le développement pour transformer une passion de longue date en métier. Curieux et polyvalent, il aime expérimenter différents langages et outils sur ses projets personnels. L'IA fait aussi partie de ses intérêts personnels et professionnels. Au BearStudio, il développe principalement en NodeJS, ReactJS et TypeScript en interne. Il met également ses compétences transversales et son sens du détail à profit pour aider dans les tests et revues de code, texte et vidéo, ainsi que dans l'amélioration du SEO technique et organique. ### Justine Leborgne Junior UX/UI Designer Designer UX/UI junior, Justine se spécialise dans la conception d’interfaces fonctionnelles et structurées, respectant les standards UX/UI. Elle met son sens du détail au service d’expériences utilisateur claires et cohérentes, en s’appuyant principalement sur Figma pour traduire les besoins en solutions visuelles pertinentes. ### Éléa Viscat--Provost Junior Community Manager Community Manager junior en alternance, je participe à la communication et au marketing de Bearstudio et Fork it! Community, notamment à la création de contenus et à l’animation des réseaux sociaux. ## Blog Articles (FR) ### IA & Client : les "Vibecodeurs" URL: https://www.bearstudio.fr/fr/blog/articles/ia-et-client-les-vibecodeurs Date: 2026-05-12 ## Dans l'article précédent Dans le premier article sur [les clients "prototypeurs"](/fr/blog/articles/ia-et-client-les-prototypeurs), j'ai présenté comment nos clients utilisent désormais l'IA pour prototyper leurs idées, transformant ces "shadow prototypes" en véritables spécifications. Mais une nouvelle étape commence lorsque les clients ne se contentent plus de montrer... mais veulent **construire avec nous**. ## Faire face à la vague de clients "vibecodeurs" : comment on a dû s'adapter Le cas de Client A était une première étape : accepter l'IA comme un outil de spécification. Mais avec un autre client (appelons-les "Client B"), nous avons fait face à une réalité bien plus chaotique. Ils évoluent avec les mêmes contraintes budgétaires, mais cherchent à livrer davantage de fonctionnalités en travaillant avec nous plutôt qu'en nous remplaçant. Leur objectif est de nous confier le travail lourd, transverse et orienté maintenance, tout en conservant l'autonomie nécessaire pour traiter eux-mêmes des tickets de backlog restés en attente. Cette approche leur permet d'adresser des sujets qu'ils ne pouvaient pas prioriser auparavant, tout en s'appuyant sur nous pour la revue et le cadrage lorsque nécessaire. Le problème ? Ils ne nous avaient rien dit au départ. Un jour, ils m'ont simplement envoyé une pull request entièrement "vibe codée", sans contexte, sans description de ticket, et sans même qu'elle soit référencée dans le backlog. Première réaction ? La confusion. J'ai passé des heures à analyser le code, à tenter de reconstituer l'intention, l'impact et ce qui devait être testé. Ce n'était pas soutenable. Je ne pouvais pas simplement "corriger" leur code ; j'avais besoin que nous corrigions la collaboration. Finalement, ils sont revenus vers nous avec une proposition qui ferait frémir la plupart des développeurs traditionnels : > Nous n'avons pas le budget pour que vous construisiez tout. Nous voulons "vibe coder" des fonctionnalités avec vous. Vous gérez le coeur du système, nous gérons le reste. Le réflexe initial : ![annoyed](images/annoyed.jpg) Il y a deux ans, notre réponse aurait été de fortement décourager cette approche, à cause du coût de revue et de maintenance. Dans un modèle d'agence traditionnel, l'équipe de développement est en charge du code en production. Les contributions sont donc strictement contrôlées pour garantir cohérence, fiabilité et sécurité. Toute modification externe peut introduire des défauts ou des risques dont l'équipe reste responsable, rendant ce type de contribution difficilement viable. Mais comme le dit souvent [Rudy](/fr/equipe/rudy-baer) : **« S'adapter ou disparaître. »** Si nous avions refusé, Client B aurait simplement fait appel à un freelance peu regardant sur la qualité, ou aurait tout tenté de son côté... avec un crash probable quelques mois plus tard. ## Le nouveau processus : la stratégie des "guardrails" Nous avons accepté le défi. Mais pour que cela fonctionne, nous avons dû déconstruire notre processus de production et le reconstruire autour d'un nouveau principe : **nous ne sommes plus les auteurs de chaque ligne de code, nous en sommes les éditeurs**. Voici le workflow précis que nous avons mis en place pour survivre au "vibe coding" : ### 1. Le "pre-code check" (phase de planification) Client B utilise Claude Code avec la fonctionnalité de planification. Désormais, au lieu de coder immédiatement, ils génèrent un plan. Nous intervenons à ce moment-là. Nous analysons leur brief et le plan proposé par l'IA. Nous itérons sur la logique avant qu'une seule ligne de code ne soit produite. Si le plan est mauvais, le code le sera aussi. Nous corrigeons le plan, pas le produit fini : on simplifie l'architecture, on optimise les process, on vérifie les différents cas métiers etc. ### 2. Le contexte est roi (agents.md) On ne peut pas laisser une IA deviner l'architecture. Nous avons défini avec eux des règles strictes de contexte : fichiers agents.md, "skills", standards de code (linting, audits de sécurité). Nous avons, en quelque sorte, appris à leur IA à se comporter comme un développeur BearStudio. En parallèle, le client lui apprend ses règles métiers et son intention. ### 3. L'intégration plutôt que les tests unitaires Historiquement, les tests unitaires étaient souvent limités par des contraintes de temps et de budget. Aujourd'hui, avec l'IA, nous pouvons en générer systématiquement, beaucoup plus rapidement, ce qui permet d'assurer un premier niveau de sécurité sans effort supplémentaire significatif. En revanche, le véritable changement se situe au niveau des tests d'intégration. Nous renforçons fortement cette couche, car elle devient essentielle dans ce contexte. Le client définit les scénarios de test, puisqu'il est à l'origine des fonctionnalités, et l'IA peut ensuite enrichir ces scénarios avec des cas limites ou des variantes auxquelles nous n'aurions pas forcément pensé. Les tests locaux et avec le client en environnement de pré-production en sont d'autant plus efficaces que l'on a une première check list à vérifier. ### 4. La nouvelle approche des pull requests Nous avons mis en place une auto-revue par IA pour les bases avec l'utilisation des skills de review : general, security, architecture... La revue humaine, elle, a changé de nature. Nous ne cherchons plus les erreurs de syntaxe (le linter s'en charge). Nous analysons la cohérence architecturale : est-ce maintenable ? Est-ce aligné avec l'existant ? Est-ce performant ? ### 5. Quand l'IA transforme la dette technique en accélérateur Un autre signal fort est apparu avec Client B : la question des mises à jour majeures. Depuis des années, nous recommandions une montée de version importante. Le projet a près de dix versions de node de retard. Comme souvent, ce sujet n'était jamais priorisé : aucun bénéfice visible, difficile à justifier côté business. Mais récemment, la demande est revenue... initiée par le client lui-même, après recommandation de l'IA elle-même. Ce n'est plus un sujet abstrait de "dette technique". C'est devenu un blocage concret à sa capacité d'expérimentation. Les outils modernes ne fonctionnent plus correctement, et certains assistants ne peuvent même pas exécuter les commandes de build sur un environnement obsolète. **L'IA n'a pas créé le besoin technique. Elle l'a rendu visible et urgent.** Pour la première fois, cette mise à niveau n'est plus perçue comme un coût, mais comme un accélérateur. ![fastTyping](images/fast-typing.jpg) ## Le bénéfice inattendu : dompter le legacy Ce chaos a révélé une opportunité. Le projet reposait sur un code legacy complexe, difficile même pour nos équipes. Nous avons constaté que l'IA, bien guidée, pouvait naviguer dans cette complexité plus rapidement que nous. Là où il aurait fallu plusieurs jours d'analyse, certaines fonctionnalités sont générées en quelques heures. Nous avons réalisé qu'en déléguant le "codage" à l'IA du client, nous allions plus vite, mais cela nous imposait d'accepter un changement de rôle. **Nous ne sommes plus les seuls auteurs. Nous devenons les éditeurs en chef.** ## La règle d'or Même avec les meilleurs processus, fichiers agents.md et revues automatisées en place, on ne peut pas simplement laisser une IA se balader librement dans l'ensemble du codebase. Pour que ce modèle de "co-construction" fonctionne, nous avons dû établir une règle d'or avec nos clients pour déterminer qui construit quoi. Tout se résume au **rayon d'impact** d'une fonctionnalité. Nous divisons la roadmap en deux catégories : **Local** et **Transverse**. ### 1. Les fonctionnalités locales (terrain de jeu du client) Les fonctionnalités locales sont isolées. Ce sont les composants UI autonomes, une page de paramètres spécifique, un nouveau widget de dashboard, ou une interface CRUD (Create, Read, Update, Delete) basique. L'IA excelle ici. La fenêtre de contexte requise est petite. Si l'IA du client hallucine ou écrit du code brouillon ici, le pire scénario est un bouton cassé ou une div mal alignée. **Notre position : lâchez-vous.** "Vibe codez" ces fonctionnalités aussi vite que vous voulez. Tant que ça passe le linter et les contrôles de sécurité de base, nous mergeons. ### 2. Les fonctionnalités transverses (la forteresse BearStudio) Les fonctionnalités transverses sont le système nerveux de l'application. Cela inclut le routing, le state management, l'authentification, les schémas de base de données et les intégrations profondes avec le code legacy. Ces fonctionnalités touchent tout. Si vous modifiez un composant transverse, vous risquez une défaillance en cascade sur l'ensemble de l'application. L'IA peine notoirement ici car elle ne peut pas facilement maintenir le modèle mental architectural complet d'un système complexe et multi-couches dans sa mémoire active. **Notre position : cela reste sous notre responsabilité.** Un client peut proposer un plan pour une fonctionnalité transverse, mais il n'est pas autorisé à générer et pousser le code de manière indépendante. ### Le triage en action Désormais, quand un client comme Client B veut utiliser son IA de planification, la première question que nous posons lors du "pre-code check" est : **Est-ce local ou transverse ?** Si un membre de Client B veut construire l'UI de sa nouvelle fonctionnalité de tchat, il peut le faire en 2 heures. Mais quand ce tchat doit gérer des connexions WebSocket en temps réel, persister les données de manière sécurisée vers la plateforme d'administration, et se synchroniser avec la base de données utilisateurs legacy, l'équipe BearStudio intervient. Cette distinction est ce qui sauve le projet de l'effondrement sous le poids de la dette technique générée par l'IA. Elle donne au client le plaisir de construire des fonctionnalités visibles à grande vitesse, tandis que nous veillons silencieusement à ce que les fondations ne craquent jamais. ![safe](images/safe.jpg) ## Ce que cela change pour l'avenir Ce modèle hybride avec Client B n'était pas une simple expérience ponctuelle ; c'était un aperçu de l'avenir de notre industrie. Nous avons découvert que lorsque nous cessons de lutter contre le désir du client de coder, nous débloquons un gain d'efficacité massif. - **Ils se sentent autonomes :** Ils peuvent modifier la couleur d'un bouton ou ajouter un champ texte en 10 minutes sans nous payer une heure de travail. - **Nous restons concentrés :** Libérés des modifications UI triviales, les développeurs se concentrent uniquement sur l'architecture de haut niveau et la logique complexe (le travail qui nécessite réellement une expertise humaine). Nous entrons dans une ère où notre valeur ne se mesure plus au volume de code que nous écrivons, mais à la **stabilité du système que nous organisons**. ## "S'adapter ou disparaître" Abordons le sujet qui fâche. Est-ce que cela signifie que les clients finiront par tout "vibe coder" eux-mêmes, nous laissant sans emploi ? La réponse est un **"Non"** catégorique. Si des outils comme ChatGPT ou Claude permettent à un fondateur de construire un prototype en 2 heures, ils ne résolvent pas la complexité d'un business qui passe à l'échelle. **Tout le monde ne veut pas coder.** La plupart de nos clients sont des experts métier, pas des ingénieurs. Client A a apprécié l'exercice, mais il voulait finalement nous confier les clés pour se concentrer sur son business. **Le "vibe coding" a un plafond.** C'est efficace pour une fonctionnalité, mais ça devient vite le chaos. Comme nous l'avons vu avec Client B, sans "guardrails", l'IA génère de la dette technique à la vitesse de la lumière. Nous ne vivons pas une disparition. Nous vivons une **accélération**. La "valeur" que nous apportons ne réside plus dans la connaissance de la syntaxe d'une boucle for en Java. Elle réside dans le fait de savoir où placer cette boucle pour qu'elle ne fasse pas crasher le serveur pendant le Black Friday. ## Conclusion Nous n'avons pas de boule de cristal, mais nous avons une direction. Chez BearStudio, nous apprenons en continu. Nous adaptons nos pratiques, nos outils, et notre posture. Ce que nous savons, en revanche, est simple : **Les clients qui réussiront seront ceux qui vont vite.** **Les agences qui réussiront seront celles qui permettent d'aller vite... sans casser le système.** Alors, que vous ayez une idée, un prototype en 2 heures, ou une équipe prête à coder avec nous : venez, construisons la suite ensemble. Plus vite. Nous transformerons cette énergie en produit robuste, scalable et réel. ## Pour aller plus loin Envie d'approfondir le sujet de l'IA côté technique ? Jetez un œil à notre article : - [Découvrir le MCP : une nouvelle approche pour vos agents IA](/fr/blog/articles/decouvrir-le-mcp-une-nouvelle-approche-pour-vos-agents-ia) Plutôt curieux de nos collaborations et de nos retours d'expérience client ? Voici deux études de cas à découvrir : - [Étude de cas UX : Cuisinez pour bébé](/fr/blog/articles/etude-de-cas-ux-cuisinez-pour-bebe) - [Lea English : étude de cas](/fr/blog/articles/lea-english-etude-de-cas) --- ### IA & Client : les "Prototypeurs" URL: https://www.bearstudio.fr/fr/blog/articles/ia-et-client-les-prototypeurs Date: 2026-04-29 Ce n'est pas arrivé au cours d'une confrontation tendue en salle de réunion mais juste une notification Slack, un mardi comme un autre. Nous avions estimé des tickets pour un client (que nous allons appeler « Client A »). Certains, comme la création d’un tchat directement intégré dans l’application, ont été identifiés comme du « travail conséquent ». Autrement dit, ces fonctionnalités demandaient du temps, des tests et un budget conséquent. Puis, on a vu la fameuse notification dans le canal. Client A a expérimenté de son côté une version de l'application comme projet annexe. Il a partagé l'image d'un tchat entièrement fonctionnel avec un indicateur de saisie, accompagnée du message suivant : > Par curiosité, j'ai testé la création d'un tchat hier. Voici le résultat en moins de 2 heures. Pour une équipe de développement, voir une fonctionnalité estimée à plusieurs jours de travail apparaître en « moins de 2 heures » peut provoquer un moment de panique. Sommes-nous trop lents ? Notre expertise est-elle en train de devenir obsolète ? Même notre canal interne s'est animé : « Attends, est-ce qu'on utilise suffisamment ces outils ? Est-ce qu'on est en retard ? » ![This is fine](./images/this-is-fine-meme.jpg) Mais Client A ne cherchait pas à nous piéger. Il ne nous demandait pas de copier-coller aveuglément une génération IA. En réalité, nous n'avons même jamais vu son code, seulement l'interface. Son message était en fait une invitation : il avait confiance en notre capacité à construire une application robuste et maintenable, mais il souhaitait nous pousser à exploiter cette même vitesse brute pour accélérer le processus. ## Client A n'est pas une exception. Il est la nouvelle norme. Depuis l'arrivée de l'IA générative, nous observons un changement dans la manière dont les clients interagissent avec nous. Ils ne sont plus seulement des « prescripteurs » ; ils deviennent des « créateurs ». Certains, comme Client A, utilisent l'IA pour prototyper des visions qu'ils souhaitent nous voir industrialiser. D'autres vont plus loin et veulent « vibe coder » avec nous, produire des fonctionnalités en temps réel tout en attendant de nous que nous garantissions la stabilité de l'ensemble. Chez BearStudio, nous avons compris que nous ne pouvions pas ignorer cette évolution. Nous devions passer du rôle de « constructeurs » à celui de « garants ». **Dans ce premier article, je souhaite montrer comment nous adaptons notre modèle de service à des clients qui codent parfois plus vite que nous, et pourquoi ils ont malgré tout plus que jamais besoin de nous. Un second article suivra prochainement pour explorer un scénario qui va encore plus loin.** ## Le prototype « fantôme » : de gardiens à garants Pour comprendre pourquoi cette interaction avec Client A a été un tournant, il faut revenir à la manière dont nous (et toute l'industrie) fonctionnions encore il y a deux ans. ### L'ancien modèle : le jeu de la « discovery » Avant l'IA, lorsqu'un client souhaitait une fonctionnalité complexe comme un système de tchat, on jouait à une sorte de téléphone arabe. Comme dans ce jeu où un message est chuchoté de personne en personne et se déforme progressivement, l'idée initiale du client évoluait, perdait en clarté ou se transformait au fil des intermédiaires (Product Owner, Designer, Développeur). Chaque étape impliquait une interprétation, avec son lot de malentendus et de dérives par rapport à la vision d'origine. C'était un processus conçu pour limiter les risques, mais il était lent. Si un client arrivait avec son propre code, nous étions les « gardiens ». Nous regardions généralement ses tentatives amateurs, sourions poliment, les mettions de côté, puis réécrivions tout depuis zéro. Nous facturions le « quoi » (la fonctionnalité) et le « comment » (le code). ### Le basculement : l'incident Client A Puis est arrivé le message Slack de Client A. Il ne s'était pas contenté de décrire le tchat ; il l'avait construit. Lorsqu'il nous a proposé de nous montrer sa « plateforme admin » et le tchat qu'il avait développé en moins de 2 heures, il était en réalité un peu inquiet. Il plaisantait en disant qu'il ressentait « une grosse pression », car il savait que son code n'était pas de niveau professionnel. C'est à ce moment-là que notre perception a changé. En interne, la réaction a été brute : > Si un client peut générer une interface en une pause déjeuner, que sommes-nous en train de facturer ? Mais lors de l'échange, la dynamique s'est inversée. Client A n'a pas dit : « J'ai fait votre travail. » Il a dit : « Je peux vous montrer le reste, et vous pourrez me dire à quel point l'IA a probablement mal fait les choses. » Il ne voulait plus que nous construisions le tchat. Il avait déjà « construit » la vision. **Il voulait que nous la professionnalisions.** ### Le futur : le prototype EST la spécification Cette expérience nous a forcés à accepter une nouvelle réalité : le « prototype fantôme » n'est pas un concurrent, c'est la spécification ultime. Au lieu de passer des jours sur des user stories abstraites (« En tant qu'utilisateur, je veux voir un indicateur de saisie »), nous regardions simplement son écran. L'ambiguïté disparaissait. - **Avant** : nous estimions 10 jours pour comprendre le besoin et le construire. - **Aujourd'hui** : nous estimons 5 jours, dont 0 % consacré à deviner, et 100 % dédié à l'architecture, à la sécurité et à l'intégration, le tout accéléré par l'usage de l'IA dans le code. Le code généré par l’IA fonctionnait pour un prototype, mais ne couvrait pas toujours les exigences d’un environnement de production (robustesse, sécurité, passage à l’échelle) ni l’ensemble de nos bonnes pratiques. Et c’est normal : ce n’était pas son rôle. Sa vraie valeur était ailleurs : nous permettre de sauter la phase de « discovery » pour aller directement à l’« engineering ». ![Galaxy brain](./images/galaxy-brain.jpeg) ## Comment cela nous prépare C'est l'avenir de notre métier. Les clients ne viendront plus seulement avec des idées, mais avec des prototypes fonctionnels (mais imparfaits). Notre proposition de valeur évolue. Nous ne sommes plus ceux qui révèlent la magie du code (l'IA s'en charge désormais). Nous sommes ceux qui apportent la certitude de l'ingénierie. **Nous passons du rôle de « constructeurs » à celui de « garants » : les experts capables de transformer une expérimentation excitante et risquée de 2 heures en un produit stable, fiable et rentable.** Mais le cas de Client A reste relativement simple. Il développe dans son environnement, et nous dans le nôtre. Les deux codebases ne se croisaient jamais. Que se passe-t-il lorsque le client ne veut plus seulement vous montrer la direction, mais souhaite conduire avec vous ? On entre alors dans un second scénario, plus disruptif. Nous voyons émerger des équipes techniques qui ne se contentent plus de prototyper avec l'IA : elles livrent des fonctionnalités. Elles ont des budgets serrés, des délais agressifs, et une philosophie qui effraie les CTO traditionnels : le « vibe coding ». Elles ne veulent pas que nous reconstruisions tout. Elles veulent coder avec nous. **Dans le prochain article, je détaillerais ce nouveau modèle de co-construction, ses risques, et les "guardrails" que nous avons mis en place pour éviter que la vitesse ne se transforme en chaos.** ## Pour aller plus loin Envie d'approfondir le sujet de l'IA côté technique ? Jetez un œil à notre article : - [Découvrir le MCP : une nouvelle approche pour vos agents IA](/fr/blog/articles/decouvrir-le-mcp-une-nouvelle-approche-pour-vos-agents-ia) Plutôt curieux de nos collaborations et de nos retours d'expérience client ? Voici deux études de cas à découvrir : - [Étude de cas UX : Cuisinez pour bébé](/fr/blog/articles/etude-de-cas-ux-cuisinez-pour-bebe) - [Lea English : étude de cas](/fr/blog/articles/lea-english-etude-de-cas) --- ### Retour d’expérience : travailler depuis l’autre bout du monde URL: https://www.bearstudio.fr/fr/blog/articles/travailler-depuis-l-autre-bout-du-monde Date: 2026-04-16 L’année dernière, j’ai eu l’opportunité de partir deux semaines au Vietnam dans un cadre privé. L’idée n’était pas de prendre des vacances mais bien de télétravailler depuis l’étranger, avec une organisation pensée pour rester aligné avec mon équipe et avec mon entreprise en France. Mon objectif était simple : voir s’il était possible de concilier travail efficace, décalage horaire et découverte d’un pays, sans sacrifier la qualité des échanges et du travail, ni le plaisir d'être sur place. --- ## Décalage horaire : le vrai défi La première chose évidente à prendre en compte dans ce genre de projet, c’est le décalage horaire, dans mon cas il y avait 6 heures. Il faut donc réfléchir à aménager ses journées et ses horaires de travail pour essayer d’être le plus possible synchronisé avec son équipe en France. Au Vietnam, je travaillais de **13h à 20h**. Cela correspond à **7h - 14h en France**, ce qui permettait : - d’avoir **2h de focus seul**, l’équipe française commençant à 9h - d’avoir **5h en commun** avec mon équipe de travail - d’assister aux **réunions importantes** - de profiter du **matin et du soir pour visiter** Par chance, mes réunions importantes étaient toutes le matin, je n’ai donc pas eu d'aménagement particulier à faire à ce niveau-là. Mais c’est un point essentiel à anticiper : - Avez-vous des réunions à des horaires contraignants ? - Sont-elles obligatoires ? - Sont-elles adaptables ? Ou est-ce à vous d'aménager votre emploi du temps ? > Exemple : une réunion à 15h en France correspond à 21h au Vietnam. On peut imaginer qu’une réunion avec trois ou quatre collaborateurs peut être replanifiée exceptionnellement, alors qu’une guilde mobilisant des dizaines de personnes non. ### Les 2 heures seul : contrainte ou opportunité ? Les 2 heures seul en début de journée peuvent apparaître comme une contrainte, mais c’était en réalité **un atout majeur** pour moi. Bien sûr, cela me permettait de **rester concentré** pendant une longue plage horaire et de faire avancer mes sujets, mais il y avait d’autres avantages. Les POs du projet avaient tendance à commencer leur journée plus tôt que l’équipe de développement. Cette plage de 2 heures me permettait donc d’**échanger beaucoup plus facilement** avec eux, avant qu’ils ne soient débordés. Un autre aspect positif était ma **disponibilité**. À l’époque, nous venions de mettre en production l’application, nous étions donc dans une période de stabilisation. Savoir que j’étais connecté dès 7h et disponible pour corriger des retours ou des situations d’urgence rassurait l’équipe. Cependant, cet avantage demande de l’**anticipation**. Si je me retrouvais bloqué dès le début de ma journée, je devais attendre 2 heures avant de pouvoir solliciter quelqu’un. 👉 Tous les jours, avant de partir, je faisais donc une rapide analyse pour m’assurer d’avoir tout ce qu’il me fallait pour le lendemain. ### Une journée bien structurée Ainsi, mes journées s’organisaient de la manière suivante : - **Matin** : visites, découvertes et déjeuner - **13h - 20h** : travail - **Soirée** : restaurants et balades Je respectais mes 7 heures de travail par jour, sans pour autant délaisser l’aspect touristique. 👉 Ce n’était pas du “travail entre deux visites”, mais une vraie **journée structurée**. --- ## Matériel et conditions de travail ### D’un hôtel à un restaurant en bord de mer Pour rester fiable à distance, il faut anticiper deux choses : une **connexion**… et un **plan B**. Concrètement ça veut dire : - Sélectionner des hôtels avec **Wi-Fi** - Acheter une carte SIM vietnamienne avec **4G illimitée** (facile à obtenir et avec une excellente couverture) Ainsi, je pouvais passer en partage de connexion si le Wi-Fi faiblissait. Cela peut paraître évident, mais c’est un point important à étudier pour être sûr de ne manquer aucune réunion et vous éviter l’anxiété de la coupure internet. Sans oublier la liberté qu’offre l’assurance d’une connexion stable, vous pourriez même finir par travailler dans un restaurant au bord de la mer… 👀 ### Qu’est-ce qu’on emmène ? Le matériel est un point clé, mais en avion on ne peut pas tout emporter. Chaque gramme compte, donc plus que jamais je me suis demandé : **de quoi ai-je VRAIMENT besoin ?** Voici ce que j’ai emmené : - **PC portable et son chargeur** - évidemment - **Une souris sans fil légère** - j’ai pris l’habitude de travailler à la souris - **Un hub** - plus petit que celui que j’utilise d’habitude - **Un casque compact avec réduction de bruit** - pratique pour travailler dans des lieux bruyants et rester focus - **Un sac adapté** - on n’y pense pas tout de suite mais réfléchir au soin du matériel et à son propre confort est important Cette liste reflète ce dont j’ai **personnellement** besoin pour travailler, mais en fonction de **votre ordinateur** ou de **vos habitudes**, elle peut varier : peut-être que vous ne prendriez pas de souris ou de hub, peut-être que vous prendriez un écran portable en plus, bref tout est possible. 👉 Le plus important : **ne partez pas chargé, partez optimisé.** Chaque objet doit avoir une utilité réelle et régulière, pas juste être là “au cas où”. --- ## Travailler seul… mais en équipe On a vu le décalage horaire, on a vu le matériel et les conditions de travail, mais il reste un point important : votre équipe. Parce que oui, vous êtes seul à l’autre bout du monde mais il faut continuer à faire avancer le projet collectivement. Alors, comment on fait ? Déjà il faut anticiper la distance. Dans mon cas, j'avais déjà une partie de mon équipe qui travaillait depuis le Maroc, donc nous avions pris l’habitude et mis en place les process pour travailler avec des gens sans être dans les mêmes bureaux. La distance n’a donc pas été un défi à relever pour moi, mais c’est une composante à prendre en compte en fonction de votre situation. Le vrai enjeu pour moi c’était le décalage horaire. Et le point le plus important pour que tout se passe au mieux, c’est la **communication**. Voici quelques exemples de choses que j’ai mis en place : - Annoncer clairement mes **horaires de travail** (locales et françaises) - Mettre tous les jours un message pour dire “**Bonjour**” quand je commence à travailler - Et mettre un message pour dire “**Au revoir**” quand j’arrête de travailler - Renseigner mon **agenda** pour éviter les surprises - Caler les **réunions** dans les fenêtres communes - Basculer sur un mode **communication asynchrone** sur certains sujets 🎯 Objectif : être **loin géographiquement**, mais rester **proche de l’équipe**. --- ## Une bonne expérience ? Une telle expérience met en lumière de nombreux points positifs : - De **longues plages de travail** concentré où j’ai pu faire avancer mes sujets - Une **motivation “naturelle”** liée au changement d’environnement - Un **vrai équilibre** entre tourisme le matin et travail l’après-midi - Entretenir une **discipline** et une **rigueur personnelle** Mais il ne faut pas tout idéaliser non plus : - La **fatigue** liée au décalage horaire et au rythme soutenu des journées - L’**envie de tout faire** (notamment en termes de visites), il faut savoir aussi se reposer pour ne pas craquer - Une **logistique permanente** à gérer - Besoin d’une grande **auto-discipline** 👉 En réalité, tout repose sur un **état d’esprit** : ce n’est pas du “travail en vacances”, c’est du **travail dans un autre cadre**. --- ## Bilan et conseils Même si l’expérience a été fatigante, elle reste extrêmement positive. Elle m’a permis de : découvrir un pays, continuer à travailler efficacement et me prouver ma capacité d’adaptation et mon auto-discipline. 👉 Je recommande vivement l’expérience. Mais, vous l’aurez compris, tout cela ne se fait pas sans réflexion et anticipation. Voici donc, selon moi, les **conseils les plus importants à retenir** : - Vérifier et cadrer l’accord organisationnel avec votre entreprise - Prendre une carte SIM avec 4G illimitée pour éviter tout problème - Définir des horaires de travail fixes et les respecter - Réduire son matériel au strict nécessaire - Investir dans un bon casque compact à réduction de bruit - Penser son sac à dos comme un bureau portable - Ne pas hésiter à poser quelques jours de congés pour profiter pleinement Travailler à l’autre bout du monde sans perdre en efficacité, **c’est possible**. Et surtout : **je le referai.** --- ### Déployer Start UI Web sur Upsun URL: https://www.bearstudio.fr/fr/blog/articles/deployer-start-ui-web-sur-upsun Date: 2026-03-31 ## Avant-propos Dans le cadre d'une exploration des solutions de déploiement modernes, j'ai testé [Upsun](https://upsun.com/), une plateforme PaaS récente proposée par les créateurs de Platform.sh. L'objectif était double : - **Évaluer Upsun comme alternative à Clever Cloud**, que j'utilise déjà, afin de comparer l'expérience développeur, la configuration et l'ergonomie. - **Tester un déploiement initial** ("from scratch") **sans connaissance préalable d'Upsun ni expérience en devops**. La perspective adoptée est celle d'une développeuse découvrant l'outil. Pour ce test, j'ai choisi de déployer notre outil maison [Start UI Web](https://start-ui.com/), un starter d'application moderne basé sur React, Vite et Node.js, que nous utilisons régulièrement comme base de projets front-end. (Pour en savoir plus, vous pouvez lire dès maintenant notre [article de présentation Start UI](/fr/blog/articles/start-ui) !) Cet article se veut volontairement pragmatique : il mélange **tutoriel pas à pas** et **retour d'expérience**, avec ses points forts, ses frictions et ses limites. --- ## Étape 1 : Création d'un compte sur Upsun Un compte doit être créé sur la plateforme Upsun via la console officielle. _⚠️ Ce tutoriel a été réalisé sur Upsun v3.3.45 !_ Inscription via email ou fournisseur tiers (GitHub, Google, etc.). Une période d'essai gratuite de 15 jours est proposée. Elle permet d'accéder à un seul projet pendant cette durée limitée, avec les ressources suivantes : 1 organisation (avec 1 projet et 2 running environments) et un nombre de users illimités. À la fin de l'essai, votre projet sera suspendu jusqu'à ce que vous ajoutiez un mode de paiement valide à votre compte. Une fois connecté, il est donc nécessaire d’activer un projet afin de pouvoir procéder aux déploiements. Jusque là, une interface prometteuse, et un début de mise en place classique ! --- ## Étape 2 : Fork / Init du dépôt Start UI Web v3 et configuration locale Le dépôt officiel Start UI Web v3 peut être forké depuis le [repository GitHub de BearStudio](https://github.com/BearStudio/start-ui-web). Ce fork permet de disposer d’une copie du projet sous son propre compte GitHub. Le projet forké doit ensuite être cloné en local afin de vérifier que l’installation fonctionne correctement avant tout déploiement. La documentation officielle de Start UI Web précise que le projet nécessite une version récente de Node.js ainsi que l’utilisation de [pnpm](https://pnpm.io/) comme gestionnaire de dépendances. Un fichier d’environnement local peut être généré à partir du fichier d’exemple fourni afin de permettre un démarrage en local. Alternativement, pour initialiser un projet, on peut utiliser `pnpm create start-ui -t web myApp`. Il est ensuite impératif de pousser le projet sur un dépôt GitHub pour qu'il soit éligible au déploiement (les deux solutions ont été testées et fonctionnent aussi bien l’une que l’autre !). --- ## Étape 3 : Synchronisation d'un dépôt GitHub avec Upsun Upsun permet de synchroniser directement un dépôt GitHub à l’aide d’une intégration native. Il convient d’ajouter une intégration GitHub depuis les paramètres du projet Upsun, puis de sélectionner le dépôt cloné ou créer de Start UI Web. Cette intégration permet à Upsun de déclencher automatiquement un déploiement à chaque modification poussée sur la branche configurée. Dans ce mode de fonctionnement, les déploiements sont pilotés par GitHub et non par un push direct vers une remote Upsun. Il est également possible de configurer le déploiement manuel et de désactiver l'automatisation. ![Tableau de bord d'Upsun. L'interface nous invite à créer un projet pour déployer notre application.](images/upsun-dashboard-onboarding.png) ![Modale d'authentification Upsun. Présente les permissions qui seront accordées à Upsun après la connexion avec Github.](images/upsun-modal-authenticated.png) ![Installation de Upsun PaaS, sélection de l'espace de travail.](images/install-upsun-PaaS.png) ![Modale de permissions suite à l'installation de Upsun PaaS.](images/authorize-upsun-PaaS.png) C’est à partir de cette étape que les choses se sont corsées :( Une fois que j’ai sélectionné l’option “Sync Github repository” puis validé sur Github le choix du repo, j’ai été redirigé vers Upsun avec une erreur. J’ai recommencé 2 fois l’étape pour y arriver, utiliser deux repos différents avant de retenter celui de Start UI, pas d’explication particulière mais c’est passé ! 🤷🏼‍♀️ ![Page d'erreur de Upsun lors d'une tentative de synchronisation de repository Github.](images/upsun-invalid-installation.png) --- ## Étape 4 : Configuration initiale du projet Upsun Une fois le projet lié à Upsun, une initialisation doit être effectuée afin de générer les fichiers de configuration nécessaires. Cette étape permet de : - définir la technologie utilisée (Node.js), - ajouter les services nécessaires comme une base de données, - générer automatiquement un dossier `.upsun` à la racine du projet, - créer un fichier de configuration principal et un fichier `.environment`. À ce stade, la configuration générée peut être conservée telle quelle. Un premier déploiement est ensuite déclenché après un commit et un push. J’ai supposé qu’il est normal que ce premier déploiement échoue ou ne produise aucun build fonctionnel, car les instructions spécifiques à l’application ne sont pas encore définies. ![Modale de création de projet Upsun.](images/upsun-project-details.png) ![Configuration du nouveau projet Upsun - première partie](images/upsun-prepare-project.png) ![Configuration du nouveau projet Upsun - seconde partie](images/upsun-prepare-project-suite.png) ![Récapitulatif du nouveau projet Upsun créé.](images/upsun-prepare-project-success.png) J’ai tenté d’utiliser l’option de génération assistée par IA pour l’initialisation de la configuration du projet mais ça a été un échec. J'espérais une solution miracle pour un déploiement en un clic. Cependant, ne maîtrisant ni le code, ni sa conception, ni sa raison d'être, j'ai préféré repartir d'une configuration manuelle. J'ai dû la revoir plusieurs fois avant de comprendre les champs absolument nécessaires (les hooks, la commande de start, les variables d’environnements,..). --- ## Étape 5 : Récupération des URLs de l’application et de la base de données L’URL publique de l’application est visible directement dans l’interface Upsun, dans la section dédiée aux environnements et aux routes. Les informations de connexion à la base de données sont accessibles via les relations Upsun. Ces relations permettent d’obtenir l’hôte, le port, le nom de la base, l’utilisateur et le mot de passe nécessaires à la construction de l’URL de connexion. Ces informations sont indispensables pour compléter la configuration de l’application mais ne sont pourtant pas facilement accessibles. Il est nécessaire de chercher un peu dans la documentation pour trouver comment accéder aux paramètres d'Upsun et les vérifier. ![Commande "upsun relationships" pour retrouver les infos de la base de données.](images/upsun-infos-base-de-donnees.png) --- ## Étape 6 : Personnalisation du fichier de configuration Upsun Le fichier de configuration situé dans le dossier `.upsun` doit être adapté aux besoins de Start UI Web. ### Variables d’environnement Les variables sensibles ne doivent pas être stockées en clair dans le dépôt lorsque cela est évitable comme par exemple dans le fichier de configuration Upsun qui sera push sur la branche (et là je ne parle pas du tout par expérience 😇…). Upsun permet de définir des variables par environnement directement depuis l’interface de gestion, mais elles sont à remplir une par une ! Le fichier `.environment`, quant à lui, est utilisé par Upsun pour connecter automatiquement l’application aux services déclarés. Il n’a pas vocation à contenir l’ensemble des variables applicatives et ce n’est pas non plus une simple copie du `.env`. Pour Start UI j’ai laissé les variables d’environnement liées à la base de données qui ont été automatiquement ajoutées. J’ai ensuite mis les variables d’environnement suivantes dans l’interface : - la chaîne de connexion à la base de données, - les secrets d’authentification, - les paramètres liés aux sessions, - les variables utilisées par Vite pour l’interface, - l’environnement d’exécution. Le menu pour renseigner les variables est accessible depuis les options du menu principal (que je n’ai pas arrêté de chercher en onglet à côté de l’overview 😅). ![Tableau de bord - Gestion générale du projet Upsun.](images/upsun-deployment-dashboard.png) ![Tableau de bord - Gestion des variables d'environnement du projet Upsun.](images/upsun-deployment-environment-variables.png) ![Page de création d'une nouvelle variable d'environnement sur le projet Upsun.](images/upsun-deployment-create-new-environment-variables.png) ### Hook de build et de déploiement Les hooks Upsun doivent être configurés afin d’installer les dépendances, construire l’application et exécuter les scripts nécessaires au bon fonctionnement de Start UI Web. Le **hook de build** est utilisé pour installer les dépendances et générer le build de production. Le `–ignore-scripts` lors de l’installation reste important pour éviter la configuration de husky et des hooks git qui viennent polluer les logs de pleins d’erreurs. Dans notre cas : ```bash npm i -g pnpm npm-run-all pnpm install --ignore-scripts pnpm postinstall pnpm build ``` ![Fichier de configuration - Hook de build](images/upsun-hook-build.png) Le **hook de déploiement** permet d’exécuter les scripts liés à l’initialisation de la base de données. Dans notre cas : `pnpm db:init` ![Fichier de configuration - Hook de déploiement](images/upsun-hook-deploy.png) Ces hooks sont exécutés automatiquement par Upsun à chaque déploiement. ### Lancement de l’application Ne pas oublier de modifier la commande de la partie `web > commands > start` : `pnpm start`. ![Fichier de configuration - Modifier la commande de lancement du projet.](images/upsun-command-start.png) Après de multiples tentatives, ce sont normalement les seules commandes nécessaires. --- ## Étape 7 : Commit, push et déploiement Une fois la configuration finalisée, les modifications doivent être ajoutées au dépôt Git et poussées sur la branche suivie par Upsun. Si une intégration GitHub est utilisée, le simple fait de pousser sur le dépôt distant déclenche automatiquement le déploiement sur Upsun (`git push` déploie sur Upsun, et `upsun push` pousse également sur GitHub). Sans intégration, le push doit être effectué vers la remote Upsun. Le premier déploiement complet peut prendre plusieurs dizaines de minutes ⏱️. --- ## Étape 8 : Accès à l’application déployée Après la fin du déploiement, l’application est accessible via l’URL fournie par Upsun. Un court délai supplémentaire peut être nécessaire lors du premier chargement, notamment si la base de données est en cours d’initialisation. (+3min ⏱️) ![Page de connexion du Start UI déployé](images/start-ui-login-deployed.jpeg) ![Tableau de bord du Start UI déployé](images/start-ui-dashboard-deployed.png) --- ## Commandes, conseils et remarques complémentaires ### Consultation des logs L’interface Upsun affiche principalement les logs liés aux phases de build et de déploiement (mais ils mériteraient un scroll automatique pour garder les logs les plus récents à l’écran). Pour consulter les logs d’exécution de l’application, il est nécessaire d’utiliser la commande dédiée via l’outil en ligne de commande Upsun : `upsun log` (`upsun log app`, `upsun log deploy`, etc.). Il est également possible d’accéder à la machine en SSH afin d’inspecter les fichiers de logs générés par l’application mais c’est dommage de pas pouvoir les voir depuis l’interface. ### Connexion en SSH Upsun fournit un accès **SSH** directement depuis son interface. Cet accès permet de diagnostiquer les problèmes, consulter les fichiers générés ou vérifier l’état de l’application en cours d’exécution. ![Ajout d'une connexion SSH sur le projet Upsun.](images/upsun-SSH-connexion.png) ### Ports et gestion des variables d’environnement Upsun ne permet pas l’utilisation de ports **statiques** exposés manuellement. Les ports sont attribués **dynamiquement** et gérés automatiquement par la plateforme. Cela n’impacte pas le fonctionnement de Start UI Web, qui s’appuie sur les mécanismes standards de déploiement fournis par Upsun. L’**onglet « variables d’environnement »** de l’interface Upsun permet de définir des valeurs spécifiques à un environnement donné. Les variables définies dans le fichier de configuration ne sont pas dupliquées automatiquement dans cette interface, car elles répondent à des usages différents mais c’est ici que je m’attendais à les retrouver. Les variables **statiques** définies dans le fichier de configuration sont versionnées et **communes** à tous les environnements, tandis que celles définies via l’**interface** peuvent **varier** selon les **contextes** (production, staging, etc.). --- ## Retour d'expérience et pistes d'améliorations ### Problèmes d’interface et d’ergonomie - Le temps de déploiement affiché dans l’interface est de **6 minutes**, alors qu’en réalité il dépasse souvent **20 minutes**, ce qui est un peu frustrant 😅. - L’interface n’est pas spécialement intuitive, le bouton “Redéployer” manque de visibilité, des options sont répétitives et se retrouvent dans plusieurs sous menus, l’accès à certains onglets n’est pas clairement indiqué, et il y a pas mal de menus, boutons et tabs aux styles différents. - Les modales sont assez peu ergonomiques et rendent l’expérience moins fluide : - devoir cliquer sur “Options” puis sur un bouton, - ou passer par le bouton de statut pour effectuer une action. - Les **options situées dans la colonne de gauche** ne sont pas très bien mises en avant et assez peu lisibles. ![Zoom sur les options sur le tableau de bord du projet Upsun.](images/upsun-deployment-options.png) - Certaines cards ou éléments ont un effet hover alors qu’elles ne sont pas cliquables, ce qui crée de la confusion. ![Tableau de bord du projet Upsun - Hoover inutile sur des cards non cliquables.](images/upsun-hoover-card.png) - Il y a **trop de boutons “Options”**, souvent redondants et proposant les mêmes actions à plusieurs endroits. - La sélection de l’environnement et de la branche n’est pas intuitive, et aucune branche n’est sélectionnée par défaut. - Tous les tooltips s’affichent en même temps sur les pages contenant des graphes, ce qui surcharge l’interface et peut nuire à la compréhension. ### Variables d'environnement - Les variables d’environnement utilisées dans le `config.yaml` ne sont pas clairement retranscrites dans l’interface, et le menu dédié est difficile d’accès. - L’ajout par l’interface des variables d’environnement une par une est frustrant. - Une fois une variable d’environnement créée, il est impossible d’en modifier le nom, ce qui est contraignant. ### Déploiement & erreurs - Le bouton permettant de créer une nouvelle branche affiche “Cannot create a new branch” sans fournir d’explication, ce qui rend le problème difficile à diagnostiquer (à ce jour je ne sais toujours pas 😅). - En naviguant entre les onglets, il arrive qu’un problème de fetch fasse disparaître l’historique des déploiements, ce qui est perturbant parce que d’un coup il n’y a plus rien. ### Logs et observabilité - La consultation des logs via l’interface est peu pratique : La modale comporte un scroll interne en plus du scroll de la page, il n’y a pas de scroll automatique lorsque de nouveaux logs apparaissent, et pour consulter les logs applicatifs, il faut passer par SSH + `cat` ou utiliser `upsun log`, ce qui n’est pas vraiment l’idéal. ### Facturation et paiement - Il est possible de ne pas renseigner de moyen de paiement, tout en recevant malgré tout une facture, ce qui est incohérent mais permet de se projeter sur les coûts. - Le dark mode est à revoir, notamment la modale de paiement dans l’onglet Billing Details, qui fait mal aux yeux ! ![Tableau de bord du projet Upsun version dark mode.](images/upsun-dark-mode.png) - Certains utilisateurs doivent confirmer leur identité avec une carte bancaire, tandis que d’autres non, sans logique apparente (j’ai fait parti de la seconde catégorie 😝). - Il est impossible de consulter le moyen de paiement enregistré au moment de l’identification (à vérifier si c’est bien précisé qu’ils ne sauvegardent pas les informations). ### Autres remarques UI - Dans l’onglet Backup, le bouton “i” situé sous le titre n’est pas clair. - Le bouton “Manage schedule” manque de cohérence visuelle avec le reste de l’interface et n’est pas esthétique. --- ## Conclusion Déployer Start UI Web v3 sur Upsun est tout à fait possible et fonctionne correctement une fois la configuration en place. Cependant, **la courbe d’apprentissage est réelle**, notamment pour une développeuse junior ou quelqu’un découvrant Upsun sans accompagnement. Upsun propose une base technique solide, mais son **ergonomie et sa DX gagneraient à être simplifiées**, en particulier sur : - la gestion des variables - la lisibilité des erreurs - l’accès aux logs En tant qu’alternative à Clever Cloud, Upsun mérite clairement d’être testé, mais demande aujourd’hui un investissement initial qui m’a semblé assez important. Si vous souhaitez aller plus loin, vous pouvez découvrir nos librairies open-source _made-in-BearStudio_ : [UI-State](/fr/blog/articles/pourquoi-on-a-cree-ui-state) et [Ficus UI](/fr/blog/articles/ficus-ui-ui-simple-et-composable-pour-react-native). --- ### Pourquoi on a migré de WordPress vers Astro URL: https://www.bearstudio.fr/fr/blog/articles/pourquoi-on-a-migre-bearstudiofr-de-wordpress-vers-astro Date: 2026-03-17 _En février 2026, on a finalement franchi le pas : bearstudio.fr tourne désormais sous Astro. Voici le retour d'expérience complet d'une refonte de ~200 pages, une trentaine de jours de travail collectif, et une vraie fierté d'équipe. Un article qui intéressera particulièrement les équipes tech, les développeurs React et plus globalement front-end, et quiconque envisage de s'affranchir de WordPress._ --- ## Un peu d'histoire : trois versions, trois époques Le site de BearStudio a connu trois vies.
![Première version du site bearstudio.fr développé en 2016](images/premiere-version-du-site-developpee-en-2016.jpeg)
La première version du site développée en 2016. Cette capture est issue de Internet Archive.
La première version, dont il existe [une archive datant de novembre 2016](https://web.archive.org/web/20161107063014/http://www.bearstudio.fr/), tournait sur **GravCMS**, un CMS à base de fichiers, sans base de données. En [novembre 2019](https://web.archive.org/web/20191117075057/https://www.bearstudio.fr/), on est passés à WordPress, la solution évidente à l'époque, celle qui "fonctionnait". Et pendant plus de six ans, ça a tourné. Jusqu'en février 2026, où on a tout migré vers [Astro](https://astro.build/).
![Deuxième version du site de bearstudio.fr](images/deuxieme-version-du-site-mis-en-production-fin-2019.jpeg)
Deuxième version du site, mis en production en novembre 2019
Ce n'est pas une décision prise à la légère. C'est le résultat d'années de frictions accumulées, de dette technique qui s'entassait, et de l'envie de reprendre la main sur notre propre outil. --- ## Ce qui a fini par nous convaincre de quitter WordPress WordPress, c'est une solution qui a fait ses preuves. Mais au fil du temps, plusieurs problèmes sont devenus impossibles à ignorer. ### La Developer Experience, une vraie galère Le workflow était pénible. On avait les sources sur GitHub qu'il fallait déployer sur l'instance WordPress. Lent, fastidieux, source d'erreurs. Pour une agence de développement dont c'est le site vitrine, c'est difficile à accepter sur le long terme. On entassait de la dette technique sur un outil qu'on ne maîtrisait pas complètement. ### Les performances, un plafond de verre WordPress fait du rendu côté serveur par défaut. Résultat : des pages qui peuvent mettre du temps à charger, des [scores Lighthouse](/fr/blog/articles/checklist-seo-technique) décevants, un ressenti utilisateur en dessous de ce qu'on attendait pour notre propre site. Passer à de la génération statique avec Astro a changé la donne de façon drastique. ### La sécurité, un risque permanent Le code de WordPress est très répandu, ce qui en fait une cible de choix. Les mises à jour de sécurité s'enchaînent, les plugins peuvent introduire des vulnérabilités. Pour un site statique généré à la compilation, la surface d'attaque est quasi nulle. Et notre nouveau site est entièrement open source, consultable sur GitHub, une posture en accord avec nos valeurs et notre implication dans la communauté. ### Les coûts, un poste optimisable On utilisait WP Engine pour l'hébergement : environ 300 $ par an. Aujourd'hui, on est sur un compte partagé qui couvre plusieurs de nos applications pour 20 $ par mois, répartis sur l'ensemble de nos projets. Bien plus rentable à l'échelle. ### Une stack qui n'évoluait plus avec nous C'était aussi l'occasion parfaite de revoir nos offres à l'ère de l'IA. Nos processus de développement ont profondément évolué : on intègre aujourd'hui l'IA dans nos workflows et dans les projets qu'on accompagne. Autant que notre site vitrine le reflète clairement, pour les clients qui nous découvrent. --- ## Pourquoi Astro plutôt que Next.js, Nuxt ou Gatsby ? On avait déjà de l'expérience sur d'autres solutions. J'avais notamment travaillé sur le site de Codeurs en Seine avec Gatsby, puis on avait migré ce même site vers Next.js avec ContentLayer pour la gestion des fichiers Markdown. C'était assez lourd et l'écosystème était assez passif, ContentLayer n'évoluait plus. Astro s'est distingué sur plusieurs points : **La gestion de contenu intégrée** : Astro permet de définir des schémas de contenu directement dans le code. Si un champ est manquant ou mal renseigné dans un fichier Markdown, le build plante avec un message d'erreur explicite. C'est un filet de sécurité extrêmement pratique au quotidien. **Les performances par défaut** : Astro adopte une approche "zéro JavaScript côté client par défaut", ce qui favorise des sites ultra-rapides sans configuration particulière. **La flexibilité des Astro Islands** : on peut intégrer des composants React, Vue ou Svelte uniquement là où c'est nécessaire, sans charger un framework entier pour toute la page. On a choisi de ne pas utiliser de CMS headless (on avait d'ailleurs exploré [Outstatic](/fr/blog/articles/gerer-facilement-le-contenu-de-votre-site-avec-outstatic) par le passé). Tout le contenu est géré en fichiers Markdown ou MDX (pour les articles qui nécessitent des composants React embarqués). Simple, versionné avec le code, sans dépendance externe. Ce qui ressemblait à une contrainte est devenu un avantage : tout est au même endroit, tout le contexte est disponible, et avec l'IA, c'est une vraie force. --- ## Une refonte, pas juste une migration La trentaine de jours nécessaires inclut bien plus que du développement pur. Voici comment le projet s'est réparti :
![Sur la gauche, le sitemap en mindmap du nouveau site bearstudio.fr, sur la droite, des captures d'écran et des liens vers des concurrents](images/veille-concurentielle-et-sitemap.jpeg)
La veille concurentielle et le découpage des informations ont été une majeure partie du temps pris pour ce nouveau site.
- **La réflexion en amont et la veille concurrentielle** pour définir la direction du nouveau site, j'ai effectivement passé pas mal de temps à voir ce qui se faisait ailleurs à l'international - **La mise en place du socle technique** par [Grégoire](/fr/equipe/gregoire-protas) et [Noé](/fr/equipe/noe-tatoud) - **Le développement et le design** portés principalement par [Ivan](/fr/equipe/ivan-dalmet) et moi - **Le travail éditorial et SEO** pour ne rien perdre des acquis et affiner le message marketing
![Capture d'écran de Figma où l'on peut voir un rapide wireframe.](images/reflexion-de-decoupage-du-nouveau-site.jpeg)
Beaucoup de réflexion sur le découpage des blocs du site.
Désormais, c'est toute l'équipe qui va pouvoir contribuer, que ce soit technique ou via des articles de blog. ### Un vrai travail éditorial On est partis d'environ 200 pages, articles de blog, pages de prestations, membres de l'équipe, pages de contact, et on en a profité pour **retravailler le contenu marketing en profondeur** : fusion des catégories front-end et back-end sous un seul axe "développement web", ajout d'une catégorie "boost de projet" et d'une catégorie dédiée à l'IA. Ce n'était pas juste une migration technique. ### La partie la plus complexe : le système de traduction Le défi technique le plus chronophage a été la gestion du multilingue. On voulait un site disponible en français et en anglais, on a déjà des clients internationaux et on est actifs dans la communauté open source et React. On accompagne aussi des startups et des équipes tech en tant que partenaire de développement ou dans un rôle proche de l'accompagnement CTO, et dans ce contexte, parler anglais couramment, y compris sur notre site, est indispensable. Astro ne fournit pas de solution built-in complète pour les traductions (mais fournit quelques solutions minimales). Il a fallu construire une solution custom, avec des subtilités à gérer notamment autour des collections mais également des **Astro Islands** : quand on passe des props dans des composants interactifs, il faut être vigilant pour ne pas alourdir inutilement le bundle envoyé au client. ### Le SEO, un chantier à part entière On avait plusieurs années de travail SEO sur l'ancienne version. Hors de question de tout perdre. Un gros travail de mapping des URLs, de mise en place des redirections et de vérification des balises a été réalisé pour préserver les acquis. --- ## Les grands changements du nouveau site ### Un design repensé, une image de marque préservée Ivan a fait un passage de design fort, tout en gardant notre identité visuelle. Les couleurs de BearStudio, le bleu et le jaune, sont toujours là, mais leur usage a été rationalisé. Sur l'ancien site, le jaune était omniprésent au point d'être "too much". Le nouveau design l'utilise de manière plus chirurgicale, là où il crée vraiment de l'impact. ### Des choix UX orientés humains et clarté Le nouveau site met davantage en avant les personnes qui composent BearStudio. La navigation est plus claire, l'accès aux offres plus direct. On a aussi introduit une communication plus indirecte et mémorable via les "polaroids", un élément visuel qui crée de la personnalité sans surcharger la page. La page blog illustre parfaitement cette évolution : plusieurs articles sont désormais immédiatement visibles, même sur mobile, ce qui n'était pas le cas avec l'ancien thème WordPress. ### Un site qui parle aussi aux clients internationaux La version anglaise du site était une priorité. Se positionner sur la langue de Shakespeare nous ouvre des portes avec des clients et des communautés qu'on ne touchait pas suffisamment jusqu'ici. Et on ne va pas se le cacher, c'est aussi beaucoup plus simple aujourd'hui grâce à l'IA, on fait une passe rapide, on relit, et on a notre page. --- ## Ce qu'on a gagné au quotidien **Performances** : le chargement est nettement plus rapide. La génération statique fait son travail, couplée à une [optimisation des images](/fr/blog/articles/optimiser-images-site-web) native dans Astro. **Sérénité** : on a la main sur l'intégralité de la stack. Pas de plugin mystérieux, pas de mise à jour WordPress à la chaîne, pas de workflow de déploiement bancal. On écrit du code, on pousse sur GitHub, c'est en ligne (et on a même les prévisualisations des changements avant les mises en production, pratique pour tester). **Maîtrise** : on n'a pas d'équipe marketing dédiée à la mise à jour du site. Avoir une stack qu'on connaît sur le bout des doigts, c'est ce qui rend tout ça viable et agréable au long terme. --- ## À qui recommander cette migration ? Astro est un excellent choix pour **tout site majoritairement statique** : site vitrine, portfolio, blog, site d'agence. Si votre contenu est stable et que vous voulez des performances maximales sans sacrifier la flexibilité, Astro coche toutes les cases. En revanche, si vous avez une grosse équipe non-technique qui doit mettre à jour le contenu au quotidien, l'absence d'interface CMS peut devenir un frein. Dans ce cas, une combinaison Astro + CMS headless (Sanity, Contentful, Directus…) sera plus adaptée. **Un conseil** : ne réduisez pas la migration à un exercice technique. C'est l'occasion idéale de retravailler votre contenu, clarifier votre message et moderniser votre design. C'est ce qu'on a fait, et c'est clairement ce qui fait la différence. --- ## Et après ? Ce qu'on prépare pour la suite La migration n'est pas une fin en soi. C'est une base saine sur laquelle on va continuer de construire. ### Du contenu qui reflète vraiment qui on est L'objectif du site à terme, c'est d'être une vraie vitrine de BearStudio : qui on est, ce qu'on fait, et les humains derrière tout ça. Presque une base de données publique de nous-mêmes, un endroit où l'on rend accessible au public tout ce qu'on a en interne : nos technologies, notre façon de travailler, nos projets open source, comme [Start UI](/fr/blog/articles/start-ui). Dans ce sens, on prépare plusieurs nouvelles sections. Une dédiée aux **événements**, pour savoir où retrouver la team BearStudio dans la vraie vie, que ce soit des meetups, des conférences ou des événements de la communauté React et open source. Une autre centrée sur les **technologies qu'on utilise** et sur nos contributions open source, pour documenter nos choix techniques et partager ce qu'on construit. ### L'IA, déjà dans le site On a commencé à préparer le site pour l'ère des agents et des LLMs. Un fichier `llms.txt` est déjà en place à la racine, et tous les articles de blog sont accessibles en Markdown en suffixant `.md` ([exemple avec cet article](/fr/blog/articles/pourquoi-on-a-migre-bearstudiofr-de-wordpress-vers-astro.md)) à n'importe quelle URL. Le site est pensé pour être lisible aussi bien par des humains que par des IA. Et en interne, on utilise **Claude Code** au quotidien pour construire les évolutions du site. L'IA n'est pas un sujet futur chez nous, c'est déjà dans nos outils. ### Les chantiers techniques en cours Un point qu'on a mis de côté lors de la migration : les **Open Graph dynamiques**. Actuellement, les images de partage sont statiques. On est en train de réintégrer une génération dynamique, en s'appuyant sur la base qu'on avait développée pour le site de [Fork it! Community](https://www.forkit.community/). C'est un chantier court, mais qui aura un vrai impact sur la façon dont nos articles s'affichent quand ils sont partagés sur les réseaux. --- ## Merci Un grand merci à toutes les personnes qui se sont impliquées dans ce projet, de près ou de loin : Grégoire, Noé, et un merci particulier à **Ivan** pour le design et les réflexions partagées sur le contenu. --- ### Étude de cas UX Cuisinez pour bébé URL: https://www.bearstudio.fr/fr/blog/articles/etude-de-cas-ux-cuisinez-pour-bebe Date: 2026-01-27 ## À propos de Cuisinez pour bébé L’histoire de _Cuisinez pour Bébé_ commence avec Clémence, une jeune maman passionnée de cuisine qui souhaitait offrir à son enfant une alimentation saine, simple et variée. Comme beaucoup de parents, elle s’est posé les questions essentielles : ##### Comment réussir la diversification alimentaire ? Comment préparer des repas équilibrés sans y passer des heures ? Pour y répondre, elle commence par partager ses recettes maison sur un blog, qui devient rapidement un site WordPress structuré. Le succès est immédiat : les jeunes parents y trouvent des repères clairs, des idées concrètes et une approche décomplexée de la cuisine pour bébé. Aujourd’hui, _Cuisinez pour Bébé_ rassemble plus de **1 800 recettes**, classées par **âge**, des **menus hebdomadaires** de **batch cooking**, ainsi qu’une multitude de conseils pratiques pour **accompagner** chaque étape de la diversification. ## Le défi / Le besoin Avec plus de **150 000 visites mensuelles** et une communauté très active sur les réseaux sociaux, _Cuisinez pour Bébé_ s’est imposé comme une ressource incontournable pour les parents en quête de recettes simples et équilibrées pour leurs enfants. Ce succès a cependant révélé un besoin clair : rendre l’expérience plus fluide, plus mobile et plus personnalisée. La majorité des utilisateurs consultait déjà le site depuis leur téléphone et exprimait le besoin d’accéder plus rapidement à leurs recettes, à leurs favoris et aux menus hebdomadaires directement depuis une application. L’enjeu était donc de transposer l’expérience du site dans un format mobile intuitif, fidèle à l’univers existant, tout en intégrant des fonctionnalités clés : un modèle freemium, une navigation adaptée à l’âge de l’enfant et un accès simplifié aux menus de batch cooking. L’application devait devenir une extension naturelle du site, au service du même objectif :  **accompagner les parents au quotidien dans la préparation des repas de leur bébé.** ## Notre rôle Côté [BearStudio](/fr/), le projet est porté par une équipe dédiée dont la composition a évolué au fil du temps. Équipe actuelle : - 1 Lead UX/UI Designer - 1 UX/UI Designer - 1 Lead Développeur Full-Stack Contribution passée : - 1 Développeur Front-End ## Product Design (UX/UI) Notre équipe a accompagné _Cuisinez pour Bébé_ dans la conception complète de l’expérience mobile, depuis la compréhension des usages jusqu’à la définition des parcours : - Analyse des besoins des jeunes parents et identification des attentes spécifiques sur mobile - Structuration de l’architecture de l’information et conception de parcours simples et centrés sur les usages réels - Prototypes basse fidélité → prototypes haute fidélité (_maquettes interactives_) - Plusieurs cycles d’itération réalisés avec le client pour affiner les parcours et valider les choix de conception ## Développement Côté technique, BearStudio a assuré la réalisation de l’application mobile connectée à l’infrastructure WordPress existante : - Développement mobile en React Native (_Android & iOS_) - Intégration des contenus via API REST WordPress (_recettes, menus, profils_) - Mise en place de la recherche Algolia pour un accès rapide et filtré aux recettes - Gestion de l’authentification et du modèle freemium / abonnés - Optimisation de la cohérence visuelle et technique grâce à des composants partagés et une communication étroite entre designers et développeurs ## Conception & itérations ### Écrans principaux de la V1 - Poser les fondations La première version de l’application _Cuisinez pour Bébé_ avait pour objectif de transposer les fonctionnalités clés du site existant vers un environnement mobile. Cette V1 constituait un socle fonctionnel, pensé pour répondre en priorité aux usages essentiels identifiés par l’équipe CPB : **consulter des recettes**, **organiser les repas de la semaine et comprendre la valeur de l’abonnement**. À ce stade, l’enjeu n’était pas encore d’optimiser chaque interaction, mais de valider les parcours fondamentaux et la pertinence du format applicatif. L’application s’articulait ainsi autour de quelques briques centrales : 1. **L’accès aux menus hebdomadaires** dès l’entrée dans l’app 2. La **consultation d’un catalogue de recettes** classées par âge 3. **Des fiches recettes** simples regroupant les informations nécessaires à la préparation 4. **Un espace favoris** pour retrouver les contenus enregistrés 5. Un **profil utilisateur** orienté **gestion du compte** et de **l’abonnement** 6. **Un paywall** destiné à présenter l’offre freemium 7. **Un parcours d’inscription** volontairement très séquencé Cette première version a permis de poser les bases du produit, de confronter les hypothèses initiales aux usages réels et de fournir un terrain solide pour les évolutions futures. ### Les écrans principaux aujourd’hui Les écrans actuels de _Cuisinez pour Bébé_ ne sont pas le résultat d’un empilement de fonctionnalités. Ils sont le résultat d’une démarche centrée sur des usages concrets, itérée dans le temps, avec un objectif constant : rendre une expérience riche simple à utiliser sur mobile, dans un contexte réel (_parent pressé, téléphone à une main, enfant à gérer, cuisine en cours_). Plutôt que de concevoir écran par écran, nous avons structuré l’application autour de parcours “moteurs”, ceux qui reviennent le plus souvent dans le quotidien des parents : - Planifier les repas de la semaine sans réfléchir à chaque décision - Trouver rapidement une recette pertinente _(âge, texture, contexte)_ - Cuisiner sans friction, en gardant une lecture claire et continue - Suivre la diversification alimentaire dans le temps - Gérer un profil familial et l’accès au premium sans confusion ### Méthode de conception Pour transformer ces usages en expérience mobile, nous avons privilégié une approche très concrète : **prototyper, simuler, observer, ajuster**. Nous avons utilisé des prototypes interactifs pour valider : - La compréhension des enchaînements _(où cliquer, quand et pourquoi)_ - La profondeur de navigation _(éviter les tunnels)_ - La lisibilité et la hiérarchie de l’information dans des listes denses - La cohérence entre écrans _(mêmes repères visuels, mêmes codes)_ Cette méthode permettait de tester rapidement des hypothèses avant développement et de détecter tôt des problèmes typiques du mobile : surcharge visuelle, gestes peu accessibles, filtres trop complexes, actions secondaires trop visibles, manque de continuité entre listing et détail. ### Ce que cette démarche a changé Au fil des itérations, plusieurs axes se sont imposés comme structurants : - Hiérarchiser l’information plutôt que tout afficher : photo, titre, âge et quelques repères forts avant le reste - Raccourcir le chemin vers l’action : ouvrir une recette, ajouter en favori, générer des courses, sans multiplier les écrans - Créer des écrans “carrefours” _(ex. Menu hebdo, Recettes)_ qui concentrent le besoin principal, puis renvoient vers des détails au moment opportun - Assurer une continuité visuelle : si un parent comprend une carte recette dans le catalogue, il doit la comprendre partout _(menu, favoris, suggestions)_ Les écrans “aujourd’hui” incarnent ce niveau d’équilibre atteint : une interface capable d’absorber des contenus denses et variables, tout en restant fluide, cohérente et rassurante. ###### _Aperçu des écrans actuels : organisation, exploration, exécution, suivi._ ![Cuisinez pour bébé](images/image-1-1024x473.png) ### Zoom design - Composant Carte Recettes  La section Recettes est l’un des modules les plus exigeants de l’application. C’est un espace où l’utilisateur doit pouvoir explorer rapidement un catalogue très large, tout en gardant un sentiment de maîtrise. #### Intention produit L’objectif central n’était pas de proposer un moteur de recherche avancé. L’objectif était de permettre une prise de décision simple, à partir de critères qui ont du sens pour les parents : **âge, texture, type de repas, contraintes alimentaires, contexte du moment**. Autrement dit, la section recettes devait fonctionner comme : - Une source d’inspiration - Un outil de tri - Un point d’accès rapide à l’action _(cuisiner, enregistrer, planifier)_ ###### _Le catalogue est conçu pour être scanné en quelques secondes : image, titre, âge._ ![Planification des repas de la semaine, et catalogie des recettes avec deux filtres actifs](images/image-3-1024x971.png) #### Contraintes rencontrées Cette section cumule plusieurs contraintes complexes : - **Densité** : beaucoup de recettes à l’écran et beaucoup de recettes au total - **Variabilité** : titres très longs, informations différentes selon recettes - **Multi-critères** : le bon choix dépend de plusieurs paramètres _(âge, texture, type, ingrédients)_ - **Mobile**: interactions courtes, gestes simples, lisibilité immédiate - **Continuité** : la liste doit préparer la fiche recette, sans rupture Le risque principal était double : - Un catalogue trop “riche” visuellement, où on ne lit plus rien - Ou un système de filtres trop complexe, qui décourage l’exploration #### Décision clé n°1 : la carte de recette comme unité de lecture La carte recette est le composant qui porte l’essentiel de la compréhension. Elle doit permettre trois actions mentales très rapides : 1. Reconnaître l’idée _(via l’image)_ 2. Comprendre le contenu _(via le titre)_ 3. Valider l’adéquation _(via l’âge)_ Cela implique une hiérarchie stricte : - **Image dominante** : l’œil décide d’abord par le visuel, un parti pris rendu évident par la richesse et la qualité exceptionnelle des photos de _Cuisinez pour Bébé_, véritable atout visuel de la marque - **Titre optimisé pour le long** : typographie, espace, nombre de lignes - **Âge présent mais secondaire** : visible, sans voler l’attention ![Concentration sur les deux premières recettes proposée par le catague, pour constater la validité de la carte de recette](images/image-515x1024.png) #### Décision clé n°2 : les filtres comme levier principal (et non un “plus”) Dans cette application, les filtres ne sont pas une fonctionnalité secondaire. Ils sont le mécanisme qui rend le catalogue utilisable au quotidien. L’idée n’était pas “mettre beaucoup de filtres” mais de **proposer un système qui aide à réduire progressivement l’espace de recherche sans exiger un effort mental important**. Les choix qui rendent les filtres efficaces : - **Catégorisation claire** : on raisonne par familles _(régime, type, moment, saison, particularités)_ - **Sélection rapide** - **Validation explicite** : appliquer quand on est prêt, plutôt que déclencher des résultats à chaque micro-choix - **Feedback immédiat** : voir le nombre de recettes trouvées évite l’impression “je filtre dans le vide” ![Concentrations sur l'affichage des filtres du catalogue, avec apparition de la majorité des filtres possibles, et du résultat](images/image-2-1024x964.png) ## Une collaboration qui se construit dans la durée Depuis 2021, la collaboration entre BearStudio et l’équipe _Cuisinez pour Bébé_ s’inscrit dans le temps. Elle repose sur une relation de confiance, une grande réactivité et un dialogue constant autour de l’évolution du produit. L’équipe CPB partage régulièrement des retours issus de sa communauté, formule de nouvelles idées et sollicite des conseils pour faire évoluer l’application. Ces échanges prennent différentes formes : messages Slack, points réguliers, ou encore des vidéos Loom pour détailler des attentes ou proposer des pistes d’amélioration ou demander des conseils. Cette dynamique a permis de faire évoluer progressivement l’application au-delà de sa première version.  Plusieurs fonctionnalités majeures ont ainsi enrichi l’expérience au fil du temps, comme **la gestion de plusieurs enfants** au sein d’un même compte ou la mise en place de **la liste de courses**, devenues un élément clé de l’organisation quotidienne. Certaines fonctionnalités existantes ont également été retravaillées et affinées, notamment autour de **l’accès au contenu premium** et des écrans de conversion, afin d’améliorer la clarté et l’expérience globale. Ce rythme d’itération partagé permet au produit de rester vivant, aligné avec les besoins réels des parents, et d’évoluer en continu, porté conjointement par les équipes CPB et BearStudio. ## Ce que les utilisateurs en disent Au-delà des maquettes, des fonctionnalités et des itérations, l’indicateur le plus précieux reste la satisfaction des utilisateurs.  Depuis le lancement de l’application, les retours laissés sur les stores et les messages envoyés à CPB témoignent d’un impact réel dans le quotidien des parents. Ce qui ressort le plus souvent : - La simplicité d’utilisation - La clarté des recettes - Le gain de temps dans l’organisation des repas - La qualité du contenu proposé - La confiance accordée à l’univers CPB Les notes laissées sur l’App Store et Google Play, ainsi que les nombreux messages positifs, confirment que l’application répond à un besoin fort : **accompagner les parents de manière fiable, intuitive et bienveillante**. Ces retours nourrissent à leur tour le projet, car chaque commentaire constructif ou demande récurrente inspire de futures évolutions renforçant encore davantage le cycle d’amélioration continue entre CPB, ses utilisateurs et notre équipe. ![Cuisinez pour bébé avis](images/image-4-1024x576.png) ## Pour aller plus loin _Cuisinez pour Bébé_ continue d’accompagner chaque jour des milliers de parents grâce à son écosystème de contenus, son application et ses ressources pédagogiques. Pour découvrir l’univers complet, voici où trouver la marque et suivre ses dernières nouveautés : **Site web officiel** : Recettes, conseils, batch cooking et guides pratiques [https://www.cuisinez-pour-bebe.fr/](https://www.cuisinez-pour-bebe.fr/) **Application mobile** : Disponible sur l’App Store et Google Play Accès aux menus hebdomadaires, filtres, favoris, liste de courses et fonctionnalités premium **Instagram** : Partage de recettes, astuces, vidéos pratiques, retours de la communauté [https://www.instagram.com/cuisinezpourbebe/](https://www.instagram.com/cuisinezpourbebe/) **Facebook** : Communauté active, échanges entre parents, lives et contenus exclusifs [https://www.facebook.com/cuisinezpourbebe/](https://www.facebook.com/cuisinezpourbebe/) **YouTube** : Vidéos explicatives, recettes filmées, ateliers et masterclass [https://www.youtube.com/cuisinezpourbebe](https://www.youtube.com/cuisinezpourbebe) Et n'hésitez pas à découvrir [notre précédente étude de cas sur Léa English](/fr/blog/articles/lea-english-etude-de-cas) ! --- ### Ficus UI 🌿 — UI simple et composable pour React Native URL: https://www.bearstudio.fr/fr/blog/articles/ficus-ui-ui-simple-et-composable-pour-react-native Date: 2025-12-24 **La conception d’une librairie UI React Native cohérente et maintenable** est un enjeu central dans le développement d’applications mobiles modernes. Depuis de nombreuses années, nous utilisons React Native pour ses capacités cross-platform, qui permettent de cibler à la fois Android et iOS tout en conservant les avantages de React et du mobile natif. Cependant, la gestion du style et de l’UI React Native reste limitée par défaut : le framework fournit des composants de base pour structurer les vues, mais peu d’outils pour créer des interfaces mobiles avancées, personnalisables et cohérentes à grande échelle. La communauté React Native a rapidement développé des librairies UI pour corriger ces problèmes, mais nous n’avons pas trouvé une librairie qui corresponde à ce que nous utilisons sur React web : [Chakra UI](https://chakra-ui.com/) C’est pourquoi nous avons développé au [BearStudio](/fr/) une nouvelle librairie UI open source : [React Native Ficus UI 🌿](https://ficus-ui.com/) ## Pourquoi Ficus UI ? Nous aimons Chakra UI pour plusieurs raisons : sa simplicité, sa cohérence, et sa philosophie “styled system” qui permet de construire rapidement des interfaces élégantes, accessibles et personnalisables. Lorsque nous avons commencé à chercher une expérience similaire sur React Native, nous avons découvert qu’aucune librairie ne combinait vraiment ces qualités. Certaines librairies proposaient des composants riches mais difficiles à thématiser. D’autres offraient de la flexibilité, mais au prix d’une grande complexité ou d’un manque de cohérence entre composants. **Ficus UI** est née de ce constat : proposer une **expérience Chakra-like pour React Native**, avec une API simple, expressive, et 100 % compatible avec les contraintes du mobile. ## Comparaison avec l'UI React Native “de base” Avant Ficus UI, la plupart des interfaces React Native étaient construites avec les composants et styles natifs (`View`, `Text`, `StyleSheet.create`). Cela fonctionne très bien… mais c’est souvent verbeux, peu expressif et difficile à maintenir à mesure que l’application grandit. ### En React Native “classique” ![Composant card d'exemple affiché, textes affichés :
React Native Ficus UI 🌿 Découvrez Ficus UI pour vos apps React Native
Bouton : Explorer](images/Capture-decran-2025-12-18-a-16.47.58.png) ```tsx import { StyleSheet, Text, TouchableOpacity, View } from 'react-native'; export default function Card() { return ( React Native Ficus UI 🌿 Découvrez Ficus UI pour vos apps React Native Explorer ); } const styles = StyleSheet.create({ card: { backgroundColor: '#f7fafc', padding: 16, borderRadius: 12, shadowColor: '#000', shadowOpacity: 0.1, shadowRadius: 4, }, title: { fontSize: 24, fontWeight: 'bold', color: '#2d3748', marginBottom: 8, }, subtitle: { fontSize: 16, color: '#4a5568', marginBottom: 12, }, button: { backgroundColor: '#319795', paddingVertical: 10, borderRadius: 6, }, buttonText: { color: '#fff', fontWeight: '600', textAlign: 'center', }, }); ``` Ce code est fonctionnel, mais il : - nécessite **un bloc de styles séparé**, souvent redondant, - rend la lecture moins fluide, - ne s’adapte pas facilement à un thème ou au mode sombre, - et complexifie la réutilisation (chaque composant gère ses propres styles). ### Avec Ficus UI Le même composant, écrit avec Ficus UI, devient beaucoup plus **déclaratif et composable** : ```tsx import { Box, Button, Text } from 'react-native-ficus-ui'; export default function Card() { return ( React Native Ficus UI 🌿 Découvrez Ficus UI pour vos apps React Native ); } ``` **Différences majeures :** - Plus **aucun StyleSheet** à maintenir : les styles sont intégrés sous forme de props. - Les **couleurs, espacements et tailles** sont reliés au thème global. - Le composant est **auto-documenté** : la structure et le style se lisent ensemble. - Le thème gère **dark mode, responsive et color schemes** sans effort supplémentaire. En d’autres termes : > Avec React Native “vanilla”, vous décrivez comment styliser. > > Avec Ficus UI, vous décrivez _ce que vous voulez obtenir_. ## Un système de thème puissant et personnalisable Ficus UI intègre un **système de thème centralisé**, inspiré de Chakra UI, qui définit les couleurs, espacements, typographies, breakpoints et variantes globales de vos composants. Cela permet de maintenir une cohérence visuelle sur l’ensemble de votre application tout en facilitant la personnalisation de votre design system. ![Palettes de couleurs du thème par défaut](images/Capture-decran-2025-12-18-a-16.51.38.png) ```tsx import { AppRegistry } from 'react-native'; import { ThemeProvider } from 'react-native-ficus-ui'; import App from './src/App'; // this is our custom theme const theme = { colors: { // Use Smart Swatch to generate colors palette violet: { 50: '#f0eaff', 100: '#d1c1f4', 200: '#b199e7', 300: '#9171dc', 400: '#7248d0', 500: '#592fb7', 600: '#45248f', 700: '#311968', 800: '#1e0f40', 900: '#0c031b', }, }, fontSizes: { '6xl': 32, }, space: { xs: 2, '5xl': 64, }, // components defaults can also be customized components: { Text: { color: 'gray.100', }, }, }; export default function Main() { return ( ); } ``` ## Créez vos propres composants avec `ficus()` L’un des aspects les plus puissants de Ficus UI est sa fonction `ficus()`, qui vous permet de **transformer n’importe quel composant React Native ou tiers en composant Ficus**. Cela facilite l’intégration d’éléments personnalisés dans votre design system, tout en bénéficiant des style props. ![Composant ficus affichant un rond avec la couleur "teal" en background](images/Capture-decran-2025-12-18-a-16.44.12.png) ```tsx import { View } from 'react-native'; import { ficus } from 'react-native-ficus-ui'; const Circle = ficus(View, { baseStyle: { borderRadius: 'full', bg: 'teal.500', }, }); ; ``` En quelques lignes, votre composant adopte toute la puissance de Ficus : thème, responsive, color schemes, etc. ## Concilier React Native et Chakra UI Ficus UI ne cherche pas à remplacer React Native, mais à **lui ajouter une couche de confort et de cohérence** inspirée de Chakra UI. Elle conserve donc les **composants natifs que tout développeur React Native connaît déjà**, tout en leur ajoutant la puissance du système de style et du thème. ### Les composants de base que vous connaissez Plutôt que de réinventer des noms, Ficus UI conserve les mêmes composants que ceux du cœur de React Native : - `Button` → un bouton stylisé, mais basé sur le `Pressable` natif - `Pressable`, `TouchableOpacity`, `TouchableHighlight`, etc. → toujours disponibles et compatibles - `Text`, `Image`, `Input` → inchangés, mais avec **style props** et **thème** - `Box` et `ScrollBox` → les uniques exceptions volontaires, qui remplacent `View` et `ScrollView` pour correspondre à l’API de Chakra UI Ainsi, **vous gardez vos réflexes de React Native**, tout en gagnant la syntaxe et la souplesse d’un système inspiré du web. ### Des surcouches utiles à des librairies populaires En plus des composants de base enrichis, Ficus UI propose des **composants “haut niveau”** qui encapsulent des usages fréquents dans les apps mobiles modernes. Ces composants s’appuient sur des librairies React Native reconnues, mais avec une API simplifiée, cohérente et thématique. ### `PinInput` ![Composant ficus PinInput (4 champs input number permettent de saisir un code à 4 chiffres par exemple)](images/Capture-decran-2025-12-18-a-16.45.20.png) [Tester sur la doc](https://ficus-ui.com/docs/Components/Inputs/pininput) ```tsx const SimplePinInput = () => { const [pinValue, setPinValue] = React.useState(null); return ( ); }; ``` Basé sur [https://github.com/retyui/react-native-confirmation-code-field](https://github.com/retyui/react-native-confirmation-code-field) ### `Slider` ![Composant ficus Slider affiché en exemple](images/Capture-decran-2025-12-18-a-16.45.53-1024x47.png) [Tester sur la doc](https://ficus-ui.com/docs/Components/Inputs/slider) ```tsx ``` Repose sur [https://github.com/callstack/react-native-slider](https://github.com/callstack/react-native-slider) ### `DraggableModal` ![Exemple de DraggableModal](images/image-1.jpg) [Tester sur la doc](https://ficus-ui.com/docs/Components/draggable-modal) ```tsx const SimpleModal = () => { const { isOpen, onOpen, onClose } = useDisclosure(); return ( Settings Your settings ); }; ``` Basée sur  [`react-native-bottom-sheet`](https://github.com/gorhom/react-native-bottom-sheet) ### `Tabs` ![Composant ficus Tabs affiché en exemple](images/Capture-decran-2025-12-18-a-16.47.12.png) [Tester sur la doc](https://ficus-ui.com/docs/Components/Layout/tabs) ```tsx Tab 1 Tab 2 Content for the first tab Content for the second tab ``` - Inspiré de Chakra UI Tabs - Basé sur `[react-native-tab-view](https://github.com/react-navigation/react-navigation)` 👉 En résumé : Ficus UI **ne masque pas React Native,** elle **l’enrichit**. Vous utilisez les composants que vous connaissez déjà, avec une **API plus fluide**, un **thème cohérent**, et des **intégrations prêtes à l’emploi** pour les cas d’usage modernes. ## Responsive et cross-platform par design Le responsive est souvent un casse-tête sur React Native. Avec Ficus UI, les style props peuvent accepter des **valeurs par breakpoint**, comme sur le web : ```tsx Layout adaptatif ``` Cela permet de gérer facilement les différences entre téléphones, tablettes, et grands écrans, tout en conservant une syntaxe claire et déclarative. ## Dark mode natif et intelligent Le **dark mode** est aujourd’hui attendu dans toutes les applications mobiles — il améliore le confort visuel, économise la batterie, et offre une expérience plus personnalisée à l’utilisateur. Avec Ficus UI, le mode sombre est **intégré nativement** : inutile de gérer manuellement des styles conditionnels ou des thèmes séparés. ### Un thème adaptatif, basé sur les préférences système Ficus UI détecte automatiquement la préférence de l’utilisateur (sombre ou clair) et adapte dynamiquement les couleurs du thème. Vous pouvez aussi forcer un mode ou basculer manuellement entre les deux. ```tsx const { colorMode, toggleColorMode } = useColorMode(); ; ``` Les **color schemes** assurent un contraste optimal et une cohérence visuelle automatique. ## Comparaison avec les autres librairies UI React Native(2025) | Librairie | Points forts | Ce que Ficus UI apporte en plus | | ----------------------------- | ------------------------- | -------------------------------------------------------- | | **NativeBase / Gluestack UI** | Complet, riche, maintenu | API plus proche de Chakra UI | | **React Native Paper** | Basée sur Material Design | Ficus UI est agnostique, pas limitée par Material Design | | **UI Kitten** | Complet | API moins intuitive | | **Tamagui** | Cross-platform performant | API plus proche de Chakra UI | | **Dripsy** | Minimal et extensible | Moins de composants prêts à l’emploi | Ficus UI vise le juste équilibre : **puissant sans être complexe**, **léger sans être limité**, et **familier pour les équipes web + mobile**. ## 🌿 En conclusion Ficus UI, c’est notre manière de **rendre le développement mobile plus fluide, cohérent et agréable**. C’est une librairie qui reflète notre philosophie : **des outils simples, composables, et faits pour durer**. 👉 Découvrez-la sur [ficus-ui.com](https://ficus-ui.com/?utm_source=chatgpt.com) 👉 Contribuez sur [GitHub](https://github.com/BearStudio/react-native-ficus-ui?utm_source=chatgpt.com) Et n'hésitez pas à découvrir nos autres projets open-source : - [Start UI \[Web\]](/fr/blog/articles/start-ui) - [UI-State](/fr/blog/articles/pourquoi-on-a-cree-ui-state) --- ### Octobre spooky au BearStudio : entre commits et décorations URL: https://www.bearstudio.fr/fr/blog/articles/octobre-spooky-au-bearstudio-entre-commits-et-decorations Date: 2025-11-18 L’automne s’installe, les jours raccourcissent et la nuit s’invite un peu plus tôt derrière nos écrans. 🌒 Le froid se glisse entre deux commits, et les premiers frissons se font sentir. Difficile de dire s’ils viennent du vent glacial ou d’un bug en production. 👀 Entre les lignes fantômes (celles qui déclenchent une erreur à la ligne 45 alors que cette ligne n’existe même pas), et les bugs farceurs qui nous jouent des tours… le décor était déjà planté.  Voici donc un bref retour sur le mois d’octobre au [BearStudio](/fr/). Où l’ambiance d’Halloween a pris le contrôle de la tanière de l’équipe. Mais comme on n’est pas du genre à se laisser hanter, on en a aussi profité pour entretenir la bonne humeur, la créativité et une petite touche d’écolo-décoration en matériaux de récup. 🎃 ## 1. Atelier découpe de citrouilles ##### Semaine du 6 au 13 octobre Première étape : la traditionnelle **découpe de citrouilles !** Sous les derniers rayons de soleil d’octobre, on s’est installés dehors, armés de couteaux, de cuillères et d’un courage variable selon les participants. Certaines citrouilles sont devenues de véritables œuvres d’art… d’autres, des exceptions non gérées. 😅 ![Sandrine Auber Lardans taillant les premières citrouilles pour Halloween](images/carve-1.jpeg) ![Résultats de l'activité "découpe de citrouille"](images/carve-2.jpeg) “Rien ne se perd, rien ne se crée, tout se transforme”: les restes ont été recyclés — pas en carrosse (on n’a pas trouvé le bon _framework_ pour ça) — mais en un délicieux **velouté de citrouille** pour nous réchauffer. Et pour les plus gourmands : **petits gâteaux citrouille-cranberry**. Comme Rust, ça a divisé : certains ont adoré, d’autres ont préféré ne pas relancer le script. Pour les curieux, vous pouvez aller voir l’article de Yoann [ici](/fr/blog/articles/rust).
![Ingrédients pour faire les petits gâteaux citrouille-cranberry](images/cook-1.jpeg)
![Petit gâteau citrouille-cranberry](images/cook-2.jpeg)
## 2. Atelier décoration ##### Semaine du 13 au 20 octobre Deuxième phase : la **déco d’Halloween.** Après une brève _inspiration Instagram_ (et quelques échecs critiques), on a finalement pris le coup de main. Astuce du jour : coller avec de l’eau, c’est écolo… mais ça a son caractère et ça demande un peu de patience pour que ça tienne ! Un peu comme quand on teste un nouveau snippet de code : parfois ça prend au premier essai. Et parfois il faut ajuster quelques détails pour que tout s’imbrique parfaitement. 😬
![Matériels nécessaires à la création des décorations](images/craft-1.jpeg)
![Décorations obtenues à la fin de la création](images/craft-2.jpeg)
![Décorations posées sur les fenêtre de la tanière](images/craft-3.jpeg)
### 3. Atelier guirlandes ##### Semaine du 20 au 27 octobre Place au **recyclage créatif !** Rouleaux de papier toilette, chutes de papier coloré, un marqueur et un bout de ficelle plus tard. Et voilà une armée de petits fantômes, citrouilles, chauves-souris, autres créatures étranges prêtes à envahir le bureau. Certains personnages avaient l’air terrifiants, d’autres… un peu trop mignons pour faire peur. Mais l’ambiance spooky était au rendez-vous entre deux cafés et trois commits sur _Lea English_ (dont vous pouvez lire l’étude de cas UX [ici](/fr/blog/articles/lea-english-etude-de-cas)) ! ![Matériels nécessaires pour la création des guirlandes](images/deco-1.jpeg) ![Guirlande en cours de création](images/deco-2.jpeg) ![Guirlande installée sur un mur de la taverne](images/deco-3.jpeg) ## 4. Soirée Loup-Garou ##### Le 30 octobre Pas de pleine lune sans **Loup-Garou** ! Chacun sous son plaid avec un chocolat chaud ou son dîner. Connectés sur le site [Wolfy](https://wolfy.net/fr) pour une soirée pleine de trahisons numériques et de débats intenses sur “qui est le loup garou ?”, “qui sera le maire” ou encore “qui est cupidon ? on a des comptes à régler...”.🐺 ![Capture d'écran d'une partie Loup-Garou sur Wolfy avec les avatars de l'équipe BearStudio et le chat de jeu](images/wolfy.png) Et un petit GarticPhone qui n’avait plus rien à voir avec Halloween pour finir en beauté (des dessins faits au pad et un talent incertain qui nous a encore plus fait rire ! ). ![Capture GarticPhone avec l'indice d'Eléa : "un ours qui fait de la balançoire"](images/game-1.gif) ![Capture GarticPhone avec l'indice de Jeanne : "le magicien d'oz"](images/game-2.gif) Bref, un mois d’octobre bien rempli au BearStudio : des citrouilles, du code, des rires et quelques frayeurs… mais surtout, une équipe d’ours qui sait transformer les _bugs_ en bonbons 🍬 et les _pull requests_ sur [Start UI](/fr/blog/articles/start-ui) en moments de partage. ![Illustration de clôture : quatre ours BearStudio déguisés en sorcière et vampires devant un écran de code Halloween](images/end.png) --- ### Les coulisses d’un teambuilding à Disneyland Paris URL: https://www.bearstudio.fr/fr/blog/articles/les-coulisses-dun-teambuilding-a-disneyland-paris Date: 2025-10-30 Le dernier week end d’août 2025, le [BearStudio](/fr/) a offert à tous ses salariés et leurs proches, un week end teambuilding à [Disneyland Paris](https://www.disneylandparis.com/fr-fr).  Organiser un team building à Disney, c’est comme préparer un spectacle. Il faut un scénario, des acteurs motivés, et une logistique sans faille. Retour sur les coulisses de ce projet, de l’idée initiale à la concrétisation, en passant par les choix stratégiques et les ajustements nécessaires. ## Étape 1 : Choisir le type d’événement L’idée de départ pour les dirigeants est d’offrir une sortie assez simple à organiser et classique en attendant le big 2026. Il nous faut un moment de partage fun pour renforcer la cohésion d’équipe. Un parc d'attractions semble tout de suite le lieu idéal. La moyenne d’âge au BearStudio se situe autour de 30 ans et certains collaborateurs ont désormais des enfants en bas âge.  Nous avons évoqué plusieurs parcs d'attractions et réfléchi en fonction de la distance et des activités proposées, au parc le mieux adapté pour le BearStudio.  Ensuite je me suis renseignée sur les tarifs (parc, hôtel et trajet) pour avoir une idée du budget et définir une limite. On a beau vouloir faire plaisir à tout le monde, il faut définir une limite afin que le budget n'explose pas. Il arrive au CEO de s’enflammer donc on est là, la DAF et moi pour faire en sorte de rester raisonnables. En mars, nous avons créé sur notre Slack interne un channel dédié à l'organisation de ce teambuilding. ## Étape 2 : Sondage pour la date et le Parc Afin d’impliquer l’équipe, un premier sondage a été envoyé mi-mars pour connaître les préférences de chacun : le choix était donné entre 2 jours à Disneyland Paris et 2 jours au Futuroscope. Nous leur avons également demandé de choisir entre deux week-ends de juin ou août. Ce week end n’est pas obligatoire mais nous espérions avoir le maximum de collaborateurs. Finalement, les réponses au sondage pour choisir le parc ne nous aident pas beaucoup car on arrive à un beau 50/50. Pour les dates on se dirige vers fin août. Ce sondage nous permet aussi d'évaluer le nombre de participants et d’avoir une base pour affiner le budget. ## Étape 3 : le choix Au vu des retours de l’équipe et des coûts de chaque parc, les dirigeants ont tranché fin mars  : ce sera sur Disney, le dernier week-end d'août. ## Étape 4 : Réservations et logistique On avance, on avance et mi-avril nous avons organisé un nouveau sondage pour avoir une idée plus précise du nombre de participants. Tous les membres sont invités avec leurs enfants (les stagiaires aussi of course) et ils peuvent inviter un proche. Mi-mai nous avons finalement porté notre choix sur un séjour de 2 jours et une nuit, avec accès aux 2 parcs de Disney. Nous sommes une trentaine et le budget doit rester raisonnable car le team-building 2026 pour fêter les 10 ans de l'entreprise reste la priorité en termes de coût. Afin de communiquer sur l'événement avec la team. J’ouvre en juin un nouveau channel sur slack spécial Disney août 2025, réservé aux participants. Début juin nous avons pu réserver le séjour et le restaurant. Le système de réservation de Disney n’est pas user friendly et on peut juste dire que l’informatique semble être la dernière roue du carrosse de Cendrillon. Leur système de réservation n’est pas très intuitif et assez complexe. Bref c’est laborieux, rien que pour remplir un tableau. Heureusement, les employés que j’ai au téléphone sont aimables et disponibles. Nous avons choisi un hôtel Disney pour que l’expérience soit complète et les parcs accessibles en 10 min à pied. Le nombre de chambres est désormais fixé. Nous ne pouvons plus modifier sans frais. Le restaurant lui se trouve dans le village Disney. Nous avons choisi un buffet afin que tout le monde y trouve son compte quelque soit ses préférences alimentaires. Tous les participants au week-end ont accepté avec plaisir ce repas convivial tous ensemble le samedi soir. Il m’a fallu également décider de l’horaire pour ce restaurant en tenant compte des heures des différents spectacles de soirée proposés par Disney. J’avais regardé au début de processus d'autres restaurants en dehors du parc. Mais il est compliqué de trouver des restaurants acceptant 30 convives et proposant des menus inclusifs. De plus, le peu que j'avais trouvé n'était pas moins cher et plus loin. Reste à verser l’acompte. Le nombre de participants est figé. Le 9 juin, nous sommes à mi-parcours. Le solde sera à verser avant fin juillet. Il faut veiller à ne pas oublier de faire ce versement pendant les vacances. Fin juillet c’est aussi la date limite pour confirmer la répartition des chambres.  J’organise les chambres en optimisant le nombre de participants par chambre tout en pensant à constituer des groupes agréables pour toutes et tous, dans des chambres de 4 personnes maximum.. Les familles avec enfants seront dans des chambres à part. Nous avons soumis cette répartition aux participants en espérant avoir répondu aux attentes de chacune et chacun pour avoir le moins de modifications possibles à effectuer. En fin de compte, tout le monde semble satisfait car aucun changement n’est demandé. Nous pouvons confirmer la répartition des chambres ainsi que le nom des participants. Nous serons 28 adultes, 2 enfants et 2 bébés. ## Étape 5 : Communication et suivi Fin juillet j’ai commencé à parler de l’organisation du covoiturage pour le samedi matin et à donner les informations sur l'hôtel et le restaurant réservés. Début août, j’ai diffusé sur le channel dédié un tableau à remplir pour organiser les voitures et j’ai compté sur l'équipe qu’ils s’organisent entre eux. Je leur ai donné les infos nécessaires, comme le temps de déplacement et l’heure d’arrivée à l'hôtel à respecter. J’ai ajouté les infos sur le parking et les bagages ainsi que la lettre d’invitation donnée par Disney. Le groupe a bien répondu et mi août les voitures étaient organisées. Le 26 août, 4 jours avant le départ. J’ai de nouveau fait un rappel pour les heures de départ des voitures ainsi que la procédure à suivre pour les clés des chambres. Disney ne propose pas de billet dématérialisé et les billets sont remis à une personne par chambre. Ce qui complique un peu l’organisation lorsque tous les membres d’une même chambre n’arrivent pas ensemble. **Outils utilisés** : - Tableau partagés sur Excel et Google Sheet pour centraliser les informations (participants, chambres, options). - Sondages Slack pour les choix du restaurant et des activités. - Canaux de communication : Le Slack interne de l’entreprise, un espace dédié pour partager les horaires, les chambres, et les mises à jour.  Nous avons également communiqué à l’oral lors des stand-up quotidiens en visio. De nombreux rappel ont été nécessaires à l’oral et via Slack afin d’être sûrs que les informations soient bien passées et reçues par les participants. Et permettre d’avancer assez rapidement entre chaque étapes. ## Etape 6 : le jour J Nous avons demandé à l’équipe d'être tous ensemble au point de rendez-vous à l'ouverture des Parcs. Pour profiter au maximum de toutes les activités proposées par Disney et de faire une belle photo de groupe pour se souvenir de ce teambuilding à Disneyland Paris. Nous avons finalement réussi à réunir tout le monde avec un retard d’environ 30 minutes seulement ! Ce qui, je trouve, était une belle réussite. En dehors de ce rendez-vous matinal et du restaurant du samedi soir. Nous n’avons pas  souhaité imposer d’activités spécifiques en groupe. Pour que chacun profite des parcs à son rythme en fonction de ses envies et possibilités. Néanmoins, je note que naturellement des groupes de 4 à 10 personnes se sont constitués. Certains migrants d’un groupe à l’autre au cours de la journée naturellement. - **Conseils pour les futurs organisateurs :** - Impliquer les participants dès le début pour garantir leur adhésion. - Utiliser des outils collaboratifs (sondages, tableaux partagés) pour faciliter l’organisation. - Anticiper les imprévus (budget, disponibilités, préférences). - Prévoir un budget avec une marge de sécurité. - Faire un rétroplanning pour toujours avoir du recul sur l’avancement de l’organisation et bien avoir en tête les dates clés. - Communiquer régulièrement avec l’équipe pour ajuster les détails. - Savoir demander l’avis des participants sans se perdre en voulant faire plaisir à tout le monde. Parfois il a fallu trancher car il est impossible de faire l'unanimité. - Responsabiliser les salariés sur le fait que l’on ne peut pas tout organiser pour eux. Il faut qu’ils comprennent que la réussite du team building repose aussi sur leur implication. ![Le Bearstudio à Disneyland](images/group-photo.png) ## Conclusion : Une aventure collective Organiser un teambuilding à Disneyland Paris, c’est bien plus que réserver des billets et des chambres. C’est un projet collaboratif, où chaque étape compte pour créer une expérience inoubliable. Grâce à une planification rigoureuse et une communication transparente, cette aventure a permis de fédérer l’équipe autour d’un moment de partage et de magie. Les photos et anecdotes partagées créent des souvenirs en commun qui participent à la cohésion du groupe. ##### Et pour continuer sur la lancée, jetez un oeil à nos autres articles : - Du code au coeur : nos engagements associatifs annuels - Les ours au camping des speakers 2023 --- ### Pourquoi on a créé ui-state URL: https://www.bearstudio.fr/fr/blog/articles/pourquoi-on-a-cree-ui-state Date: 2025-10-16 Pourquoi a t'on créé [ui-state](https://github.com/BearStudio/ui-state), une librairie TypeScript de gestion d'états ? Tout viens de la lecture d'un très bon article de [Dominic Dorfmeister aka TkDodo](https://x.com/TkDodo) (on vous conseille aussi de [lire ses autres articles sur son blog](https://tkdodo.eu/blog/)) Dans [l’article Component Composition is great btw](https://tkdodo.eu/blog/component-composition-is-great-btw), TkDodo met en lumière un problème récurrent : gérer les états d’une UI (`loading`, `error`, `empty`, `success`, etc.) de façon lisible, maintenable et typée… sans exploser la structure de son composant. Prenons le point de départ typique. On écrit un composant simple : ```tsx export function ShoppingList() { const { data, isPending } = useQuery(/* ... */); return ( Welcome 👋 {data?.assignee ? : null} {isPending ? : null} {data ? data.content.map((item) => ) : null} ); } ``` Et là, en surface, tout semble "fonctionner". Mais très vite, ça devient flou : - Est-ce qu’on peut avoir `data` **et** `isPending` en même temps ? - Est-ce que l’absence de `data` signifie une erreur ou une liste vide ? - Que se passe-t-il si `data` est présent mais vide ? On se retrouve à jongler entre plusieurs flags (`isPending`, `data`, `isError`, etc.) qui peuvent potentiellement faire que deux morceaux de l'UI s'affichent en même temps alors que ce n'était pas ce qu'on avait prévu. **C’est difficile à lire, à tester et à maintenir.** ### La solution proposée par TkDodo TkDodo propose alors un refacto plus explicite, basé sur des `early return` : ```tsx function Layout(props: { children: ReactNode; title?: string }) { return ( Welcome 👋 {props.title} {props.children} ); } export function ShoppingList() { const { data, isPending } = useQuery(/* ... */); if (isPending) { return ( ); } if (!data) { return ( ); } return ( {data.assignee ? : null} {data.content.map((item) => ( ))} ); } ``` C’est **beaucoup plus clair.** À chaque état correspond un rendu. Mais ça vient avec une contrepartie : **on doit extraire le layout dans un composant, et que faire si on ne veut pas que tout l'écran change ?** Le composant `Layout` est dupliqué dans chaque branche. On doit extraire le typage pour pouvoir typer les props du `Layout`. Et si on veut qu’une partie de l’interface reste constante entre les états (par exemple un header ou une sidebar) ou si une ou plusieurs parties du `Layout` sont dépendantes de l’état, on doit commencer à restructurer son code. ## Ce qu’on voulait : un seul état actif, bien typé, et exploitable où on veut Chez [BearStudio](/fr/), on voulait garder le même principe fondamental : - un seul état actif à la fois, - exhaustivité garantie au typage, - lisibilité de la logique d’affichage, …mais **sans éclater le JSX**, ni structurer tout le rendu autour des cas. On voulait pouvoir dire : "Donne-nous l’état courant, on s’en occupe. Juste assure toi qu’on gère bien tous les états" ## C’est pour ça qu’on a créé ui-state Avec `ui-state`, on transforme la réponse d’un `useQuery` (ou n’importe quelle source de données) en **état unique et explicite**, basé sur un seul appel à getUiState. Voici comment on refactorerait le composant `ShoppingList` en utilisant `ui-state` : ```tsx import { getUiState } from '@bearstudio/ui-state'; export function ShoppingList() { const query = useQuery(/* ... */); const ui = getUiState((set) => { if (query.status === 'pending') return set('pending'); if (!query.data || query.data.content.length === 0) return set('empty'); return set('default', { data: query.data }); }); return ( Welcome 👋 {ui .match(['pending', 'empty'], () => '') .match('default', ({ data }) => data.title) .exhaustive()} {ui .match('pending', () => ) .match('empty', () => ) .match('default', ({ data }) => ( <> {!!data.assignee && } {data.content.map((item) => ( ))} )) .exhaustive()} ); } ``` Ce qu’on y gagne : - Un **état unique** bien défini, toujours à jour. - Une **exhaustivité au typage** via `.exhaustive()` qui garantit qu’aucun cas n’est oublié. - **On garde le type narrowing** automatique de TypeScript en passant des arguments. Comme ici le `data` qui n’est plus typé comme optionnel car on a testé qu’il existait bien. - Une **liberté de rendu complète**, sans devoir structurer l’arbre JSX autour des états. - Une meilleure **testabilité** de la logique d’affichage : on peut tester la UI pour chaque cas d’état indépendamment. Même principe que dans l’article de TkDodo mais **pas besoin de découper en 4 composants ou de structurer l’arbre JSX autour des états.** On garde la logique claire et la **composition intacte.** Lien du github : [https://github.com/BearStudio/ui-state](https://github.com/BearStudio/ui-state) Et pour continuer sur la lancée, jetez un oeil à nos autres articles : - [Start UI [Web]](/fr/blog/articles/start-ui) - [Love letter aux side-projects](/fr/blog/articles/love-letter-aux-side-projects) --- ### Love letter aux side-projects URL: https://www.bearstudio.fr/fr/blog/articles/love-letter-aux-side-projects Date: 2025-09-30 _Faire un side project est le meilleur moyen d'apprendre et s'amuser en même temps. Laisse moi t'expliquer pourquoi !_ Si: - Toi aussi tu as au moins une vingtaine de repos sur GitHub. Ils contiennent (et c'est déjà exceptionnel) juste un README.md qui dit que c'est en cours de dev. Pourtant, ça fait plus d'un an que tu n'as pas mis le nez dedans. - Toi aussi tu es hyper hypé par un sujet pendant 1 semaine. Puis une nouveauté arrive et ce sujet tombe dans l'oubli aussi vite qu'il est arrivé. - Toi aussi, parmi ces sides projects aucun n'est parti en prod (et je parle pas d'une prod avec que ta famille ou tes collègues dedans, ça compte pas ^^). - T'as acheté un nom de domaine pour 1 an mais t'as encore rien mis dessus. **Alors t'es un goat ! Sinon, regarde pourquoi tu devrais te lancer dans un side project 😄.** ## Pourquoi tu devrais faire des sides projects ? Je fais parti de ceux qui pensent que c'est impossible de devenir bon dans un domaine sans avoir passé pas mal de temps à pratiquer. C'est pas en binge watchant des tutos sur youtube, en lisant une tonne d'articles sur un sujet que tu vas devenir un expert dans celui-ci. Au mieux tu comprendras des concepts, tu pourras te faire un avis (et encore, ton avis sera biaisé par les sources que tu auras consulté). Mais quand faudra mettre les mains dans le cambouis tu te rendras compte que tu ne sais rien ! Faire ça, c'est le meilleur moyen pour devenir cette personne qui te fait la morale sur "les bonnes pratiques" ou qui dit qu'une techno c'est de la merde par rapport à une autre parce-qu'il a vu 3 vidéos dessus et lu 6 posts sur X. Ne fait pas ça — c'est le meilleur moyen pour passer pour un con auprès de tes collègues et de perdre en crédibilité. Rappelle-toi qu’un side project pour apprendre et s’amuser te permet de te confronter à de vrais problèmes et d’acquérir de l’expérience rapidement. Après on ne va pas se mentir. Ne pas être motivé, ne pas trouver de sujet, ne pas avoir envie, ça nous arrive à tous. Plusieurs fois je me dis "ah tiens, je testerais bien de faire un truc comme ça". Puis je regarde 15 000 tutos sur le sujet et je repousse toujours le moment où il faut vraiment init un projet pour réellement tester, alors que c’est le meilleur moyen de se faire un vrai avis. Du coup, fort de mon expérience de projets entamés (dans le meilleur des cas) et jamais terminés (tout le temps), je vais vous donner mes tips pour pouvoir mettre les mains dans le cambouis rapidement 😄. ### 1. C'est ok de regarder des tutos > Wtf il viens de dire l'inverse 2 lignes au dessus... Je vais compléter: c'est ok de regarder des tutos si **tu mets en pratique rapidement ce que tu viens de voir**, quitte à le faire en parallèle. Il faut savoir se dire allez go, je prend une idée de projet et je me lance avec ce que je viens de voir. Le fait de commencer rapidement ton projet va te permettre de rencontrer des vraies problématiques qu'il te faudra corriger ou contourner. Ça te permet de focus sur des vrais problèmes de la vraie vie (et d'éviter de regarder un tuto sur comment mettre en place un load balancer alors qu'à la base tu voulais des pistes pour faire de l'authentification). Focus ! ### 2. Pas d'idées ? Tkt Une excuse pour ne pas commencer à coder rapidement c'est de ne pas avoir de sujet, ou de ne pas avoir d'idée originale/révolutionnaire. #### Mettons les choses au clair tout de suite: - 90% du temps, quand tu auras une idée quelqu'un aura déjà fait la même chose - Cette même idée est souvent déjà mieux développée que ce que toi tu avais en tête initialement, et a potentiellement déjà des milliers d'utilisateurs. #### Ça ne doit pas te décourager. Continue avec ton idée, on s'en fout que quelqu'un l'ai déjà fait en mieux, que ce soit déjà un produit. C'est justement parce que ce projet te motive que ça te permettra d'aller loin et d'apprendre. Si vraiment c'est un problème, quelques idées (classiques) si tu manques d'inspiration: - [Build your own X](https://github.com/codecrafters-io/build-your-own-x) (il y a des sujets un peu énervés, mais c'est super intéressant et ça sort des projets un peu bateau). - Une todolist (et ouais, j'm'en fous moi, je trouve que c'est un bon projet qui peut être rapidement fonctionnel et sur lequel tu peux ajouter pleins de choses si t'es motivé). - Un racourcisseur d'url. - ... Si ça ne te convient pas, trouve un sujet que tu aimes, une passion que tu as, un point de frustration que tu rencontres tous les jours et vois comment tu peux développer un truc qui t'aiderai; c'est d'autant plus motivant si c'est un sujet qui te tient à coeur. ### 3. Fais du code crado, fais des erreurs, utilise des templates Le but c'est de s'éclater ! donc si tu veux pas passer 15 ans à faire un code ultra clean, mais que ton projet n'est toujours pas sorti ça vaut pas le coup. C'est ok  d'avoir un truc pas super propre mais qui fonctionne; tu seras déjà allé plus loin que 80% des devs qui init un side project (je suis inclu dans ce pourcentage 👅). Perso ce qui me décourage la plupart du temps, c'est toute la phase de setup nécessaire avant de se plonger dans ce qui est vraiment intéressant; pour éviter ça je te recommande vivement de partir d'un template (même minimaliste) qui t'évitera de te re-taper le même setup de projet en projet. Ptit tip: faire ton template peut aussi être une idée de side-project 😉. **Instant promo:** au Beartudio on a un starter production ready que j'utilise pour setup quelques-uns de mes side projects: [StartUI [web]](/fr/blog/articles/start-ui).  Je te recommande vivement d'y jeter un coup d'oeil si tu aimes la stack react/typescript ! ![start-ui](images/start-ui.png) ## Pour conclure Soyons bien d'accord, tout ce qui est dit au dessus est mon avis. Pour moi, le principal but d'un side project, c'est pour apprendre et s’amuser. C'est le meilleur moyen d'apprendre sans même s'en rendre compte 🙌. Bref, ayez du fun dans ce que vous faites ! --- ### Découvrir le MCP : Une nouvelle approche pour vos agents IA URL: https://www.bearstudio.fr/fr/blog/articles/decouvrir-le-mcp-une-nouvelle-approche-pour-vos-agents-ia Date: 2025-08-14 [Cet article est également disponible en anglais ! 🇬🇧](https://noe.tatoud.com/blog/what-is-mcp/) ## État des lieux rapide Ces derniers mois, l'efficacité des *LLM* n’a cessé de croître, bouleversant nos habitudes et notre quotidien de développeur. De plus en plus sollicités pour écrire du code, débogguer, concevoir ou nous assister à chaque étape de notre travail, ces modèles sont en train de devenir des copilotes incontournables. > **LLM** (Large Language Model, ou grand modèle de langage) est une intelligence artificielle entraînée sur de grandes quantités de texte pour **comprendre, générer et raisonner en langage naturel**. Le grand public a déjà commencé à adopter des outils comme ChatGPT (OpenAI), LeChat (Mistral), ou d’autres solutions basées sur l'IA générative. Mais au-delà d'échanges textuels et d'interactions basiques, et si l’on allait plus loin ? Et si l’IA pouvait **interagir directement et en autonomie avec nos outils** ? Modifier du code ? Interroger une base de données ? C’est précisément ce que permettent les **agents IA**. ## Quelle est la différence entre un bot, un assistant IA et un agent IA ? ##### Bot C'est un programme très simple. Il suit des règles pré-définies et donne des réponses automatiques. Par exemple, un chatbot sur un site web qui vous propose des réponses toutes faites ("Tapez 1 pour parler à un conseiller"). 👉 **Il ne comprend pas vraiment, il applique des scripts.** ##### Assistant IA (comme Siri, Alexa ou ChatGPT) Il est plus avancé. Il comprend ce qu’on lui dit, répond de manière plus naturelle, et peut effectuer des tâches simples (envoyer un message, faire une recherche, etc.). 👉 **Il attend qu'on lui parle et fait ce qu’on lui demande, mais ne prend pas d’initiatives.** ##### Agent IA C’est le niveau supérieur. Il peut **agir seul**, prendre des décisions **sans qu’on lui dise quoi faire**, et s’adapter à ce qui se passe autour de lui. Par exemple, un agent IA pourrait surveiller votre boîte mail, repérer un rendez-vous important, réserver un taxi et vous prévenir — sans que vous ayez à le demander. **👉 Il est autonome, intelligent, et apprend avec le temps.** Je ne vais pas rentrer dans les détails du fonctionnement d'un Agent IA mais vous pouvez lire cet article de Google qui est une bonne entrée en matière: [Google Cloud - Qu'est-ce q'un agent IA ?](https://cloud.google.com/discover/what-are-ai-agents?hl=fr) Jusqu’à présent, une des contraintes principale dans la création d'un agent était qu'il fallait mettre en place des connecteurs uniques, très spécifiques à chaque source de données et à chaque modèle. Une approche fastidieuse, peu scalable, et rarement généralisable. ## MCP: Here comes a new challenger C’est là que le **Model Context Protocol (MCP)** entre en scène. Lancé fin 2024 par **Anthropic** (l’entreprise à l’origine de Claude), ce protocole open-source offre aux agents IA une méthode simple, standardisée et sécurisée pour se connecter à des outils, données et services, **sans avoir besoin d'intégrations spécifiques à chaque fois**. ## Théorie : comment ça fonctionne ? Derrière le Model Context Protocol se cache une idée simple mais puissante : permettre à une IA de **découvrir dynamiquement, interroger et manipuler des outils ou des services** sans avoir à écrire une intégration dédiée pour chaque cas. Pour y parvenir, MCP définit un protocole de communication standardisé entre différents acteurs. ![Schema de fonctionnement d'un MCP](images/im1.jpeg) ##### Les acteurs : **Hôtes MCP :** ce sont des applications comme Claude Desktop, des environnements de développement (IDEs) ou des outils d’IA qui souhaitent accéder à diverses sources de données ou capacités via MCP. 👉 **Ils envoient des requêtes pour enrichir leur contexte (code, fichiers, docs, etc.) en utilisant le protocole.** **Clients MCP :** ce sont des composants intermédiaires qui gèrent une connexion 1:1 avec un serveur MCP. 👉 **Ils traduisent les requêtes des hôtes en appels vers un serveur MCP spécifique, assurant le dialogue entre les deux.** **Serveurs MCP :** ce sont de petits programmes autonomes qui exposent une fonctionnalité ou un type de données via le protocole MCP (ex : fichiers locaux, historique Git, base de connaissances…). 👉 **Chaque serveur est spécialisé et peut être combiné avec d'autres** **pour enrichir les capacités d’un hôte.** ##### Et les assistants IA dans nos IDE ? Les assistants IA que nous utilisons aujourd’hui dans nos environnements de développement ont déjà bien évolué. D’abord conçus pour suggérer du code ou répondre à des questions simples, ils deviennent peu à peu de **véritables agents intelligents**, capables de **comprendre le contexte**, **prendre des décisions**, et **agir directement dans nos projets**. Avec l’arrivée du **mode agent** ces assistants gagnent en autonomie et en flexibilité. Ils peuvent désormais se connecter dynamiquement à des outils externes — bases de données, API, fichiers locaux, historique Git, etc... Cela leur permet non seulement de mieux répondre à nos requêtes, mais aussi d’exécuter des actions complexes de manière proactive, en s’adaptant à chaque contexte. C’est une étape majeure : l’assistant devient acteur, intégré profondément dans notre environnement de travail. Ajouter des serveurs MCP à ces agents permet de **déverrouiller des capacités sur mesure** : accéder à des données locales, interroger des services métier, ou manipuler des fichiers spécifiques. Cela transforme l’agent en **interface unifiée entre l’IA et nos outils**, sans avoir à coder chaque intégration à la main. ## Pratique : exemple concret avec TypeScript et `@modelcontextprotocol/sdk` ### Mise en situation Extrait de données sur les employés : ```json [ { "nom": "Alice Dupont", "poste": "Développeuse Frontend", "anciennete": "3 ans", "competences": "React, TypeScript, UI/UX", "statut": "CDI" }, { "nom": "Mehdi Benali", "poste": "Tech Lead Fullstack", "anciennete": "5 ans", "competences": "Java, React, Architecture", "statut": "CDI" }, { "nom": "Julie Morel", "poste": "QA Analyst", "anciennete": "2 ans", "competences": "Tests automatisés, Cypress", "statut": "CDD" }, { "nom": "Thomas Leroy", "poste": "Product Manager", "anciennete": "4 ans", "competences": "Agile, Roadmap, Communication", "statut": "CDI" }, { "nom": "Claire Nguyen", "poste": "Développeuse Backend", "anciennete": "1 an", "competences": "Node.js, PostgreSQL, Docker", "statut": "Alternance" }, { "nom": "Romain Garcia", "poste": "Designer UI/UX", "anciennete": "2 ans", "competences": "Figma, Accessibilité, Design Sys", "statut": "Freelance" } ] ``` L'objectif ici va être de construire un mini serveur MCP afin de récupérer cette liste et de l'utiliser via Cursor. Initialiser un projet Node 24 avec pnpm : ```bash $ mkdir demo-mcp $ cd demo-mcp $ pnpm init -y ``` Installer les dépendances : ```bash $ pnpm add zod @modelcontextprotocol/sdk ``` Nous n'aurons besoin que d'un seul fichier : `main.ts`. Commençons par créer notre serveur : ```typescript import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; const server = new McpServer({ name: "Gestionnaire d'employés", version: '1.0.0', description: 'Un serveur MCP de démonstration', }); ``` Ok, maintenant ajoutons un outil (tool) à notre serveur. On doit préciser trois choses importantes : - Le nom de l’outil : `'getEmployees'` - Une description : `"Récupère la liste de tous les employés en appliquant un filtre si nécessaire"`. Cela permet au LLM d’avoir plus de contexte pour savoir quand et comment l’utiliser. - Un schéma de validation d’entrée, pour indiquer au LLM quels paramètres peuvent être utilisés. On peut utiliser n'importe quelle bibliothèque de validation suivant le [Standard Schema](https://github.com/standard-schema/standard-schema). Avec `zod`, on peut en plus ajouter des descriptions aux paramètres. - Et bien sûr, le corps de la fonction exécutée par l’outil. Ajoutons tout cela à notre fichier `main.ts` : ```typescript server.tool( 'getEmployees', 'Récupère la liste de tous les employés en appliquant un filtre si nécessaire', { filter: z .object({ key: z .enum(['nom', 'poste', 'anciennete', 'competences', 'statut']) .describe( 'Les clés de la table des employés utilisées pour filtrer les employés' ), value: z.string(), }) .optional() .describe("Filtrer la liste d'employés"), }, async ({ filter }) => { const employees = await getEmployees({ where: filter?.key, value: filter?.value, }); return { content: [{ type: 'text', text: JSON.stringify(employees, null, 2) }], }; } ); ``` Super ! Notre serveur est presque prêt, mais il faut maintenant faire en sorte que les clients MCP puissent communiquer avec notre serveur. Une solution simple est de lire depuis l’entrée standard et d’écrire sur la sortie standard du processus courant ( `stdio/stdout` ). Heureusement, la bibliothèque `@modelcontextprotocol/sdk` fournit une abstraction simple pour cela : `StdioServerTransport` . ```typescript import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; const transport = new StdioServerTransport(); await server.connect(transport); ``` Et voilà, notre serveur est désormais prêt à être utilisé ! Connectons-le à Cursor. Pour cela, il suffit d'ajouter dans notre fichier `.cursor/mcp.json` (à la racine de votre projet par exemple) : ```json { "mcpServers": { "demo-mcp": { "command": "npx", "args": ["node", "/chemin-vers-votre-projet/demo-mcp/main.ts"] } } } ``` Maintenant, notre agent IA a accès au serveur MCP et aux outils qu’il propose. On peut vérifier que le serveur est bien connecté dans les paramètres de Cursor : ![Exemple de commande permttant de vérifier si le serveur est bien connecté dans les paramètres de Cursor](images/im2.jpeg) Maintenant, essayons de lui poser une question, par exemple : **"Donne-moi la liste des employés qui sont en CDI."** (Ici le modèle utilisé est `claude-3.5-sonnet`, mais cela n'a pas vraiment d’importance.) Le LLM va comprendre qu’il peut faire appel à l’outil de notre serveur, choisir les bons paramètres, récupérer les données, et nous renvoyer une réponse formatée à partir de celles-ci ![Utilisation des outils du serveur par claude-3.5-sonnet pour répondre à la demande effectuée](images/im3.jpeg) ## À quoi s'attendre dans le futur ? Depuis début 2025, l’adoption du **MCP** connaît une croissance fulgurante. De plus en plus d’acteurs, des startups aux grandes plateformes, contribuent à l’écosystème en publiant des **serveurs MCP** capables d’interagir avec toutes sortes de systèmes : bases de code, bases de données, APIs métier, outils internes, fichiers, etc. Des noms comme **Microsoft**, **Cloudflare**, **Open AI** ou encore des éditeurs de frameworks et d’IDE s’impliquent activement. MCP s’impose peu à peu comme le **standard d’interopérabilité entre IA et outils métiers**. Là où l’on bricolait des connecteurs spécifiques et rigides, on dispose désormais d’un protocole **modulaire, déclaratif et sécurisé**, conçu pour collaborer naturellement avec des modèles de langage. Cela ouvre un nouveau champ de possibilités : agents personnalisés, automatisations intelligentes, assistants capables de naviguer dans une base de code ou d'analyser des logs en contexte, voire même des actions de haut niveau comme la gestion de déploiement ou le contrôle d’environnements. Le tout, sans dépendance technologique forte : MCP est **ouvert, extensible et agnostique**, ce qui permet à n’importe quel outil ou service d’exposer ses capacités à la volée. Alors si vous êtes curieux, testez-le, créez vos propres serveurs, exposez vos outils, et partagez vos expériences avec la communauté. ## Pour aller plus loin 👉 [Introduction - Model Context Protocol (Anthropic)](https://modelcontextprotocol.io/introduction) 👉 [Créez un serveur MCP en 5 étapes // Un codage efficace (Matt Pocock)](https://www.youtube.com/watch?v=FRogt98OF80) ##### Et pour découvrir de nouveaux sujets, n'hésitez pas à consulter nos derniers articles publiés ! - [Du code au coeur : nos engagements associatifs annuels](/fr/blog/articles/du-code-au-coeur-nos-engagements-associatifs-annuels) - [Léa English : Étude de cas UX](/fr/blog/articles/lea-english-etude-de-cas) - [Le bon et le mauvais développeurs : les soft skills](/fr/blog/articles/le-bon-et-le-mauvais-chasseur-developpeur-les-soft-skills) Auteur : Noé Tatoud [LinkedIn](https://www.linkedin.com/in/noetatoud/) - [X](https://twitter.com/nowaytatoud) - [Github](https://github.com/ntatoud) --- ### Du code au cœur : nos engagements associatifs annuels URL: https://www.bearstudio.fr/fr/blog/articles/du-code-au-coeur-nos-engagements-associatifs-annuels Date: 2025-07-22 ## Un engagement associatif ancré dans notre culture Au BearStudio, les engagements associatifs font partie de notre culture. En plus du développement, du design et de la formation, nous avons aussi un rituel important qui nous tient à cœur : les dons aux associations ! Ces dons aux associations se veulent collaboratifs. Chaque année, en Octobre, un appel est fait aux membres du BearStudio et ceux qui gravitent autour, pour que chacun ait l’occasion de présenter une association qui lui est chère. C’est ainsi que, depuis 2020, une vingtaine d’associations a été mise en avant afin qu’une donation puisse être effectuée. ## L’origine de notre démarche solidaire ##### Une idée née d'une augmentation… différente Tout a commencé avec Quentin il y a quelques années, l’un de nos collaborateurs. Lors d’une réunion d’augmentation autour d’une pizza (on vous invite à lire [cet article](https://ppbearstudio.wpengine.com/blog/entrepreneuriat/comment-deleguer-la-responsabilite-pour-les-augmentations) sur notre processus d'augmentation), Quentin a fait une demande atypique. Une fois n’est pas coutume, s’étant renseigné sur l’impact financier de son augmentation, il a souhaité l’utiliser en deux temps : - Dans un premier temps, il a demandé à BearStudio de recruter un stagiaire pour faire avancer son side project : [TraveledMap](https://www.traveledmap.com/fr). - Dans un second temps, il a souhaité soutenir une association par le biais d’une donation en fin d’année.  C’est pourquoi, durant 2 ans, le BearStudio a versé le montant équivalent à son augmentation aux causes qu’il souhaitait. Suite à cette initiative portée par Quentin au départ, BearStudio a désiré pérenniser l’action. C’est ainsi que depuis 2020 l’entreprise a effectué 24 donations à différentes associations pour une valeur proche de 35 000€. ## Zoom sur quelques associations soutenues ##### Atelier Sainte Claire [Atelier Sainte Claire](https://rouen.fr/associations/ateliers_sainte_claire) _est une association qui aide des adultes en situation de handicap psychique._ Ce don a permis l’installation de deux ruches dans les Ateliers Sainte Claire à Rouen. Ce qui a permis de récolter environ 20 kg de miel sur l’année. ![Récolte de miel à l'Atelier Sainte Claire de Rouen, financée par le don BearStudio ayant permis l'installation de deux ruches](images/image-9-1024x682.png) ![Une des ruches installées à l'Atelier Sainte Claire à Rouen grâce au don de BearStudio, avec deux pots de miel posés dessus](images/image-10-771x1024.png) ##### France Parrainage Au Pérou dans la ville d’Abancay, [France Parrainage](https://www.france-parrainages.org/international/decouvrez-dans-quel-pays-parrainer?gad_source=1&gclid=Cj0KCQiAsaS7BhDPARIsAAX5cSB-Tx2KsE0L9Be3lttG9_5u90Dupw64eTIM8K-ra_TwfxnCI0RLMW0aAslGEALw_wcB) a mis en place une aide alimentaire à des étudiants en difficultés suite à la pandémie. En Inde, ce don permet d’aider des jeunes démunis dans leur scolarité. Au total, les dons ont permis d’aider des familles et leurs enfants issus de contextes socio-économiques et familiaux difficiles. ##### Mécénat Cardiaque [Mécénat Cardiaque](https://mecenat-cardiaque.org/) est une association qui a pour but d’aider les enfants atteints de malformations cardiaques d’être opérés lorsque cela est impossible dans leur pays, faute de moyens techniques ou financiers. Ils sont alors pris en charge dans 11 villes françaises, 2 villes suisses ou 1 ville espagnole. Ils sont hébergés par des familles d’accueil bénévoles et en Suisse parfois dans une maison spécialisée. ##### Association Delfina [Association Delfina](https://www.associationdelfina.fr/) _a pour but de venir en aide aux populations défavorisées en Afrique._ Madagascar : Amélioration des locaux d’éducation du collège Marovantaza et également d’installer 6 panneaux solaires. Approfondissement du puits de Pont Banty pour atteindre le niveau de l’eau qui a baissé. Fourniture de livres de lecture, de matériels scolaires et d’équipements pour l’établissement scolaire. ![Carte de remerciement du directeur du collège Marovantaza à Madagascar, adressée aux donateurs de l'Association Delfina](images/image-8-1024x723.png) ![Affiche de l'Association Delfina composée de mots clés en forme de continent africain : aide, espoir, humanité et d'autres](images/image-6-723x1024.png) ##### Maromme Canteleu Volley [Maromme Canteleu Volley](https://mcv76.fr/) est le club de Volley-ball dans lequel [Soraya](/fr/equipe/soraya-benchakroune) a commencé sa “carrière” de Volleyeuse. Bénévole pendant de nombreuses années et évoluant dans ce club depuis plus de 3 ans. Elle a souhaité que le don du BearStudio serve à acheter des ballons et des accessoires pour l’organisation des séances d'entraînement. Ainsi permettre aux jeunes joueurs de pouvoir être le mieux encadrés. ![Équipe féminine de Maromme Canteleu Volley avec le stand BearStudio en arrière-plan, soutenue par un don en équipements](images/image-3-1024x768.png) ##### Rouen Handball Compétiteur né, Quentin reprend le Handball en dernière division après quelques années d’arrêt. Il reprend les armes au sein du club [Rouen Handball](https://www.rouen-handball.fr/) qui évolue jusqu’en N1 Féminine et Masculine. Quentin, souhaitant représenter le BearStudio jusque dans les gymnases, a  demandé un don qui a permis à son équipe de se fournir en équipements. ![Photo de l'équipe de Rouen Handball devant les buts, équipée grâce au don de BearStudio, avec Quentin parmi les joueurs](images/image-2-1024x768.png) ##### Foot Tourvilles sur Arques [Foot Tourvilles sur Arques](https://tourville-sur-arques.footeo.com/) est le club d’un de nos deux [Hugo](/fr/equipe/hugo-perard) préféré. Il y a évolué depuis l’âge de 6 ans (soit presque 18 ans), où il a pu se former au poste de défenseur. BearStudio a pu soutenir son club notamment dans l’achat de matériel et d’ensembles de survêtements. ![Joueurs du Foot Tourvilles sur Arques en survêtements BearStudio, achetés grâce au don soutenu par Hugo, défenseur du club](images/image-768x1024.png) ## L’impact de ces contributions Ces contributions offrent aux collaborateurs de BearStudio l’occasion de s’engager dans des causes qui leur tiennent à cœur. En plus des bénéfices concrets qu’elles apportent aux associations soutenues, elles permettent également à BearStudio de profiter d’une réduction fiscale prévue par l’État français. ## Le mécénat de compétences : un nouveau pas vers l’engagement Cette année, au BearStudio, nous avons également commencé le bénévolat par le mécénat de compétences, à savoir offrir des heures de savoir-faire au service d’associations en demande. C’est le cas de [Nhung](/fr/equipe/nhung-duong) et [Ivan](/fr/equipe/ivan-dalmet) qui œuvrent pour [Sistech](https://sis.tech/donation-sistech-refugee-women/). Sistech soutient l’émancipation professionnelle des femmes réfugiées dans les métiers de la tech et du numérique en France, en Italie et en Grèce. Nhung est présente pour les aider sur le côté administratif et business, tandis qu’Ivan les aide en discutant et pratiquant le français afin qu’elles puissent s’améliorer et le pratiquer le plus souvent possible.   Quentin, lui aussi aide l’association Passerelle Numérique au Vietnam, dont l’objectif est de sélectionner (sur la base de leur niveau et de la précarité de leurs familles) des futurs étudiants pour financer leurs 3 années d’études dans l’informatique. Quentin donne deux ateliers différents l’un basé sur l’infrastructure distribuée et l’autre sur le thème de l’utilisation de l’IA dans les métiers du numérique. ## Ensemble, pour une action durable En tant que salariés de BearStudio, nous sommes fiers de contribuer à des projets qui font la différence pour certains. Ensemble, nous espérons continuer à soutenir des associations et des clubs, tout en explorant de nouvelles façons de redonner à la communauté. Si vous connaissez une association alignée avec nos valeurs, nous serions ravis d’en discuter avec vous ! --- ### Lea English étude de cas URL: https://www.bearstudio.fr/fr/blog/articles/lea-english-etude-de-cas Date: 2025-07-03 ## Présentation du projet Lea English est une plateforme d’apprentissage en ligne créée par Léa, **coach linguistique professionnelle** multilingue parlant couramment cinq langues. Elle rassemble une communauté de plus de **350 000 apprenants francophones.** Son approche pédagogique, quant à elle, met l’accent sur l’apprentissage efficace de l’anglais courant à travers des compétences conversationnelles concrètes. Contrairement aux cours traditionnels centrés sur la grammaire, ou aux applications excessivement gamifiées, son approche minimaliste privilégie les compétences orales essentielles et l’usage naturel de la langue. **L’objectif est d’atteindre une aisance rapide et concrète.** Forte d’une application **web éprouvée et des retours de ses utilisateurs payants,** Léa s’est associée à notre équipe. Ce qui a permis de faire évoluer cette expérience d’apprentissage grâce à **une application mobile** pensée avec soin et centrée sur les besoins des utilisateurs. ## Le Défi / Contexte Les apprenants en langues sont souvent confrontés à des programmes **surchargés** et **axés sur la grammaire,** ce qui limite leurs progrès en conversation. D’autres méthodes, à l’inverse, misent trop sur la **gamification au détriment de l’efficacité.** **Les applications traditionnelles** ciblent généralement **les débutants,** sans vraiment permettre de passer efficacement à un niveau intermédiaire ou avancé. Par ailleurs, **les apprenants manquent** fréquemment de pratique dans des **conversations concrètes** et rencontrent des **difficultés à communiquer** avec assurance dans des **situations réelles.** ## Notre rôle - BearStudio ##### Product designer (UI/UX Designer), en charge de :  - **Recherche utilisateur** (entretien avec des experts, retours d’utilisabilité, analyse de concurrence) - **L’architecture de l’information** et **parcours utilisateurs** - **Wireframing** et le **prototypage** - **Tests d’utilisabilité** et **itérations de conception** - **Collaboration itérative** avec **les développeurs** sur les défis techniques et la faisabilité des idées ##### Les Développeurs : - **Développement** de l’application en React Native / Expo, pour un déploiement sur Android et iOS - **Conception** **d'animations** pour agrémenter l'application - **Mise en place** de la fonctionnalité de bot conversationnel (basée sur l’API d’OpenAI) - **Intégration** **des retours** du product designer et de Léa - **Utilisation** **des composants** partagés depuis Storybook et Figma pour garantir cohérence et efficacité dans l’interface ## Recherche & informations clés #### Atelier de lancement Pour tirer pleinement parti de la connaissance approfondie que notre cliente a de ses utilisateurs, nous avons tenu un **atelier collaboratif ciblé de 3 heures avec Léa**. Elle y a partagé de **nombreux retours,** directement recueillis auprès de **ses utilisateurs**. Ces données sont riches et qualitatives. Elles proviennent de l’expérience de terrain de Léa et de ses échanges directs avec **plus de 350 000 apprenants engagés.** Grâce à ces informations, nous avons pu identifier rapidement **les besoins clés** des utilisateurs. De plus, elles ont permis de valider les principaux points de friction rencontrés. Nous avons esquissé **les premières pistes en temps réel,** à mesure que les idées émergeaient, nourries par l’expérience précieuse de Léa dans l’enseignement.
![Esquisse générale de notre atelier en ligne avec la cliente](images/frame-162-1-1024x752.png)
Esquisse générale de notre atelier en ligne avec la cliente
Nous avons complété ces précieuses données fournies par la cliente par une **analyse comparative** ciblée de la concurrence (en étudiant des plateformes comme Duolingo, iTalki ou Simpler). [Ce qui nous a permis d’identifier des bonnes pratiques UX spécifiques ainsi que des axes d’amélioration.](/fr/blog/articles/pourquoi-lexperience-utilisateur-est-elle-importante) Cette démarche nous a permis de renforcer les bases solides posées par Léa. Nous avons combiné ses retours centrés sur les utilisateurs avec les standards du secteur. Grâce à cela, nous avons pu définir clairement une orientation forte pour notre travail de design. #### Détails supplémentaires sur les données initiales et la recherche ##### Analyse de la concurrence Pour mieux comprendre le marché, nous avons étudié plusieurs plateformes telles que Duolingo (excellente gamification, peu de pratique orale), iTalki (tuteurs en direct, mais planification et contenu des cours pouvant sembler fragmentés), et Simpler (vise principalement les débutants via une approche grammaticale, ce qui ne favorise pas des résultats rapides en communication quotidienne). De cette analyse concurrentielle, il est ressorti que l’application à concevoir devait faire preuve **d’efficacité** en imitant la méthode d’enseignement de notre cliente et en améliorant le **feedback en temps réel**. Les cours particuliers étant souvent coûteux ou peu flexibles, notre objectif était de créer une solution intégrée combinant le meilleur des deux mondes : des leçons interactives en ligne et des exercices à la demande, tout en maintenant un format engageant, mais aussi **orienté résultats**. ##### Retours utilisateurs sur sa première version de l’application web **Plus de 400 apprenants** ont participé aux retours via des sondages, révélant plusieurs points de friction : - **Fonctionnalités manquantes** \- Les utilisateurs ont formulé des suggestions claires pour améliorer leur routine d’apprentissage sur l’app déjà existante. - **Motivation et régularité** \- beaucoup peinent à rester constants sans indicateurs concrets de progression et sans fonctionnalité de notification. **Notre analyse** approfondie de **l’application web**, croisée avec les retours des **utilisateurs payants** réguliers, a mis en lumière plusieurs points de friction : - **Charge cognitive élevée**, rendant l’usage parfois fatigant ou décourageant. - **Manque de fluidité** dans les parcours utilisateurs, nuisant à l’expérience globale. - **Problèmes d’ergonomie**, avec des interactions clés jugées peu intuitives ou inutilement complexes. Ces obstacles réduisaient significativement l’engagement et l’accessibilité. Au-delà des problématiques UX, nous avons également identifié **des failles techniques, dont des vulnérabilités de sécurité et des bugs fonctionnels récurrents**. ![Première version web de Léa English : page Podcast avec liste de dialogues et filtres de niveau.](images/old-screen.png) ![Trois écrans de l'ancienne version mobile : test de grammaire, Flash Cards et conversation IA.](images/old-screens-1024x585.png) ##### Quelques-unes de nos observations - **Clics excessifs dans les tests -** les utilisateurs devaient enchaîner plusieurs clics pour passer à l’étape suivante, ce qui ajoutait des lenteurs inutiles et nuisait à la fluidité du parcours. - **Expérience audio asynchrone -** la transcription ne mettait pas en surbrillance les mots en temps réel pendant la lecture, rendant le suivi difficile pour les utilisateurs. - **Interaction limitée avec les flash cards -** le mécanisme de retournement était peu intuitif et ne favorisait pas une expérience d’apprentissage fluide et continue. #### Public cible - Apprenants adultes allant de très **débutants (A1) à avancés (C1).** - Utilisateurs préférant un apprentissage **pratique et efficace**, plutôt que centré sur la grammaire. - Personnes souhaitant développer leur aisance à l’oral grâce à une **pratique régulière, interactive et axée sur la conversation.** Nous nous sommes assurés que les décisions de design étaient alignées avec **les besoins réels des utilisateurs**. En cartographiant les comportements, objectifs et frustrations des utilisateurs, la recherche a permis une meilleure compréhension des limites de la première version de l’application. Ces limites concernaient surtout l’ergonomie et la capacité à maintenir l’engagement des utilisateurs. Par ailleurs, cette analyse a servi de référence tout au long du processus de conception. Elle a aidé à prioriser les améliorations nécessaires. Celles-ci visaient à enrichir l’expérience globale, fluidifier les interactions et accroître la satisfaction des utilisateurs. ## Approche claire : principes directeurs et bénéfices ##### Intégration fluide pour renforcer l’apprentissage Le vocabulaire, l’audio et les exercices interactifs sont **étroitement liés**, créant un écosystème cohérent. Les utilisateurs renforcent ainsi naturellement leurs compétences grâce à des **interactions variées** et **connectées,** favorisant une mémorisation et une assimilation efficaces. ##### Expérience d’apprentissage personnalisée En s’appuyant sur le niveau, les préférences et les comportements de l’utilisateur, l’application propose constamment du contenu et des interactions sur mesure, renforçant considérablement la motivation et l’efficacité de l’apprentissage. Ce qui mène à une **personnalisation centrée sur l’utilisateur**. ##### UX intuitive et engageante Privilégier des interactions simples, claires et intuitives assure une charge cognitive minime, permettant aux utilisateurs de se concentrer pleinement sur l’apprentissage de la langue plutôt que sur la navigation. L'intégration d'interactions gamifiées, de limites journalières, d'indicateurs de progrès clairs et de retours immédiats motive les utilisateurs à poursuivre une pratique régulière de la langue. Ce qui conduit à une **motivation d’apprentissage continue**. ##### Une approche flexible et accessible à tous les niveaux Tout en s’adressant à un large public, l’application permet aux utilisateurs de choisir leur type d’apprentissage, tout en suivant une progression définie pour atteindre le niveau suivant. Ce qui mène à un **engagement prolongé sur la plateforme**. ## Conception & itération #### Premiers wireframes Nous avons utilisé les wireframes pour définir les fonctionnalités de l’application et structurer ses principales sections ainsi que son architecture de l’information. - **Cartes Interactives** - un court test pour assurer l’intuitivité du geste pour les utilisateurs dès le départ. - **Écoute audio** - test de l’accès rapide aux niveaux audio souhaités par l’utilisateur. - **Chat IA** - test de la clarté de distinction pour les utilisateurs entre la conversation du jour, interactive, et les conversations passées, qui doivent être clairement indiquées comme inactives. ![Wireframes basse fidélité de l'app Léa English : Flash Cards, Réviser et Écouter](images/wireframes-1024x597.png) #### Tests d’utilisabilité et validation Nous avons mené des sessions internes de **tests d’utilisabilité** avec **six collègues**. Ces tests portaient sur des wireframes basse fidélité. Nous nous sommes concentrés sur des scénarios basés sur des tâches. L’objectif était d’évaluer rapidement la clarté des interactions, l’intuitivité de la navigation et l’engagement global. Ces retours ont permis d’alimenter des itérations rapides du design. L’un des **ajustements** a concerné le comportement des cartes, avec l’ajout du bouton «Ne pas apprendre», demandé par les utilisateurs pour les cas où ils ne souhaitaient plus pratiquer un mot ou une expression. ## Conception expliquée #### Branding et design system Lea English disposait déjà **d’une identité visuelle** claire et bien définie, que nous avons intégrée naturellement dans notre design system personnalisé. Nous nous sommes appuyés sur les composants issus de [Start UI Figma](/fr/blog/articles/start-ui), une bibliothèque open-source pour Figma que nous avons conçue et utilisons en interne. Les composants que nous utilisons dans Figma sont déjà implémentés dans [Start UI Native](/fr/blog/articles/start-ui). Cette bibliothèque utilise des technologies comme **TypeScript, React** et **Ficus UI.** Grâce à cela, les développeurs peuvent accélérer immédiatement la phase d’implémentation après la finalisation du design. Par ailleurs, cela garantit une cohérence pour les futures fonctionnalités à venir. ![Composants Figma de Léa English via Start UI : Button, Tag, FormField, Tab, Avatar et NavItem.](images/figma.png) #### Analyse des fonctionnalités UX  ###### 1\. Cartes de vocabulaire quotidiennes - **Cartes Interactives à Retourner** - Les utilisateurs interagissent via un **geste intuitif de retournement** pour **révéler la traduction**, ce qui renforce la mémorisation active, une technique d’apprentissage éprouvée. - L’interaction de retournement stimule immédiatement l’attention cognitive, favorisant une **meilleure mémorisation.** - **Limite Quotidienne** - **La restriction** à 5 cartes par jour permet de gérer la charge cognitive, **d’éviter la fatigue** et d’améliorer **la mémorisation à long terme.** - Cela introduit **un élément de gamification,** créant de l’anticipation et la mise en place d’une routine quotidienne. - **Indicateur de Progression** - Des compteurs ou barres de **progression** clairement visibles encouragent l’engagement régulier des utilisateurs et fournissent un **retour immédiat** sur les objectifs atteints dans la journée. ![Fonctionnalité cartes de vocabulaire quotidiennes : recto, verso de la carte et écran de fin de session](images/image-1-e1751294667236-1024x560.png) ###### 2\. Fonctionnalité “Réviser” - **Listing Synchronisé** - Les mots retournés dans les cartes quotidiennes **apparaissent automatiquement** dans la section de révision. Ceux-ci sont clairement indiqués selon l’interaction de l’utilisateur (vert pour connu, rouge pour inconnu). - Cette synchronisation assure une **intégration fluide** entre l’apprentissage et la révision du vocabulaire, **renforçant l’assimilation.** - **Gestion personnalisée du vocabulaire** - Les utilisateurs peuvent ajouter manuellement de nouveaux mots pour **personnaliser leur liste de vocabulaire,** améliorant la personnalisation de leur expérience d’apprentissage. - Des options telles que marquer un mot comme “connu” ou le supprimer avec “ne plus apprendre” permettent une **gestion efficace des mots** à travailler. - **Options de présentation flexibles** - Les utilisateurs peuvent choisir d’afficher les mots d’abord en français ou en anglais, selon leurs **préférences** d’apprentissage. - **Audio et Exemples** - Les utilisateurs peuvent **écouter la prononciation** directement dans la section de révision, soutenant l’apprentissage auditif. - Des exemples de mots ou expressions contextualisés aident à renforcer la compréhension et l’usage correct. ![Fonctionnalité Réviser : liste de vocabulaire, préférences d'affichage et ajout de mot.](images/image-e1751294688522-1024x560.png) ###### 3\. Fonctionnalité “Écouter” - **Recommandations audio personnalisées** - Les audios suggérés sont mis en avant en haut de l’écran selon **le niveau d’anglais** de l’utilisateur (débutant, intermédiaire, avancé), assurant la pertinence du contenu. - Chaque audio est clairement étiqueté selon le niveau de langue, le type (dialogue ou monologue) et le thème général, facilitant ainsi une sélection rapide et éclairée. - **Suivi visuel de la progression** - Les audios déjà écoutés sont indiqués en vert, offrant un retour visuel immédiat sur la progression de l’utilisateur. - **Filtrage avancé** - Les utilisateurs peuvent filtrer les audios par favoris, téléchargements hors ligne et niveaux, permettant une personnalisation efficace des sessions d’écoute. - **Fonctionnalités d’accès rapide** - Les options de téléchargement rapide et de mise en favori (cœur) sont directement accessibles depuis la liste des audios, simplifiant les interactions et améliorant l’ergonomie. - **Écran audio détaillé** - Des boutons d’action rapide pour télécharger, ajouter aux favoris ou marquer comme écouté offrent un usage plus pratique. - Les transcriptions interactives permettent de basculer instantanément entre l’anglais et le français, avec un surlignage synchronisé du texte pour accompagner la lecture et l’écoute. - Le nouveau vocabulaire dans les transcriptions est mis en évidence en majuscules et en gras, afin d’en faciliter la reconnaissance immédiate et l’apprentissage. - **Barre de contrôle audio fixe** - Les contrôles audio restent visibles en permanence pendant le défilement, avec des options intégrées pour régler la vitesse de lecture et afficher ou masquer la transcription, améliorant ainsi le confort et le contrôle de l’utilisateur. ![Fonctionnalité Écouter : liste d'audios filtrables et vue détaillée avec transcription bilingue](images/image-4-e1751355919230.png) ###### 4\. Conversation avec l’IA : “Pratiquer” - **Sessions de conversations IA quotidiennes** - Les utilisateurs participent chaque jour à des conversations guidées avec une IA autour de sujets prédéfinis. Cette pratique encourage l’utilisation active de la grammaire et le développement des compétences conversationnelles. - Des corrections en temps réel fournies par l’IA offrent un retour immédiat, permettant aux utilisateurs d’identifier rapidement leurs erreurs et d’en tirer apprentissage. - L’utilisateur a un accès rapide à un traducteur pendant la conversation. - **Mise en évidence des erreurs** - Les fautes de grammaire ou de syntaxe sont clairement signalées et corrigées pendant les échanges, aidant les utilisateurs à intégrer les structures linguistiques correctes. - **Sujets quotidiens structurés** - Des thèmes variés chaque jour garantissent une exposition riche à différents vocabulaires et contextes grammaticaux, gardant l’exercice pertinent et motivant. ![Fonctionnalité Pratiquer : conversation du jour, corrections grammaticales et traducteur intégré](images/image-3-e1751294625433-1024x562.png) #### Gestion complète du lancement et conception visuelle En préparation de la sortie publique, nous avons conçu l’ensemble des éléments visuels. Cela inclut des **aperçus détaillés de l’application**, optimisés pour différents formats d’appareils sur **l’App Store et Google Play.** Par ailleurs, nous avons géré en interne **tout le processus de lancement.** Nous avons ainsi garanti une représentation cohérente de la marque. De plus, nous avons assuré une prise en main fluide pour les utilisateurs, sur toutes les plateformes. #### Lancement itératif et intégration des fonctionnalités La sortie initiale, **en avril 2025,** a stratégiquement ciblé environ **300 utilisateurs** dès le jour du lancement, afin de constituer un environnement de test contrôlé. Ces premiers retours ont été d’une grande valeur, nous permettant d’itérer rapidement et d’améliorer [l’expérience utilisateur](/fr/blog/articles/pourquoi-lexperience-utilisateur-est-elle-importante) en nous appuyant sur des retours directs. ###### Personnalisation du rythme d’apprentissage Les utilisateurs ont demandé une fonctionnalité permettant **de choisir le nombre de nouvelles cartes à retourner chaque jour**, afin d’adapter leur apprentissage à leur propre rythme. ###### Fonction speech-to-text Les utilisateurs ont également demandé **une fonctionnalité de reconnaissance vocale** pour les conversations générées par l’IA, qui a été conçue et intégrée avec succès. ###### Expansion géographique Les retours de la communauté ont révélé **une demande dans d’autres régions**. Nous avons donc élargi la disponibilité de l’application à plusieurs pays en plus de la France, notamment le Maroc, la République Démocratique du Congo, le Canada, les États-Unis, le Royaume-Uni et l’Allemagne. Retours sur le lancement: ![Quatre témoignages positifs d'utilisateurs suite au lancement de l'application Léa English.](images/frame-33.png) #### Résultats après lancement - premier mois La nouvelle application mobile a vu un fort engagement utilisateur dès son premier mois. **Plus de 2 000 installations** sur les plateformes Android et iOS ###### Répartition des abonnements - Abonnements mensuels : environ **60 % des utilisateurs** ont opté pour un **abonnement mensuel**, la majorité commençant par un essai gratuit. - Abonnements annuels : environ **30 % des utilisateurs** ont choisi une **formule annuelle**, témoignant d’une forte confiance et d’un engagement durable. - Abonnements intermédiaires (6 mois) : environ **10 % des utilisateurs** ont préféré cet **engagement intermédiaire**. ###### Informations spécifiques aux plateformes Ce schéma de répartition des abonnements met en lumière **le succès de l’onboarding et de la stratégie d’abonnement,** indiquant que l’UX a su communiquer efficacement la valeur du produit et encourager un engagement sur le long terme. Retours trouvés sur AppStore/ Google Play/ Trustpilot : ![Avis Trustpilot 5 étoiles de Liliane Brochet : application concrète, adaptée, rythme quotidien tenu](images/avis-1.png) ![Avis App Store 5 étoiles de Claudemarie : vocabulaire en contexte, podcasts et IA appréciés](images/avis-2.png) ![Avis App Store 5 étoiles d'Elodie Ricordel : app simple, motivante, progrès en 15 min/jour](images/avis-3.png) ![Commentaire utilisateur : application complète, méthode efficace combinée aux séries Netflix](images/avis-4.png) ![Message utilisateur félicitant l'équipe Léa English pour un résultat agréable et fonctionnel](images/avis-5.png) ## Réflexions finales Au vu des données recueillies, nous pensons avoir réussi à concevoir **une application efficace.** Celle-ci intègre les principes de la psychologie cognitive. Elle propose aussi des interactions UX conviviales et engageantes. En combinant une navigation intuitive avec des éléments d’apprentissage interactifs, elle offre une expérience utilisateur personnalisée. Grâce à cela, notre application favorise u**ne pratique régulière et une motivation durable.** Elle permet aussi des progrès significatifs dans l’apprentissage de l’anglais pour les apprenants francophones. Vous pouvez consulter **le prototype interactif Figma ici** → [LINK](https://www.figma.com/proto/OfWcem6ytSSSAvaeP9nnOv/%F0%9F%91%A9%F0%9F%8F%BB%E2%80%8D%F0%9F%8F%AB-Lea-English?page-id=1453%3A591&node-id=1562-4425&p=f&viewport=226%2C167%2C0.05&t=8uDnG5QbLEdpTfjn-9&scaling=scale-down&content-scaling=fixed&starting-point-node-id=1562%3A4425&show-proto-sidebar=1) --- ### Le bon et le mauvais développeur : Les soft skills URL: https://www.bearstudio.fr/fr/blog/articles/le-bon-et-le-mauvais-chasseur-developpeur-les-soft-skills Date: 2025-06-30 _Le mauvais développeur c’est le gars, il a un ordinateur, on lui donne des specs et il code. Le bon développeur il a un ordinateur, on lui donne des specs et il code… mais c’est un bon développeur…_ Au-delà de sa capacité technique, qu’est-ce qui différencie réellement un bon et un mauvais développeur ? Je vais tenter de donner des exemples concrets permettant de répondre à cette question. Lorsqu’on parle de compétences mais qu’on exclut l’aspect technique, on parle de ce qu’on appelle des **soft skills**. Un soft skill est donc une compétence basée sur l’attitude d’une personne au jour le jour, ou face à une situation particulière.  Cette notion est très large, elle inclut par exemple la communication, la gestion du temps, la collaboration, etc., elle ne s'applique pas uniquement au métier de développeur. Cela dit, nous allons aujourd'hui nous concentrer sur les soft skills essentiels dans ce domaine. Pour illustrer cela, comme vous l’avez peut-être compris par le titre de cet article, je vais utiliser la fameuse explication du bon et du mauvais chasseur, en essayant d’être un peu plus convaincant 😂. Pour ce faire, je vais donner des cas concrets ainsi qu’un petit parallèle un peu absurde pour expliciter l’importance des soft skills et en sortir des conseils et des bonnes pratiques.
![Image parodiée de 3 chasseurs](images/image-10.png)
L’IA a un peu abusé sur le mauvais développeur... 😂
## Le wording On commence avec un cas qui touche tous les développeurs qui peut paraître sans réel intérêt à première vue mais qui en réalité fait la différence, c’est bien évidemment le wording. Le wording (soit le nommage) est présent à plusieurs endroits pour un développeur, du nom des variables, à la description des commits et des merge requests…  Je vais utiliser le cas du nom des variables comme cas concret. ##### Le mauvais développeur Il va nommer une variable d’une façon pas ou peu explicite : ```javascript const v = () => [...] // Là j’abuse mais ça existe  ``` ```javascript const values = () => [...]  ``` ##### Le bon développeur Il contextualise son wording afin d’expliciter le plus clairement possible ce dont il s’agit : ```javascript const getFormValuesSortedByName = () => [...] ``` ##### Parallèle C’est comme dire à son coloc j’ai mis un truc pour toi dans le frigo, et en ouvrant le frigo il se rend compte que c’est plein et tout en vrac, donc il ne sait pas ce qu’est le truc pour lui. ##### Conseils Il faut se mettre à la place de quelqu’un qui découvre le code et voir si c’est compréhensible et avec un minimum d’ambiguïté pour permettre une compréhension plus efficace. (Se mettre à la place de son futur soi fonctionne aussi 😅). D’autres questions qu’il peut être bien de se poser : - Est-ce que c’est grammaticalement correct ? - Est-ce que cela suit les conventions globales et du projet ? Par exemple si la convention définie sur le projet est de traduire les termes techniques en anglais alors respecter cette règle sur ses développements. ## Demande de l’aide (partie 1 / 2) Lorsqu’on rencontre un problème qui nous bloque, il est crucial de savoir quand chercher seul et quand demander de l’aide. ##### Le mauvais développeur Il passe des heures à essayer de résoudre un problème sans demander de l’aide, ou à l’inverse, il pose une question sans avoir fait les recherches de base. ##### Le bon développeur Il prend le temps de faire ses propres recherches avant de solliciter les autres. Ainsi, il fournit des informations de base qui pourront aider une autre personne à solutionner le problème. Il sait aussi demander de l’aide au bon moment, en posant une question claire et bien formulée. Enfin, il est capable de juger l’importance du problème et de prioriser ses tâches si besoin. ##### Parallèle C’est comme demander à quelqu’un de monter un meuble sans même avoir regardé la notice. ##### Conseils Avant de demander de l’aide, pose-toi les questions suivantes : - Ai-je cherché une solution de manière autonome avant de solliciter quelqu’un ? - Est-ce que ma question est suffisamment claire et précise pour que l’on puisse m’aider efficacement ? - Est-ce que la correction de mon problème vaut le temps que je suis en train de passer dessus ? Est-ce que je ne pourrais pas passer du temps sur quelque chose de plus important ? ## Demande de l’aide (partie 2 / 2) La façon dont on formule une demande d’aide peut faire toute la différence dans la rapidité et l’efficacité de la réponse. ##### Le mauvais développeur Il envoie des messages vagues du type : “Ça marche pas, j’ai une erreur”, sans fournir d’informations utiles pour résoudre le problème. ##### Le bon développeur Il envoie un message clair et détaillé, en contextualisant sa situation et en fournissant les informations clés sur l’erreur rencontrée. Cela comprend par exemple l’environnement, les étapes précédant le problème, etc. ##### Parallèle  C’est comme appeler un plombier en disant juste “y’a de l’eau partout” sans préciser d’où ça vient. ##### Conseils Pour faciliter l’aide que vous recevrez, prenez le temps de bien expliquer votre problème. Vous gagnerez du temps et recevrez une réponse plus précise et rapide. - Quelles sont les étapes qui ont conduit à l’erreur ? - Quelles erreurs ou messages avez-vous obtenus ? - Quel comportement attendu cherchiez-vous à obtenir ? - Qu’est-ce que vous avez déjà essayé de faire pour corriger le problème ? Selon le problème il peut-être également pertinent de faire du [peer programming](/fr/blog/articles/peer-programming) avec un développeur plus expérimenté. ## Tests Les tests sont une étape essentielle dans tout développement, s’en passer peut causer une perte de temps et une frustration pour toute l’équipe. ##### Le mauvais développeur “Tester c’est douter”, ou au mieux il teste uniquement en local dans un contexte favorable. ##### Le bon développeur Il est garant de son développement. Il teste en local avant de soumettre à la review mais aussi sur les environnements pour s’assurer qu’aucun souci n’est apparu. Et il élargit ses tests pour assurer que son développement n’a pas d’impacts dans différents cas fonctionnels ou d’autres écrans si son développement est commun à plusieurs écrans. ##### Parallèle C’est comme ci le groupe Ariane avait mit des spationautes dans leur nouvelle fusée sans avoir fait des dizaines de tests avant. ##### Conseils Il faut s’assurer que son développement répond fonctionnellement à 100% de la demande initiale, mais pas seulement. Il faut également mesurer les impacts de celui-ci afin de limiter les probabilités de régressions.  - Est-ce que mon développement répond à la spécification ? - Est-ce que mon développement touche d’autres fonctionnalités ? Si oui est-ce qu’elles sont toujours fonctionnelles ? ## Collaboration Dans le monde professionnel, un développeur travaille rarement seul sur un projet du début à la fin. D'autres personnes interviendront tôt ou tard, peut-être même de façon temporaire. Cela peut être le cas par exemple pour de l'intérim en remplacement de congés. C’est pourquoi il est essentiel de faciliter la collaboration. ##### Le mauvais développeur Il développe sans documenter aucune décision fonctionnelle ou technique, process ou choses à savoir. Il est le seul à avoir la connaissance sur des sujets spécifiques; son absence est en général problématique car souvent bloquante pour le reste de l’équipe qui est devenue dépendante de son savoir fonctionnel ou technique. ##### Le bon développeur Il laisse des traces des réflexions et des choix fait sur le projet, qu'ils soient techniques mais aussi fonctionnels, et documente des process, par exemple pour la mise en place ou le déploiement du projet. ##### Parallèle C’est comme si on construisait une ville sans laisser aucun plan, donc lorsqu’on devra venir faire des travaux on aura aucune idée de ce qu’il y a, où et pourquoi. ##### Conseils Il faut se dire que si vous vous posez des questions, quelqu’un d’autre (et spoiler, sûrement même votre futur vous) se posera ces mêmes questions et sera donc très heureux de trouver une réponse. Si vous ne voulez pas être dérangé pendant vos vacances, documentez vos connaissances ! (La documentation ça va de simples commentaires dans le code à de la documentation externe en passant par le README). ## Gestion des priorités Le développeur peut avoir plusieurs tâches de prévues, que ce soit un unique projet ou sur plusieurs, ou des tâches annexes au sein de son entreprise par exemple. ##### Le mauvais développeur Il passe 2 jours sur un bug mineur sans avancer sur le reste, il se noie dans des tâches sans importance et ignore les deadlines. À la fin d’un sprint, on se retrouve avec un wording corrigé et un layout parfait sur tous les appareils, mais la fonctionnalité attendue n’est pas présente. ##### Le bon développeur Il sait identifier ce qui est prioritaire ou bien demander à un décideur (le Product Owner par exemple) ce qui est prioritaire, il découpe son travail en tâches gérables et ajuste ses efforts en fonction de l’impact et de la valeur des tâches. ##### Parallèle C’est comme faire le ménage en commençant par trier ses chaussettes alors que la cuisine est en feu. ##### Conseils Deux bonnes méthodologies qui peuvent être suivies pour aider à mieux gérer les priorités : - [La matrice d’Eisenhower](https://fr.wikipedia.org/wiki/Matrice_d%27Eisenhower) - [La règle des 2 minutes de David Allen](https://www.gqmagazine.fr/article/la-regle-des-2-minutes-tout-savoir-sur-cette-methode-ultra-simple-qui-permet-d-etre-moins-stresse-et-plus-productif) Ces deux idées peuvent être combinées afin d’aider à mieux gérer de déterminer l’ordre de priorité de ses tâches. ## Division des tâches Pour une meilleure collaboration, une analyse externe plus performante mais aussi pour une maintenabilité plus efficace, il est important de séparer distinctement ses développements. ##### Le mauvais développeur Il ouvre une unique merge request avec un unique commit contenant 200 fichiers modifiés, incluant des correctifs, des nouvelles fonctionnalités et des changements d’arborescence des fichiers (pour rendre le tout bien illisible). ##### Le bon développeur Il sépare ses développements en plusieurs merge requests (bien nommées), une pour des correctifs, avec plusieurs commits pour les différents correctifs, une pour l’ajout d’une fonctionnalité, etc.. ##### Parallèle C’est comme si lors d’un déménagement au lieu de trier ses affaires et écrire sur les cartons ce qu’il y a à l’intérieur on mettait tout en vrac dans un énorme carton. Bon courage ensuite pour retrouver un objet précis ou savoir où chaque chose est censée aller une fois arrivé à destination. ## Savoir dire non, et expliquer pourquoi Un développeur doit pouvoir conseiller pour aider le projet sur lequel il travaille, et savoir orienter le décideur sur des choix pour éviter des problèmes est une partie de ce travail de conseil. ##### Le mauvais développeur Il accepte toutes les demandes sans réfléchir aux impacts, se retrouve submergé et livre un travail bâclé, ou ne livre rien du tout. ##### Le bon développeur Il évalue la faisabilité d’une demande, explique les contraintes techniques et propose des alternatives réalistes. ##### Parallèle C’est comme si un restaurateur acceptait toutes les commandes, même s’il n’a pas les ingrédients, et finit par servir n’importe quoi. ##### Conseils Il faut prendre en compte le contexte du projet pour estimer si la demande est réalisable et sinon proposer des alternatives qui le sont. Il n’est jamais trop tard pour remonter qu’une demande est irréalisable : il vaut mieux stopper une tâche qui est partie dans une mauvaise direction, que de continuer à s’enfoncer et finir avec une solution peu satisfaisante qui aura pris énormément de temps. ## Challenger des spécifications Il se peut que des spécifications soit inexactes ou même fausses, le développeur doit comprendre ces spécifications et être capables de détecter des erreurs “visibles” (des spécifications très fonctionnelles sont complexes et des erreurs sont difficilement détectables). ##### Le mauvais développeur Il traite un sujet où les spécifications disent que 1 + 1 = 3, alors il développe que 1 + 1 = 3. ##### Le bon développeur Il sait que 1 + 1 = 3 est faux, alors il se questionne pour bien comprendre les spécifications, puis rapporte ses questions au décideur pour voir s’il s’agit d’une erreur. ##### Parallèle C’est comme un cuisinier qui suit une recette sans se demander si le client est allergique à un ingrédient. ##### Conseils Il est important de comprendre au maximum le fonctionnel, déjà pour s’assurer du résultat du développement, mais aussi pour pouvoir remonter de possibles incohérences ou même proposer des alternatives. Pour ça il faut poser des questions pour s’assurer de la compréhension et la cohérence des demandes. ## L’utilisation de l’IA C’est le sujet du moment, que je pourrai même définir comme détecteur de mauvais développeur tant celle-ci permet de voir la capacité d’un développeur à vouloir s’assurer de la qualité de son développement. ##### Le mauvais développeur Il écrit son prompt “fais ça” avec plein d’informations sensibles dans son prompt, il copie le contenu du bloc de code généré, le colle dans son IDE et croise les doigts pour que ça fonctionne. Si c'est le cas, il fait confiance au code et l’oublie dans un coin. ##### Le bon développeur Il utilise cet outil comme un assistant plutôt qu’un remplaçant en faisant attention de ne pas lui fournir des informations clients ou des informations sensibles.  Il peut l’utiliser de plusieurs façons différentes, notamment : - Il fait son code et demande conseil d’amélioration, de simplification ou de détection/correction d’éventuelles erreurs.  - Il fait des demandes précises sur des besoins clairs et définis, il analyse le résultat obtenu pour s’assurer de sa cohérence, et il fait valider que des cas particuliers connus sont gérés. ##### Parallèle C’est comme suivre un GPS sans réfléchir et se retrouver au fond d’un lac parce qu’il disait de tourner à gauche. ##### Conseils Il faut comprendre ce que propose l’IA, le questionner sur sa réflexion pour pouvoir le challenger, il doit être un outil d’accompagnement permettant de proposer des solutions et se servir de celà pour définir ses propres solutions. Voici pour cette liste non exhaustive des différences entre un bon et un mauvais développeur, qui j’espère, de par des parallèles un peu absurdes, aura permis d’expliciter l’importance des soft skills. Un bon développeur, ce n’est pas seulement quelqu’un qui écrit du code propre. C’est aussi et surtout quelqu’un qui sait **communiquer**, **écouter**, **travailler en équipe, donner et recevoir du feedback**. Pour aller plus loin, vous pouvez consulter [cet article qui rappelle les bonnes pratiques sur les erreurs standards faites en Java](/fr/blog/articles/java-pour-les-debutants-parfois-pour-les-experts-aussi). --- ### Java pour les débutants : parfois pour les experts aussi ! URL: https://www.bearstudio.fr/fr/blog/articles/java-pour-les-debutants-parfois-pour-les-experts-aussi Date: 2025-05-28 Comme vous le savez, Java est un langage qui est utilisé par plusieurs frameworks. Pour un débutant comme moi 😉, il y a beaucoup d’astuces que même les experts oublient parfois, alors qu’elles sont basiques. Il y a des erreurs qui rendent fou alors qu’en réalité, ce sont des notions de base. ## Le fameux NullPointerException Cette erreur m’arrive encore tous les jours ! En réalité, elle se produit lorsque tu essaies d’accéder à une méthode ou à une propriété sur **une variable nulle**. **Exemple :** ```java String exemple = null; System.out.println(exemple.length()); // Il va y avoir un null pointer // La solution est de vérifier la nullité en amont if (exemple != null) { System.out.println(exemple.length()); } ``` Un autre piège courant avec les énumérations. Imagine que tu as un type enum et une classe comme ceci : ```java enum Status { PENDING, APPROVED } public class MyClass { Status status; public Status getStatus() { return status; } } MyClass a = new MyClass(); ``` Si tu veux vérifier le statut et vérifier s’il est PENDING ou non, tu pourrais écrire comme ça : ```java if (a.getStatus().equals(Status.PENDING)) { } ``` Ce code ne s’exécutera jamais si getStatus() retourne null et l’application plantera, car si getStatus() retourne null, alors tu essaies d’appler la méthode “.equals()” sur ce null. Ce cas provoque donc une NPE(NullPointerException). Une solution serait : ```java if (Status.PENDING.equals(a.getStatus())) { } ``` Ici la méthode “equals()” sera toujours appelée sur un objet existant. Dans le cas où le getSatus() est null, le “equals()” retournera tout simplement false. ## La différence entre `==` et `equals()` Une confusion fréquente en Java concerne la comparaison de valeurs : ```java String a = new String("Bonjour"); String b = new String("Bonjour"); if (a == b) { System.out.println("Identiques"); } else { System.out.println("Différents"); } // Ce code va afficher Différents ``` Les deux variables contiennent la string “Bonjour” mais le résultat est différent. **Pourquoi ?** Imagine que tu écris “Bonjour” sur deux feuilles différentes ⇒ le contenu est identique, mais ce sont deux feuilles distinctes. Dans notre exemple : - a et b sont deux feuilles différentes - Chaque new String() crée une nouvelle “feuille” en mémoire Lorsque l’on compare avec le “==”, on va vérifier s’il s’agit est exactement de la même feuille (donc si les variables ont le même emplacement mémoire). Si l’on veut simplement comparer les contenus, il faut faire : ```java String a = new String("Bonjour"); String b = new String("Bonjour"); if (a.equals(b)) { System.out.println("Identiques"); } else { System.out.println("Différents"); } // Ce code va afficher Identiques ``` Ainsi, l’opérateur `==` compare les adresses mémoire, tandis que la méthode `equals()` compare les objets selon la manière dont cette méthode est définie dans la classe. **Du coup :** \- Pour les types primitifs (\``int`\`, \``boolean`\`, \``char`\`, \``long`\`, etc.) ⇒ utilise \``==`\`. \- Pour les objets (\``String`\`, \``List`\`, etc.) ⇒ utilise \``equals()`\`. ## L’oubli du `break` dans les `switch case` En Java, quand tu utilises un `switch`, le code continue à s’exécuter dans les `case`suivants si tu n’ajoutes pas `break` à la fin de chaque cas. Exemple : ```java int jour = 2; switch (jour) { case 1: System.out.println("Lundi"); case 2: System.out.println("Mardi"); // S'exécute parce que jour = 2 case 3: System.out.println("Mercredi"); // S'exécute aussi case 4: System.out.println("Jeudi"); // S'exécute aussi default: System.out.println("Autre jour"); // S'exécute aussi } // à la fin on aura comme resultat : Mardi, Mercredi, Jeudi, Autre jour ``` Pour éviter cela, il faut toujours ajouter les `break`. ```java int jour = 2; switch (jour) { case 1: System.out.println("Lundi"); break; case 2: System.out.println("Mardi"); // S'exécute break; // Et on sort du switch case 3: System.out.println("Mercredi"); break; case 4: System.out.println("Jeudi"); break; default: System.out.println("Autre jour"); } // Résultat : Mardi ``` ## Passage par valeur et Passage par référence Une erreur fréquente est de penser que les objets sont toujours passés par référence en Java. En réalité, les **types primitifs** (`int`, `double`, `boolean`, etc.) sont passés **par valeur**. Exemple : Quand tu passes un `int`, `double` ou `boolean` à une méthode, c’est équivalent à donner une **photocopie** de ta recette à un ami. Si ton ami modifie sa copie (ajoute du sucre, change la température), ta recette originale reste intacte ⇒ Chacun travaille sur sa propre version ```java public class Test { public static void main(String[] args) { int a = 5; // La recette original contient 5 grammes de sucre modifierValeur(a); System.out.println(a); // Toujours 5 grammes de sucre } static void modifierValeur(int x) { x = 10; // L'ami change le grammage du sucre de 5 à 10 grammes } } // A ne pas changer car Java copie seulement la valeur, il reste toujours égal à 5 ``` Quant aux **objets** sont passés **par référence... mais de manière indirecte** : c'est la référence qui est copiée, pas l'objet lui-même). Exemple : Quand tu passes un objet (comme `String`, `ArrayList`), c'est comme donner un **double de ta clé d'appartement** à un ami. Ton ami ne peut pas changer ta clé, mais peut entrer dans ton appartement et déplacer les meubles ⇒ Vous accédez au même appartement avec des clés différentes. ```java class Appartement { String couleurMur; Appartement(String couleur) { this.couleurMur = couleur; } } public class Test { public static void main(String[] args) { Appartement monAppart = new Appartement("blanc"); rendreVisite(monAppart); System.out.println(monAppart.couleurMur); // Le mur a été repeint en bleu } static void rendreVisite(Appartement appart) { appart.couleurMur = "bleu"; // Repeint ton mur } } ``` ⚠️ Il n'est pas recommandé de modifier un objet par référence, car cela rend le code difficile à lire et à comprendre. On ne sait pas facilement quand et où l'objet peut être modifié. **En conclusion**, même si ces notions semblent basiques, elles peuvent facilement causer des bugs frustrants, même aux développeurs expérimentés. C’est pourquoi il est essentiel de bien comprendre ces fondamentaux et de toujours garder en tête que même les bases peuvent parfois nous piéger. Auteur: [Mariem Mkassmi](https://www.linkedin.com/in/mkassmi-meriem-6b1326169/) --- ### Gérer facilement le contenu de votre site avec Outstatic URL: https://www.bearstudio.fr/fr/blog/articles/gerer-facilement-le-contenu-de-votre-site-avec-outstatic Date: 2025-04-25 Il y a quelque temps, j’ai travaillé sur une landing page avec une partie blog. Deux contraintes majeures se présentaient : - Intégrer facilement cette section dans un projet Next.js déjà en place,  - Permettre à n'importe qui d'ajouter des articles, sans écrire une seule ligne de code.  Après plusieurs recherches et tests, j’ai finalement opté pour la librairie [Outstatic](https://outstatic.com/). ## Qu’est-ce que Outstatic ?  Outstatic est un CMS (Content Management System) open source conçu pour les développeurs utilisant Next.js. Mais contrairement aux CMS classiques comme WordPress, il a plusieurs particularités intéressantes : - **Sans base de données :** Outstatic fonctionne uniquement avec des fichiers Markdown sauvegardés dans votre dépôt GitHub. Pas besoin de gérer une base de données, tout est simple et rapide. - **Hébergé directement dans le projet :** Outstatic s’intègre directement à votre projet Next.js. Pas de service externe ou de déploiement séparé. - I**nterface utilisateur intuitive :** Une fois configuré, n'importe qui (même sans connaissances techniques) peut créer des articles ou des pages grâce à une interface d'administration. ## Avantages et inconvénients Avant de vous présenter concrètement la librairie, je vais vous donner, selon moi, quelques avantages et inconvénients de cette librairie par rapport aux autres CMS plus classiques. ### Avantages - Simplicité et rapidité : En quelques minutes, vous obtenez un blog fonctionnel. - Auto-hébergé : Tout reste dans votre projet, aucune dépendance externe. - Gestion de brouillons : Flexible pour publier vos articles au bon moment. - Aucune base de données : Parfait pour les projets statiques. ### Inconvénients - Dépendance à GitHub : Outstatic nécessite une connexion via GitHub, donc chaque contributeur doit avoir un compte et être ajouté à l'organisation. Il n’est pas possible d’utiliser Outstatic avec d’autres solutions de versioning. De plus, cela peut poser problème dans certaines entreprises pour des profils non techniques. - Collaborations complexes : Si vous travaillez avec une organisation, cela nécessite une configuration OAuth  - Ne convient pas pour les gros volumes de données : Lorsque les fichiers des articles, stockés dans votre dépôt Git, deviennent trop nombreux, cela peut entraîner une diminution des performances de votre site. ## Comment configurer Outstatic ? Configurer Outstatic sur votre projet est très simple, il suffit de seulement 3 étapes : ### Étape 1 : Installer Outstatic Ajoutez Outstatic à votre projet en exécutant : ```bash npm install outstatic ``` ### Étape 2 : Créer une application OAuth sur GitHub Outstatic utilise GitHub pour l'authentification et la gestion des articles. Voici comment créer une application OAuth : 1. Rendez-vous sur [GitHub Developer Settings](https://github.com/settings/developers). 2. Cliquez sur New OAuth App. 3. Remplissez les champs : - Application name  - Homepage URL : L'URL de votre site (par exemple, `http://localhost:3000` en local). - Authorization callback URL : Ajoutez `/api/auth/callback/github` à votre URL (par exemple, `http://localhost:3000/api/auth/callback/github`). 4. Une fois l'application créée, notez vos client ID et client secret. ![Menu de création d'une application OAuth sur GitHub](images/image-3-1021x1024-1.png) ### Étape 3 : Intégrer Outstatic dans votre projet :  1. Créer un fichier .env avec les variables récupérées précédemment. ```bash OST_GITHUB_ID=YOUR_GITHUB_OAUTH_APP_ID OST_GITHUB_SECRET=YOUR_GITHUB_OAUTH_APP_SECRET # OST_REPO_SLUG # The name of your repository on GitHub without the username OST_REPO_SLUG=YOUR_GITHUB_REPOSITORY_SLUG # OPTIONAL # If empty this will default to your GitHub username OST_REPO_OWNER=YOUR_GITHUB_USERNAME # OPTIONAL # If empty this will default to main OST_REPO_BRANCH=YOUR_GITHUB_REPOSITORY_BRANCH ``` 2. En suivant la [documentation officielle d’Outstatic](https://outstatic.com/docs/getting-started#adding-outstatic-to-a-nextjs-website), il vous sera très facile de configurer les éléments restants : layout, page administrateur et api ## Comment ajouter du contenu ? ### Création de la collection Depuis l'interface, vous pouvez créer une collection : par exemple pour un blog vous allez créer la collection “Articles” qui contiendra tous vos articles. Par défaut, chaque élément de la collection a un titre, une description, une image, un auteur, etc, mais vous pouvez également créer des champs personnalisés. Une fois l’article créé, il est sauvegardé dans votre dépôt GitHub sous forme de fichier Markdown dans le dossier défini (content par défaut). ![Menu de création d'une nouvelle collection](images/image-1024x731-1.png) ### Visualisation et récupération des articles :  Pour récupérer vos articles Markdown, utilisez les méthodes fournies par Outstatic : `getDocuments` ou `getDocumentBySlug`. Convertissez ensuite le contenu en HTML pour les styliser ensuite.  ```javascript const posts = getDocuments('articles', ['title', 'slug']); const post = getDocumentBySlug('articles', slug, [ 'title', 'publishedAt', 'slug', 'author', 'content', 'coverImage', ]); ``` ## Comment styliser l’article ? Dans mon cas, j’ai choisi d’utiliser Tailwind CSS et plus particulièrement [Tailwind typography](https://github.com/tailwindlabs/tailwindcss-typography) pour gérer le style des articles Markdown : vous pouvez personnaliser vos articles comme vous le souhaitez, en modifiant le style des titres, des images etc… ```jsx

{data.title}

Publié le {data.date} par {data.author}

{content}
``` ## Article en écriture avec Outstatic VS le résultat sur le site Lorsque vous écrivez un article sur l’interface administrateur, le style n’est pas le même que celui de la page ou vous allez afficher l’article pour vos utilisateurs. Voici par exemple l’interface d’Outstatic sur la première image, c’est ici que vous écrivez l’article, remplissez son titre, sa description etc… Sur la deuxième image, j’ai ajouté du style, et utilisé les propriétés “title”, “author” et “cover image” pour créer l'en-tête de l’article. ![Exemple d'article utilisant Outstatic vu du côté administrateur](images/image-1-1024x473-1.png) ![Exemple d'article utilisant Outstatic (avec un peu de style ajouté) vu du côté utilisateur](images/image-2-1024x584-1.png) ## Mon avis sur Outstatic Dans le passé, j’ai eu l’occasion d’utiliser WordPress pour plusieurs projets, que ce soit dans un cadre professionnel, personnel ou scolaire. Si cet outil reste une référence pour la création de sites et de blogs, il impose néanmoins certaines contraintes en matière de personnalisation. En général, on choisit un thème prédéfini pour structurer l’affichage des articles, ce qui limite la flexibilité et l’intégration au sein d’un projet plus complexe. Avec Outstatic, l’approche est bien différente. Cet outil offre une gestion de contenu entièrement personnalisable, permettant non seulement de structurer les articles selon ses propres besoins, mais aussi de l’intégrer directement dans un site déjà existant. Il devient ainsi possible de profiter d’une solution de gestion de contenu légère et modulable, sans avoir à dépendre d’un écosystème lourd comme celui de WordPress. En conclusion, [Outstatic](https://outstatic.com/) est une solution simple et efficace pour ajouter une section blog à un site Next.js. C'est un outil parfait pour les projets où la gestion du contenu doit être rapide et accessible, sans sacrifier le contrôle sur le code. Auteur: [Jeanne Grenet](https://www.linkedin.com/in/jeanne-grenet) --- ### Le canard en plastique est votre ami ! URL: https://www.bearstudio.fr/fr/blog/articles/le-canard-en-plastique-est-votre-ami Date: 2025-03-27 Le titre peut sembler bizarre, mais c’est le nom d’une méthode que beaucoup utilisent au quotidien sans vraiment le réaliser. Prenons l’exemple suivant : Vous cherchez vos clés, après qu’elles aient encore disparu mystérieusement au moment de partir. Beaucoup retracent leur chemin de long en large et en travers sans succès. Après un moment, vous demandez de l’aide, et d’un coup, vous vous souvenez exactement où vos clés vous attendent Si cette situation vous parle, vous avez utilisé la méthode du canard en plastique. Mais pourquoi ce nom ? Tout viendrait d'une anecdote publiée dans le livre _The Pragmatic Programmer_, écrit par Andrew Hunt et David Thomas, dans lequel un développeur garderait un canard en plastique sur son bureau, et se mettrait à lui parler quand il rencontre un problème avec son code, d'où le nom. Paru en 1999, ce livre est rapidement devenu une référence pour les nombreuses méthodes et astuces qu’il présente pour améliorer son processus de développement. Une réédition, bien que seulement en anglais est sortie en 2019, avec des mises à jour pour refléter les changements dans le domaine. Petit fun fact, mais ces 2 développeurs ont aussi participé à l’écriture du manifeste Agile. ## C’est quoi cette méthode ? Le principe est très simple : Quand on est bloqué, et qu’on pense avoir tout essayé, on explique le problème à notre canard.  Non, inutile d’aller en animalerie, nous parlons ici du canard en plastique que vous avez probablement dans votre salle de bain. Avec son aide, on va repasser sur notre code, en expliquant ce qu’il doit faire, ce qu’il fait, et dans quel but. Le souci se révélera de lui-même quand notre explication et le code ne s'alignent pas ! Pour simplifier, on est forcé de prendre du recul sur le code écrit. Bien que le principe soit simple, il est plus difficile de l’appliquer. Notre cerveau, dans le but d’économiser de l’énergie et des maux de tête, va survoler des parties de notre raisonnement. Cette petite optimisation pour gagner du temps sur la réflexion va nous en faire perdre PLUS car notre erreur se cache dans ce qu’on survole. Le canard est donc là pour nous servir d’ancre. Lui, il ne connaît pas le contexte du projet, et on doit donc se forcer à tout reprendre de zéro. De plus, après être confronté à un ou plusieurs échecs, nous avons tendance à entrer dans une spirale défaitiste. La prise de recul permet de se “réinitialiser”,  ## Démonstration Assez parlé de la théorie, passons à la pratique avec l’exemple suivant : J'ai une liste de nombres avec lesquels je ne veux additionner que les nombres pairs. ```javascript const array = [1, 2, 4, 7, 14, 21, 34, 39]; ``` J’ai donc écrit la fonction suivante ```javascript const reduceEvenNumbers = (numberArray: Array) => { return numberArray.reduce((sum, num) => { return num % 2 === 1 ? sum + num  : sum;  }, 0) } ``` En lançant cette fonction avec l’array donné, je devrais recevoir 54, mais j'obtiens 68. La situation est idéale pour utiliser la méthode du canard en plastique ! J’explique donc à mon canard ce que je veux faire:  > _“Voilà Jean-Luc, je dois additionner tous les nombres pairs présents dans cette liste. Pour ça, j’ai créé une fonction qui applique un reduce sur ma liste._ > > _Un reduce est un accumulateur qui parcourt un array et le réduit à une valeur selon la fonction donnée. J’ai donc en entrée une fonction personnalisée, et la valeur d’initialisation, qui est bien à 0._ > > _Ma fonction personnalisée permet d’ajouter à mon accumulateur la valeur parcourue seulement si le nombre est pair._ > > _Pour vérifier si l’élément parcouru est pair, j’applique un modulo, et s’il me reste 0, alors j’ai un nombre impair.”_ Et c’est en expliquant le raisonnement que l’on peut voir l’erreur. La vérification sur mon modulo n’est pas la bonne, et doit être changée pour enfin avoir le résultat attendu ```javascript const reduceEvenNumbers = (numberArray: Array) => { return numberArray.reduce((sum, num) => { return num % 2 === 0 ? sum + num  : sum;  }, 0) } ``` Bien sûr, on n’oublie pas de remercier notre canard, en fin de session. > _Merci Jean-Luc !_ ## Sans canard en plastique, ça marche ? L’avantage du canard en plastique, c’est qu’il n’est jamais très loin, mais dans les rares cas où il est absent, comment faire pour s’en sortir ? Petit rappel, mais le canard en plastique est un objet, et n’importe quel autre objet (à condition de pouvoir le personnifier) peut le remplacer. Il est même possible, au lieu de prendre un objet, de demander à un collègue, un membre de la famille, ou n’importe qui (selon votre niveau d’anxiété sociale et possible NDA) à participer ! Cette demande pourra même se transformer en session de [Peer Programming](/fr/blog/articles/peer-programming). ## Petites astuces supplémentaires Parfois, même avec cette méthode, le problème nous échappe. Dans ce cas, il existe des petites astuces supplémentaires. ### Les logs C’est généralement le premier réflexe en tant que développeur, mais ajouter des logs au code est une façon simple de voir où se situe le problème. ### Why ? Comme un enfant de 5 ans, le but est de se demander “Pourquoi ?” à chaque problème que l’on rencontre. Si on reprend le même exemple, voilà à quoi ça pourrait ressembler : > - _Pourquoi j’ai le mauvais résultat ? Parce que je n’additionne pas les nombre pairs._ > - _Pourquoi je n’additionne pas les nombres pairs ? Parce que ma condition ne marche pas comme prévu._ > - _Pourquoi ma condition ne marche pas comme prévu ? Parce que je regarde si les nombres sont impair plutôt que pair._ En remontant assez haut, on peut trouver une ressource externe qui ne se comporte pas comme prévu (une API, une librairie, un problème de versioning, etc… ), ou localiser le problème entre le clavier et la chaise. Attention quand même à ne pas remonter trop loin avec ce raisonnement, c’est une façon facile de se perdre dans une boucle infinie de “Pourquoi”. ### Explain it like I’m Five Cette fois-ci, au lieu de se comporter comme un enfant, on va expliquer notre code de façon simplifiée. En soit, c'est une méthode pour expliquer suffisamment en détail le code à débugger > _Alors voilà ! J’ai une liste de nombres. Certains sont pairs, d’autres impairs. Je veux les additionner, mais mon programme n’arrive pas à comprendre lesquels sont pairs. Pour savoir si un nombre est pair, je fais ça => X % 2. Je divise par 2, et s’il me reste 0, alors j’ai un chiffre pair, et s’il reste 1, alors c’est impair. Peut-être que j’ai mal vérifié…_ ### Chemin inversé Avec cette méthode, au lieu de repartir du début du code, jusqu’à trouver le problème, on part du problème, et on retrace le chemin, pour trouver l’incohérence entre ce qu’on veut et ce qui est fait. > _Si la somme finale n’est pas la bonne, c’est que je n’additionne pas les bons nombres, Je vais regarder comment la somme est calculée. J’additionne un nombre que s’il est impair d’après le code. Mais c’est l’inverse dont j’ai besoin. J’inverse la condition, et ça devrait marcher !_ J’espère que cet article vous sera utile, et que votre premier réflexe au prochain problème sera de trouver votre canard ! Et si votre canard n'est pas suffisant, prenez en otage un collègue pour une session de [Peer Programming](/fr/blog/articles/peer-programming) --- ### Les bases du design pour les dev front URL: https://www.bearstudio.fr/fr/blog/articles/les-bases-du-design-pour-dev-front Date: 2025-02-27 Le design ne se résume pas à l'esthétique. Il joue un rôle crucial dans la manière dont les utilisateurs perçoivent et interagissent avec un produit ou un service, et cette [expérience utilisateur (UX) est primordiale](/fr/blog/articles/pourquoi-lexperience-utilisateur-est-elle-importante). En effet, un bon design facilite la compréhension et l'utilisation afin de créer une expérience positive. À l'inverse, un mauvais design peut entraîner de la confusion et pousser les utilisateurs à délaisser votre produit. Le design est par conséquent un facteur clé de succès pour toute application. C'est pourquoi posséder des notions de design est un véritable atout pour un dev front. En effet ces connaissances peuvent permettre d’avancer sur des features sans maquettes tout en gardant un design réfléchi ou encore de faciliter la communication avec les designers pour arriver au meilleur résultat possible. Pas besoin de devenir un expert en design pour ça : l'objectif est d'acquérir des bases applicables facilement, pas de savoir faire un design system de A à Z.  ## Les bases du design pour les dev front : Que faut-il savoir ? Commencez par des concepts simples mais indispensables comme les théories/lois de la Gestalt appliquées au design. La Gestalt est une théorie psychologique née en Allemagne au début du XXe siècle, cherchant à expliquer notre façon de percevoir ce qui nous entoure. De ces lois ont découlé des notions de design, qui permettent rapidement d’améliorer des interfaces et de détecter des mauvaises pratiques.  ### Loi de proximité  Les éléments proches les uns des autres sont perçus comme appartenant à un même groupe. Si des éléments sont trop proches ou, au contraire, trop éloignés, on risque de mal associer les informations entre elles. ![Comparaison d'ui avec et sans application de la loi de proximité](images/slide-1024x576.png) Exemple à gauche ici, si tout est espacé de la même façon, sauriez vous me dire si le prix est au dessus, ou en dessous de l’item qu’il concerne ? Avec les bons espacements, on voit que l’exemple de droite devient beaucoup plus clair. Je vous invite à lire [cet article qui en parle plus en détails](/fr/blog/articles/la-loi-de-proximite) si le sujet vous intéresse ### Loi de similarité  Les éléments qui se ressemblent (forme, couleur, taille) sont vus comme appartenant à un même ensemble.  ![Comparaison d'ui avec et sans application de la loi de similarité](images/slide-1-1024x576.png) Ici, dans un formulaire avec des cases à cocher, si elles ne sont pas visuellement identiques, on ne les associera pas instinctivement, même si elles appartiennent au même champ. Ces deux lois sont essentielles pour poser les bases, mais d’autres principes de la Gestalt peuvent enrichir votre compréhension si cela vous intéresse. En parallèle, voici d’autres notions fondamentales : ### Le feedback Chaque action doit produire une réaction visible, compréhensible et immédiate. Que ce soit un toast indiquant le succès d’une action ( création, sauvegarde …), un loader pour montrer que c’est en cours de chargement ou encore l’invalidation d’un champ de formulaire, un bon feedback est essentiel à une bonne expérience utilisateur. ![Exemple d'action possible pour rendre compte du status des actions faites par l'utilisateur](images/slide-2-1024x576.png) ### L’affordance Un design doit être compréhensible : chaque élément doit indiquer clairement son utilité. Par exemple, un bouton doit ressembler à un bouton. ![Démonstration de plusieurs niveaux d'affordances](images/slide-6-1024x576.png) ### Apprentissage externe Les utilisateurs ont des attentes basées sur leurs expériences passées. Une barre avec une icône de loupe, c’est une barre de recherche. Il est préférable de respecter ces conventions pour ne pas désorienter les utilisateurs.  Je ne dis pas qu’on ne peut pas innover, mais quand on n’est pas designer, autant rester dans les habitudes des utilisateurs. ![Différents exemples de bars de recherche stylisées (google, amazon, X etc)](images/slide-3-1024x576.png) ### Apprentissage interne De la même manière, un utilisateur va apprendre à utiliser l’application qu’on lui met entre les mains. Il faut donc rester cohérent au sein du projet. Si le bouton “valider” est à droite et “annuler” à gauche dans une modale, ils ne doivent pas être inversés dans une autre. ### Hiérarchie visuelle Tout ne doit pas être au même niveau ou à la même taille. L’information importante peut être mise en valeur avec une police plus grande, un gras plus prononcé, ou une couleur marquante. Si on ne veut pas diminuer la taille d’un élément pour pas qu’il ne devienne trop petit, utiliser une couleur plus claire par exemple peut permettre d’obtenir le même effet. Attention cependant à garder une cohérence visuelle entre les éléments de même type et de même importance. ![Exmple de carte avec tout les textes à la même taille contre une carte avec des tailles de texte adaptée](images/slide-5-1024x576.png) En intégrant ces principes, il sera plus simple en tant que dev front de comprendre les choix faits par les designers, et encore mieux, pouvoir nous-même ajouter des fonctionnalités sans passer par l’étape designer (ou seulement pour qu’il valide), si celui-ci n’est pas disponible ou qu’il n’y en a pas pour le projet. ### Faire des maquettes Pour aller plus loin, vous pouvez vous pencher sur la réalisation de maquettes/ modifications de maquettes existantes. Pourquoi ? Imaginons qu’on vous demande une feature complexe sans maquette : il sera plus simple et rapide d'expérimenter et de faire valider son design sur un outil comme figma, plutôt que directement dans le code.  Figma, en particulier, est un outil puissant et accessible. Avec lui, vous pouvez créer des composants réutilisables et garder une cohérence dans vos designs. Pour bien débuter, de nombreux tutoriels sont disponibles, et la [documentation officielle](https://help.figma.com/hc/fr/sections/23536356509975-Cr%C3%A9er-des-syst%C3%A8mes-de-design) est un excellent point de départ. Vous pouvez également trouver des starter pour figma, avec des composants déjà disponibles, comme c’est le cas de notre starter [Start UI Figma](https://www.figma.com/community/file/1025698982013308087). Je vous invite à checker ça, ne serait-ce que pour apprendre et expérimenter sans avoir à partir de zéro.  ### Conclusion Apprendre le design n’est pas une question de changer de carrière, mais plutôt d’élargir votre champ de compétences. En tant que dev front, maîtriser quelques bases de design vous permettra d’être plus autonome, de proposer des solutions adaptées et de collaborer efficacement avec les designers. --- ### Difference entre Class et Record en Java URL: https://www.bearstudio.fr/fr/blog/articles/difference-entre-class-et-record-en-java Date: 2025-01-20 ## Différence entre une classe et un record en Java Depuis la version 16 de Java, un nouveau type de structure de données appelé **record** a été introduit. Il s'agit d'une simplification du modèle classique de classe, spécialement conçu pour les **objets immuables** et les **conteneurs de données**. Comparons en détail les **classes** et les **records** en Java, leurs différences et leurs usages. ### 1\. Qu'est-ce qu'une classe en Java ? Une **classe** en Java est une structure qui permet de définir des objets avec des **états** (via des champs ou variables d'instance) et des **comportements** (via des méthodes). Une classe est très flexible et peut inclure des méthodes, des constructeurs, des blocs d'initialisation statiques, ainsi que des champs privés, publics, ou protégés. ### Exemple d'une classe simple : ```java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return age == person.age && name.equals(person.name); } @Override public int hashCode() { return Objects.hash(name, age); } } ``` ### Caractéristiques des **classes** : - **Mutable** : Les classes peuvent contenir des **champs modifiables** (on peut changer les valeurs des attributs après l'instanciation). - **Code répétitif** : Pour de simples classes contenant des données, nous devons souvent définir manuellement des méthodes comme `toString()`, `equals()`, et `hashCode()`, ce qui entraîne beaucoup de code répétitif (boilerplate). - **Personnalisation** : Les classes permettent une grande personnalisation avec des constructeurs variés, des méthodes complexes, et des fonctionnalités comme l'héritage. - **Héritage** : Les classes peuvent **hériter** d'autres classes et implémenter des interfaces, ce qui offre une grande flexibilité pour réutiliser et étendre du code. ### 2\. Qu'est-ce qu'un record en Java ? Un **record** est une structure de données simplifiée introduite dans Java 16, destinée à **remplacer les classes de type DTO (Data Transfer Object)**, qui sont souvent utilisées pour encapsuler des données sans comportement complexe. Les records sont conçus pour être **immuables**, et le compilateur génère automatiquement pour eux les méthodes `toString()`, `equals()`, et `hashCode()`. ### Exemple d'un record simple : ```java public record Person(String name, int age) { // Le constructeur, les getters, toString, equals, et hashCode sont générés automatiquement } ``` ### Caractéristiques des **records** : - **Immuable** : Par défaut, les champs d'un record sont **final** et ne peuvent pas être modifiés une fois initialisés. - **Concise** : Un record est beaucoup plus concis qu'une classe. Le compilateur génère automatiquement des méthodes comme `toString()`, `equals()`, `hashCode()`, ainsi que des **constructeurs canoniques** pour initialiser les champs. - **Pas d'héritage** : Les records **ne peuvent pas étendre** d'autres classes, mais ils peuvent **implémenter des interfaces**. Cela limite leur usage à des **conteneurs de données simples**. - **Optimisé pour les données** : Les records sont spécialement conçus pour des cas où l'objectif est de contenir et de transporter des données sans comportement complexe. ### 3\. Comparaison entre une classe et un record | **Caractéristique** | **Classe** | **Record** | | -------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | | **Mutabilité** | Les classes peuvent être mutables ou immuables. | Les records sont **immutables** par défaut, les champs sont `final`. | | **Code répétitif (boilerplate)** | Nécessite des méthodes manuelles (`toString`, `equals`, etc.). | Génère automatiquement `toString()`, `equals()`, `hashCode()`, et un constructeur canonique. | | **Constructeurs** | Peut avoir plusieurs constructeurs avec différentes signatures. | Dispose d'un **constructeur canonique** généré automatiquement pour tous les champs. | | **Héritage** | Peut hériter d'autres classes et implémenter des interfaces. | **Ne peut pas hériter** d'une autre classe, mais peut implémenter des interfaces. | | **Utilisation** | Convient pour des objets complexes avec des comportements variés. | Convient aux **modèles de données simples** ou aux **DTO** immuables. | | **Personnalisation** | Permet de personnaliser le comportement (logique, mutabilité, etc.). | Limité à la gestion des données, moins de flexibilité pour ajouter des méthodes ou de la logique. | ### 4\. Quand utiliser une classe ? Les **classes** sont appropriées lorsque : - Tu as besoin d'**objets mutables** dont l'état peut changer après la création. - Tu dois encapsuler à la fois des **données et des comportements** (méthodes), ou lorsque ton objet doit inclure une logique métier. - Tu dois implémenter l'**héritage** (une classe qui hérite d'une autre). - Tu as besoin d'une grande flexibilité avec des constructeurs variés, des blocs d'initialisation, ou des méthodes supplémentaires. ### Exemple d'utilisation d'une classe : Si tu dois créer une classe représentant un **compte bancaire** qui permet de modifier son solde et d'exécuter des opérations : ```java public class BankAccount { private String accountHolder; private double balance; public BankAccount(String accountHolder, double balance) { this.accountHolder = accountHolder; this.balance = balance; } public void deposit(double amount) { balance += amount; } public void withdraw(double amount) { if (amount > balance) { throw new IllegalArgumentException("Insufficient balance"); } balance -= amount; } @Override public String toString() { return "BankAccount{accountHolder='" + accountHolder + "', balance=" + balance + "}"; } } ``` ### 5\. Quand utiliser un record ? Les **records** sont particulièrement utiles lorsque : - Tu veux un objet qui sert uniquement à **stocker des données** de manière **immuable**. - Tu veux **réduire le code répétitif** : pas besoin de réécrire `equals()`, `hashCode()`, ou `toString()`. - Ton objet n'a pas besoin d'hériter d'une autre classe, mais peut implémenter des interfaces. - Tu développes des **Data Transfer Objects (DTO)**, des objets simples utilisés pour transférer des données entre différentes couches ou systèmes. ### Exemple d'utilisation d'un record : Imaginons que tu dois stocker les informations d'un **utilisateur** sans logique métier spécifique : ```java public record User(String username, String email) { // Constructeur, getters, equals, hashCode et toString sont générés automatiquement } ``` Tu peux facilement créer des instances comme ceci : ```java User user = new User("john_doe", "john@example.com"); System.out.println(user.username()); // john_doe ``` ### 6\. Exemple combiné : Classe et Record Parfois, tu peux combiner des **classes** et des **records** dans un même projet pour différents types de besoins. Par exemple, un **compte bancaire** pourrait être une classe, tandis qu'un **rapport financier** ou un **historique de transaction** pourrait être un record. ### Exemple combiné : ```java public class BankAccount { private String accountHolder; private double balance; public BankAccount(String accountHolder, double balance) { this.accountHolder = accountHolder; this.balance = balance; } public void deposit(double amount) { balance += amount; } public void withdraw(double amount) { if (amount > balance) { throw new IllegalArgumentException("Insufficient balance"); } balance -= amount; } public TransactionRecord createTransactionRecord(double amount, String type) { return new TransactionRecord(amount, type, LocalDate.now()); } } public record TransactionRecord(double amount, String type, LocalDate date) { } ``` ### 7\. Conclusion En résumé, les **classes** en Java sont très flexibles et polyvalentes, permettant de définir à la fois des données et des comportements, tandis que les **records** se concentrent sur la simplification de la gestion des données immuables. Utiliser des **records** réduit le code répétitif et rend la gestion des données plus concise, mais si tu as besoin de mutabilité ou d'héritage, une **classe** sera plus appropriée. --- ### Pourquoi l'expérience utilisateur est-elle importante ? URL: https://www.bearstudio.fr/fr/blog/articles/pourquoi-lexperience-utilisateur-est-elle-importante Date: 2024-03-27 ## Comprendre le contexte Dans le monde numérique d'aujourd'hui, le succès d'une application mobile/web dépend non seulement de son apparence, de ses fonctionnalités, mais aussi de la **qualité de l'expérience utilisateur**. Une expérience utilisateur fluide et intuitive est décisive pour **attirer** les utilisateurs, les **fidéliser** et en fin de compte, assurer un **succès commercial**. ## Clarifions les enjeux Contrairement à la conception graphique, la conception de l'UX design **ne** **peut pas** être une réflexion après coup, ou une couche esthétique ajoutée une fois le projet terminé. Un projet réussi va au-delà de ses fonctionnalités - **il nécessite des [user flow (flux utilisateurs)](/fr/blog/articles/parcours-utilisateur-ux) bien pensés** dès le départ. ![L'UX Design regroupe une variété de sujets à traiter : sa fonctionnalité, l'UI Design, l'architecture de l'information; la recherche utilisateur, l'usabilité et le design d'interaction](images/frame-783-1024x712.png) ## "La forme suit la fonction" - Comment appliquer cela de nos jours au design d’interface ? Il est aujourd’hui acté qu'un **design** devrait être principalement **pensé** par rapport à son **objectif ou sa fonction prévue.** Ce principe a démontré son efficacité depuis le XIXe siècle. L'architecte [Louis Sullivan](https://fr.wikipedia.org/wiki/Louis_Sullivan), une figure influente de l'architecture moderne, a énoncé l'une des phrases les plus emblématiques de l'histoire du design : **« La forme suit la fonction »**. Dans le contexte de la conception UX (Expérience Utilisateur) pour les applications, ce principe souligne que la conception de **l'interface utilisateur** (forme) doit être guidée par les **tâches et la fonctionnalité** prévues par l'application (fonction). On peut résumer en disant que les **principes** de la conception UX soulignent l'importance **d'aligner design et fonctionnalité** pour créer une expérience utilisateur optimale. ##### Une conception centrée sur l’utilisateur Le design de l'application doit être **intuitif** et **user-friendly**. Cela garantit que les utilisateurs peuvent comprendre et interagir facilement avec l'interface pour **accomplir leurs tâches** de manière efficace. ![À gauche, un exemple de design d'interface centrée sur l'utilisateur, avec des éléments rangés de manière cohérente. À droite, un exemple de design d'interface non centrée sur l'utilisateur, avec des éléments qui ne sont pas logiquement placés.](images/interface-1-1024x312.png) ##### L’alignement des tâches Les éléments de design (**boutons**, **menus**, **navigation**...) doivent être alignés sur les **tâches** et les **objectifs** des utilisateurs. Ils doivent être organisés et présentés de manière à suivre le **flux ou parcours** naturel de l'utilisateur afin d'aider à atteindre leurs objectifs **sans complexité inutile.** ![Exemple du principe d'alignement des tâches dans le contexte d'une application web. Au lieu de donner des titres de sections et de boutons vagues comme "Section 1" ou "+ Option 1", on utilise "Shirts" comme titre de section et "+ add a shirt" pour le texte du bouton.](images/illu2-1024x317.png) ##### La clarté et la simplicité Le design visuel ne devrait **pas** prendre le pas sur la fonctionnalité. Garder un design simple et clair aide les utilisateurs à **se concentrer** sur les éléments essentiels et les actions nécessaires pour **accomplir leurs tâches**. Une ornementation ou complexité inutiles peuvent **entraver** l'expérience utilisateur. ![À gauche, un bouton clair : "Ajouter un t-shirt"
À droite, un bouton confus : "Cliquez ici pour ajouter un t-shirt à votre liste"](images/t-shirt-1-1024x156.png) ##### La cohérence La cohérence dans les éléments de design et les patterns présents à travers l'application améliore la compréhension des utilisateurs et **réduit la charge cognitive.** Ainsi, les utilisateurs devraient être en mesure de prévoir le comportement de certaines fonctionnalités ou interactions en se basant sur leurs **expériences antérieures** au sein de l'application. ![À gauche, un exemple de design consistant avec un choix restreint de couleurs et de styles de textes. À droite, un exemple de design non-consistant qui contient de multiples couleurs et styles de textes différents.](images/illu4-1024x295.png) ##### Un design responsive Le design devrait **s'adapter** à différents appareils et tailles d'écran sans compromettre les fonctionnalités. Un **design responsive** garantit que les utilisateurs puissent interagir avec l'application quel que soit le dispositif qu'ils utilisent. ![À gauche, un exemple de design responsive adapté pour les mobiles, les articles sont rangés verticalement. À droite, un exemple de design non responsive inadapté, avec des éléments trop petits pour un mobile.](images/responsive-1024x587.png) ##### L’accessibilité Le design devrait prendre en compte les **principes d'accessibilité**, et ce, afin de garantir que tous les utilisateurs, y compris ceux ayant des handicaps, puissent utiliser l'application de manière efficace. Cela confirme l'aspect fonctionnel de rendre l'application utilisable à un **public diversifié**. ![À gauche, un exemple de design accessible, avec un ratio de contraste conforme et des zones facilement cliquables. À droite, un exemple de design non-accessible, avec des éléments trop petits et des valeurs de contraste trop faibles.](images/accessible-1024x385.png) ## “Pourquoi cela m'intéresserait en tant qu'entrepreneur ?” Eh bien, cela peut se résumer par "utilisateur satisfait = **entreprise prospère".** Mais creusons un peu plus le sujet. ![Emoji serein qui devient effrayé après être passé sur une application avec une mauvaise expérience utilisateur.](images/emojis-1024x249.png) Voici quelques raisons clé pour lesquelles un mauvais design UX ou l'absence de design UX peuvent avoir une influence négative sur une entreprise : ##### Satisfaction client à la baisse Les utilisateurs s'attendent à ce que les sites web, les applications ou les produits utilisés soient intuitifs, faciles à naviguer et réactifs. Une mauvaise UX entraîne donc de la **frustration** et du **mécontentement de la part des utilisateurs.** ##### Taux de rebond élevé Les utilisateurs qui ont **du mal à navigue**r, à comprendre un site web ou une application sont plus susceptibles de **partir** sans accomplir leurs actions prévues. Cela entraîne des **taux de rebond** plus élevés, impactant les taux de conversion et les revenus. ##### Faible fidélisation client Les utilisateurs ayant une expérience négative sont **moins susceptibles de revenir** sur un site web. Une mauvaise UX peut **réduire** la fidélité client. ##### Mauvaise réputation Les utilisateurs mécontents sont plus enclins à **partager leurs mauvaises expériences**, que ce soit de bouche à oreille ou par le biais d'avis en ligne ce qui peut conduire, à terme, à une **mauvaise réputation**. ##### Impact sur les taux de conversions Une interface utilisateur **confuse ou compliquée** peut entraver l'entonnoir de conversion. Les utilisateurs peuvent **abandonner** des paniers d'achat, ne pas remplir de formulaires ou éviter de faire des transactions en ligne, ce qui **affecte** les résultats financiers de l'entreprise. ##### Désavantage concurrentiel Dans le **marché concurrentiel** d'aujourd'hui, les utilisateurs ont l'embarras du choix. Une mauvaise UX peut conduire les utilisateurs à aller chez les concurrents, qui offrent une expérience plus fluide et user-friendly. ##### Augmentation des coûts de support client Les utilisateurs rencontrant des difficultés sont plus susceptibles de solliciter le support client, **augmentant la charge de travail** pour l'équipe de support. Cela peut entraîner des **coûts de support plus élevés**. ##### Perte de confiance Une expérience utilisateur frustrante ou déroutante peut **entacher la confiance en une marque**. Les utilisateurs peuvent remettre en question la fiabilité et la crédibilité d'une entreprise s'ils rencontrent **des difficultés** dans l'utilisation de ses produits ou services. ##### Préoccupations en matière d’accessibilité Ignorer les principes d'accessibilité peut **exclure une partie de la population** ayant des handicaps. Cela limite non seulement la base de clients potentiels, mais peut également entraîner des **problèmes juridiques** dans certaines juridictions. Notamment en France, où la conformité en matière d'accessibilité est requise. ## Conclusion Tout comme les ingénieurs civils veillent à ce qu'un bâtiment puisse résister à la gravité, les architectes adaptent la maison pour répondre aux besoins du propriétaire. De manière similaire, dans notre scénario actuel, tandis que les **développeurs** offrent un **support** **technique** et veillent à ce que l'application **fonctionne** **sans** **faille**, les **concepteurs** **UX** jouent le rôle **d'architectes** **des** **applications**. Leur rôle est de s'assurer que l**es utilisateurs interagissent facilement avec l'application et atteignent leurs objectifs sans effort.** Si vous souhaitez créer un produit adapté aux **besoins** et aux **demandes** de vos utilisateurs, BearStudio propose des [services d’UX Design](/fr/prestations/ux-design) pour **améliorer l'expérience utilisateur** de votre produit. **Négliger l'UX** peut sembler économique, mais cela entraîne des **dépenses supplémentaires à long terme**. Corriger ultérieurement l'une des problématiques mentionnées ci-dessus nécessite un **développement supplémentaire, du temps et des ressources**. Cela a pour conséquence d’augmenter les coûts de manière significative. **Investir dans une bonne expérience utilisateur** dès le départ **permet d'économiser de l'argent** en évitant ces dépenses futures. Pour avoir une perception **mature** d'un produit, il doit être compris comme un **organisme systémique** qui, pour fonctionner au mieux, ne peut manquer d'aucun composant, parmi lesquels le design UX. Toutefois, si votre produit est déjà développé et **manque de logique** UX, nous proposons un [audit UX](/fr/prestations/ux-design) de votre projet. Vous pourrez ainsi connaître ses **points faibles** ainsi que nos recommandations d’action pour **l’optimiser** ! ![Un produit bien conçu englobe un business plan solide, une infrastructure réfléchie, un développement de qualité et un UX Design efficace.](images/illu8-1024x767.png) --- ### Les Ours au Camping des Speakers 2023 URL: https://www.bearstudio.fr/fr/blog/articles/les-ours-au-camping-des-speakers-2023 Date: 2023-11-24 Les 15 et 16 juin derniers, l'équipe du BearStudio a eu l'occasion de participer à une expérience unique : le [Camping des Speakers](https://camping-speakers.fr/). Dans cet article, nous partageons notre expérience et les moments marquants de ces deux jours de conférences techs dans un camping en Bretagne. ## Le Camping des Speakers : Une conférence tech atypique Le Camping des Speakers est une conférence qui se déroule, comme son nom l’indique, dans un camping, en Bretagne. Au-delà de sa localisation, elle se démarque aussi par son ambiance bon enfant poussée par les organisateurs. En effet, bien qu’on puisse y suivre des talks « classiques », on y retrouve aussi des talks plus originaux qui prennent place partout dans le camping ! On a notamment pu jouer au Möbkky, une variante « mob programming » du Mölkky, ou faire du toboggan pour schématiser des pipelines ! De plus, le BearStudio étant sponsor de l’édition 2023 du Camping des Speakers, nous avions à notre disposition un stand sur lequel nous avons pu présenter l’entreprise et faire découvrir [Start UI](https://start-ui.com/), notre starter open source de projet front. ## Le Stand : Rencontrer, échanger et partager notre passion Qui dit stand dit goodies ! Nous avons réuni nos plus beaux goodies pour les partager avec les personnes présentes, et nous avons même concocté des stickers spécialement pour l’événement.
![Stickers Camping des Speakers 2023, 5 variantes du même stickers d'un ours à la plage jouant au ballon](images/ours.jpeg)
Les stickers des ours au camping !
Toute l’équipe était prête à accueillir les intéressés, discuter avec eux, et même leur présenter Start-UI en live. Ce stand nous a permis de rencontrer beaucoup de gens, de revoir des personnes déjà rencontrées à d’autres événements, et tout ça dans une bonne ambiance et sous le soleil breton ! (oui oui vraiment !!)
![L'équipe du BearStudio derrière son stand au Camping des Speakers 2023](images/stand.png)
Une partie de l'équipe derrière son stand
## Les conférences : Un kaléidoscope de sujets tech captivants Avec plus de 50 speakers, le Camping des Speakers nous a offert une riche diversité de sujets passionnants. Des présentations sur les technologies utilisées au quotidien, comme l’IA avec une conférence sur le Speech to text ou des retours d'expérience inspirants, mais aussi des moyens originaux de faire comprendre des choses de notre quotidien dans la tech. Nous avons pu par exemple faire du minigolf avec altération de fonctions pour comprendre l’importance de l’accessibilité pour tous ou encore des descentes de toboggan dans la piscine pour illustrer les concepts de jobs et de pipeline parallèles. Les formats variés ont permis à chacun de trouver des conférences correspondant à ses intérêts, tout en favorisant le partage des connaissances et des expériences. ![Keynote d'ouverture du Camping des Speakers 2023, on y voit Aurélie et Stéphanie, deux organisatrices](images/keynote-1024x576.jpeg) ![Toboggans parallèles au camping de Baden en bretagne, lieu de la conférence Camping des Speakers 2023](images/toboggans-768x1024.jpeg) ## L’avis des ours : Qu’en ont pensé les experts du BearStudio ? ### [Passez moins de temps à attendre la CI et plus de temps au bord de la piscine](https://camping-speakers.fr/sessions/passez_moins_de_temps_a_attendre_la_ci/) - Jean-Phi Baconnais & Guillaume Membré “J’étais dans la piscine, j’ai fait du toboggan pour démontrer les concepts de job et pipeline parallèles et dépendants et ça c’est vraiment une très bonne manière d’apprendre de nouvelles choses !”  - [Yoann Fleury](/fr/equipe/yoann-fleury) _“C’est la seule conf que j’ai fait de ma vie où j’ai joué le rôle d’un job d’une CI le tout dans un toboggan d’une piscine, ça n’arrive qu’au camping des speakers”_ \- [Ivan Dalmet](/fr/equipe/ivan-dalmet) ### [Corn Hole 2 Turbo : De l'arduino pour l'apéro !](https://camping-speakers.fr/sessions/corn_hole_2_turbo/) - Paul Roye _“Super intéressant d’autant plus que pour des side projects ou des projets persos, on a les mêmes problèmes qu'en pro ! (Faire un MVP vraiment minimaliste, toujours tester, etc...). On apprend tout en jouant à un jeu d’adresse, il n’y a rien de mieux”_ \- Dorian Delorme ### [🗣️ Zut ! J'aurais dû dire ça ! 🙊 Astuces pour parler avec aisance en public 🎙️](https://camping-speakers.fr/sessions/astuces_pour_parler/) - Willy Malvault & Sylvain Coudert _“C'est pas un sujet tech et il y a d’autres conférences appréciées et mais j'ai vraiment bien aimé leur approche et leurs explications, c'était vraiment cool !”_ - Florian Gille  ### [Vous pouvez venir à ce talk les yeux fermés](https://camping-speakers.fr/sessions/vous_pouvez_venir/) - François-Xavier Lair _“J’ai pu découvrir l’utilisation d’un site web ou d’une app web avec un lecteur d’écran pour la 1ere fois de ma vie et j’ai pris conscience du chemin qu’il y a encore à parcourir pour faire des apps vraiment accessibles ! Et en plus j’ai appris des choses sur le HTML (l’utilisation d’un attribut alt vide sur une image par exemple, ça a une vraie utilité et je l’ignorais) donc c’était super !”_ - Fabien Essid *“J'avais pu voir à codeurs en seine(lien) une conf similaire mais on avait l'écran du pc pour voir le site, et donc forcément on a tendance à regarder pour mieux comprendre le lecteur d'écran. La le fait que ce soit sans slides, on se rend vraiment compte de ce que représente l'utilisation d'un lecteur d'écran et à quel point c'est difficile quand le site n'est pas accessible”* \- Charlelise Fouasse ### [Mini golf pour une accessibilité numérique maximale](https://camping-speakers.fr/sessions/mini_golf_pour_une_accessibilite/) - Hervé Boisgontier _“Un format hyper sympa ou l’on a fait une partie de croquet/minigolf qui permettait derrière de se mettre vraiment dans la peau d’une personne en situation de handicaps, et de se rendre compte qu'il y a plein de choses qu'on oublie quand on dev…”_ \- [Dylan Campbell](/fr/equipe/dylan-campbell)  ### [Möbkky, le mob appliqué au Mölkky](https://camping-speakers.fr/sessions/mobkky_le_mob_applique_au_molkky/) - Benoît Masson & Gwendal Leclerc _“L’idée de montrer l’intérêt du mob programming par le Mölkky était une idée très intéressante et pédagogique, ajouté à ça la bonne ambiance du jeu en lui-même, c’était un super moment !”_ \- [Hugo Pérard](/fr/equipe/hugo-perard)  --- En somme, au-delà de ces conférences grâce auxquelles chacun a pu repartir avec de nouvelles connaissances, ce Camping des Speakers était aussi l’occasion de partager de bons moments dans un contexte original. Nous avons notamment pu faire une partie de pétanque et passer quelques moments dans la piscine. Et cela nous a permis de revenir avec quelques anecdotes croustillantes. ![Dorian, Nhung, Yoann, Quentin, Fabien, Charlélise, Hugo, Dylan C, Florian, Paul et Ivan pendant l'apéro au camping.](images/equipe.jpeg) --- ### C'est quoi la minute kikoo de Renan ? URL: https://www.bearstudio.fr/fr/blog/articles/cest-quoi-la-minute-kikoo-de-renan Date: 2023-09-12 ## D'où ça vient ? La minute kikoo provient d'une remarque que je me suis faite en regardant l'émission Underscore\_ (sur [la chaine Twitch](https://www.twitch.tv/micode) de [Micode](https://www.youtube.com/@Underscore_)); un chroniqueur résumait très rapidement l'actualité de manière un peu fun et je me suis dit: > *Ça serait quand même marrant d'avoir quelqu'un qui fait ça, mais en présentant toutes les technos / sites / outils inutiles que des gens ont un jour développé, montrer un peu la face cachée des sides-project qu'on peut trouver sur le web* 😃 Spoiler: j'ai pas trouvé ce concept, 😢 on arrête là ?
> _Non ! Si personne ne le fait, pourquoi ne pas le faire moi-même !_? (et non, à aucun moment je me suis dit que personne ne le faisait parce-que c'était peut-être pas une bonne idée). Depuis un moment, on a mis en place le [stream BearStudio](https://www.twitch.tv/bearstudiolive) où l’on se retrouve tous les premiers vendredi du mois, histoire de discuter autour de la veille réalisée par l’équipe et les viewers de la chaine, montrer les projets sur lesquels on travaille, et plus récemment avoir des invités… M'est alors venu cette idée d’y inclure cet “happening”, cette petite rubrique de la minute kikoo et de profiter du stream pour voir si ça fonctionne ? Le but serait de créer un moment assez court qui tranche avec le reste du stream, tout en restant orienté tech / outils de dev et qui soit surtout fun ! J'en parle autour de moi, ça fait marrer tout le monde; [Yoann](/fr/equipe/yoann-fleury) crée un générique de QUA-LI-TÉ en 20 minutes et on cale 5 / 10 minutes sur le prochain stream pour la première Minute Kikoo !
https://www.youtube.com/watch?v=hMk0aEMt5BM
La minute kikoo de Renan - 1
Résultat des courses, ça s'est super bien passé, pleins de retours positifs; la Minute Kikoo est maintenant programmée à chaque stream et disponible en [VOD sur notre chaîne YouTube](https://www.youtube.com/@bearstudio8378). Venez nous voir tous les 1er vendredi du mois 😃 ça se passe sur [la chaîne Twitch du BearStudio](https://www.twitch.tv/bearstudiolive) ! Si jamais vous voulez une minute kikoo de Renan personnalisée, [contactez nous](/fr/contact), je fais également les mariages et bar mitzvah. --- ## Les Minutes Kikoo de Renan - [La Minute Kikoo de Renan - 1](https://youtu.be/hMk0aEMt5BM) : 02 juin 2023 - [GitHub Actions Safe Space](https://github.com/charliegerard/safe-space) | [Extension VS Code Colors](https://marketplace.visualstudio.com/items?itemName=wwlorey.colors) | [Endless Horse](http://endless.horse/) - [La Minute Kikoo de Renan - 2](https://www.youtube.com/watch?v=W-MFDnf88FQ&pp=ygUYbGUgbWludXRlIGtpa29vIGRlIHJlbmFu) : 03 mars 2023 - [VS Code Pets](https://marketplace.visualstudio.com/items?itemName=tonybaloney.vscode-pets) | [Pointer Pointer](https://pointerpointer.com/) | [Battery Buddy](https://batterybuddy.app/) - [La Minute Kikoo de Renan - 3](https://www.youtube.com/watch?v=vROy1tts3Dw) : 3 février 2023 - [Desktop Goose](https://samperson.itch.io/desktop-goose) | [Clippy](https://marketplace.visualstudio.com/items?itemName=fleshywaffles.vs-code-clippy) --- ### Comment organiser une journée de conférence avec 1000 personnes ? URL: https://www.bearstudio.fr/fr/blog/articles/comment-organiser-une-journee-de-conference-avec-1000-personnes Date: 2023-02-15 ## Les différents points à gérer Bon... actif dans l'organisation [Codeurs En Seine](https://www.codeursenseine.com) je commence à avoir un peu de recul... Petit disclaimer : je ne suis pas à l'origine de cette journée de conférences. J’ai rejoint un groupe de bénévoles qui avait déjà fait une grosse partie du boulot et surtout l’événement avait déjà une bonne aura au niveau national. Mais je suis quand même plutôt fier d’avoir contribué à augmenter le nombre de visiteurs de 500 à plus de 1000 en quelques années ! Petit historique chiffré : ![Graphique montrant l'évolution du nombre de participants à Codeurs en Seine](images/ces.png) ### Au cas où, Codeurs En Seine c’est quoi ? Codeurs en Seine est une journée de conférences gratuites qui se déroule à Rouen, pour découvrir, apprendre et partager autour du monde du développement. ### Mais dis-moi Rudy, pourquoi tu nous racontes tout ça ? Je me dis que ça peut toujours servir à quelques uns **MAIS SURTOUT** ça va nous servir à nous. En effet, comme toute association de bénévoles, en 6 ans on en a vu passer des bénévoles et c’est un peu chiant de devoir tout ré-expliquer donc voici la doc ! ### Codeurs en Seine, la recette secrète ! Ce genre d’événement repose sur 3 gros piliers : les conférenciers, le public et le budget. Je vais détailler tout ça par ordre chronologique de prise en charge (même si certaines choses se font en parallèle). ![Triangle avec sur chaque pointes: public, budget et conférenciers](images/image-19-1024x602.png) #### Le budget Forcément, avec les années, c’est plus facile d’avoir une idée du budget mais il y a forcément des changements qui ont un impact dessus d’une édition à l’autre. D’ailleurs si ça vous intéresse, on publie le détail du budget depuis quelques années : - [Archive de Codeurs en Seine de l'année 2019](https://archive-201x.codeursenseine.com/2019/review-2019) - [Bilan de l'édition 2019 de Codeurs en Seine](https://archives-codeurs-en-seine.netlify.app/archive-2020/2020/review-2019) Mais sinon voici les gros postes de dépenses : ##### La location du lieu d’accueil Lors du passage de l’université qui nous permettait d’aller jusqu'à 500 personnes au Palais des Sport de Rouen, ce poste de dépense est apparu, et en est aujourd'hui le plus gros poste. L’avantage c’est qu’un certain nombre de points logistiques sont intégrés dans la prestation : location de chaises (parce que oui, pour asseoir 1000 personnes il en faut des chaises 😁), sécurité, installation, nettoyage, entretien des latrines etc.. Fortement lié au budget de la salle, il y a toute la partie son & vidéo. Nous travaillons depuis quelques années avec le groupe [En Scène](https://www.groupe-enscene.fr/presentation) qui a l’habitude de nous accompagner et qui a su s’adapter parfaitement à nos évolutions. Au début, on se chargeait d’enregistrer quelques panels, mais vu le boulot que ça représente on a décidé de laisser faire des pros. Cette année, nous avons également mis en place le [sous-titrage pour les sourds et malentendants](https://www.youtube.com/watch?v=V5vLYzVEWxA&list=PLbbYL6fWx8WyCEehq-sZx_iM3a4NVAoi-&index=4). Stream en direct pour l’année prochaine ? Enfin, le reste du budget est alloué aux repas pour les visiteurs, des remboursements de frais de transport des intervenant.es et un peu de logistique type impression, sacs poubelles et gommettes. Donc pour assurer notre budget, il faut trouver des sous ! ![Résumé des dépenses pour l'organisation de Codeurs en Seine](images/pasted-image-1.png) Historiquement Codeurs en Seine a toujours été financé par des entreprises privées. C’est ce qu’on appelle des sponsors. Il y a 2 principales raisons pour qu’une entreprise donne de l’argent pour un tel évènement : - Soutenir les communautés de dev et permettre à ce genre d'événement d'exister (oui ça paraît altruiste mais ça existe). - Obtenir un retour sur investissement via de la publicité, trouver des profils à recruter et/ou vendre un produit ou une technologie à des développeurs. ##### Comment est-ce qu'on les trouve ? Après plusieurs années, certains sponsors viennent d'eux-mêmes mais sinon il faut faire un peu de prospection en contactant des entreprises potentiellement intéressées. Généralement, ce sont des bénévoles avec des profils un peu business qui s’occupent de ça mais il y a aussi des profils plus axés “dev” qui vont simplement sourcer dans leur entreprise ou leur réseau perso. Si vous souhaitez sponsoriser Codeurs en Seine vous aussi, c'est [ici](https://www.codeursenseine.com/2023/sponsors) qu'il faut aller ! ##### Qu’est ce qu’on leur dit ? Globalement on leur évoque les raisons ci-dessus et on complète en détaillant ce qu’il y a dans le [dossier de sponsoring](https://drive.google.com/file/d/1zclVxBxeUZFUxX2kxVXCoAW8CnFr3p40/view). ![Liste des quatres offres de sponsorings, dont les trois plus importantes sont en ruptures de stock](images/pasted-image-2.png) Depuis quelques années, d’autres sources financières sont apparues : - Les dons du public via [Helloasso](https://www.helloasso.com/associations/codeurs-en-seine/formulaires/1/widget) - ce sont de petits montant mais ça reste utile. - La métropole de Rouen nous a accordé notre première subvention cette année. Merci à celles et ceux qui ont rendu ça possible. #### Les conférenciers Ok, on a le lieu, la logistique principale, maintenant il nous faut un programme ! Du coup pour ça il nous faut de bons sujets et des gens capables d’en parler. Il faut donc lancer un "appel à orateur" ou _call for paper_ en anglais.  C’est très connu et commun dans les communautés tech et après avoir essayé divers logiciels pour gérer ça, on a choisi [Conference Hall](https://conference-hall.io/) pour recueillir les sujets. L’une des raisons principales c’est qu’il est très facile pour un orateur de proposer ses sujets dans différentes conférences sans avoir à tout copier-coller. Et côté organisateur, l’interface est pensée pour faciliter la sélection. (oui c’est pas parfait mais c’est open source donc si t’es pas content, tu peux faire une PR). Du coup concrètement, on prépare le CFP en définissant les thématiques, la durée des talks etc. On récolte les sujets de début juin jusqu'à début septembre. En parallèle, on communique par mail et sur les réseaux sociaux, principalement Twitter, sur la possibilité de soumettre un sujet. Des bénévoles peuvent également aller contacter certains speakers pour leur dire de poster un sujet. Surtout si ce sont des personnes qui n’ont pas l’habitude de donner des conférences. Concernant la ligne éditoriale, on essaye de composer une vision large de la tech, on va donc essayer d’avoir : - un sujet par gros type ([front](/fr/prestations/developpement-web), [back](/fr/prestations/developpement-web), ops…) - un sujet par techno principale (javascript, php, java etc), - quelques sujets de niveau débutant, intermédiaire et expert - quelques sujets de niche (hello [rust](/fr/blog/articles/rust) :p) - quelques sujets avec des têtes ou des noms connus (parce que ça attire le public…) - mais aussi avec des inconnus (histoire de ne pas avoir toujours les mêmes) et des locaux #Normandie (parce qu’on est là avant tout pour faire progresser notre communauté qui est principalement normande) ! Ce qui généralement nous donne un programme assez diversifié et il y en a pour tous les goûts. Pour les keynotes, qui sont des conférences plénières, on essaye d'être à la fois original et d’aller puiser dans des industries et/ou thématiques éloignées de la tech mais qui peuvent résonner et apporter un point de réflexion intéressant. Cette année par exemple, on a eu [un faux astrophysicien](https://www.youtube.com/watch?v=duSKKN_53xQ&t=10s), [un homme politique](https://www.youtube.com/watch?v=SAbsGftoxxI) et un [ex-magicien devenu développeur](https://www.youtube.com/watch?v=V5vLYzVEWxA) (il ne le mentionne pas dans la conf mais je vous jure que c’est vrai). Mais bon, revenons à nos moutons, une fois que l’appel à orateur est fini, s'ensuit la période de vote des bénévoles de mi septembre à début octobre. Ensuite on se fait une soirée pizzas durant laquelle on échange et on sélectionne les sujets. À partir de là, des bénévoles s'occupent de mettre à jour le site et de mettre le [programme en ligne](https://www.codeursenseine.com/2022/programme). Certains préparent la communication autour de ça, d’autres s'occupent de communiquer avec les speakers, réserver des hôtels, préparer le repas speakers de la veille etc. #### Le public On a la chance d’avoir une communauté établie et un public fidèle mais il y a quand même du boulot pour faire venir les gens. Déjà il faut communiquer sur les canaux historiques mais d’années en années, il faut évoluer pour suivre les usages et attirer un nouveau public. Historiquement la communication se faisait essentiellement par mail et sur Twitter mais depuis quelques années il y a le [Slack de Codeurs En Seine](https://go.codeursenseine.com/slack), d’autres channels communautaires, des posts Linkedin etc. Il y aussi des  bénévoles qui prennent leur bâton de pèlerins et vont promouvoir Codeurs en Seine auprès de leur entreprise ou des écoles de la région. Même si on a arrêté de donner des goodies Codeurs En Seine, il y a toujours des affiches et quelques stickers à produire. Au fur et à mesure des années, on a aussi tenu à simplifier le système des inscriptions mais il faut quand même gérer le processus.  ## L’organisation sur une année ? L’organisation d’une édition commence en général fin janvier/début février et se termine APRÈS l’event, c’est-à-dire mi-décembre. Tout s’articule essentiellement autour de 3 outils : - Un board Trello pour suivre les tâches - Des channel Slack organisateurs pour communiquer entre nous  - Une réunion les lundis midi 2 à 4 fois par mois (en fonction de l'échéance restante avant le jour J) durant laquelle on passe en revue chaque action à faire, on essaye de trouver des volontaires et on prend des décisions - clairement, c’est pas sur cette partie où nous sommes les meilleurs mais dans l’ensemble on se marre bien et on arrive à avancer, c’est ça qui compte. ![Capture d'écran du tableau d'organisation Kanban de Codeurs en Seine](images/image-17-1024x651.png) ![Capture d'écran du Slack de Codeurs en Seine](images/image-16-1024x794.png) ### La veille La veille c’est la préparation ! On s’occupe de se faire livrer le matériel et on installe les salles. Pour les salles de conférences, les principales tâches consistent à vérifier le travail des prestataires pour tout ce qui est logistique (chaises, pupitres, électricité) et son/vidéo (test micro, affichage). ![La plus grande salle de conférence après l'installation ](images/img20221117071729-scaled-1-1024x768.jpg) Pour la partie accueil des visiteurs, on organise les files, on affiche de la signalétique, on briefe les bénévoles qui seront en charge de scanner les visiteurs. Pour la partie sponsors, on vérifie les tables mises à leur disposition et tous les branchements nécessaires. On les accueille pour leur permettre d’installer leur stand en avance. ![Salle réservée aux sponsors (photo de Frédéric Bisson)](images/dsc02185-scaled-1-1024x428.jpg) On prépare également une salle à la disposition des orateurs pour qu'ils puissent s'isoler/travailler/répéter/discuter entre eux tout au long de la journée. Enfin, il nous reste la partie préparation des points repas et de la logistique autour de ça (j’avoue que je connais moins cette partie donc je peux moins détailler :p). En fin de journée, certains bénévoles vont chercher des orateurs à la gare pour les amener à leur hôtel, puis au repas des Speakers qui permet à tout le monde - organisateurs et orateurs - de commencer officieusement l’event dans un moment convivial (même si certains sont fatigués ou d’autres stressés). ### Le jour J En plus des organisateurs présents tout au long de l’année, on renforce l’organisation avec des bénévoles jour J (qu’il faut trouver avant bien entendu). Ça commence donc par un rendez-vous vers 7h du matin afin de finir les derniers préparatifs et briefer les équipes. Ensuite tout le monde se répartie entre gestion de salle, speakers, sponsors, visiteurs, nourriture, vidéos, photos et gestion des imprévus… ![L'équipe Codeurs en Seine prête à accueillir les visiteurs (photo de Frédéric Bisson)](images/dsc02192-scaled-1-1024x684.jpg) ### Après le jour J Même si pour beaucoup, Codeurs en Seine se termine en fin de journée, il reste encore des tâches pour les organisateurs, à savoir : - Payer les prestataires et les frais de déplacement des orateurs - Communiquer pour remercier tout le monde (visiteurs, sponsors, orateurs et bénévoles) - Récupérer les enregistrements, faire le montage vidéo et mettre les VOD sur YouTube  - Ranger le matos qu’on a balancé en vrac dans les voitures le soir - Essayer de capitaliser sur les problèmes qu’on a rencontrés pour mieux faire l’année suivante - Publier les photos de l’événement - … ## Quelques tips Avant de terminer je vais lister quelques petits conseils qui peuvent servir à tous et à toutes : - On a toujours besoin de bénévoles donc n’hésitez pas à vous proposer si ça vous dit. On est clairement pas les meilleurs sur l’onboarding des nouveaux mais on n’est pas méchants :). - En tant que bénévoles, n’hésitez pas à proposer votre aide pour prendre une tâche mais n’oubliez pas qu’il est important de communiquer sur votre avancement (y compris sur du non avancement). Tout le monde fait comme il peut donc on ne vous en voudra pas de ne pas toujours pouvoir accorder du temps à l’orga, mais pour éviter de créer des tensions ou de la frustration, il ne faut vraiment pas hésiter à se manifester plutôt que de disparaître ou de faire l’autruche… - En tant qu’association, il y a pas mal de produits ou d'outils en ligne d’ordinaire payants mais qui sont gratuits pour les assos. Il faut souvent juste faire une demande dans un recoin un peu obscur du site du produit (pour Codeurs En Seine, on a G Suite, Slack et Netlify pour le site web en version gratuite). - Pour éviter de devoir systématiquement programmer des talks animés par les entreprises qui sponsorisent l’événement, on a eu l’idée un peu diabolique de créer un pack “platinium” avec un tarif très élevé pour les sponsors qui souhaiteraient vraiment s’assurer une intervention le Jour J. Morale de l’histoire : personne n’a jamais pris cette option. Voilà, je ne sais pas trop comment conclure cet article à part en remerciant les fondateurs de Codeurs En Seine et tous les organisateurs et bénévoles depuis tant d'années… Je vous assure que cette conférence a un impact énorme sur ma vie professionnelle (avant même que je rejoigne l’organisation) et que les 10 dernières années de ma vie n'auraient pas du tout été les mêmes si Guillaume Lours, Yann Petit et Youen Chene n'avaient pas eu cette brillante idée. Alors merci !!! ![On aime Codeurs en Seine](images/image-20-1024x448.png) --- ### Brève 13 - Exécuter et déployer un projet JHipster avec Java 17 URL: https://www.bearstudio.fr/fr/blog/articles/deployer-jhipster-java-17 Date: 2022-07-05 Cette brève est une traduction de l’[article publié par Quentin sur dev.to](https://dev.to/qlerebours_/upgrade-your-jhipster-project-to-java-17-3al6).  Dans ce court article, je vais expliquer comment exécuter et déployer un projet JHipster en utilisant une autre version de Java que la version standard utilisée par JHipster (Java 11 actuellement). ## Etape 1 : Faire tourner son projet JHipster sur la version Java ciblée ### Utilisez la bonne version de Java en local Tout d'abord, vous devez avoir la version Java ciblée dans votre environnement local. Si vous utilisez [SDK man](https://sdkman.io/), vous pouvez exécuter : - `sdk list java` - Une fois que vous avez trouvé la version cible, installez-la avec `sdk install java 17.0.2-open` (par exemple) - Enfin, lancez `sdk use java 17.0.2-open` pour l'utiliser dans votre terminal  💡 SDK man est un excellent outil pour gérer plusieurs versions de Java sur votre environnement. Il permet d'installer facilement les versions et de passer d'une version à l'autre. ### Définissez la bonne version de Java pour le projet Une fois que vous utilisez la bonne version de Java localement, il vous suffit de modifier la version cible dans le projet. Si vous utilisez Maven, il suffit de changer `17` dans le `pom.xml` 🎉 C’est prêt, vous pouvez essayer d'exécuter le projet avec `./mvnw` 💡 Si vous voyez une erreur "Invalid target release 11", c'est probablement que votre version locale et celle du projet ne sont pas synchronisées. Elles doivent être identiques (17 dans mon cas). ## Étape 2 : Corriger la CI Si vous utilisez une CI et que votre CI utilise l'image Docker `jhipster/jhipser:latest` pour exécuter le projet et les tests, cela ne fonctionnera plus car cette image Docker est basée sur `eclipse-temurin:11-jre-focal` qui utilise Java 11. Cela signifie que vous devrez recréer votre propre image Docker basée sur Java 17, mais ne vous inquiétez pas, ce n'est pas compliqué : - Clonez le projet [generator-jhipster](https://github.com/jhipster/generator-jhipster) sur Github - Ouvrez le Dockerfile qui se trouve à la racine du projet - Modifiez l'image de base en `eclipse-temurin:17-jre-focal` - Créez un dépôt sur le hub docker. Supposons qu'il s'appelle `myOrganization/jhipster-java-17` - Créez la nouvelle image avec `docker build . -t myOrganization/jhipster-java-17:latest` - Poussez la toute nouvelle image vers le hub avec `docker push myOrganization/jhipster-java-17:latest` - Enfin, changez l'image docker utilisée dans votre CI en `myOrganization/jhipster-java-17:latest` et quand votre CI sera ré-exécutée, elle fonctionnera à nouveau ## Étape 3 : Modifiez votre environnement Cloud Au [BearStudio](/fr/prestations), nous utilisons [CleverCloud](http://clever-cloud.com/) qui permet de modifier la version Java cible très facilement grâce à la variable d'environnement `CC_JAVA_VERSION` qu’il faut mettre à jour à la version 17, avant la sauvegarde de vos changements. **C'est fait, votre projet JHipster devrait maintenant fonctionner sur Java 17 🎉** Si vous n'utilisez pas encore JHipster, vous pouvez [apprendre à générer votre premier projet ici](/fr/blog/articles/jhipster-generateur-projet-hipsters). --- ### La checklist SEO technique pour lancer un site web URL: https://www.bearstudio.fr/fr/blog/articles/checklist-seo-technique Date: 2022-06-27 Si la création d’un site web est (presque) **indispensable** pour développer une **notoriété en ligne**, il est important de respecter certaines **règles de conception** si vous souhaitez gagner de la visibilité en vous **positionnant sur Google**. Cet article est pensé pour les **porteurs de projet** qui souhaitent lancer leur premier site web ou pour les **développeurs juniors** qui souhaitent **respecter ou améliorer le SEO** de leurs clients mais aussi pour toutes les personnes intéressés par le SEO ! ## Pourquoi respecter les critères de référencement de Google ? Une grande majorité des recherches sont effectuées via Google ([90% en France](https://www.blogdumoderateur.com/chiffres-google/)). Donc pour **maximiser votre visibilité** en termes de référencement naturel, il est évident qu’il faut **suivre les recommandations** du géant. D’autant plus que suivre les **critères de Google** permet de **gagner des positions** sur l’ensemble des moteurs de recherche. Au vu du nombre de sites présents sur la toile (2 milliards en 2021 d'après satista), les **moteurs de recherche** ont tout intérêt à **réguler** le nombre de pages qu’ils indexent et à faire **ressortir les pages** qu’ils estiment **qualitatives** en première page du résultat de recherche.  Ce nombre étant de plus en plus important, les moteurs de recherche peaufinent leurs **algorithmes** pour être plus **exigeants** avec des **critères de qualité** toujours plus élevés.  On pourrait établir une longue liste de l’ensemble des critères pris en compte par Google. Parmi les plus connus on retrouve la qualité du contenu, la sémantique, la hiérarchie des informations, l’expérience utilisateur, le nombre et la qualité des liens externes, le maillage interne et la vitesse de chargement. Dans cet article, je vais me concentrer sur l’**aspect technique on-site** du SEO en établissant une petite **checklist de démarrage** d’un projet de site web.  ## Les critères SEO techniques on-site à respecter sur son site web ![Les points clés pour une base SEO technique](images/points-cles-seo-technique-1024x690-1.webp) ### Optimiser la performance de son site S’il y a bien un **critère d’expérience utilisateur** à ne pas négliger, c’est la **performance** d’un site web. [D’après Deloitte](https://www2.deloitte.com/content/dam/Deloitte/ie/Documents/Consulting/Milliseconds_Make_Millions_report.pdf) une diminution de 0,1 seconde de temps de chargement augmenterait le taux de conversion de 8%. Pour tester la performance d’un site, vous pouvez passer par Lighthouse qui est accessible via le menu “Outil de développement” de Chrome.  Pour avoir un score pertinent, je vous conseille de tester avec plusieurs outils. Vous pouvez utiliser [PageSpeed Insight](https://pagespeed.web.dev/) et [GTmetrix](https://gtmetrix.com/) (qui est d’ailleurs un peu trop "gentil").
![test de performance sur google page speed pour la landing page de start UI](images/test-performance-google-page-speed-1.webp)
Exemple de résultat d’un test sur PageSpeed Insights pour la landing page de [Start UI](https://github.com/BearStudio/start-ui-web).
En utilisant ces outils vous obtiendrez les **points clés** pour **améliorer la performance** de votre site web. Parmi les points récurrents on retrouve : **La compression des images**  Vous pouvez utiliser [tinypng](https://tinypng.com/) pour **réduire la taille de vos images**. Si vous êtes sur WordPress, vous pouvez passer par un plugin comme [imagify](https://imagify.io/fr) qui optimise automatiquement toutes vos images. **Dimension des images** Évitez d’utiliser des images dimensionnées en 10 000x10 000 qui, même compressées, seraient bien trop lourdes. **Format des images** **Privilégiez le format WebP** qui est bien plus léger que le JPG ou le PNG. Sur WordPress vous pouvez utiliser imagify qui convertit automatiquement vos images. **Chargement différé (lazy loading)** Le **lazy loading** permet de faire charger les ressources seulement lorsqu’elles sont utiles. Par exemple les images hors écran ne chargeront qu’à leur affichage suite au défilement de la page par l’utilisateur.  Pour utiliser le lazy loading vous pouvez avoir recours à un [script JS](https://www.andreaverlicchi.eu/vanilla-lazyload/), l’attribut loading ou encore un plugin comme WP Rocket si vous êtes sur Wordpress. L’important, c'est vraiment que le **contenu** textuel de la page ne soit **pas trop retardé par le chargement** de scripts, de feuilles de styles ou autres. **Minimisation du code** Il ne faut pas sous-estimer l’impact du **poids de votre code JavaScript et CSS**. Vous pouvez le compresser facilement en l’entrant sur un outil comme [Refresh SF](https://refresh-sf.com/). Si vous êtes sur WordPress vous pouvez optimiser l’ensemble de votre site avec un plugin comme WP Rocket.  Pour éviter d’avoir un code trop lourd, vous pouvez également retirer les plugins que vous n’utilisez pas.  Il existe évidemment beaucoup plus de critères, à vous d’aller explorer les résultats de vos tests de performances ! ### Les balises à utiliser en SEO Les balises sont des **tags codés en HTML** qui permettent d'apporter des informations importantes aux moteurs de recherche et utilisateurs. En SEO vous risquez d'être fortement pénalisé si vous n'utilisez pas les **balises importantes pour le référencement**. #### La balise de méta description  Les balises meta sont des **balises HTML situées dans la balise head** du code et qui permettent d’y ajouter des **meta-données** (des informations sur la page en question).  La balise de méta description permet de **décrire le contenu d’une page** web sur la SERP (Search Engine Results Pages ou Page de résultats d’un moteur de recherche). Concrètement, ça donne ça pour le site du BearStudio : ![meta description de la page d'accueil du bearstudio](images/meta-description-bearstudio-1024x190-1.webp) Pour l’intégrer dans une page web, le code s’insère dans la balise head comme ça :  ` ` Vous pouvez aussi passer par un plugin comme Yoast SEO, SEOPress ou Rank Math pour intégrer facilement vos meta description si vous utilisez un CMS.  La **rédaction d’une meta description est primordiale** pour le référencement étant donné qu’elle influe directement sur le **taux de clics** de votre page sur la SERP. Pour être efficace, la description doit faire entre **140 et 160 caractères** et contenir un **mot clé** sur lequel vous souhaitez vous positionner.  #### La balise title La balise title correspond au **titre de votre page** affiché sur la SERP et dans l’onglet du navigateur. En reprenant l’exemple du BearStudio on obtient ça : ![title de la page d'accueil du bearstudio](images/title-bearstudio-1024x190-1.webp) Le title se retrouve dans la balise head comme ça : ` BearStudio ` Comme pour la méta description, le title peut se modifier très facilement sur un CMS en utilisant un plugin comme Yoast SEO. Pour être efficace, la balise title doit contenir le **mot clé principal** de la page et ne pas dépasser les **65 caractères**. Elle doit donner envie de cliquer et être pertinente par rapport au contenu de la page. Attention à ne pas confondre le titre 1 (balisé par le tag `

`) qui correspond au premier titre de la page avec la balise title qui apparaît dans l’onglet du navigateur. ![Différence entre un title et un H1](images/difference-title-h1-1024x381-1.webp) #### La balise alt Google n’est pas encore assez intelligent pour comprendre vos images. Heureusement vous pouvez l’aider en décrivant votre image grâce au **texte alternatif**. Ce texte, sous la forme d’une balise alt, permet également de remplacer l’image si celle-ci ne charge pas. Au delà de l’aspect SEO, elle est surtout utile pour les personnes malvoyantes utilisant un lecteur d’écran. C’est d’ailleurs pour ça qu’elle existe. Pour utiliser la balise, il suffit d’**ajouter l’attribut alt** dans les propriétés de l’image, comme ici : `un paysage de montagnes` Sur les CMS, vous pouvez ajouter l’attribut alt directement depuis le back-office lorsque vous importez une image.  #### Les balises Hn Les balises Hn permettent de **créer une** **hiérarchie des titres** avec H1 comme titre principal et H2, H3, Hn… comme sous-titres classées du plus au moins important.  Pour baliser un texte en Hn c’est très simple, prenons le H1 de cet article : `

La checklist SEO technique pour lancer un site web

` Attention, contrairement aux autres balises Hn, le H1 qui est le titre principal ne doit être utilisé qu’une seule fois.  Pour comprendre le fonctionnement, on peut prendre comme exemple la hiérarchie de cet article : ![la hiérarchie des titres Hn pour l'article checklist SEO](images/hierarchie-hn-article-checklist-seo-1.webp) Cette hiérarchie est primordiale pour avoir un **contenu clair et structuré** à la fois pour les utilisateurs, mais aussi pour les moteurs de recherche. C’est ce qui va leur permettre de **comprendre le contenu** de votre page pour le suggérer en résultat des recherches correspondant au besoin auquel vous répondez.  Les balises Hn étant identifiées comme les mots les plus importants d’une page, il est important d’y insérer vos mots clés principaux. ### Optimiser ses URL pour le SEO ![La structure d'une URL](images/structure-url-1024x605-1.webp) L’URL est une **adresse permettant d’identifier une ressource donnée** sur internet. Pour une URL optimisée ajoutez-y un **mot clé important**, gardez la **concise** et évitez les caractères spéciaux. Le plus important dans les URL de votre site réside dans leur **consistance** : si vous avez un site e-commerce avec 200 catégories (livres, high-tech…), il sera bien plus simple de ne pas afficher ces catégories dans l’arborescence de l’URL pour éviter un énorme casse-tête. On peut prendre l’exemple des produits présents sur plusieurs URL qui causeront du **contenu dupliqué** sans la présence de **balises canonical** (tag qui indique la page mère sur les pages au contenu identique). Ces mêmes produits rendront des **erreurs 404** (page introuvable) en cas de changement de catégorie.  *Pour que ça soit plus clair, je vais expliquer en dessous avec un exemple pour un blog.*  Même histoire qu’un e-commerce pour un blog, attention à ne pas garder le système d’url de type site.com/blog/catégorie/article sur votre blog si vous n’êtes pas certains de vos catégories. En cas de **changement d’une catégorie** vous vous exposez à de multiples **erreurs 404** dûes au changement de l’URL de vos articles.  Par exemple un changement de catégorie1/articleX vers catégorie2/articleX rendrait l’URL catégorie1/articleX inaccessible sans redirection, ce qui est **pénalisant pour le SEO**.  Pour être sûr de ne pas avoir de problèmes, la meilleure option est de référencer vos articles comme ceci site.com/article ou comme cela site.com/blog/article. Le fait de changer l’URL ne vous empêche pas de trier vos articles par catégorie dans votre blog. Ça n’aura pas d’impact pour la compréhension de Google. C’est le **sitemap**, le **fil d’ariane et le maillage interne** (liaison des pages entre elles via les liens internes) qui **rendra compréhensible votre site** aux yeux de Google. Pour le reste de votre site, je vous conseille de suivre la **hiérarchie logique**. Par exemple pour notre page maquettes, on a [/fr/prestations/ux-design](/fr/prestations/ux-design). En suivant le lien, on sait qu’on la retrouve dans la catégorie prestations, puis UX design, puis maquettes. On retrouve cette logique dans le **fil d’ariane** présent sur les pages du site. Il est utile à la fois pour Google qui comprend la **profondeur du site**, mais également pour l’utilisateur qui peut retourner dans les pages mères facilement.  ![fil d'ariane](images/fil-ariane-exemple-1.webp) ### Configurer le Sitemap et le Robots.txt Le fichier robots.txt est un **fichier texte présent à l’adresse site.com/robots.txt** qui permet d’autoriser ou non à un robot d’exploration, l’accès à un répertoire donné. Si vous souhaitez que Google explore et indexe vos pages, veillez à bien l’autoriser. Pour se faire vous pouvez vous référer au [tuto de Google](https://developers.google.com/search/docs/advanced/robots/create-robots-txt). (⚠️ **Si vous n’autorisez pas l’exploration de votre site, il ne sera pas référencé.**) Le sitemap est un **fichier XML qui liste les URLs d’un site** en les accompagnant de méta données, ce qui permet aux robots d’**explorer plus facilement** un site web. Depuis un CMS, vous pouvez facilement créer et modifier votre sitemap depuis le back office ou grâce à l’utilisation d’un plugin SEO.  Si vous êtes développeur, vous pouvez vous référer au [protocole de sitemaps](https://sitemaps.org/protocol.html).  ### Repérer et corriger les liens cassés ![illustration d'une erreur 404](images/illustration-erreur-404-1024x598-1.webp) On est tous déjà tombés sur une **erreur 404** qui a **nuit à notre expérience** utilisateur. En effet il est très frustrant de rencontrer un lien brisé lorsqu’on cherche à avoir une information précise. Si vous veillez à **garder les visiteurs** sur vos sites, vous avez tout intérêt à **garder un œil sur l’ensemble des liens** présents sur votre site, qu’ils soient internes ou externes. Attention aussi aux URLs de votre site en général. Certaines pages peuvent être référencées sur d’autres sites ou en favoris d’un utilisatur, si un lien est cassé c’est le même problème. D’autant plus que des liens brisés ont un **impact négatif sur votre référencement**. En effet, un robot d’exploration qui passe sur un lien cassé utilise son budget de crawl inutilement. Il assimilera cette erreur à un **site de mauvaise qualité**.  Pour repérer les liens cassés vous pouvez passer par un crawler complet comme [Screaming Frog SEO Spider](https://www.screamingfrog.co.uk/seo-spider/). Ce crawler permet de repérer un grand nombre d’erreurs techniques sur votre site. Mais il faut savoir que la version d’essai du logiciel limite le crawl à 500 URLs. Si vous préférez utiliser un outil gratuit, vous pouvez passer votre site sur [W3C Link Checker](https://validator.w3.org/checklink?uri=) ou utiliser un crawler comme [Xenu](http://home.snafu.de/tilman/xenulink.html#Download).  ### Optimiser la structure de son site De la même manière que pour les balises Hn, votre site web doit être **structuré logiquement**. C'est ce qui va rendre votre **contenu compréhensible et accessible** par l’utilisateur et par les robots d’exploration.  Il est important que vos pages suivent une **hiérarchie logique**. Par exemple un **regroupement par thème** qui forment un silo ou une arborescence. Plus on descend dans l’arborescence, plus la thématique est précise.   On peut prendre l’exemple du site du BearStudio pour comprendre la bonne façon de **structurer un site** web. On a le menu qui regroupe les pages principales du site. Si on veut découvrir les [prestations proposés par le BearStudio](/fr/prestations) on retrouve la page dédiée dans le menu. Sur la page, on retrouve 4 catégories principales. Si on choisi la catégorie [**UX design**](/fr/prestations/ux-design) on retrouve toutes les prestations liées au Design. C’est simple, logique mais efficace.  ![hiérarchie du site bearstudio](images/hierarchie-site-web-1024x503-1.webp) Pour **créer une bonne structure**, vous pouvez également vous baser sur le **parcours utilisateur**. Pour se faire, vous pouvez suivre [notre article sur la création d’un userflow](/fr/blog/articles/parcours-utilisateur-ux). ### Vérifier l’ergonomie mobile de son site On sait qu’aujourd’hui une **majorité des internautes** utilisent un moteur de recherche depuis leur **téléphone**. Avoir un site web qui n’est **pas optimisé pour mobile** n’est **absolument pas envisageable**.  Pour vérifier l’ergonomie mobile de votre site, vous pouvez vous rendre sur la Google Search Console (GSC). Dans le menu expérience puis dans ergonomie mobile vous devez vous assurer que toutes vos pages soient valides. Vous pouvez également effectuer un [test d’optimisation mobile](https://search.google.com/test/mobile-friendly) avec l’outil dédié de la GSC. ![l'ergonomie mobile sur la google search console](images/ergonomie-mobile-google-search-console-1.webp) Pour aller plus loin, vous pouvez aussi faire appel à nous pour faire réaliser un [Audit UX](/fr/prestations/ux-design) de votre site par des experts avec une **vraie connaissance humaine**.  Contrairement à un simple outil automatisé, vous aurez un retour de test par un oeil avisé qui saura se mettre dans la peau d’un utilisateur.  Vous vous assurerez que votre **expérience utilisateur** est bien **optimisée sur n’importe quel appareil**.  ## Conclusion sur le SEO technique  Pour résumer, pour avoir une bonne base SEO technique, votre site web doit : - Être **performant** - Utiliser les **balises SEO** - Avoir des **URL optimisées** - Avoir un **Sitemap** et un **Robots.txt** bien configurés - Ne pas contenir de **liens cassés** - Avoir une **structure logique** - Être **optimisé sur mobile** Difficile d’aborder l’ensemble des critères qu’un site web doit respecter pour optimiser son SEO en un seul article !  Ici je me suis focalisé sur les **critères techniques principaux**. Il faudra également s’intéresser à la concurrence, au maillage interne, à l’optimisation off-site et à la création de contenus optimisés. Dans tous les cas, si vous lancez un site web, vous pouvez vous servir de cet article comme **checklist pour démarrer de la bonne manière**. Ça sera la première étape d’une stratégie marketing qui demandera un travail approfondi. Vous pourrez toujours **aller plus loin** par la suite pour vous **positionner plus haut** dans les moteurs de recherche. --- ### FOS : l'apprentissage du Français sur Objectif Spécifique dans le dev URL: https://www.bearstudio.fr/fr/blog/articles/fos-apprentissage-francais-objectif-specifique Date: 2022-06-16 Vous le savez déjà si vous avez lu notre article sur le remote, [on a des développeurs tunisiens](/fr/blog/articles/on-a-des-developpeurs-tunisiens). Et on ne fait pas du simple outsourcing. On travaille en remote avec une équipe de 3 développeurs totalement intégrée à la team française.  Pour encore améliorer notre “**outsourcing informatique” avec la Tunisie** (qui est d’ailleurs plus proche du remote que de l’outsourcing), on a fait appel à [Hend](https://www.linkedin.com/in/hend-fellah-812976165/), une professeure de français spécialisée dans l'apprentissage de la langue pour les étrangers. Elle vous fait un retour sur son expérience et vous explique l’intérêt de l’apprentissage de la langue pour la boîte.   ## Professeure de français dans une société de développement Lorsqu’on fait des études de langues, de littératures et de Latin qui plus est, et qu’on vous dit que Python, Java ou HTML sont également des langues, vous buggez sévèrement ! ![meme d'enfant qui bug](images/meme-bug.png) Et ouais, moi qui n'ai jamais eu plus de la moyenne en informatique au lycée, je me suis retrouvée à enseigner le français dans une boîte de développement. Concours de circonstance ou véritable besoin pour les sociétés de dév ? C’est ce qu’on essaiera de creuser tout au long de cet article. ## Le FOS c’est quoi ? En français aussi, on essaye de faire des abréviations qui font stylées et qui amènent les gens à nous demander “FOS, c’est quoi comme domaine ?“. Et là tout fiers de nous, on explique que le Français sur Objectif Spécifique, c’est le fait d’enseigner à une personne la langue, mais de façon plus ciblée, en se focalisant sur leurs besoins réels et notamment professionnels.  Et qui dit monde professionnel, dit plus d'intérêts à l’égard de notre métier. Je vous raconte donc pourquoi j’ai été recrutée ! Le secteur informatique connaissant en Tunisie une expansion fulgurante, les tunisiens ont peu à peu réussi à se frayer une place sur le marché du travail. Plus question pour eux de quitter leur famille et leur pays, ils sont désormais opérationnels, peu importe leurs localisations.  ![meme working from home](images/meme-working-from-home.png) Et ce n’est pas pour déplaire au BearStudio qui est faaaaaaaaaaannnnn du remote (et bien avant la pandémie hein…) Installés en Tunisie depuis plus de deux ans, les oursons sont partis à la conquête des provinces tunisiennes où les opportunités d’emplois sont moins importantes que dans la capitale.  Ce choix, même s’il émane d'une bonne volonté, les a confrontés à d'autres problématiques qu’ils n'envisageaient pas du tout dans un pays censé être francophone : ![la barrière de la langue](images/la-barriere-de-la-langue.png) Il faut dire que, comme plusieurs pays du globe, les inégalités pédagogiques et professionnelles sont très répandues en Tunisie et touchent spécialement les régions sud du pays. Mais ce n’est pas ça qui a ralenti la gambade de nos petits ours ! Contactée par [l’équipe du Bear Studio](/fr/equipe) en juin 2019, mon objectif a été de comprendre les problèmes linguistiques de l’équipe et de la société afin d’élaborer un programme pour y remédier.   Cette expérience m’a d’abord parue effrayante (mes notes du lycée en informatique…). Mais au fil de mes recherches et de mes journées passées au sein de l’entreprise, cette expérience me paraissait de plus en plus challengeante et surtout plus proche du terrain.  ## L'intérêt pour la société Vous allez me dire “C’est évident, la communication !” Oui, mais non ! Dans plusieurs sociétés de développement, c’est l’anglais qui reste la langue la plus usuelle, pourquoi donc insister sur le français ?  Au BearStudio, une grande partie de la communication interne se fait en français (souvent à l’écrit sur des [outils](/fr/blog/articles/outils-incontournables-pour-un-entrepreneur) de communication comme [Slack](https://slack.com/intl/fr-fr/)). Pour chaque projet pris en charge par la société, des réunions et des concertations doivent être faites afin d’aborder le meilleur angle de travail. Ce qui permet à toute l’équipe de comprendre de quoi il est question.  Cette tâche est d’autant plus complexe lorsque tous les membres d’une équipe ne sont pas géographiquement réunis. C’est donc primordial qu’il n’y ait aucun doute ou confusion dans la compréhension des tâches demandées, dans la capacité à remonter et à expliquer correctement un bug ou encore dans la gestion des problèmes techniques.  ![meme who is in charge here](images/meme-who-is-in-charge-here.gif) ### L’efficacité au travail Si une grande partie du travail se fait en visio, tous les collaborateurs doivent retranscrire par écrit l'avancement de leurs tâches personnelles et les problématiques auxquelles ils font face. Ça permet aux collègues de s’entraider ou encore de prendre la main sur des tâches en cas de congés ou d’absence par exemple.  Une communication fluide revêt donc ici toute son importance puisqu’elle permet aux deux équipes de pouvoir interagir sans difficulté et d’accorder plus d’importance aux problématiques techniques qu’aux problématiques langagières.  Ce constat a été fait au détriment des premiers mois de collaboration. Puisque les deux équipes ont, au départ, négligé le niveau de français de l’équipe tunisienne. Pensant que cela ne serait pas compromettant, les deux teams sont directement entrées dans le vif du sujet. Elles se sont rendues compte que malgré les compétences techniques de chaque employé, le travail prenait de plus en plus de retard. Cela était dû à une communication pas toujours efficace.  ### L’image de la société Si les membres de l’équipe peuvent être tolérants face aux difficultés langagières de certains, ce n’est pas le cas des clients.  Certains adoptent rapidement un comportement méfiant par rapport à une personne qui ne pratiquerait pas correctement la langue. L'amalgame entre niveau linguistique et niveau professionnel est récurrent.  Cette confusion discrédite dans la plupart des cas, l’employé et la société qui l’embauche. ### La langue, ça crée des liens aussi ![meme calin](images/meme-calin.png) Quand on connaît peu les rudiments de la langue française, il est quasi-impossible de comprendre la langue parlée avec son lot d'expressions familières, d’argot, et de sous-entendus.  Autant dire que créer un esprit d’équipe lorsqu’on ne parle pas la même langue peut prendre un temps considérable. À cela, s’ajoute la portée culturelle que la langue est censée véhiculer et que le BearStudio souhaite faire parvenir à ses collaborateurs tunisiens ! En somme, la langue reste un levier incontestable pour la montée en compétence des développeurs tunisiens (ou étrangers). Leur niveau technique sera donc étroitement lié à leurs capacités à comprendre et interagir avec leurs collègues et clients.  Plus votre développeur sera autonome en communication, plus vous pourrez le placer sur différents projets, le laisser prendre seul des initiatives et même lui permettre de piloter une équipe ! Pari gagné non ? **Auteur :** [Hend Fellah](https://www.linkedin.com/in/hend-fellah-812976165/) --- ### Parcours utilisateur & UX : comment créer un userflow efficace URL: https://www.bearstudio.fr/fr/blog/articles/parcours-utilisateur-ux Date: 2022-05-31 Le parcours utilisateur est défini par les différents chemins et interactions que l’utilisateur va rencontrer dans une application, un site web, un logiciel métier, etc. Bien comprendre le parcours utilisateur est essentiel pour créer un chemin fluide et cohérent. Il va permettre d’optimiser l’expérience de l’utilisateur au fur et à mesure de son utilisation d’un produit numérique. Le but est de permettre à l’utilisateur d’atteindre efficacement son objectif.  La définition d’un parcours utilisateur fait donc partie des étapes essentielles dans l’optimisation de l’[UX design](/fr/prestations/ux-design) (UX = expérience utilisateur). En utilisant la bonne méthode et les bons outils, on s’offre la possibilité d’optimiser au maximum l’expérience utilisateur en se mettant à sa place afin de retracer l’ensemble de son parcours. Il en existe de nombreuses (comme l’user journey qui prend en compte les émotions des utilisateurs). Au BearStudio nous avons choisi, à force d’expérience, d’utiliser les **User Flows**. Bien sûr, l’utilisation des User Flows ne permettra pas automatiquement de créer un parcours utilisateur parfait. D’autant qu’il existe plusieurs manières d’utiliser cette méthode. Avec le temps, nous avons affiné notre processus de création d’User Flows afin d’être toujours plus pertinent et de s’assurer que la conception de ces différents parcours utilisateur soit efficace et intuitive. Une autre utilité des Users flows est de préparer les [maquettes](/fr/prestations/ux-design) et les [wireframes](/fr/prestations/ux-design). En effet, il s’agit d’une étape préliminaire à la réalisation de maquettes. Plus les User flows sont détaillés, le plus clair seront les maquettes ou les wireframes. Dans cet article nous allons vous présenter sommairement quelle est notre procédure pour réaliser des User flows qui permettent de s’assurer que le parcours utilisateur soit bien défini par tous les acteurs du projet (client, designer, équipe de développeurs etc.). ## 1 - Comprendre le besoin des utilisateurs Pour créer un User Flow pertinent, il est nécessaire de prédire le comportement des utilisateurs. Pour analyser le parcours des utilisateurs, il faut organiser un certain nombre d’ateliers avec les porteurs de projet. Ce qui permet de poser le plus de questions possible sur les utilisateurs, leurs besoins etc.  Connaître ce dont ont besoin les utilisateurs est la base pour être sûr que le produit que l’on va créer (application mobile ou web, logiciel, site internet…) correspondra au besoin. Il est possible, dans certains cas, de faire des ateliers avec des utilisateurs finaux (dans le cas d’une application métier déjà existante par exemple). Le meilleur moyen de comprendre et d’analyser l’utilisateur, c’est d’essayer de se mettre à sa place. Pour ce faire, il faut poser un maximum de questions, comprendre le contexte, les contraintes, les besoins, la démarche etc. C’est une étape **indispensable et primordiale** si l’on veut s’assurer d’avoir des bonnes bases dans le cadre de la création d’un bon parcours utilisateur. ## 2 - Réaliser des Task Flows Les taskflows sont une représentation schématique (souvent en utilisant des couleurs neutres et peu de détail textuel) très simple d’une action qu’un utilisateur voudrait accomplir en partant de son point de départ jusqu’à sa résolution, sans passer par tous les chemins possibles. Ils servent notamment à lister toutes les actions qu’un utilisateur voudrait effectuer au sein d’un produit numérique. Un exemple valant mille mots, voici à quoi pourrait ressembler le taskflow typique d’une mise au panier sur un site de vente de bananes en ligne.  ![le parcours d'une commande sur un site e-commerce](images/parcours-commande-e-commerce.png) Ce taskflow reprend toutes les étapes que doivent suivre les clients de l’entreprise pour réaliser un achat sur le site web. C’est une première étape très importante puisque les taskflows permettent d’organiser les éléments les plus importants avant de commencer à réaliser les userflows. Aussi, cela permet de se mettre d’accord avec le/les clients. Il faudra donc réitérer cette manœuvre pour chaque fonctionnalité, action du produit.  ## 3 - Réaliser des Userflows ### 3.1 Choisir son outil  Pour créer un Userflow ou des taskflows il faut choisir un outil de création de diagrammes qui permet de réaliser des schémas efficacement. Il vaut mieux privilégier un outil simple mais efficace qu’un outil aux multiples fonctionnalités pas forcément pertinentes qui risquent seulement de vous faire perdre du temps.  Au BearStudio, nous utilisons [Figjam](https://www.figma.com/fr/figjam/) ou [Whimsical](https://whimsical.com/) qui sont des outils simples et efficaces et qui permettent de travailler à plusieurs sur un même diagramme. [Excalidraw](https://excalidraw.com/) est une alternative complètement gratuite mais non collaborative qui permet de faire des schémas plus “originaux”. ### 3.2 Comment ça marche les userflows ? En une image un userflow qu’est-ce c’est ? Et bien c’est ça ⬇️ ![schéma d'un userflow simple](images/schema-user-flow-simple.png) Dans cet exemple il s’agit d’un petit userflow qui montre toutes les étapes que doivent accomplir l’utilisateur pour accomplir une action spécifique.  Donc, un userflow, c’est un ensemble de taskflows que l’on aurait légendé, détaillé et regroupé dans un seul grand schéma. D'où l’importance de l’étape préliminaire des taskflows, cela fait gagner beaucoup de temps. Ils peuvent aller du plus simple comme dans l’exemple ci dessus, au plus complexe ⬇️ ![schéma d'un userflow complexe](images/schema-user-flow-complexe-1024x995.png) ## Du coup, quelles sont les différentes étapes pour réaliser son userflow ?  ### 1\. Légender Votre userflow sera composé de nombreux éléments. Il est donc très important de donner la possibilité à n’importe qui de pouvoir lire correctement ce schéma. Une légende est indispensable. Elle peut aller du plus simple à la plus complexe. Cependant vous devriez toujours avoir dans vos userflows ces trois éléments.  **Les actions** : cliquer sur un bouton, ouvrir un formulaire, accéder à une page, bref autant d'actions que l’utilisateur peut accomplir. **Les conditions** : qui représentent une séparation du parcours de l’utilisateur en deux (oui ou non)  **Les pages** : qui sont les éléments figés du produit (page d’accueil, page d’un produit, page du panier, page de profil etc.) ![Légende d'un userflow](images/legende-user-flow.png) Une fois votre légende réalisée, vous devez regrouper les taskflows et les associer par des connecteurs (généralement des flèches allant du point d’origine à gauche jusqu’au point d’arrivée à droite). Par exemple :  ![Schéma des différentes actions sur une page produit](images/schema-action-page-produit.png) Dans ce cas assez simple, nous avons plusieurs actions possibles depuis la page des produits. Elles montrent les différents chemins que l’utilisateur peut emprunter et les conditions qu’il doit remplir pour continuer le processus. ### 2\. Détailler Dans des cas plus complexes, il est possible d’indiquer des détails sur les userflows. Par exemple, dans le cas d’une inscription, nous pouvons indiquer quelles données sont demandées pour créer son compte.  ![Détail du userflow dans le cas où le user n'est pas connecté, avec indication des informations nécessaires](images/details-userflow.png) Un userflow peut donc être dans les cas les plus simple un simple schéma des différentes actions que peut effectuer un utilisateur sur un produit. Mais ils peuvent être aussi une carte complète et détaillée de l’ensemble des différents parcours utilisateur et leurs informations. ## Et ensuite ?  Une fois les userflows faits et validés, la suite peut commencer. Réalisation de maquettes, chiffrage projet complet, [développement](/fr/prestations/developpement-web) etc. Permettre de définir le parcours utilisateur au plus tôt dans le projet, est un excellent moyen de se donner une vision globale sur le travail à accomplir à tous moments du projet. Il est utilisable par tous les membres du projet (designers, développeurs front et back, commerciaux et clients). Il sera la clé d’une bonne expérience utilisateur et client sur toute conception, du site internet, ou encore de l’application web ou mobile.  Si vous vous intéressez à l’UX design, on vous conseille de lire notre [article sur la loi de proximité](/fr/blog/articles/la-loi-de-proximite). --- ### Comment créer son image de marque ? URL: https://www.bearstudio.fr/fr/blog/articles/creer-identite-marque Date: 2022-05-16 *Dans cet article, je vous parlerai de branding identity (identité de marque en français) mais plus particulièrement, comment en créer une.*  *Vous trouverez des conseils mais aussi les fondamentaux afin de créer votre propre identité de marque.*  ## Qu’est ce qu’une identité de marque ou branding identity ? L’identité de marque est la perception que le consommateur a de votre entreprise. Elle définit sa personnalité mais aussi son style ou encore sa façon dont elle communique sur ses produits ou services, tous ces points forment l’ADN de votre marque. C’est ce qui vous permet de transmettre un message à votre public cible.  Votre objectif sera donc de créer une identité visuelle qui marquera votre audience, de par les points cités précédemment mais aussi de par l’histoire que vous voulez leur raconter. C’est pourquoi, nous évoquerons l’exemple de l’une des plus grandes marques du monde, Apple, reconnue pour sa notoriété forte et son image qui renvoie un message de qualité auprès de ses clients. ![logo apple](images/logo-apple.png) Depuis sa création en 1976, Apple a su se démarquer par sa direction artistique. Le designer Rob Janoff à l’origine de la pomme croquée a su tirer son inspiration de l’étude du fruit, sous toutes ses coutures. Elle est croquée pour ne pas qu’on la confonde avec un autre fruit ( comme par exemple, le nashi… ) ## 1\. Trouver son inspiration Maintenant, passons dans le vif du sujet ! Comment trouver son inspiration et par quels moyens ? Car oui aujourd’hui, ce n’est pas facile de se démarquer des autres… car peut-être que Pierre, votre voisin, est à la tête d’une grande entreprise et que vous aimez bien l’image que dégage sa boîte.  Votre rôle sera de vous inspirer du monde graphique sans reprendre tous ses codes à l'identique, car comme dit précédemment, il faut retrouver votre personnalité dans votre image de marque afin que celle-ci soit unique et intemporelle. Pour cela, vous disposez de nombreux outils sur le web tels que Dribbble, Behance, Pinterest afin d’acquérir de la culture graphique de manière générale : art, sculpture, typographie, Bande Dessinée, roman. Toutes ces cultures vous serviront dans vos créations. De plus, ces outils vous permettront d’acquérir les tendances graphiques du moment, car l’idée est de créer un logo moderne et actuel. ## 2\. Faire un benchmark concurrentiel Il vous sera intéressant de prendre connaissances de vos potentiels concurrents, vous devrez donc passer par la case Benchmark. Cette étape vous aidera à connaître les codes graphiques des entreprises exerçant le même secteur d’activité que vous, ce qui vous dirigera vers un chemin différent de vos concurrents (logotype, charte graphique, communication, marketing…)  _Un benchmark est un document d’analyse concurrentielle comportant plusieurs critères de différenciation tels que le_ [_design_](/fr/prestations/ux-design)_, l’ergonomie mais aussi l’architecture en présentant tous les points positifs et points d’amélioration de leurs sites web, e-commerce ou encore identité visuelle._ Nous vous partageons un exemple d’une planche benchmark de logotypes concurrents dans le domaine du covoiturage/taxi :  ![planche de benchmark de logos](images/planche-benchmark-logotypes.png) Cette étape de benchmarking est à prioriser avant le moodboard et la [charte graphique](/fr/prestations/ux-design), car grâce à cette étude graphique, vous serez en mesure de vous diriger vers votre identité visuelle finale, la rendant unique. Comment se présente cette planche benchmark ? J’ai, dans un premier temps, recensé tous les potentiels concurrents dans le domaine du covoiturage, j’importe leurs logotypes et leurs couleurs en les mettant en évidence sur mon fichier.  Ensuite, je reprends la gamme chromatique de chaque marque. Je constate que les couleurs les plus présentes et pertinentes sont le bleu (technologie, responsabilité, confiance) et le vert (écologie, partage, environnement.) ### Dois-je donc partir sur une de ces deux couleurs ? La réponse est non, mais toutefois, si tel est votre choix, il n’y a rien de contraignant. L’idée de cet exercice est de pouvoir comparer vos concurrents, et vous différencier de ceux-ci. À partir du moment où vous savez expliquer, le pourquoi du comment, et vos différentes intentions graphiques en matière de couleurs, tout vous est permis. Ensuite, je remarque que tous les logotypes importés sont différents de par leur représentation, mais ce que nous pouvons remarquer c’est que dans la globalité, les formes sont plutôt arrondies.  Enfin, j’analyse leur typographie qui sont aussi différentes, nous retrouvons des polices plus droites tandis que d’autres sont plus arrondies. À savoir que créer un contraste entre la forme de l’icône et de la typographie est intéressant. Comme l’exemple du logo d’Uber. ### Le logo Uber contrasté : - Carré avec des arrondies - Typographie strict et droite ![logo uber](images/logo-uber-1024x1024.png) ## 3\. Créer un moodboard  Par ailleurs, avant toute création graphique, je vous invite à composer un [moodboard](/fr/prestations/ux-design) (planche d’ambiance), afin de réunir toutes vos inspirations graphiques/inspirationnelles et de trouver une atmosphère/ambiance homogène à votre moodboard.  ### Mais que trouvons-nous dans notre moodboard ? - Logotypes inspirationnels - Typographies - Couleurs - Interfaces / sites dans une ambiance similaire Voici un exemple de moodboard créé pour l’[application open source Start UI](https://start-ui.com/) :  ![moodboard start ui](images/moodboard-start-ui-1024x647.jpeg) Enfin, il faut que vous voyez cette planche comme les prémices de votre identité visuelle, c’est une étape indispensable dans la création de celle-ci. ## 4\. Le choix du logo ### L’utilisation du logo dans le marketing  Cette partie est sans doute l’une des plus importantes dans la création de votre identité de marque. Pourquoi ?  Le logo est la représentation graphique de votre entreprise, comme vous l’aurez compris, le logo doit attirer, séduire tout en captivant vos consommateurs. Le logo représente l’image de votre entreprise sur tous les outils et supports incluant votre branding (réseaux sociaux, affiche, carte de visite, site internet, produits…). Il est donc logique qu’il fasse partie intégrante de votre stratégie marketing afin de véhiculer votre image à vos clients et votre public cible.  Mais aussi, vous démarquer de la concurrence, en véhiculant vos valeurs, valorisant votre image ou encore en transmettant un message. Vous devrez connaître votre ADN de marque, votre plus-value par rapport à la concurrence mais aussi vers quelle branche de l’arbre vous voulez vous situer. _De nos jours, le logo est un moyen de communication et d’identification indispensable à toutes les marques et entreprises. Il aide grandement à gagner notoriété et confiance et se greffe parfaitement à une bonne stratégie de création de contenu à valeur ajoutée._ ### Les différents types de logo Aujourd’hui, il existe de nombreux types de logo : ![logo kfc](images/logo-kfc-1024x1024.png) **Mascottes** : Illustration simplifiée dans un style cartoon et dessiné. On les retrouve dans la restauration rapide, mais aussi dans le domaine du sport ou e-sport. ![logo warner bros](images/logo-warner-bros.png) \***\*Monogrammes** :\*\* Composé uniquement de lettres. Par exemple, les marques de luxe se sont très bien appropriées ce style de logo. Mais aussi, des entreprises internationales comme LG ou encore la marque de vêtement NY. ![logo whatsapp](images/logo-whatsapp-1024x1024.png) \***\*Pictogrammes** :\*\* Représentation du logo en iconographie, l’intérêt est que la marque soit facilement reconnaissable par ses consommateurs. À savoir que l’icône peut représenter le nom de l’entreprise, son produit, sa mission. Ce style de logo est utilisé par Apple, Whatsapp, Twitter, Snapchat… ![logo nike](images/logo-nike.png) \***\*Abstrait** :\*\* Les logos abstraits sont une sous-catégorie des logos pictographiques. On remplace l’image propre par une forme abstraite. La force de ce type de logo est qu’il permet de représenter toutes les valeurs d’une entreprise / marque en une seule image. Des grandes marques telles que Pepsi, Microsoft ou encore Airbnb utilisent ce style de logos. ![logo google](images/logo-google-1024x576.png) **Mots-symboles** : Comme vous avez pu le remarquer, les logos mots-symboles sont très similaires aux logos monogrammes, leur différence est que l’un est simplifié et l’autre est affiché au complet. À savoir que les entreprises qui utilisent ce style de logo ont des noms courts. Par exemple : Ebay, Disney, Sony ou encore Google. ![logo porsche](images/logo-porsche.png) \***\*Emblème** :\*\* Pour finir, le dernier type de logo est l’emblème, on retrouve dans ces logos une apparence traditionnelle, ancienne lui donnant une certaine authenticité. Ce style est très populaire pour le domaine de l’automobile mais aussi pour les écoles supérieures ou encore les institutions gouvernementales. Nous retrouvons les marques comme Porsche, Harley Davidson, Starbucks, Harvard utilisant ce style de logo. ### Quelles sont les clés pour créer un logo pertinent et efficace ? C’est une grande question pour une réponse courte…  Il n’y a pas besoin d’être un Designer de renom pour créer “LE” logo de demain. Il vous suffit de prendre connaissance des bons ingrédients pour réussir votre recette.  On doit retrouver dans votre logo de la simplicité afin qu’on puisse l’identifier et facilement le mémoriser. De plus, on doit ressentir votre ADN en le rendant authentique et unique. Mais aussi, il doit attirer les regards, notamment par ses couleurs. Enfin, votre logo doit être durable dans le temps, il doit être intemporel. La forme du logo joue aussi un rôle clé dans sa conception. Pour aller plus loin je vous conseille [cet article](https://99designs.fr/blog/conseils-design/signification-des-differentes-formes-de-logo/#:~:text=Les%20cercles%2C%20les%20ellipses%20et,autant%20plus%20chaleureux%20et%20inclusifs) qui aborde la signification des différentes formes de logo. Accompagné d’un slogan percutant, le logo vous permettra de véhiculer rapidement l’image de marque de votre entreprise auprès de votre audience cible. ## 5\. Choisir une typographie Dans le monde du numérique, il existe plusieurs styles de typographies, mais le plus répandu dans le web est le “sans sérif” ou “linéales.” C’est pourquoi, on se focalisera sur celui-ci. ![police sans serif vs serif](images/police-sans-serif-1024x768.png) ​​Modernes et élégantes, elles sont les polices standards de notre époque. Leurs particularités sont qu’elles ne possèdent pas d’empattement. ### Pourquoi choisir sans sérif plutôt que sérif ? À vrai dire, c’est un choix plus économique, efficace mais aussi propre, donc on aura plus à se soucier de la lisibilité de nos lettres selon leur gamme de taille. À savoir qu’elles sont utilisées à 90% par les marques pour leur logo ou encore leur site. Quelques exemples de typographiques sans-sérif fonctionnant très bien :  - Inter - Roboto - Rubik - Helvetica - Barlow ## 6\. Le choix des couleurs Le choix des couleurs est une étape importante dans la création de votre identité visuelle, car vos couleurs soutiendront vos choix, les valeurs et l’ADN de votre marque, Dans cette partie, nous verrons quelles couleurs correspondent à quel secteur d’activité. Car oui, des domaines se sont appropriés des couleurs pour spécifier leur activité. Après ce court chapitre, vous comprendrez mieux les choix des marques. ### Le bleu Le bleu signifie le calme, la confiance, la responsabilité mais aussi la communication. Il est souvent approprié aux domaines de l’assurance, du médical et de la technologie. #### Quelques exemples de marques utilisant le bleu dans leur logo ![comparaison de logos bleus](images/comparaison-logos-bleus.jpeg) ### Le rouge Le rouge est une couleur particulière dans le monde du marketing, car elle signifie l’amour et la vie mais aussi le danger ce qui est assez paradoxal. Elle est appropriée dans les domaines de l’humanitaire, l’alimentaire, la restauration, les médias. #### Quelques exemples de marques utilisant le rouge dans leur logo ![comparaison de logos rouges](images/comparaison-logos-rouges.jpeg) ### Le jaune Le jaune est connu pour son dynanisme, et son énergie. C’est pourquoi il représente, la jeunesse, la joie mais aussi la tromperie et le mensonge. Dans le marketing, il peut être difficile de l’utiliser, c'est-à-dire qu'il doit être utilisé à bon escient. Cette couleur est utilisée dans les domaines de l’art & culture, du voyage, de l’automobile mais aussi dans l’imprimerie ou encore le bricolage. #### Quelques exemples de marques utilisant le jaune dans leur logo ![comparaison de logos jaunes](images/comparaison-logos-jaunes.jpeg) ### Le vert Le vert est une couleur très utilisée dans le monde de la banque mais aussi dans le monde pharmaceutique. Il représente l'évolution, la richesse, la croissance et la générosité. On retrouve cette couleur dans les domaines de la médecine, de l’économie, de l’écologie. #### Quelques exemples de marques utilisant le vert dans leur logo ![comparaison de logos verts](images/comparaison-logos-verts.jpeg) ### Le violet Le violet est une couleur qui détient à la fois la chaleur du rouge mais aussi la froideur du bleu, ce qui peut rendre son usage assez difficile. Il signifie le luxe, le mystère, la spiritualité mais aussi l’arrogance. On retrouve cette couleur dans les marques de luxe, de parfumerie, joaillerie, médias, sport, technologie haut de gamme ou encore les institutions. #### Quelques exemples de marques utilisant le violet dans leur logo ![comparaison de logos violets](images/comparaison-logos-violets.jpeg) ### Le noir Le blanc comme le noir sont deux couleurs neutres. Leur simplicité et neuralité donnent à leur logo, une élégance et sobriété implacable. Le noir signifie l’élégance, l’intemporalité et la douleur. Ainsi, les grandes marques de luxe l’utilisent pour rendre leur identité de marque intemporelle. Nous retrouvons le noir dans les marques de luxe de prestige, la mode, l’hôtelerie, l’automobile, la parfumerie, la technologie, le sport… #### Quelques exemples de marques utilisant le noir dans leur logo ![comparaison de logos noirs](images/comparaison-logos-noirs.jpeg) ### Le blanc Enfin pour finir cette partie, nous parlerons du blanc, considéré comme la couleur la plus pure. Elle apportera à votre identité de marque de la douceur mais aussi de la force à vos autres couleurs en les faisant contraster. Nous retrouvons le blanc dans les secteurs du luxe, de la mode, de la santé, de l’automobile, de la communication et marketing, du mariage, de la banque ou encore dans l’événementiel. Tous les logos de marques disposent d’une version noir & blanc car elles sont indispensables dans leur communication. Si le contraste avec un fond ne fonctionne pas, alors ces variants de logos en noir ou blanc seront utilisés. ## Conclusion sur le branding identity C’est la fin de cet article sur la branding identity. Maintenant vous disposez de tous les conseils et astuces pour créer votre propre ADN.  Car aujourd’hui, il est important que chaque marque possède sa propre identité, que ce soit en ligne (site internet, produit numérique et réseaux sociaux) mais aussi en physique (affiche, carte de visite et autres supports). Nous sommes entrés dans une ère où le design/graphisme est devenu plus qu’important pour les marques.  Les consommateurs et utilisateurs accordent une grande importance à votre image visuelle, votre façon de communiquer sur les réseaux sociaux, vos packagings etc… Maintenant, qu’attendez-vous pour créer votre propre identité de marque ?  Pour en apprendre plus sur le design, on vous invite à lire nos [articles sur l’UX design](/fr/blog). On vous recommande l’[article sur la loi de proximité](/fr/blog/articles/la-loi-de-proximite) ! Pour avoir un exemple concret de branding identity, vous pouvez aussi découvrir la conception de l'identité de marque de Green Lead sur [Behance](https://www.behance.net/gallery/118561423/Green-Lead-Brand-Guidelines?tracking_source=search_projects%7Clogo%20brand). --- ### Brève 12 - Bonjour, vous connaissez Rust ? URL: https://www.bearstudio.fr/fr/blog/articles/rust Date: 2022-05-03 import { Tweet } from '@astro-community/astro-embed-twitter'; Ce titre d’article est le résumé de ce que les collègues entendent avec moi presque tous les jours : Dans cet article, je vous propose une liste de ressources pour l’apprentissage du langage [Rust](https://www.rust-lang.org/fr/). (Et non pas du jeu vidéo du même nom).  Ici, pas de Hello World, pas de cours sur les conditions, les boucles, le borrowing, le [développement back](/fr/prestations/developpement-web), mais une liste de ressources pour vous permettre d’apprendre le langage.  ## Rust, qu’est-ce que c’est ? Rust est un langage de programmation qui commence à prendre de plus en plus de place dans le monde du développement. ([C'est le deuxième langage officiel](https://lkml.org/lkml/2021/12/6/461) du [noyau Linux](/fr/blog/articles/linux-logiciels-libres-et-open-source-retrouvez-votre-liberte)). Il contient des concepts qu’il est intéressant d’aborder même si on ne développe pas avec tous les jours. Rust est très présent au niveau système et c’est pour cela qu’on retrouve beaucoup d’alternatives à des lignes de commandes classiques : [bat](https://github.com/sharkdp/bat) une alternative à la commande [cat](), [fd](https://github.com/sharkdp/fd) une alternative à [find]() etc. Rust est aussi présent côté serveur web, on retrouve une implémentation en Rust [des web services de Bitwarden](https://github.com/dani-garcia/vaultwarden) par exemple. Mais le langage ne se limite pas au backend, il permet également de faire du web assembly ou bien des interfaces graphiques comme [egui](https://github.com/emilk/egui). Les ours du BearStudio commencant à s’y intéresser de plus en plus, je me suis dis que j’allais fédérer les ressources que j’ai trouvées lors de mon apprentissage du langage (qui n’est pas terminé) dans cet article. Bonne lecture et bonne découverte de Rust ! ## Découvrir la puissance d’un langage bas niveau, avec le confort d’un langage haut niveau Pour commencer à découvrir Rust, la meilleure ressource reste la lecture du [Rust Book](https://doc.rust-lang.org/book/). En effet, celui-ci a beau être théorique, il va permettre de faire le tour des concepts de Rust avant de se lancer dans le code. Les premiers chapitres ne sont pas les plus intéressants à lire. Ils reprennent pas mal de concepts disponibles dans d’autres langages. C’est à partir du chapitre 4 sur le concept d’ownership que la lecture devient la plus captivante. Pour faire de la pratique en parallèle, je vous recommande de cloner le dépôt [rust-lang/rustlings](https://github.com/rust-lang/rustlings) et de faire les exercices au fur et à mesure. Ce projet fournit plein de petits exercices qui vont vous habituer à lire et écrire des petits bouts de code tout en suivant le Rust Book ! Si vous voulez suivre une introduction en ligne, il existe [ce cours](https://docs.microsoft.com/en-us/learn/paths/rust-first-steps) par Microsoft. Il va vous apprendre les concepts nécessaires pour créer un outil en ligne de commande. Si vous êtes prêt à payer une formation beaucoup plus poussée, il existe [rustadventure.dev](https://www.rustadventure.dev/) par Chris Biscardi.  Vous pouvez également vous entraîner sur tout plein d’exercices grâce à [https://exercism.org/](https://exercism.org/) et bénéficier de mentoring de la part de la communauté ! De plus, si vous êtes friands de l’aspect communautaire, vous pouvez rejoindre le [Discord officiel](https://discord.gg/rust-lang). La communauté est très inclusive, vous serez forcément le ou la bienvenu(e) 😊 Vous souhaitez apprendre un peu le langage sans rien installer sur votre machine ? Vous pouvez utiliser le projet [Tour of Rust](https://tourofrust.com/). Il va vous permettre d’apprendre Rust tout en développant dans votre navigateur en utilisant [le playground fourni par le langage](https://play.rust-lang.org/). Pratique ! Pour suivre ce qui se fait autour du langage, l’actualité, je conseille le très bon projet [This Week in Rust](https://twitter.com/ThisWeekInRust). Toutes les semaines, il donne tout un tas de liens et ressources pour approfondir ou découvrir de nouvelles dépendances, de nouveaux projets, etc. Pour aller plus loin, je vous conseille les articles suivants : - [https://blog.otso.fr/2021-12-05-marre-javascript-apprendre-rust](https://blog.otso.fr/2021-12-05-marre-javascript-apprendre-rust) - [https://fettblog.eu/getting-started-with-rust/](https://fettblog.eu/getting-started-with-rust/) --- ### Le peer programming, avantages, inconvénients et retour d’expérience URL: https://www.bearstudio.fr/fr/blog/articles/peer-programming Date: 2022-04-13 _Il est arrivé à tout développeur de se retrouver coincé sur un sujet et de ne pas pouvoir avancer sur une fonctionnalité ou un correctif. Même après avoir parcouru [StackOverflow](https://stackoverflow.com/) en boucle, il n’y a aucune solution en vue !_ _Avez-vous seulement demandé de l’aide à vos collègues ? Après une séance de programmation en binôme, vous réaliserez peut-être que la solution est plus proche que ce que vous pensiez._ ## Qu’est-ce que le peer programming ? ### Le concept Le peer ou pair programming est une méthode de travail où 2 développeurs travaillent en binôme sur le même ordinateur. Cette méthode est aussi connue sous d’autres noms, mais le principe est toujours le même : binômage, programmation en binôme et programmation par pairs. Les participants se répartissent entre 2 rôles; conducteur et observateur : - Celui qui a le contrôle de l’ordinateur est le conducteur de la session. C’est lui qui est chargé de modifier le code. - L’observateur a pour rôle d’identifier des erreurs possibles dans le code du conducteur, vérifier que l’implémentation est correcte et faire des propositions en cas d’erreur ou de problème. Durant la session, les rôles changent, ce qui permet aux développeurs de rester concentrés sur la tâche en cours et de progresser sur 2 niveaux : la conception du code et le repérage d’erreurs dans ce code. ![session de peer programming](images/peer-programming-1024x570.jpeg) ### Et le Mob Programming ? Le principe du mob programming est le même que pour le peer programming, mais appliqué à un groupe plus important. Dans ce cas, il y a alors un conducteur pour plusieurs observateurs. Le changement des rôles sur cette méthode est généralement moins fréquent. Elle est plus souvent utilisée pour un transfert de connaissances. ## Ok, mais ça sert à quoi ? On a donc 2 ou plusieurs développeurs qui travaillent sur le même sujet, ça c'est compris. Mais quel est l’avantage de cette technique ? ### Transmission des connaissances Avec un conducteur qui a plus d’expérience, et un observateur junior, le conducteur peut expliquer le fonctionnement du code, tout en travaillant sur une feature. De plus, quand les rôles s'échangent, le junior reçoit des conseils pour améliorer sa méthode de travail, et bénéficie d’un support vers lequel se tourner. Attention cependant à ce que la différence de niveaux entre les développeurs et la tâche sélectionnée ne soit pas trop importante. (On reparlera de ce point [un peu plus tard](#des-différences-de-niveaux) 😉) ### L’onboarding sur de nouveaux projets Quand un nouveau développeur démarre sur un projet, il met un peu de temps avant de trouver ses marques et de produire du code. En avançant en binôme avec un autre développeur expérimenté sur ce projet, le nouvel arrivant se fera aux spécificités du projet et aura pris de bonnes habitudes pour ce projet une fois qu’il sera autonome dessus. ### En cas de blocage Deux cerveaux valent mieux qu’un, surtout face à un problème ou un blocage. Si après un certain temps, la source du problème, ou une solution au problème n’est pas trouvée, c’est généralement signe qu’il faut prendre du recul sur la situation. Mais il n’est pas toujours possible de s’éloigner de l’écran pour aller se vider la tête. La meilleure chose à faire quand le temps manque est de demander de l’aide à quelqu’un qui n’a pas encore eu affaire à ce problème ou était sur un autre sujet. Il faudra alors expliquer le problème et les solutions testées dans les grandes lignes. Avec une nouvelle perspective, il est plus facile de trouver et de tester de nouvelles méthodes et d’autres solutions. ### Meilleur focus En étant plusieurs sur le même sujet, il serait facile de croire que l’attention et la concentration des participants a tendance à se dissiper. Au contraire, dans une bonne séance de peer programming, il faut savoir prendre des initiatives, faire des propositions, et rester concentré pour ne pas perdre la tâche en cours, ni se perdre dans le code écrit. ### Meilleure qualité de code Avec 2 développeurs travaillant ensemble, plus d’attention est donnée au code et aux éventuelles erreurs qui peuvent arriver. De plus, le code généré doit être compris par tous développeurs participants. Ce qui force le code à être plus explicite et plus lisible pour la majorité des développeurs. Si dans le futur, il faut revenir sur ce code, les développeurs auront alors moins de mal à le comprendre, le reprendre et le modifier. ## Une technique dont il ne faut pas abuser Malgré les avantages de cette technique, il existe des inconvénients à ne pas négliger, et auxquels il faut se préparer : ### Fatigue accrue En travaillant seul, il est possible de mettre son cerveau en autopilote, pendant que notre esprit est occupé. Mais en peer programming, il faut toujours être attentif, et participer au travail du groupe. Il faut se concentrer sur une tâche sur des périodes plus longues, et donc la fatigue survient plus vite. De plus, sans pouvoir maintenir sa concentration, il est plus difficile d’[être productif](/fr/blog/articles/vous-avez-dit-productivite), et de se retrouver frustré par la situation. Le mieux pour éviter cette situation est de prendre des pauses de façon régulière pour recharger ses batteries. ### Être interrompu par des meetings D’un autre côté, s'il y a trop de rendez-vous, de réunions et de meeting dans la journée, une session de peer programming sera trop segmentée, voire impossible. La seule façon de prévenir ce genre de problème est de planifier la séance de peer programming à l’avance, de limiter les appels à l’approche de la session de peer programming, et de prévoir si une réunion risque de déborder au-delà du temps qui lui est alloué. ### Difficile de s’accorder avec tout le monde En fonction du développeur partenaire, il peut être plus ou moins difficile de trouver une situation confortable. Que ce soit à cause de personnalités opposées ou d’approches différentes pour la résolution de problème.  Pour ne pas rester bloqué sur ce point, changer les rôles plus souvent peut aider. Il faut aussi pouvoir rester actif et prendre des initiatives en tant qu’observateur.  Pour des sessions à répétition, il est aussi possible d’organiser des debriefs et d’évaluer les sessions de peer programming. Afin de voir ce qu’il est possible d’améliorer ainsi que les changements de comportement à adopter. ### Des différences de niveaux Le peer programming permet un transfert des connaissances plus efficace. Mais il y a une condition qui s’applique pour que cette méthode fonctionne. La différence de niveau des développeurs concernés ne doit pas être trop importante. Prenons un exemple : Si un débutant [Front-end](/fr/prestations/developpement-web) faisait du peer programming avec un un expert [Back-end](/fr/prestations/developpement-web), sur une tâche complexe de back, le transfert de connaissance ne va pas marcher, ou en tout cas, sera très lent. Pour ne pas se retrouver dans ce cas de figure, il faut penser à 3 points qui doivent être respectés : - La tâche sélectionnée convient-elle à un ou plusieurs des développeurs choisis ? - Est-ce qu’un ou plusieurs des développeurs en question ont les connaissances nécessaires pour comprendre et exécuter la tâche ? - La différence de niveau entre les développeurs est-elle encore surmontable sans causer de délais ? Si la réponse à l’une des questions est “NON”, alors il y aura des problèmes. ## Conclusion Le peer ou mob programming est donc une méthode de travail où 2 ou plusieurs développeurs travaillent ensemble sur le même projet et sur le même poste. C’est une bonne méthode pour : - Introduire un développeur à un projet ou une nouvelle techno - Débloquer ou faire avancer une issue ou une feature - Améliorer la qualité de son code - Garder la concentration d’une équipe plus longtemps Mais il ne faut pas abuser de cette technique, sinon il est possible d’être plus fatigué et ne plus être en synchro avec les autres participants. De plus, sans gérer son temps efficacement, il ne reste alors plus de temps pour des meetings ou pour récupérer. ## Retour d’expérience de Yoann Fleury, développeur au BearStudio J’ai pu faire énormément de mob programming récemment pour un client et c’était vraiment très bénéfique pour tout le monde.  En effet, je venais d’arriver sur le projet et j’ai pu rapidement comprendre son architecture grâce aux explications des développeurs que j’avais en face de moi.  J’ai aussi pu rapidement partager mes connaissances en développement front car j’avais les mains sur le clavier et c’était ma mission principale de les faire monter en compétence sur du React moderne. Le legacy étant en React avec des classes et des gestions d’états un peu compliqués.  Nous avons fait ça en télétravail complet. Le client étant éparpillé entre la région parisienne et Nantes et ça s’est super bien passé.  Nous étions sur Google Meet, je partageais mon écran, et au fur et à mesure de ce que j’écrivais, je prenais le temps de leur expliquer le code ou les concepts que j’étais en train de mettre en place.  On ne faisait ça que le matin histoire de ne pas se fatiguer toute la journée. Car rester en appel toute la journée et faire du mob programming, c’est très fatiguant. Honnêtement, je recommande ce genre d’exercice pour entrer sur un projet et faire monter en compétences l’équipe. ## Sources [https://www.ionos.fr/digitalguide/sites-internet/developpement-web/pair-programming/](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/pair-programming/) [https://martinfowler.com/articles/on-pair-programming.html#Challenges](https://martinfowler.com/articles/on-pair-programming.html#Challenges) [https://www.infoq.com/articles/remote-pair-programming/](https://www.infoq.com/articles/remote-pair-programming/) [https://www.agilealliance.org/glossary/pairing/](https://www.agilealliance.org/glossary/pairing/) --- ### Comment Tailwind & NextJS ont changé la vie de Maxime et Delphin URL: https://www.bearstudio.fr/fr/blog/articles/tailwind-nextjs Date: 2022-03-28 _On a demandé à Maxime et Delphin, respectivement alternants à l’époque en UX design et en Front-end au BearStudio, de se faire la main en totale autonomie sur le site d’une amie du BS (RaCoon & Co)… Évidemment tout ne s’est pas passé comme prévu et ils en ont chi…sué !_ _Nous sommes même allés jusqu’à pousser le vice et leur demander de nous pondre un petit article sur cette expérience 😈 : enjoy!_ ## L’objectif : créer un site web en autonomie Nous devions créer une landing page pour RaCoon & Co, ce qui en soit, normalement, devait être une formalité... Raté ! Nous avons passé le double du temps imaginé (1 semaine) et nous avons rencontré 1001 problèmes (taille des images, espacements inconsistants, UX (expérience utilisateur) générale, fichiers CSS lourds car le responsive était dur à gérer, etc).  Nous finissons l’UX et le dev de cette landing page dans le délai imparti (qui au final avait été repoussé ^^) presque fiers de nous… Et prêts à présenter notre travail au reste de l'équipe. Puis, à l’occasion d’une démo interne c’est la douche froide : *“Euuuuhh vous avez passé combien de temps sur ce que vous nous présentez ? Mais les gars : il y avait beaucoup plus simple. Et notamment une solution qui vous aurait évité tous les problèmes que vous avez rencontré !  Facilitez-vous la vie bon sang !! … Et puis, tant qu’on y est, allez hop vous nous reprenez tout ça depuis le début. Et avec une deadline encore plus serrée pour le goût du challenge ! *Ça vous fera les pieds 😅 !! Mais n’oubliez pas que ce n’est pas une punition, c’est pour la bonne cause : vous former !!!_\_\_”_ ### Plan d’attaque Suite à cette démo en équipe, on nous “recommande” (on ne va pas se mentir si on ne partait pas sur ça… C’était la fin) une librairie nommée “Tailwind UI” et pour le développement : Next JS. Le principe de Tailwind UI est de composer une page à l’aide de “composants” déjà pré-créés (templates) puis de l’adapter - tout simplement - aux contenus de RaCoon & Co. *Rapidement on en profite pour vous  présenter un peu mieux ces technos puis on revient à notre histoire :*  [_Tailwind UI_](https://tailwindui.com/) _est une bibliothèque de composants créée par les développeurs de [Tailwind CSS](https://tailwindcss.com/). Les composants \_de la bibliothèque nécessitent uniquement Tailwind CSS pour fonctionner_, parfait pour un développeur web qui veut créer un site !\_ [_Next.JS_](https://nextjs.org/) **est un framework open-source utilisant la bibliothèque [React JS](https://fr.reactjs.org/) qui prend en charge [TypeScript](https://www.typescriptlang.org/), le regroupement intelligent et le préchargement de route. Il permet de faire du SSR (Server Side Rendering) ce qui permet d’avoir une app React référencée, il permet aussi de générer des pages web statiques d’une façon simple et efficace. Il est donc particulièrement adapté au développement des sites web.** ## Partie UI/UX design avec Tailwind (L’avis de Maxime, UX designer junior) Après avoir passé une semaine à maquetter le site RaCoon & Co à l’aide de Figma, j’ai rencontré de nombreux problèmes en termes d’[UX design](/fr/prestations/ux-design) (user experience) qui mettaient à mal la contrainte de temps et demandaient des modifications continues. En tant qu’UX designer junior, je suis formé à la [création d’une interface graphique centrée utilisateur](/fr/blog/articles/rex-deroulement-projet-ux-bearstudio). Je me devais donc de concevoir une interface-utilisateur qui répond aux méthodologies de l’UX ! Avant-après : Le résultat après la V1 du site RaCoon & Co est bluffant, nous avons passé 3 fois moins de temps à maquetter mais aussi à intégrer avec Delphin. Et nous avons eu un rendu, nettement plus professionnel et ergonomique. De plus, nous avions rencontré beaucoup de problèmes d’UX mais aussi graphiques sur la V1 qui ont été corrigés sur la V2, grâce à Tailwind qui met à disposition une librairie de composants ergonomiques (UX). Cela fonctionne comme le système de templating, on ajuste notre charte graphique aux composants qu’on utilise (header, hero, footer…) L’avantage ? On gagne un temps phénoménal, car on n'a plus besoin de designer/créer chaque composant un à un. ![rendu du design avec tailwind](images/rendu-design-tailwind-1024x570.png) ### Les avantages de Tailwind Selon moi, les avantages de Tailwind UI sont sa simplicité, son utilisabilité ou encore sa puissance au niveau de l’ergonomie (UX). Mais aussi au niveau de l’UI design (User interface) ! De plus, Tailwind propose une variété de composants éditables, nous donnant des variantes plus différentes les unes des autres pour concevoir une interface agréable. Enfin, sa qualité et son agilité à s’adapter dans n’importe quel contexte font sa force. ## Partie développement web sur NextJS  (L’avis de Delphin, développeur junior) Je présente avec un peu de stress, le fruit de nombreuses heures d’efforts intenses… Si on enlève les petits retours d'espacements, de couleurs, de marges, de placements etc. Les membres de l'équipe sont d'accord pour dire que la V1 reste du bon boulot.  Seulement, dans mon soucis de simplicité j'ai complexifié la tâche et j'ai “réinventé la roue” en quelque sorte. S'en est suivi une discussion très intéressante sur les choix que j'aurai pu (dû) faire et les technos (frameworks et langages) que j'aurai pu (dû) utiliser.  Ok bah let’s go : je me retrousse les manches et je vais créer une V2 de ce site avec d'autres technologies. Ce qui me permettra de monter en compétences et de voir la différence en termes de temps de développement. Pour la V2 on est parti sur du NextJS couplé à du Tailwind (comme expliqué un peu plus haut) ### Les avantages de NextJS NextJS est un framework JavaScript proche de React et beaucoup utilisé en [développement front](/fr/prestations/developpement-web) au BS. Son utilisation me permet de comprendre des concepts vitaux à mon apprentissage de React.  On peut aussi écrire du HTML dans Next grâce au JSX donc la transition est plus facile pour moi ! À cela on a ajouté Tailwind CSS qui permet, pour moi, d'être plus précis qu'avec Bootstrap et de faire plus de choses et avec la ressource Tailwind UI (déjà bien utilisée par les autres collègues du BS). Nous avons pu directement utiliser des composants qui ont amélioré la qualité et la vitesse de nos développements. Concrètement ? La deuxième version a avancé bien plus vite que la première et en à peine une semaine nous avons eu un résultat super professionnel. Aussi bien esthétiquement qu'en termes de performances (un score Google PageSpeed de 98% !!!! Quand même !! Pas mal pour le SEO ([référencement naturel](/fr/blog/articles/checklist-seo-technique)) 😉 ) ## Conclusion Ok on a travaillé deux fois et on a un peu été bousculé 😄 mais le jeu en valait clairement la chandelle. On dit qu'on apprend de ses erreurs… Nous on a surtout appris que Tailwind et Next JS c’est la vie ! --- ### Brève 11 - Versionner une entité avec JPA URL: https://www.bearstudio.fr/fr/blog/articles/versionner-entite-jpa Date: 2022-03-14 Il y a quelques semaines sur un projet [Spring Boot](https://spring.io/projects/spring-boot), j'ai eu besoin qu'une de mes entités soit versionnée pour éviter tout problème de mises à jour concurrentielles. J'ai alors découvert l'annotation `@Version` de JPA. Je profite de cette découverte pour vous la partager car elle pourrait bien vous être utile. ## Le besoin : Sur un projet **Spring Boot** donc, utilisant une base de données relationnelle (**[PostgreSQL](https://www.postgresql.org/)** par exemple), vous stockez du **contenu non formaté** (du **JSON** par exemple). À partir du moment où il y a stockage d’un contenu non formaté, il est possible que vous ayez des problèmes de versionning du contenu. ## Le versioning : Le versioning est le fait de créer une copie d’un contenu à un instant T. Ces copies, non-éditables, ainsi que le fichier courant vont former une liste, qui définit les différentes versions de votre contenu. Une version est souvent décrite de la forme `VersionMajeure.versionMineure.` ## @Version : La simple annotation `@Version` vous permettra donc de versionner automatiquement un champ d’une entité. Mais comment est-ce qu’elle fonctionne ? Le champ annoté `@Version` sera incrémenté et une condition va être ajoutée à votre demande de mise à jour afin de vérifier que l’entité n’ait pas été mise à jour parallèlement à votre demande. `VERSION = VERSION + 1 WHERE ((ID = ?) AND (VERSION = ?))` Revenons-en au besoin initial, en ajoutant l'annotation `@Version` sur le champ de votre contenu non formaté, lorsque que vous ferez une mise à jour de votre entité, la vérification ci-dessus sera effectuée. Dans le cas où votre champ a été modifié parallèlement, une `OptimisticLockException` sera lancée. Sinon le numéro de version de votre champ sera incrémenté et votre entité sera bien à jour.  Découvrez aussi l'annotation `@MockBean` dans une [autre brève](/fr/blog/articles/breve-9-mock-ou-mockbean) sur la thématique du [développement back](/fr/prestations/developpement-web). --- ### La loi de proximité URL: https://www.bearstudio.fr/fr/blog/articles/la-loi-de-proximite Date: 2021-11-29 ## Qu'est-ce que la loi de proximité en design ? La loi de proximité est une des lois de la [Gestalt](https://fr.wikipedia.org/wiki/Psychologie_de_la_forme) (théorie de la forme). Cette loi s’appuie sur la capacité qu’a le cerveau humain à regrouper automatiquement dans un seul et même ensemble les éléments proches les uns des autres. Il n’en fallait pas plus pour que les designers web, graphistes et UX/UI designers s’en emparent afin de mieux hiérarchiser, structurer et clarifier les informations d’une interface web. Cela signifie tout simplement qu’en [UX design](/fr/prestations/ux-design), il faut **réduire l’espace entre des éléments** censés appartenir au même ensemble (et vice-versa) afin que l’utilisateur puisse très rapidement faire la distinction entre les différents groupes.
![Description visuel de la loi de proximité](images/la-loi-de-proximite-intro-1024x704.png)
Ici, nous voyons que les groupes de billes sont clairement identifiables car proches les uns des autres
## À quoi sert cette loi de proximité ? L’utilité de cette loi prend tout son sens quand le designer l’utilise lors de la [réalisation d’interfaces](/fr/blog/articles/rex-deroulement-projet-ux-bearstudio). Elle permet de lier **visuellement** des éléments sémantiquement similaires. Ainsi, l’utilisateur pourra **beaucoup plus facilement** scanner les éléments de l’interface. Les objectifs finaux consistent à rendre le contenu de l’interface **plus lisible** et sa consultation plus agréable. Prenons un exemple concret pour comprendre l’utilité de cette loi. Si elle est mal appliquée, elle peut être **rédhibitoire** à l’efficacité d’une interface. Dans cette première image, nous avons une liste de produits dans laquelle **la loi de proximité** n’est pas appliquée.  ![Exemple de liste où la loi de proximité n'est pas apliquée](images/dontux.png) Dans ce grand groupe d’article d’iBanana, il est **difficile** **d’identifier** en un seul coup d'œil les **différents** **groupes** **d'éléments**. Les titres, les images et les prix **se** **mélangent** et rendent le tout **confus**, voire dans certains cas, incompréhensible. L’utilisateur finira par réussir à repérer quel titre renvoi à quelle image, quel prix renvoi à quel titre etc. Néanmoins, cela lui demandera un **effort assez conséquent**. Si toute l’interface a été créée comme ça, il sortira avec un sacré mal de tête ! Tout le but de l’**UX design** est donc de **favoriser** **l’utilisation d’un produit pour l’utilisateur**. Cela passe aussi par la **mise en forme** des éléments qui constituent une **interface**.  ## Comment appliquer la loi de proximité ? Voici la même liste de produits, mais avec une loi de proximité améliorée. Le design est plus aéré, l’utilisation des espaces blancs a été **renforcée**. Cela permet d'agrandir la place au design dans sa **t**otalité et de distinguer les éléments du même groupe. Ainsi, chaque objet de la liste est beaucoup plus identifiable et il est plus agréable de la consulter. ![Exemple de liste où la loi de proximité est apliquée](images/doux.png) Bien sûr, **la loi de proximité** ne permet pas à elle seule de designer une **interface optimisée** pour l’utilisateur. Il existe de nombreuses autres **règles**, **lois** et **tips** qui permettent de créer de “**bonnes**” interfaces “UX oriented”. Ces éléments feront sûrement l'objet d’autres articles dans le futur. ;) ## Pourquoi la loi de proximité est-elle utile pour les développeurs ? Eh oui, même les développeurs peuvent avoir recours à ce principe d’[UX/UI design](/fr/prestations/ux-design). En effet, la difficulté de retranscrire fidèlement les maquettes en code était l’un de nos **problèmes**. Le schéma classique était le suivant : le designer créait sa **[maquette](/fr/prestations/ux-design)**, son [wireframe](/fr/prestations/ux-design), son composant. Le développeur lui réalisait cet élément en code. Il fallait alors une review design **s**ystématique et nos designers relevaient souvent les mêmes problématiques et erreurs de marges, d’espacement ou autre, le plus souvent liés à la loi de proximité. Il y avait tout une phase d’allers-retours entre développeurs et designers pour que l’élément codé corresponde aux maquettes ou wireframes. En plus de devoir répéter les mêmes litanies (ce qui peut être assez agaçant à force :p), la **quantité** **de temps** passé à répéter ce processus était **monstrueuse**… Nous avons souhaité former nos développeurs ([front](/fr/prestations/developpement-web) et [back](/fr/prestations/developpement-web)) à ces **principes** afin de les **sensibiliser** aux problématiques que les UX/UI designers rencontrent dans la **création** **de wireframes** et autres **maquettes**. En effet, le **concept** de **loi de proximité** étant assez trivial et **accessible** **à tout le monde**, il permettra aux développeurs de mieux identifier tous les petits **problèmes** d’interface et de faire moins **d’erreurs** lors du développement des éléments qui composent ces dernières.  ## Quelques mots pour finir... Continuez de nous suivre pour ne pas louper les prochains articles sur **les autres lois de la Gestalt** et autres sujets design. Ces sujets sont facilement compréhensible et accessible à tous pour améliorer vos connaissances et compétences sur le sujet.  On vous conseille [l'article de Maxime sur le branding identity](/fr/blog/articles/creer-identite-marque) pour apprendre les bases de la création d'une identité de marque ! Merci d’avoir lu cet article jusqu'au bout, j'espère qu’il vous aura plu ;) --- ### Start UI URL: https://www.bearstudio.fr/fr/blog/articles/start-ui Date: 2021-11-01 Par le passé, lorsque nous utilisions des starters d'Interface Utilisateur (UI), nous nous retrouvions face au choix de la technologie la plus adaptée à nos besoins. Entre le framework UI, le client HTTP, la bibliothèque de routage, la bibliothèque de styles, la bibliothèque de formulaires, et le téléchargement de toutes les configurations et dépendances nécessaires, cela pouvait s'avérer très chronophage. Pour tout centraliser et simplifier nos choix, nous avons décidé de créer notre propre starter d'Interface Utilisateur appelé **_Start UI_**_._ ## Qu'est-ce que Start UI ? 🚀 Start UI est une collection de starters UI pensés pour le design, le web et le mobile (principalement basés sur React pour le moment) qui vous permet de démarrer facilement de nouveaux projets UI. Forts de nos nombreuses années d'expérience avec des starters et sur des projets réels allant de petites à grandes applications, les starters 🚀 Start UI sont le fruit de choix architecturaux forts et assumés. Ils sont livrés avec de nombreuses configurations (comme l'internationalisation, le mocking d'API, [Storybook](/fr/prestations/developpement-web), le thème sombre...), des composants et des interfaces d'administration utilisateur par défaut. Ces fonctionnalités permettent d'éviter la phase de mise en place et de développer rapidement les fonctionnalités spécifiques aux cas d'usage du projet. Actuellement, 🚀 Start UI est composé de 3 projets : 🚀 Start UI \[web\], 🚀 Start UI \[native\] et 🚀 Start UI \[figma\]. ### 🚀 Start UI \[web\] ... est notre starter le plus avancé, utilisable pour le [SEO](/fr/blog/articles/checklist-seo-technique) (Search Engine Optimisation), les PWA (Progressive Web Application), les SPA (Single Page Application) et le SSR (Server Side Rendering). Il est prêt pour le web et boostera la mise en place de votre projet ainsi que votre productivité tout en garantissant la qualité du code. ### 🚀 Start UI \[native\] ... est utilisé pour développer des applications mobiles. Basé sur React Native avec une stack assez différente, ce starter vous aide à publier rapidement votre application sur les Stores. ### 🚀 Start UI \[figma\] ... est un fichier Figma qui illustre ce qu'il est possible de faire avec 🚀 Start UI \[web\] et 🚀 Start UI \[native\]. Il est composé de composants (auto layout, variants, etc.) disponibles pour les développeurs dans les versions Web et Native, afin que vos designers conçoivent toujours des interfaces réalisables par les développeurs. Chez BearStudio, nous maintenons et utilisons ces 3 starters, et nos clients apprécient que nous proposions une solution pour démarrer rapidement leurs projets. Tous les développeurs à l'aise avec React peuvent commencer à utiliser 🚀 Start UI \[web\] et 🚀 Start UI \[native\] pour leurs projets, et les designers à l'aise avec Figma peuvent commencer à utiliser 🚀 Start UI \[figma\]. Les avantages des versions \[web\] et \[native\] sont : la **productivité** car vous sautez la phase de mise en place, la **qualité du code** grâce à la configuration ESLint et Prettier, et la **sécurité du code** grâce à la configuration TypeScript et aux tests. Pour 🚀 Start UI \[figma\], le principal avantage est la **productivité** car il est livré avec de nombreux composants disponibles dans les versions \[web\] et \[native\]. **Commencez à utiliser 🚀 Start UI \[web\] dès aujourd'hui grâce à la ligne de commande que nous avons développée :** `npx create-start-ui --web myApp` ([https://github.com/BearStudio/start-ui-web](https://github.com/BearStudio/start-ui-web)) **Commencez à utiliser 🚀 Start UI \[native\] dès aujourd'hui grâce à la ligne de commande que nous avons développée :** `npx create-start-ui --native myApp` ([https://github.com/BearStudio/start-ui-native](https://github.com/BearStudio/start-ui-native)) **Commencez à utiliser 🚀 Start UI \[figma\] dès aujourd'hui depuis la communauté Figma** ([https://go.bearstudio.fr/start-ui-figma](https://go.bearstudio.fr/start-ui-figma)) --- ### Un ours en finlande URL: https://www.bearstudio.fr/fr/blog/articles/un-ours-en-finlande Date: 2021-09-20 La parole est à Nathan : jeune recrue intrépide qui ne recule devant aucune frontière pour ouvrir les horizons de la tanière! ![Nathan dans la neige](images/nathan-dans-la-neige.png) ## Le pourquoi du comment “Dans le cadre de mes études en école de commerce je devais effectuer un premier stage de 3 mois. Mes critères : ni dans la finance, ni pour des missions d’audit et idéalement sur Rouen. J’ai repéré l’annonce parfaite : un stage de 3 mois chez YOOME (startup foodtech) pour du marketing. Mon stage s’étant très bien passé, j’ai directement intégré le BearStudio, partenaire de YOOME pour un stage de 6 mois. Le stage finissant en février alors que mon bail d'appartement, lui prenait fin - avant - en décembre. J’ai donc pensé au remote pour ne pas avoir à payer un appart pour deux mois (money money money) Mieux que retourner chez mes parents, j’ai décidé de suivre ma copine qui partait en échange erasmus en Finlande. En résumé: faire du remote/nomadisme digital... en profitant de son erasmus à elle (win-win non ?) le temps de finir mon stage.  FYI : Le distanciel n’étant pas une nouveauté pour l’[équipe du BearStudio](/fr/equipe) qui [compte dans ses rangs des tunisiens](/fr/blog/articles/on-a-des-developpeurs-tunisiens) mais aussi un auvergnat (à vous de voir ce qui est le plus dépaysant). Comme le BearStudio est une boîte ouverte où la confiance règne, j’ai pu m’arranger avec l’équipe en leur proposant d’essayer d’en profiter pour développer notre activité à l’international… Bref, mon aventure de 4 mois en Finlande pouvait enfin commencer !” ## La vie en Finlande “A l’arrivée, il a fallu que je m’adapte aux différences entre la France et la Finlande, notamment au très léger décalage horaire. Je commençais et terminais ma journée 1 heure plus tard (pas non plus la mer à boire).  Ce qu’il faut retenir, au delà des différences cuturelles et de style de vie, c’est que cette expérience était vraiment idéale. J’ai pu vivre avec les étudiants en Erasmus à Helsinki et j’ai donc pu découvrir la ville et la voir changer. Je l’ai vu quitter son manteau blanc (#poésie) pour laisser la place au soleil. C’est là aussi qu’on se rend compte qu’une ville peut être très différente en fonction des températures. Je suis aussi allé en excursion en Laponie pendant 2 semaines avec un groupe d’une dizaine d’étudiants (et hop un peu de ski quand même ce serait dommage de se priver !). ![chiens de traineau en finlande](images/un-ours-en-finlande-1-1024x682.jpg) À partir d'avril, j’ai multiplié les expériences de remote tout en faisant le tour des villes importantes, en passant 1 semaine à Turku, en explorant les Îles d’Aland (je travaillais dans le bateau en partant là-bas et de temps en temps sur place) pour finir par rester une semaine à Tampere : que des purs moments de bonheur à bouger et voir du pays!” ![maison sur les iles d'aland](images/iles-daland.jpg) Je recommande l’expérience: pouvoir travailler dans des endroits paradisiaques et prendre quelques jours de vacances tout en étant avec une personne chère (#canard) ## Comment s’organiser quand on travaille à distance ? À la fin de mon stage, en février, je suis passé en freelance. Ce qui m’a permis d’organiser librement mon emploi du temps, de partir en vacances quand je voulais sur les 4 mois passés en Finlande (j'ai même pris 1 mois de vacances!). Comme je pensais aussi à l’équipe, je me suis organisé avec tout le monde pour prendre des vacances au bon moment. Toujours connecté sur slack avec au moins mon téléphone et même en vacances je restais disponible en cas d’urgence… ## Quels sont les avantages de télétravailler en voyageant ? En étant dans une boîte qui te fait confiance, tu peux cumuler liberté et sécurité. Tu peux bouger partout, organiser ton temps libre comme tu veux. Tu as l’occasion de découvrir une nouvelle culture et un nouveau climat (par exemple j’avais la neige et le froid mine de rien, ça suffit pour être dépaysé). Ça permet aussi de casser la fameuse routine du métro-boulot-dodo et de la remplacer par boulot-temps libre-vacances. Tu peux être avec qui tu veux où tu veux, au lieu d’être chez toi ou au bureau.  Là-bas mon quotidien c’était de visiter des endroits magnifiques et d'assister à des aurores boréales en Laponie... J’ai eu aussi la chance de partir dans un pays où les cas de covid étaient bien plus faibles qu’en France. Donc la vie nocturne était normale (pas de couvre feu, bars ouverts…) ce qui a rendu l’expérience incroyable en cette période si particulière. ## Et les inconvénients ? Le problème quand tu es loin de ton équipe c’est que les relations sont différentes. C’est “chiant” de ne pas pouvoir voir ses collègues et c’est beaucoup moins simple de tout demander par message. Tu es obligé de faire une visio pour un petit truc que tu aurais pu aborder à la pause dej ou en te retournant sur ta chaise.  Au BearStudio il y a une très bonne ambiance et on aime bien troller. A distance ce n’est pas pareil, tu as l’impression de moins faire partie intégrante de l'équipe. Tu gardes le côté sérieux du boulot et tu perds de la fantaisie (bon on arrive quand même à passer des bons moments avec les soirées teambuilding par visio ou certains trolls dans slack).  Je pense qu’il est important de bien connaître le mindset d’une boîte avant de partir en remote. On peut prendre un exemple : si tu prends un coup de pression en présentiel, tu peux t’apercevoir rapidement qu’il n’y a pas de rancoeur derrière. La personne va continuer de déconner avec toi, alors qu’en remote la conversation va s’arrêter là et tu resteras sur une mauvaise ambiance. ## Quels conseils donnerais-tu à quelqu’un qui voudrait partir travailler à l’étranger ? Il faut vraiment avoir envie de voyager et ne pas avoir peur. Il ne faut pas hésiter à poser des questions idiotes et bien se renseigner avant de partir. Imagine : tu arrives à Dubaï sans connaître le climat. Tu vas vite être choqué quand tu vas sortir sous 45 degrés. C’est pareil pour les autres différences qu’elles soient culturelles ou autre.  Prépare toi à t’adapter à l’écosystème dans lequel tu vas atterrir. Soit prêt à faire des sacrifices, joue la team, n’aie pas peur d’être seul et surtout n’oublie pas ta boîte. Si tu peux faire tout ça, c’est grâce à elle, donc rends lui la pareille en te donnant pour elle.  ## Quels outils utilises-tu pour le remote ? [Slack](https://slack.com/intl/fr-fr/), application de messagerie très pratique pour optimiser la communication au sein de l’entreprise. Ça permet de classer les conversations et ça intègre plusieurs outils bien utiles.  [La suite Google](https://workspace.google.com/) qui inclut beaucoup d’outils très pratiques pour être connecté avec son équipe. Par exemple meet, c’est très simple d’utilisation, tu peux faire des partages d’écran en 1 clic etc. Une connexion internet stable, je pense que c’est le plus important. Il vaut mieux ne pas lésiner sur le prix de sa box ou de son forfait. Sans une bonne connexion, le remote n’est pas possible. Un bon casque/micro pour pouvoir taffer n’importe où en entendant bien et en étant bien audible. Pour le choix du pc le même principe s’applique. C’est important de choisir un pc avec un bon micro et une bonne caméra. Un téléphone qui tient la route, le téléphone t’accompagne partout, et en cas d’urgence tu n’auras pas forcément ton pc. Il faut être capable de faire 80% de ce que tu fais sur ton pc avec ton portable pour être capable de régler un problème à tout moment (certes c’est moins pratique mais possible).  Le mindset, tout le monde n’est pas capable de travailler de cette façon. Il faut être capable de se motiver tout seul, d’être efficace sans avoir quelqu’un derrière toi. Un mindset d’entrepreneur en soi. ## Une anecdote sur ton voyage ? Avant d’arriver en Laponie je me suis éclaté sur du verglas, résultat : téléphone HS. C’était plutôt handicapant pour le travail. J’ai racheté un portable et quelques semaines plus tard, j’avais un call très important. Je me suis posé au bord d’un lac, et mon nouveau téléphone a glissé dans l’eau. J’ai dû allé le chercher dans un lac gelé en sachant que je ne devais pas manquer le call. Mais -heureusement- comme j’avais pris quelque chose de résistant, il fonctionnait toujours.  ## La suite ? Aujourd’hui je suis rentré de Finlande, mais pas pour la France. Je suis actuellement à Dubaï pour une nouvelle aventure qui pourra être le sujet d’un prochain article. Affaire à suivre… --- ### Déployer une app JHipster sur Clever Cloud URL: https://www.bearstudio.fr/fr/blog/articles/deployer-app-jhipster-sur-clever-cloud Date: 2021-08-24 Cet article est la traduction française d'un tuto réalisé par [Rudy](/fr/equipe/rudy-baer), notre CTO, directement sur le [forum JHipster](https://www.jhipster.tech/clever-cloud/). ## Avant de commencer Il faut installer [Clever Cloud CLI](https://www.clever-cloud.com/doc/reference/clever-tools/getting_started/). Toutes les commandes ont leur équivalent via l'interface, mais par habitude, on préfèrera utiliser les commandes dans le terminal. Vous devez aussi [créer un compte Clever Cloud](https://api.clever-cloud.com/v2/sessions/signup) et vous connecter avec le CLI en lançant la commande `clever login`. ```bash Opening https://console.clever-cloud.com/cli-oauth?cli_version=2.7.1&cli_token=XXX in your browser to log you in… Login successful as ... ``` ## Créer une application Clever Cloud 1. Si vous utilisez Maven : `clever create --type maven [your application name]`, ou Gradle : `clever create --type gradle [your application name]`. 2. Ajoutez une base de données à votre application : `clever addon create [addon provider] [your addon name] --link [your application name]`. Liste des fournisseurs d'addons supportés : `clever addon providers` ```bash cellar-addon Cellar S3 storage S3-like online file storage web service config-provider Configuration provider Expose configuration to your applications (via environment variables) es-addon Elastic Stack Elasticsearch with Kibana and APM server as options fs-bucket FS Buckets Persistent file system for your application mongodb-addon MongoDB A noSQL document-oriented database mysql-addon MySQL An open source relational database management system postgresql-addon PostgreSQL A powerful, open source object-relational database system redis-addon Redis Redis by Clever Cloud is an in-memory key-value data store, powered by Clever Cloud ``` [Voir les addons supportés](https://www.clever-cloud.com/doc/getting-started/quickstart/#create-your-first-add-on) 3\. Configurez la variable d'environnement : `clever env set CC_PRE_RUN_HOOK "cp ./clevercloud/application-clevercloud.yml ./application-prod.yml"`. 4\. Activez le build dédié : `clever scale --build-flavor M`. ## Configurer votre application JHipster 1. Ajoutez un répertoire `clevercloud/` à votre projet 2. Créez le fichier `clevercloud/application-clevercloud.yml` pour utiliser un addon de l'environnement Clever Cloud prédéfini Avec PostgreSQL ```yaml spring: datasource: type: com.zaxxer.hikari.HikariDataSource url: jdbc:postgresql://${POSTGRESQL_ADDON_HOST}:${POSTGRESQL_ADDON_PORT}/${POSTGRESQL_ADDON_DB}?useUnicode=true&characterEncoding=utf8&useSSL=false username: ${POSTGRESQL_ADDON_USER} password: ${POSTGRESQL_ADDON_PASSWORD} hikari: maximumPoolSize: 2 ``` Avec MySQL ```yaml spring: datasource: type: com.zaxxer.hikari.HikariDataSource url: jdbc:mysql://${MYSQL_ADDON_HOST}:${MYSQL_ADDON_PORT}/${MYSQL_ADDON_DB}?useUnicode=true&characterEncoding=utf8&useSSL=false username: ${MYSQL_ADDON_USER} password: ${MYSQL_ADDON_PASSWORD} hikari: maximumPoolSize: 2 ``` Avec MongoDB ```yaml spring: data: mongodb: uri: ${MONGODB_ADDON_URI} database: ${MONGODB_ADDON_DB} ``` 3\. Ajoutez un fichier ._json_ contenant le goal suivant pour indiquer comment démarrer l'application. Pour Maven, créez un fichier `clevercloud/maven.json` et utilisez l'artifactld de votre _pom.xml_ ```json { "build": { "type": "maven", "goal": "-Pprod package -DskipTests" }, "deploy": { "jarName": "./target/[REPLACE BY ARTIFACTID]-0.0.1-SNAPSHOT.jar" } } ``` Pour Gradle, créez un fichier `clevercloud/gradle.json` et utilisez le rootProject.name _gradle.properties_. ```json { "build": { "type": "gradle", "goal": "-Pprod bootJar -x test" }, "deploy": { "jarName": "./build/libs/[REPLACE BY rootProject.name]-0.0.1-SNAPSHOT.jar" } } ``` ## Déployer votre application ### Avec CLI Vous devez commit avant de déployer : `git commit -m "Clever deploy"` Ensuite exécutez : `clever deploy` ### Avec Gitlab CI Ajoutez `$CLEVER_TOKEN` et `CLEVER_SECRET` aux variables d'environnement de Gitlab Ajoutez cette étape à votre `.gitlab-ci.yml`. ```yaml deploy-to-clever-env: stage: deploy variables: APP_NAME: [clever cloud app name] APP_ID: [clever cloud app id] script: - wget https://clever-tools.cellar.services.clever-cloud.com/releases/latest/clever-tools-latest_linux.tar.gz - tar xvzf clever-tools-latest_linux.tar.gz - ./clever-tools-latest_linux/clever login --token $CLEVER_TOKEN --secret $CLEVER_SECRET - ./clever-tools-latest_linux/clever link ${APP_ID} - ./clever-tools-latest_linux/clever deploy -a ${APP_NAME} environment: name: [env name] url: https://${APP_NAME}.cleverapps.io ``` ## Modifier la version Java Vous pouvez sélectionner la version Java (Java 11 par défaut) ```bash clever env set CC_JAVA_VERSION 12 ``` ### Plus d'informations - [Documentation Clever Cloud](https://www.clever-cloud.com/doc/) - [Déploiement Clever Cloud pour Java Maven](https://www.clever-cloud.com/doc/deploy/application/java/java-maven/) - [Déploiement Clever Cloud pour Java Gradle](https://www.clever-cloud.com/doc/deploy/application/java/java-gradle/) --- ### REX : Le déroulement d’un projet UX au BearStudio URL: https://www.bearstudio.fr/fr/blog/articles/rex-deroulement-projet-ux-bearstudio Date: 2021-07-20 ## Introduction Cela fait plusieurs fois que nous vous proposons des articles au sujet de projets menés à bien par nos développeurs. Mais au BearStudio, nous possédons aussi des designers ! Zoom sur une **mission UX design** qui nous a été confiée par **One Prepaid**, leader des solutions de plateformes transactionnelles. ## 1) Le besoin client ### Le produit En tant que **logiciel de gestion à distance des systèmes de cartes prépayées**, One Prepaid s’adresse à des enseignes proposant ce type de système de paiement (Darty, Fnac, Yves Rocher etc.). La structure fait donc face à des impératifs très précis en termes d’**expérience utilisateur**. ![Illustration isométrique du système One Prepaid](images/illustration-oneprepaid-systeme-1.png) L’interface de One Prepaid existe depuis plus de 12 ans… Il est donc nécessaire de lui donner un coup de neuf et de **remettre au centre des préoccupations le client et son expérience** de la plateforme. Vous l’aurez deviné, c’est à nous qu’ils ont fait appel ! ### Le besoin Leur demande : « redonner un coup de neuf à notre plateforme en **mettant l'expérience utilisateur au centre** de la plateforme ». D’abord, l’équipe de Stéphane Assuid (CEO de One Prepaid) nous a commandé une [charte graphique](/fr/prestations/ux-design) (guide comprenant les recommandations d’utilisation des **différents éléments graphiques** susceptibles d’apparaître sur l’ensemble des **supports de communication** d’une entreprise). Une de nos propositions retenue, ce document a ensuite servi de base à nos designers. ### L'audit UX Ensuite, on s’attelle à l’**audit UX** de la plateforme. Pour ce faire, nous respectons plusieurs étapes : - **Comprendre le sujet de la plateforme** et ses subtilités afin d’en saisir les différentes problématiques - **Réaliser des interviews** avec des utilisateurs afin de révéler les **forces et faiblesses** de la plateforme et les problèmes auxquels ils font face - Faire des **points réguliers avec les clients** et leur montrer un maximum d'éléments afin de **s’assurer qu’on avance ensemble** et dans la bonne direction - **Formuler des recommandations** et une interprétation des mesures de l’**analyse fonctionnelle** Il est ressorti de cet audit, qu’en effet, le remaniement de l’arborescence globale et des différentes fonctionnalités était important, tant pour des raisons visuelles que pratiques. L’audit est une étape cruciale dans un **projet numérique**, nous y accordons une grande importance au BearStudio. C’est d’ailleurs pour cela que nous avons mis en place des [mini-audit UX gratuits](/fr/prestations/ux-design). ## 2) Le plan d’action UX de notre équipe Lors de la première réunion avec les clients, notre équipe a pris soin de passer en revue l’intégralité des écrans en posant toutes les questions nécessaires pour bien se figurer la logique du **fonctionnement de l’interface**. Il faut savoir qu’un bon UX designer essaye toujours de **comprendre le besoin de l’utilisateur** pour partager son expérience et ainsi détecter les points forts mais aussi les faiblesses de celle-ci. ### Organisation du projet Le projet étant conséquent, nous avons décidé de le diviser en deux grandes parties. Afin d’**avancer étape par étape** et ainsi, de ne pas se perdre dans un périmètre trop grand. Nous avons donc commencé par la **conception des écrans cœurs** (les plus utilisés). L'objectif étant d’en **améliorer l’ergonomie** et de rendre le **design logique, pratique et fonctionnel**. Pour ce projet, les **écrans cœurs de fonction** correspondent à la **partie opérationnelle** comme la création des cartes prépayées. Puis nous avons travaillé sur la deuxième partie qui était plus **orientée logistique** (gestion des rapports par exemple). Attention : même en découpant le projet il est important d’avoir une compréhension globale de celui-ci. ### Feedback des clients Nous avons organisé toute une **série d’interviews** afin de récolter un maximum d’avis auprès des principaux utilisateurs de **One Prepaid** et ce en allant du **service logistique**, au **service commercial**, en passant par la **comptabilité**. L’idée est de plonger dans le quotidien de ses services pour mieux **comprendre leurs attentes et besoins** ! Les retours des clients finaux nous ont permis de sélectionner les chantiers prioritaires et de **comprendre le métier et les logiques de navigation des utilisateurs** en fonction de leur rôle. Eh oui, qui de mieux placé pour évaluer la praticité d’une application que ses utilisateurs les plus réguliers ? Ces interviews sont essentielles pour la refonte d’une plateforme ou application. **Comprendre l’utilisateur** afin de créer quelque chose qui correspond à ses **besoins**: c’est ça le cœur de l’**UX** ! ### Création des nouveaux userflows Revenons à nos moutons (_enfin nos ours_) : dans la lignée de l’**inventaire numérique** effectué en amont, notre **équipe UX** s’est focalisée sur la **[création des nouveaux userflows](/fr/blog/articles/parcours-utilisateur-ux)**. Cette pratique consiste à retracer le **parcours de l’utilisateur** de la façon la plus claire possible, en n’oubliant aucune étape. ![Illustration isométrique du parcours revendeur One Prepaid](images/oneprepaid-cartecadeau-revendeur-1.png) C’est une phase indispensable avant d’effectuer la **modélisation sous la forme de [wireframes](/fr/prestations/ux-design)**, où les problématiques de style n'entrent pas encore précisément en jeu. Les wireframes sont des **maquettes statiques** des futures pages présentes sur la plateforme et reprennent le parcours des **userflows**. C’est la dernière étape avant de proposer au client une première version de **maquettes interactives**. C’est-à-dire une simulation virtuelle permettant de faire valider les nouvelles fonctionnalités proposées et les features envisagées. Toute cette phase se réalise en **collaboration avec le client** avec lequel nous organisons des **démonstrations** et des réunions chaque semaine afin de se maintenir dans la bonne direction. Le **suivi client** est permanent et ce dernier a accès à l’avancée du projet en temps réel. Nous tenons à adopter une **méthode agile** afin de rester en phase avec la **réalité de l’expérience utilisateur**. Nous utilisons également un **environnement de test** tout au long du projet afin de reproduire les actions cœurs du métier. Le but est de s’assurer de la bonne **utilité et utilisabilité des fonctionnalités** du projet. ## 3) Les spécificités de ce projet En plus de la **refonte UX du projet**, notre équipe participe également pleinement à son **développement** et à son **déploiement**. Ce chantier comporte plusieurs caractéristiques spécifiques. Il faut dire que la présence de nombreux écrans rend le travail plus complexe mais aussi plus intéressant. Mais ce n’est pas la première fois que nos experts ont affaire à une application avec un **back-office** bien distinct de l**’interface utilisateur**. ### La sécurisation des transactions En revanche, un des aspects de ce chantier appelle à une grande vigilance de la part de nos ours : il s’agit de l’enjeu lié à la **sécurité du service** et plus précisément à la **sécurisation des transactions**. En effet, **One Prepaid** se doit de **garantir la sécurité des fonds** présents sur les cartes cadeaux des utilisateurs. ![Illustration isométrique de la plateforme EasyPrepaid](images/oneprepaid-cartecadeau-easyprepaid-1.png) Par exemple, nous ne pouvions pas envisager une fuite des numéros de carte des utilisateurs dans nos requêtes, il fallait donc penser à une méthode sécurisée. Nous avons alors utilisé un **identifiant unique** sur les cartes. Cet identifiant ne permet pas d’effectuer d’opérations mais permet au système d’effectuer une requête permettant d’accéder aux informations de **façon sécurisée**. En résumé, nous utilisons un identifiant en intermédiaire afin de ne pas afficher les éléments confidentiels. ### Maîtriser la dette technique Une autre particularité de ce chantier s’articule autour du fait que notre intervention se porte sur un service ayant déjà fait ses preuves auprès d’une communauté d’utilisateurs. D’un côté nous gagnons pas mal de temps, surtout au début, mais ça induit également un certain nombre de règles à respecter impérativement. Évidemment, les clients ont des **habitudes bien ancrées qu’il faut optimiser**. Nous devons alors penser à des petits **systèmes d’accompagnement au changement** afin de ne pas bouleverser leurs habitudes. La refonte doit être un avantage et non une contrainte pour les clients. De plus, la **refonte d’une interface utilisateur** est toujours satisfaisante car elle permet d’apprécier l’avant-après, de voir les améliorations apportées au projet. Mais il faut faire face à des **contraintes liées à la [dette technique](/fr/blog/articles/dette-technique-cout-sous-estime-des-projets-numeriques)**. En effet, le projet fonctionne bien depuis 15 ans avec des clients réguliers et un historique important. Le code déjà existant doit donc continuer d’opérer. Il faut veiller à ne pas trop s’en éloigner sans réfléchir aux conséquences, continuer à programmer autour de celui-ci. Ce qui crée un cadre parfois un peu contraignant autour du projet. ## Conclusion Ce chantier complet et complexe s’avère bénéfique pour tout le monde ! Le client est satisfait et nos experts ont l’occasion de monter davantage en compétences «sur le terrain». --- ### Comment déployer une application Sylius chez Clever Cloud ? URL: https://www.bearstudio.fr/fr/blog/articles/comment-deployer-une-application-sylius-chez-clever-cloud Date: 2021-04-14 ## De Sylius à Clever Cloud, il n'y a qu'un pas... Sylius, framework e-commerce, et Clever Cloud, spécialiste de la mise en ligne de solutions web, sont deux incontournables à découvrir pour les développeurs curieux. Tour d’horizon des outils et focus sur notre méthode de déploiement d’une application Sylius chez Clever Cloud.  ## Sylius : le framework open-source pour e-commerce Créé en 2016, [Sylius](https://sylius.com/) ne se définit pas comme une solution e-commerce mais bien comme étant un framework offrant aux développeurs **un environnement de [développement](/fr/prestations/developpement-web) solide pour la mise en place d’une solution de vente en ligne**. Sylius s’appuie notamment sur le framework PHP Symfony, pour offrir à ses utilisateurs une large possibilité d’évolutions et de fonctionnalités. Disponible en **open-source**, il permet à qui le souhaite d’en disposer (pour en savoir plus à propos de ce type de logiciel, je vous invite à lire cet [article](/fr/blog/articles/linux-logiciels-libres-et-open-source-retrouvez-votre-liberte) :) ). ## Clever Cloud : la plateforme d’automatisation pour vos projets Fondée en 2010, [Clever Cloud](https://www.clever-cloud.com/fr/) est une SSII Nantaise **spécialisée dans le cloud computing**. La plateforme a pour but de simplifier la mise en ligne de solutions web, du déploiement jusqu’à l’hébergement. Clever Cloud propose un service complet qui permet aux entreprises de déployer sans avoir à gérer un serveur web.  ## Déployer son projet Sylius avec Clever Cloud, vu par BearStudio Plusieurs possibilités sont envisageables pour déployer votre projet Sylius avec Clever Cloud. Dans cet article, nous décrirons pas à pas comment nous nous y sommes pris pour le déploiement et les méthodes utilisées. Vous pouvez ensuite **les adapter comme vous le souhaitez à votre projet**. Nous parlerons également régulièrement du terminal et des commandes utilisées, mais là encore vous pouvez opter pour une interface graphique afin de réaliser ces étapes. N'hésitez pas à nous partager vos tips à ce sujet via les réseaux sociaux ! ## Comment générer le projet Sylius ? Pour générer votre premier projet Sylius, rien de mieux que de prendre en livre de chevet la [documentation disponible en ligne](https://docs.sylius.com/en/latest/book/installation/installation.html). Celle-ci est assez complète et vous aidera à créer votre premier projet étape par étape. Pour vous faire **gagner un peu de temps**, sachez que la ligne de commande suivante vous permettra de créer votre projet avec la version de Sylius que nous avons utilisée, avec la création du dossier _MyFirstShop_ pour l’hébergement en local du projet.  Assurez vous de disposer de la version 2 de Composer (`composer -v`) et de PHP version 7.4 (`php -v`). `composer create-project sylius/sylius-standard MyFirstShop` Par la suite il vous faudra créer un nouveau dépôt Git via la commande `git init` afin de push vers Gitlab ou Github (découvrez ici le [git de survie](/fr/blog/articles/git) du BS). Après cette installation, nous vous invitons à poster le projet sur [GitLab](https://about.gitlab.com/) pour pouvoir paramétrer l’intégration continue _(Continuous Integration)_, ce qui permettra, selon sa configuration, de déployer automatiquement votre code vers votre application Clever. ## Créer son application sur Clever Cloud Il est maintenant temps de créer votre application sur Clever Cloud. Là encore, **le site officiel propose un très bon tutoriel** pour vous permettre de déployer votre [projet Symfony sur les services de Clever Cloud](https://www.clever-cloud.com/doc/php/tutorial-symfony/). En quelques mots, via l’interface de Clever Cloud, il vous faudra choisir la création d’une nouvelle application et choisir PHP comme type de projet. Vous devez opter pour le type Git afin de faire le lien avec ce qui a précédemment été mis sur GitLab. Optez ensuite pour une instance XS et nommez votre application _MyFirstShop_. Dans un second temps, vous devez **ajouter un addon de base de données pour compléter votre application** et permettre son bon fonctionnement. Par défaut, Sylius est configuré avec MySQL mais vous pouvez utiliser PostgreSQL en modifiant le fichier `config/package/prod/doctrine.yml`. Sélectionnez le plan DEV et nommez votre addon _MyFirstShop-db_. Nous choisissons ensuite une version de PHP pour le projet, nous optons au minima pour une version 7.4. Vous vous retrouvez alors sur le formulaire des variables d'environnement de votre application. Dans un premier temps, modifiez uniquement celle nommée `CC_PHP_VERSION` en lui attribuant la valeur `7.4`. Pour associer son code à l’application de Clever, si vous êtes plutôt un adepte des lignes de commande, utilisez le [Clever CLI](http://clever-cloud.com/doc/clever-tools/getting_started/). Créez l’app `clever create --type php MyFirstShop` Créez l’addon relié a l’app `clever addon create mysql-addon MyFirstShop-db --link MyFirstShop` ## Paramétrer son application Sylius chez Clever Cloud Pour paramétrer notre application, nous devons activer le _build_ sur une instance dédiée. Rendez-vous dans le menu _Information_, dans la section _Application edition_ : ![Menu d'activation du build d'une instance dédiée de son application Sylius chez Clever Cloud](images/image-8-1024x109.png) Ou via le CLI _`` `clever scale --build-flavor M` ``_ Et ajoutez les variables d’environnement suivantes : `APP_DEBUG = 0 (ou 1 si vous voulez activer le mode debug) APP_ENV = prod (ou dev) APP_SECRET = ThisTokenIsNotSoSecretChangeIt CC_WEBROOT = /public MAILER_URL = smtp://localhost DATABASE_URL = contenu de MYSQL_ADDON_URI` Attention pour “DATABASE_URL”, il est nécessaire de prendre le contenu de la variable MYSQL_ADDON_URI qui a été automatiquement ajoutée. Dans le tutoriel de Clever, il y a une coquille puisque `DATABASE_URL = $MYSQL_ADDON_URI` ne fonctionne pas. Pour builder le front, il faut ajouter la variable `CC_POST_BUILD_HOOK = yarn install && yarn build`. Ne pas oublier de cliquer sur _Update changes_, et ensuite _Restart the app to apply changes_ : ![Ensemble des variables environnements définies pour le fonctionnement du projet](images/image-2-1024x486.png) Cette configuration est également possible via le CLI : `clever env set APP_DEBUG O clever env set APP_ENV prod clever env set APP_SECRET ThisTokenIsNotSoSecretChangeIt clever env set CC_WEBROOT /public clever env set MAILER_URL smtp://localhost clever env set DATABASE_URL  [contenu de $MYSQL_ADDON_URI] clever env set CC_POST_BUILD_HOOK "yarn install && yarn build"` Ne pas oublier de _commit_ les modifications pour pouvoir _push_ l’application sur Clever Cloud. Maintenant que tout est prêt, il faut _push_ l’application depuis Clever directement. Pour cela, dans le terminal, il faut lancer la commande `clever deploy`. Ensuite, si vous avez créé votre application via la Console Clever, il vous faut **lier votre application en local** à l'aide de `clever link ` avec `` ayant pour valeur l'id de votre application, renseigné dans _Information > Application information_. ![Retour de la commande `clever deploy` dans un terminal](images/image-7.png) Après cette première étape, il faut **initialiser la base de données**. Depuis le terminal, lancez la commande `clever ssh`, ce qui vous permet d'accéder à la VM sur laquelle est déployée l'app : ![Retour de la commande `clever ssh` dans un terminal](images/image-6.png) On descend alors dans le dossier présent et on lance la commande suivante. `php bin/console doctrine:schema:update --force --env=prod` ![Retour de la commande `php bin/console doctrine:schema:update --force --env=prod` dans un terminal](images/image-4-1024x230.png) Pour initialiser la base avec les données injectées par Sylius. `` `php bin/console sylius:fixtures:load --env=prod` `` ![Retour de la commande `php bin/console sylius:fixtures:load --env=prod` dans un terminal](images/image-5-1024x204.png) `exit` pour quitter la VM puis `clever open` pour ouvrir l’application dans votre navigateur. Et si ça fonctionne : ![Page du site généré](images/image-2-1024x490.png) Et voilà, vous savez tout sur le déploiement d'une application avec Sylius via Clever Cloud ! À très vite pour de nouvelles explications ;) --- ### Brève 10 : Bataille du Cloud, quelles sont les alternatives françaises ? URL: https://www.bearstudio.fr/fr/blog/articles/breve-10-bataille-du-cloud-les-alternatives-francaises Date: 2021-03-31 ## Aux origines de la bataille du Cloud... Depuis plusieurs mois on entend parler de “bataille du cloud”, bataille qu’on aurait d’ailleurs perdue en Europe face aux **géants américains**. https://twitter.com/guillaumgrallet/status/1305562052853981187?s=20 Est-ce vrai ? N’avons-nous pas d’acteurs français ou européens capables de rivaliser avec les géants du cloud actuels ? Ne pouvons-nous pas héberger nos applications et services web aussi complexes soient-ils grâce à des services européens ? Bien sûr que nous avons des alternatives. Vous pouvez héberger votre application en Europe ou en France grâce à des acteurs européens. ### **Quelles sont les alternatives françaises/européennes pour le cloud ?** [OVHCloud](https://www.ovhcom/fr/) est un hébergeur français qui propose de multiples services allant de la simple réservation d’un nom de domaine jusqu’à la location de serveurs dédiés. [Clever Cloud](https://www.clever-cloud.com/en/) est une entreprise française qui propose un **service** **Paas** (Platform As A Service) pour déployer simplement des applications dans le cloud. Ce sont 2 acteurs avec qui nous avons l’habitude de travailler au BearStudio pour héberger les applications de nos clients. ### **Pourquoi les services proposés par ces acteurs sont finalement plus intéressants ?** - **Le support** Le support client est plus facilement accessible sur ces plateformes et aussi souvent de bien meilleure qualité. Avec **[Clever Cloud](/fr/blog/articles/deployer-app-jhipster-sur-clever-cloud)** par exemple, vous pouvez parler directement à une personne de leur équipe quand vous le souhaitez. En tant que développeur, cela a une vraie valeur ajoutée, vous échangez avec quelqu’un qui comprend vos problématiques techniques et qui vous propose des [solutions adaptées](/fr/prestations). - **La RGPD** Nouveau paramètre à prendre en compte depuis peu : les règles RGPD et notamment celles vis-à-vis de l’hébergement des données de votre application. Avec des services cloud européens, le respect de ces règles est plus simple et vous garantissez à vos clients que leurs données seront **protégées par la législation européenne**. (Pour estimer l’impact de l’hébergement des données hors UE : [https://www.cnil.fr/fr/transferer-des-donnees-hors-de-lue](https://www.cnil.fr/fr/transferer-des-donnees-hors-de-lue)) Enfin, les solutions qu’ils proposent n’ont rien à envier à leurs concurrents américains. Ils en proposent moins certes, mais elles sont de bonne qualité et répondront dans la plupart des cas à vos problématiques. Elles sont même parfois plus simples à utiliser et à mettre en place que celles des plateformes des géants du cloud. --- ### Cap sur l'international pour le BearStudio ! URL: https://www.bearstudio.fr/fr/blog/articles/cap-sur-linternational-pour-le-bearstudio Date: 2021-03-23 ## Intro... Le 22 octobre, notre CEO/CTO [Rudy Baer](/fr/equipe/rudy-baer) s'est rendu à Dubaï pour voir un client sur place. Après quelques échanges, il a eu vent d’**un événement autour de la tech : le salon [Gitex Future Stars](https://www.gitexfuturestars.com) !** L’ambiance cosmopolite était au rendez-vous, avec beaucoup de nationalités différentes. Ça faisait vraiment plaisir de peser l’attractivité de ce salon. Il n'en a pas fallu plus pour planifier la venue d’une partie de [l’équipe](/fr/equipe) à l'occasion de cet événement du 6 au 10 décembre 2020... Pendant un mois, tout le monde au bureau était sur le pont ! Il fallait produire les contenus nécessaires en prévision du salon, tels que la plaquette commerciale ou encore la version anglaise de notre site web. De plus, comme cet événement n’était pas prévu initialement, nous avons dû “rusher” pour imaginer l'ensemble des supports de communication, les goodies, etc. **Plus de 700 startups venues du monde entier** avaient fait le déplacement pour cette **40ème édition** ! Au programme : 4 jours de rencontres, d'expositions, de conférences… Autant d’opportunités de réseauter, et surtout _“let’s do business again”_ ! ## Le contexte En plus de rendre visite à un de nos clients, nous souhaitions tester le marché sur place afin de savoir si nous pouvions démarcher d’autres prospects. Le salon nous a fourni cette aubaine, les personnes présentes voulaient toutes reprendre les affaires.  Notre stand était installé sous le **pavillon bleu-blanc-rouge**. Grâce à [Business France](https://www.businessfrance.fr), nous bénéficiions ainsi d'une place de choix aux côtés d'autres jeunes entreprises françaises en devenir. Il faut savoir que le Gitex était le seul événement à regrouper autant de personnes en "physique" malgré la crise sanitaire. A ce propos, les mesures de sécurité étaient impressionnantes ! Des armées d’individus désinfectaient chaque centimètre carré du salon toutes les 10 secondes. Pour nous, **le salon a été une réelle opportunité :** les exposants proposaient pour la grande majorité des produits numériques que nous pouvions développer. C'était donc assez plaisant d’aller à la rencontre d'autres entrepreneurs pour leur présenter l'aide qu'on pourrait leur apporter en fonction de leurs problématiques propres. On sentait une certaine concurrence avec le trust indien qui propose les mêmes services que nous (sur le papier) pour un coût dérisoire. Mais ça ne nous a pas franchement embêtés. Les clients qui sont passés nous voir connaissaient bien le _“you get what you paid for”_. 
![Rudy Baer présentant le stand du Bearstudio sur le salon Gitex Future Stars](images/stand.jpeg)
Rudy discutant avec l'ambassadeur de France devant notre stand
## Nos projets Par la suite, nous avons (pas mal) réfléchi à ce que nous allions faire aux EAU dans un avenir proche. Nous avons prévu d'y retourner dès que la situation sanitaire nous le permettra, pour concrétiser certains potentiels contrats. Ensuite, nous aimerions **essayer de nous implanter sur place**. Pour ce faire, nous allons envoyer deux juniors à Dubaï pour une durée d’au moins un an. D'abord un développeur, Deelan, puis un commercial, Nathan. Dans le cadre d’un Volontariat International en Entreprise (VIE).  **Ce pays est très ouvert à l’entrepreneuriat**, il y a beaucoup de personnes qui ont des idées de projet que nous pouvons réaliser ! C’est la définition de ce qu’on appelle _“\_l_and of opportunities”_ et nous comptons bien ne pas laisser passer notre chance 😉 ## Témoignages ### Nathan J’ai passé un très bon moment à Dubaï. Je suis d'autant plus reconnaissant envers le BearStudio car j'ai eu l’occasion de participer à cet event alors que je ne suis qu’un “stagiaire”. Ça a aussi été le début de la transition entre mon stage initialement intitulé "marketing/communication" vers des missions plus axées sur la partie commerce. Je me suis donné à fond pour parler à des gens et essayer de trouver des prospects. Et j’ai vraiment hâte de pouvoir en faire plus ! ### Claire J’ai eu l’opportunité d’aller à Dubaï deux fois durant l’année 2020. Mon rôle de support pendant ces voyages m’a permis d’apprendre à beaucoup mieux connaître mes collègues. Dubaï est une ville hypnotisante et contradictoire par certains de ses aspects, nous y avons passé de bonnes soirées ensemble et échangé avec d’autre français présents sur place.  Notre présence sur le GITEX nous a permis d’éprouver **notre stratégie d’expansion à l’international** et de mieux connaître les travaux de nos collègues. ### [Nicolas](/fr/equipe/nicolas-torion) Tout d'abord, Dubaï est une ville incroyable par sa démesure et c'est une destination incontournable pour le business à l'international. Ça a été un réel plaisir de pouvoir y aller avec le BearStudio. D'autant plus que j'ai vu le studio évoluer étape par étape, passant du réseau régional Normand à l'international. Le salon GITEX fut une expérience très enrichissante pour nous tous car cela nous a permis de découvrir le marché numérique à l'international et de **mettre en avant notre savoir-faire.** ### Philippe (Tic) Dubaï était une super expérience ! J’ai été très surpris du voyage : la ville est immense et agréable, tout le monde est très respectueux et gentil. Le salon GITEX était une très bonne découverte, beaucoup de relations intéressantes et un aspect commerce qu’en tant que développeur je ne connaissais pas vraiment ! J’ai beaucoup appris sur ce sujet et je pense que cela sera bénéfique pour le BearStudio comme pour nous personnellement. ## Conclusion Bien sûr, **nous comptons y retourner pour la prochaine [tech week](https://www.gitex.com/) :** du 17 au 21 octobre 2021. Mais rassurez-vous : nous tenons à rester fidèles à notre ligne de conduite et n'allons en aucun cas privilégier le business là-bas au détriment de celui en France 🇫🇷 D'autre part, ce genre de projet est extrêmement bon pour le **Team** **Building**. Eh oui, des voyages d'affaires de ce genre nouent des liens étroits entre les membres d’une bonne équipe ! Pour retrouver tous nos déplacements, je vous invite d'ailleurs à lire [cet article](/fr/blog/articles/traveledmap-outil-indispensable-pour-vos-photos-de-voyage). **Auteur :** [Nathan Lesouef](https://www.linkedin.com/in/nathan-lesouef/) --- ### Brève 9 : @Mock ou @MockBean, quelle différence ? URL: https://www.bearstudio.fr/fr/blog/articles/breve-9-mock-ou-mockbean Date: 2021-03-15 Il y a quelques jours, j’ai onboardé un nouveau développeur sur un projet Spring Boot qui a un coverage de test à 80%. N’ayant pas énormément d’expérience avec les tests d’[intégration](/fr/prestations), j’ai pris le temps de lui expliquer la différence entre l’annotation @Mock de Mockito et @MockBean de [Spring Boot](/fr/blog/articles/versionner-entite-jpa), je vais donc en profiter pour résumer ça dans une brève. Que ce soit @Mock ou @MockBean, les deux annotations permettent de mocker le comportement de vos services ou composants Spring. _**Note :**_ Mocker, c’est _faker_ le comportement d’un service afin de borner le scope du test que vous réalisez. Par exemple, si vous testez le OrderService, qui a pour dépendance le PaymentService (qui fait appel à une librairie externe comme Stripe), vous pouvez mocker le comportement du PaymentService pour ne pas avoir à le tester en même temps que le OrderService (et aussi, parce que vous ne pouvez pas vous permettre de requêter votre librairie externe pendant vos tests). Donc, @Mock et @MockBean permettent de mocker, mais dans deux contextes différents. Pour faire simple, je vais être réducteur et dire que **@Mock permet de mocker une dépendance dans le cadre d’un test unitaire alors que @MockBean permet de mocker une dépendance dans le cadre d’un test d’intégration.** ## **Mock** Disons que vous testiez unitairement la méthode _order_ de l’OrderService qui permet de passer une commande. Voilà à quoi ressemblerait le setup de votre test : ![Setup d'un test unitaire de la méthode order](images/code-1-847x1024.png) Dans un test unitaire, on _instancie_ nous même le service qu’on teste, grâce à son constructeur, ce qui nous permet de lui donner ses dépendances qu’on a mocké. C’est le cas simple, et on peut se servir du mock dans le test pour définir le comportement que la méthode doit avoir. ## **MockBean** Disons maintenant que vous testiez la méthode _order_ de l’OrderService dans le cadre d’un test d’intégration, voilà globalement à quoi ressemblerait le setup de votre test : ![Setup d'un test d'intégration de la méthode order](images/code-2-949x1024.png) Ici, on voit bien que ce n’est pas nous qui créons l’instance de notre service (il n’y a pas de new OrderService()). C’est **Spring** qui va chercher à l’instancier lors du lancement de l’application de test. Par conséquent, **comment faire pour dire à Spring que nous souhaitons utiliser un mock**, et non une vraie instance du service ? Eh bien c’est aussi simple que d’annoter le service par @MockBean, qui est une annotation fournie par [Spring](https://spring.io), et qui va demander à Spring d’instancier l’OrderService en lui donnant notre mock. Pour tout savoir sur Java, je vous invite à lire notre [toute première brève](/fr/blog/articles/breve-1-rendre-une-methode-atomique-en-java-en-2-minutes). --- ### Coming-out : on a des développeurs tunisiens URL: https://www.bearstudio.fr/fr/blog/articles/on-a-des-developpeurs-tunisiens Date: 2021-03-08 _Note : l'écriture de l’article a commencé avant la pandémie mondiale. Si seulement je m’étais bougé pour le sortir avant… j’aurais été tellement visionnaire !_ Bon ce n’est pas un vrai coming-out car on l’a toujours assumé. On a juste jamais pris le temps de communiquer là-dessus. En plus, un bon titre putaclic c’est toujours bon pour le taux d’engagement 🤪. Alors voilà : depuis 2 ans, certains de nos développeurs travaillent en Tunisie. ## Remote VS Outsourcing En théorie, le remote c'est du télé-travail au sens où les salariés concernés travaillent hors des locaux de l'entreprise, tandis que l'outsourcing consiste à externaliser certaines tâches auprès d'un prestataire spécialisé. Mais les gens voient généralement ça un peu différemment : le **remote** revient grosso modo à embaucher des développeurs à distance pour éviter de payer un bureau ou parce qu’ils sont suffisamment en position de force pour se permettre de travailler de chez eux. De même, l'**outsourcing** est perçu comme un moyen de faire travailler des esclaves gens moins "compétents" et chers que les français qu’on peut jeter quand on veut. Cette vision peut d'ailleurs être transposée aux développeurs français par rapport aux managers ou _serial success_ entrepreneurs 18.0 avec un mental de winner ! ## La réalité du marché Dans le milieu du développement, l’avenir c’est le remote ! Entendons-nous bien, ce n’est pas une philosophie ou un choix, c’est le marché qui est comme ça. A partir de là, il faut s’y préparer. Le problème c’est qu’un mauvais recrutement peut être fatal et que ça coûte cher… De la même manière qu’[au démarrage du BearStudio](/fr/blog/articles/rex-4-ans-entrepreneuriat-au-bearstudio), plutôt que de me battre sur une envolée de salaires pour des développeurs toujours plus exigeants mais pas forcément plus compétents (voire même nuls et surcotés... je ferai un papier là-dessus un de ces quatre…) j’ai choisi de **créer de la valeur avec des gens qui en ont envie** et besoin ! **Donc si on essaye d’analyser ça mathématiquement :** ![Équation BearStudio : salaires tunisiens bas + respect des devs + culture d'entreprise forte = meilleur taux de succès](images/image-1024x304-1.png) On a beau être une boîte atypique, on reste fragile financièrement, on ne peut pas se permettre d'échouer dans nos expérimentations ! ## Pourquoi la Tunisie ? Il faut bien commencer quelque part et dans ces moments-là on fait avec ce qu’on a. ### Raisons perso Il se trouve que la moitié de ma famille est tunisienne et que je connais un peu là-bas. En plus j’ai 2 petit neveux que je vois trop rarement. Je ne vais pas vous sortir la carte de l’entrepreneur trop occupé pour sa famille c’est des conneries pour se donner bonne conscience. En revanche, rapprocher mon business et ma famille éloignée me donne plus d’opportunités de les voir. ### Raisons pro Il y a des bons ingénieurs là-bas, et une certaine proximité avec la France. C’est aussi un pays qui essaye de sortir d’une crise. En plus, on propose une offre différente de la concurrence. ## L'historique des recrutements Actuellement nous avons 3 développeurs tunisiens. Amine a été le premier à me suivre dans l’aventure. Je l’ai rencontré grâce à un [espace de co-working](https://cozi.tn) à Djerba et il a prononcé quelques mots magiques :  - “[Jhipster](https://www.jhipster.tech)” : beaucoup connaissent la relation particulière que le BearStudio entretient avec ce framework - “[Angular](https://angularjs.org)” : à l’époque c’était encore un mot magique...  - “Non, je ne sais pas faire” : alors que j’avais peur de tomber sur des développeurs disant oui oui à tout pour obtenir le poste… Puis Omar, toujours à **Djerba** nous a rejoints après avoir assisté à une conférence sur [ReactNative](https://reactnative.dev) animée par [Nicolas Torion](/fr/equipe/nicolas-torion). Et enfin [Zouhair](/fr/equipe/zouhair-mkassmi), en remote depuis **Nabeul**, via une recommandation d’un ancien professeur de fac d’Amine. ![Carte de Tunisie avec les photos et localisations des développeurs : Jessy à Tunis, Zouhair à Nabeul, Omar et Amine à Djerba](images/image-1-684x1024-1.png) ## Comment ça marche ? ### L'appartenance à la team Les développeurs tunisiens **sont des membres à part entière de [l’équipe](/fr/equipe) !** Je ne peux pas donner plus d’explications que pour quelqu’un en France. Que ce soient les développeurs, les commerciaux, les UX designers ou l'assistante administrative, tout le monde fait le _daily meeting_, travaille sur les projets, communique avec les clients, a accès à toutes les informations de la société, etc. ### L'aspect financier Les développeurs tunisiens sont payés un peu au-dessus du **salaire moyen dans l’IT en Tunisie**. Ce qui leur permet de vivre correctement dans leur pays, de rester proches de leurs familles et de ne pas piller l’une des “ressources” importantes et bénéfiques du pays. Aucune gêne à ça, comme je l’ai indiqué plus haut, c’était un test, notre société étant encore jeune et fragile. A l'avenir, il est probable que leurs salaires finissent par se rapprocher des salaires français. Si la société peut se le permettre et qu’ils font le job qui mérite le salaire, ça semble logique et intelligent **pour fidéliser des développeurs dans un contexte très compétitif.** ## Qu'est-ce que ça apporte ? Évidemment, de la **capacité de production** et une meilleure rentabilité sur les projets. Du côté des Tunisiens, c'est l'occasion pour eux de prendre part à des projets à l'international au sein d'une équipe où tout le monde les traite d'égal à égal. Deuxième évidence, une **diversité culturelle**, au BearStudio on ne passe pas forcément notre temps à le mettre en avant mais c’est quelque chose qui nous tient à cœur. Mais encore : des aventures humaines ! Pour créer des liens et garder une **cohésion d’équipe**, les gens en France doivent rencontrer les gens en Tunisie une fois par trimestre (bon la pandémie complique les choses mais on arrive quand même à se rencontrer en physique…). Il faut dire que mélanger un [beauf d’Auvergne](/fr/equipe/nicolas-torion) avec un bledard de Sfax, ça forge des souvenirs…
![Deux développeurs du BearStudio poussant une Peugeot 205 en panne dans le désert tunisien lors d'une visite d'équipe](images/0f7c8058-03e8-465e-9508-0d8903a8681d-1024x768-1.jpg)
_Les gars poussant la 205 dans le désert_
Ca nous permet aussi d'améliorer nos **capacités à travailler en asynchrone**. Post-covid, j’ai plus vraiment besoin d’expliquer l’importance d'être capable de faire du remote… De l’expérience pour un **futur** (pas si futur que ça…) développement à l'international 😉. Enfin, essayer d’aider, avec nos petits moyens et à notre niveau, la Tunisie à sortir de la crise économique et faire avancer la communauté tech. --- ### Brève 8 : Et 1, et 2, et CII ! URL: https://www.bearstudio.fr/fr/blog/articles/breve-8-cii Date: 2021-03-01 Le saviez-vous ? Depuis février 2020, le BearStudio bénéficie d'un nouveau crédit d'impôt en faveur de l'innovation. ## Mais au fait : qu'est-ce que c'est ? **Le Crédit Impôt Innovation** est “une mesure fiscale de soutien à l’innovation destinée aux petites et moyennes entreprises”. Pour voir si votre entreprise y est éligible, cliquez ici : [entreprises.gouv](https://www.economie.gouv.fr/entreprises/credit-impot-innovation).  Créé en 2013, il vient compléter le **Crédit Impôt Recherche** dans une perspective d’incitation à l’innovation. En bref, cela permet aux établissements concernés de bénéficier d’un crédit d’impôt à hauteur de 20% des dépenses spécifiques engagées pour la conception de nouveaux produits.  Ainsi, en tant que **sous-traitant agréé**, nos clients ont le droit de faire passer les montants qu'on leur facture dans leur assiette CII, auquel cas nous ne pouvons pas en faire autant de notre côté. ## Comment en bénéficier ? Pour être éligible au CII (lire C2I), une entreprise doit remplir certaines conditions, notamment celle de revêtir un caractère innovant. De plus, il faut que ses effectifs s’élèvent à moins de 250 salariés et que son chiffre d’affaire soit inférieur à 50 millions d’euros. Ah et puis le crédit d’impôt est limité à 400 000 € par an.  _Psst : autant vous dire que pour le BearStudio, c’était plutôt bien parti_ 😄 D’ailleurs, si vous souhaitez en apprendre un peu plus sur nos offres de prestations, [c’est par ici](/fr/prestations).  ## Quels sont les avantages du CII ? On ne va pas y aller par quatre chemins, le principal point positif dans cette affaire, c’est qu’on paye moins d’impôt. Pour être exact, notre studio de développement numérique bénéficie chaque année d’une réduction d’impôt qui correspond à un certain pourcentage (ici en l’occurrence 20%) des dépenses dites “d’innovation”.  En plus d’être avantageux fiscalement, ce dispositif incite les start-ups comme nous à innover davantage.  Il faut savoir qu’en France, un peu plus de 5 000 entreprises possèdent l’accréditation CII. C’est toujours bien de faire partie de ce type de réseau, et ce pour plusieurs raisons : - On gagne de la visibilité puisqu’on est répertoriés à l’échelle nationale comme faisant partie de ce dispositif ; - De la même manière, cela peut potentiellement nous apporter des opportunités commerciales via les listings officiels ou même le bouche-à-oreilles ;  - C’est aussi un moyen d’entrer en contact avec d’autres boîtes du même secteur pour échanger sur différents sujets. Au final c’est gagnant-gagnant ! Auteur : [Emma Monchablon](https://www.linkedin.com/in/emma-monchablon/) --- ### JHipster, une technologie qui vous fait économiser de l'argent URL: https://www.bearstudio.fr/fr/blog/articles/jhipster-une-technologie-qui-vous-fait-economiser-de-largent Date: 2021-02-19 _**Disclaimer :** Cet article n’est pas orienté sur l’aspect technique de JHipster et s’adresse donc principalement aux entrepreneurs et aux startups. Cependant il permet aussi de faire un rappel de certaines idées aux développeurs, voire même aux CTO._ Pour consulter une présentation technique de JHipster, vous pouvez lire [cet article](/fr/blog/articles/jhipster-generateur-projet-hipsters). ## Présentation de JHipster [JHipster](https://www.jhipster.tech/) est un _générateur de projet_ mais aussi un _générateur de code_ pour le développement d'_applications web_. JHipster génère une _API_ ainsi qu'une _interface web._ Avant d'entrer dans le vif du sujet, définissons les termes ci-dessus, qui sont incontournables même si vous n'êtes pas spécialistes… ### **Générateur de projet** C'est un outil qui permet de créer tous les fichiers et dossiers de la base du projet de développement. Pour qu'un site ou une application web fonctionne, il est nécessaire d’avoir des fichiers contenant du code. Les fichiers créés par le générateur sont souvent des fichiers de configuration du projet. Mais selon la qualité du générateur, certaines fonctionnalités fréquemment utilisées sont déjà présentes (la possibilité de se créer un compte et s’authentifier par exemple). ### **Générateur de code** À la différence du générateur de projet, le générateur de code va simplifier la suite des développements du projet. Par exemple, lorsque vous souhaitez ajouter une nouvelle fonctionnalité telle que les “abonnements” à votre service, un générateur de code permettra de gagner du temps en créant les fichiers et le code nécessaire, sans la logique métier évidemment. En d’autres termes, le générateur va créer tout ce qui ne dépend pas de la logique spécifique à votre projet. ### **Application web** Ici, je parle de sites web réactifs, qui vont grossir et sont pensés pour être très interactifs. Par exemple, on peut différencier le site du BearStudio, qui est un site simpliste sans grande interaction avec l’utilisateur, de Trello qui est une vraie application sur laquelle l’utilisateur va se connecter et interagir avec une multitude de pages et de fonctionnalités. ### **API** Ce terme n’est pas le plus évident à comprendre, mais est primordial lorsqu’on lance un projet tech. Voici ma définition simple d’une [API](/fr/blog/articles/votre-api-est-elle-vraiment-restful) : _c’est l’ensemble du code qui assure la logique de projet que vous créez, et qu’on peut questionner simplement pour obtenir des informations comme “Quelle est la liste des utilisateurs de l’application ?” ou “Créer une nouvelle souscription pour l’utilisateur numéro 1”._ L’avantage d’une API, c’est qu’elle est réutilisable, puisqu’elle peut être appelée depuis n’importe où : votre site web, votre application mobile, un logiciel, etc. A propos d’API, on parle aussi souvent de **back-end**. Ce n’est pas exactement la même chose, mais en vulgarisant, on peut dire que ce sont des synonymes. _Note : Une API est souvent protégée par un système d’authentification, pour ne pas exposer toutes les données à n’importe qui._ ### **Interface web** Lorsqu’on parle d’interface web (ou UI), il s'agit de la partie visible de votre application. L’interface web peut aussi être appelée **[front-end](/fr/prestations/developpement-web)**, car c’est la partie "avant", que va utiliser l’utilisateur alors que le [backend](/fr/prestations/developpement-web) est à l’arrière, caché aux yeux du client. Gardez en tête que cette UI doit être ergonomique (on parle d’[UX design](/fr/prestations/ux-design)) et souvent _responsive_. Cela signifie qu'elle doit pouvoir s’adapter au différents terminaux sur laquelle elle est utilisée (mobile, ordinateurs…). ## Les fonctionnalités de JHipster ### **Tout ce qu’il faut pour démarrer rapidement** votre implémentation La raison principale pour laquelle nous adorons JHipster au BearStudio et que nous l’utilisons dès que nous en avons la possibilité, c’est que ce générateur permet de **lancer votre projet numérique et votre startup en un temps record**. Cela sous-entend aussi que **les coûts du développement de votre projet sont réduits**, car celui-ci pourra se terminer plus rapidement. Si vous vous demandez comment JHipster nous apporte ce gain de temps, la réponse est simple : la plupart des fonctionnalités communes à tous les projets numériques sont incluses dès la génération de votre projet JHipster. En voici une liste : ![Liste des fonctionnalités communes à tous les projets numériques](images/jhipster-1-1024x524-1.png) Pour la **gestion des utilisateurs** : - Création de compte à l’aide d’un email et d’un mot de passe - Activation de compte grâce à un lien envoyé par e-mail - Connexion au compte - Réinitialisation du mot de passe oublié via l’envoi d’un e-mail - Accès aux détails du compte connecté - Edition des informations du compte (mot de passe, etc.) - Gestion de rôles (existence d’un espace administrateur différent de l’espace utilisateur) - Gestion des utilisateurs grâce à un listing paginé (administrateur) - Possibilité de créer un nouvel utilisateur (administrateur) - Possibilité de voir le détail d’un utilisateur, l’éditer, le supprimer, l’activer, etc. (administrateur) Pour la **gestion du contenu** de l’application web, JHipster propose une page de création, visualisation et édition des données (aussi appelées entités). Par exemple, si votre application gère des commandes, lors de la génération de l’entité _Commandes_, une page en fera le listing, et il sera aussi possible de les éditer. La **langue** du contenu peut aussi être changée selon les paramètres qui ont été choisis à la génération du projet. Pour finir, un projet généré avec JHipster donne accès à des outils techniques très intéressants, qui permettent de gagner du temps lors du développement ou lorsqu'on fait du **monitoring** : - Le [JDL de JHipster](https://start.jhipster.tech/jdl-studio/), est un outil permettant de construire le schéma de données de votre application, et lorsque ce modèle a été pensé, il est possible de générer tous les fichiers qui permettront de manipuler les données de l’application (les stocker, les récupérer, les consulter…). Le _modèle de données_ correspond à l’ensemble des entités qui vont interagir ensemble pour répondre à vos problèmes métiers. Par exemple, une application qui permet de commander dans des restaurants aura une entité _Restaurant_ qui pourra posséder plusieurs entités _Commandes_, l’entité _Commande_ étant liée à l’_Utilisateur_ qui la passe. - Comme expliqué dans le point précédent, JHipster permet de générer des entités à partir du schéma de données, mais il permet aussi de générer et regénérer des entités indépendamment de l’utilisation du JDL. La génération va faire gagner beaucoup de temps aux développeurs, mais va aussi ajouter un menu dans le backoffice permettant d’accéder aux données et d’en créer, comme expliqué dans la partie gestion de contenu. - Un accès à la base de données avec la console de H2, si la base de données de développement l'utilise. - Une “documentation de l’API” autogénérée grâce à Swagger (OpenAPI). - Les métriques du serveur permettant de voir l’utilisation de sa mémoire, et d’autres statistiques qui sont rarement utiles, mais auxquelles on adore avoir accès le jour où on en a besoin. - Un audit affichant la liste des connexions à l’application - Une page de gestion des niveaux de logs. Les logs sont des traces laissées par les développeurs, afin de savoir ce qui se passe dans l’application. Ils sont très utiles pour analyser si des erreurs surviennent dans votre application, et comprendre pourquoi ces problèmes sont présents. Dans la prochaine partie, nous allons voir que ce générateur de projet possède un très large choix de **technologies**. Selon le projet à développer, il est clair que les technologies à utiliser peuvent varier car elles simplifieront les développements ou répondront mieux à vos besoins. ### Les performances de JHipster en termes d'interface utilisateur JHipster intègre les 3 technologies les plus utilisées pour simplifier les développements : _[React](https://fr.reactjs.org/)_, [_Angular_](https://angular.io/) et _[VueJS](https://fr.vuejs.org/)_. Votre équipe de développement aura donc la possibilité de choisir lors de la génération du projet. De plus, la communauté a récemment inclut une option permettant de choisir un thème graphique parmi ceux disponibles sur [Bootswatch](https://bootswatch.com/). JHipster vous permet aussi de pré-configurer la traduction de votre application, ainsi que les langues à inclure. Vous pourrez donc décider que votre application soit en français par défaut, mais elle peut aussi être affichée en anglais, russe ou mandarin (et bien d’autres langues). Pour finir avec les options possibles à la génération du projet concernant l’interface, vous aurez aussi la possibilité d’ajouter des tests appelés “end to end” qui permettront de tester l’application de bout en bout. Sur ce point aussi, plusieurs outils sont disponibles. Attention, encore une fois, JHipster génère des tests, mais ceux-ci seront à faire évoluer au fur et à mesure de la vie de l’application, ce qui prend du temps mais bien sûr, améliore la qualité de l’application. ### D'autres options pour développer vos projets JHipster propose toute une liste d’options que je vais citer sans les détailler car elles concernent des parties plus techniques : - Vous pourrez développer des applications monolithiques ou faire le choix des microservices - Utiliser Spring webflux pour développer une application réactive - Déterminer le type d’authentification (JWT, OAuth2, HTTP Sessions) - Fixer le type de base de données (MySQL, PostgreSQL, H2, Mariadb, Oracle, MSSQL, MongoDB, Cassandra, Couchbase, Neo4j) - Choisir entre l’utilisation de Maven ou Gradle - Ajouter ElasticSearch, Spring Websockets, Kafka, OpenAPI-generator ## Conclusion : JHipster vous veut du bien ! En plus de permettre un **démarrage très rapide de votre projet**, JHipster possède une qualité très importante à nos yeux. D’abord parce c’est un projet _Open Source_, ce qui signifie que le code est accessible à tous sur [Github](https://github.com/jhipster/generator-jhipster/). Autrement dit, **ça implique que tout le monde puisse contribuer à l’amélioration du générateur**, et donc venir ajouter de nouvelles fonctionnalités au projet. Que ce soit pour s’assurer qu’il ne possède pas de failles de sécurité, corriger de potentiels bugs, etc. Concrètement, ça nous permet d’améliorer votre projet lors de chaque mise à jour de JHipster, en ajoutant de nouvelles fonctionnalités. Nous sommes par exemple en train de travailler sur l’ajout d’une fonctionnalité permettant de visualiser des statistiques sur vos données (nombre d’utilisateurs…). Nous vous invitons d'ailleurs à lire le [témoignage de nos ours présents lors de la dernière JHipster Code de Bordeaux](/fr/blog/articles/la-team-du-bearstudio-a-la-jhipster-code). Pour finir, je souhaitais mettre en avant le fait qu’un projet JHipster peut être déployé très rapidement sur le cloud. Un [article](https://www.jhipster.tech/clever-cloud/) de [Rudy](/fr/equipe/rudy-baer) explique comment déployer sur [CleverCloud](https://www.clever-cloud.com/en/) . Cette expertise nous permet de mettre l’interface du back-office entre vos mains, sur une plateforme de pré-production, en un jour seulement (sans la logique spécifique à votre métier, évidemment). Si vous souhaitez en apprendre plus sur notre façon d’utiliser JHipster et savoir ce que ce générateur apporte aux entreprises avec lesquelles nous travaillons, vous pouvez retrouver [une vidéo](https://youtu.be/BT9qdMdmM9I?t=1716) de [Rudy](/fr/equipe/rudy-baer) et moi, en présentation lors d’un meetup JHipster. --- ### Brève 7 : Finrêka!, l'outil parfait pour la recherche d'aides financières aux entreprises URL: https://www.bearstudio.fr/fr/blog/articles/breve-7-finreka-recherche-aides-financieres-entreprises Date: 2021-02-12 ## Kézako ? [Finrêka!](https://www.finreka.fr/) est un moteur de recherche personnalisé qui aide les entrepreneurs à défricher les nombreux dispositifs de financement possibles et à identifier ceux qu'il peuvent obtenir ! Créé par une société rouennaise, ce dispositif vise à optimiser le parcours de financement des entrepreneurs. Que ce soit pour s'installer, se développer ou encore pérenniser leur business, les aides publiques deviennent facilement accessibles ! Parce que les journées d'un entrepreneur en devenir sont souvent très chargées, Finrêka a développé un annuaire regroupant toutes les aides potentielles pour leur faire gagner un temps précieux. Retrouvez ainsi plus de 2 000 aides financières réparties parmi 500 organismes financeurs. Mais ce n’est pas tout... Pour aller plus loin, l’équipe Finrêka propose également un accompagnement personnalisé en deux volets : - la fourniture d’une **roadmap** ayant pour objectif l’identification des financements - le **coaching direct au dirigeant** ayant pour objectif de l’accompagner et de l’assister dans les démarches de demande d’aide ## Comment ça marche et combien ça coûte ? Le [moteur de recherche](https://www.finreka.fr/motoraide) est entièrement **gratuit** et mis à disposition de tous les entrepreneurs !  Pour savoir si vous êtes éligibles à tel ou tel dispositif, il vous suffit d'entrer quelques détails comme la taille et le chiffre d'affaires de votre entreprise. En plus, vous pouvez filtrer les résultats de la recherche grâce à de nombreux critères structurés en fonction de vos besoins actuels. Cette fine équipe d’experts propose par ailleurs des **offres d'accompagnement** plus complètes. Voici le comparatif des fonctionnalités détaillées de leurs deux [formules payantes](https://www.finreka.fr/prices) : ![tableau des tarifs Finreka](images/finreka-1.png) Vous l’avez compris, Finrêka! fait définitivement partie des [outils indispensables de l'entrepreneur](/fr/blog/articles/outils-incontournables-pour-un-entrepreneur) ! --- ### La team du BearStudio à la JHipster Code URL: https://www.bearstudio.fr/fr/blog/articles/la-team-du-bearstudio-a-la-jhipster-code Date: 2021-02-05 ## Jhipster c’est quoi ? [Jhipster](https://www.jhipster.tech/) est un framework **open source** de développement web. Pour les non développeurs, c’est un générateur de projet qui va faire gagner énormément de temps aux développeurs. Il pose un cadre et des bonnes pratiques qui, en plus de créer de la valeur rapidement dans un projet, évite les fantaisies de conception et d'implémentation que peuvent faire des développeurs pas assez expérimentés au démarrage... Apprenez en plus sur Jhipster à travers [cet article](/fr/blog/articles/jhipster-generateur-projet-hipsters) écrit par [Nicolas Torion](/fr/equipe/nicolas-torion) ## La Jhipster code c’est quoi ? C’est une journée d**'ateliers** organisée le 14 septembre 2020 dont le but est de réunir les contributeurs de Jhipster afin de travailler ensemble sur des nouvelles fonctionnalités. C’est aussi l’occasion pour des non **contributeurs** de le devenir. C’était d'ailleurs le principal objectif du BearStudio ;) Depuis le début de l'aventure, nous utilisons effectivement beaucoup Jhipster sur nos projets. Naturellement, une de nos volontés depuis toujours est de réussir à y contribuer. _Spoiler alert_, après 4 ans, je ne suis pas peu fier de pouvoir dénombrer près de 8 personnes ayant apporté leur contribution à Jhipster 🍾🥂. ## Comment ça se passe ? L’équipe organisatrice, [la core team](https://www.jhipster.tech/team/) de Jhipster (encore un grand merci à eux pour tout le boulot), a organisé des **“tracks”** sur différents sujets. Après une présentation sommaire, les participants choisissent la track qui leur plaît le plus et ils codent toute la journée pour essayer de corriger des bugs ou de développer des nouvelles features. Si souhaitez accéder à un récap de l'événement, je vous invite a lire celui écrit par **[Deepu](https://twitter.com/deepu105)** : [https://www.jhipster.tech/jhipster-code/](https://www.jhipster.tech/jhipster-code/) A suivre : le récap de quelques ours du BearStudio ;) Eh oui, nous étions nombreux à participer à cette journée de contributions ! Nos oursons se sont naturellement répartis sur les différents ateliers proposés. Alors que ceux pour qui c'était la première fois ont choisi la track débutant, les plus expérimentés se sont attaqués à des parties plus techniques... ## La track beginners de la Jhipster Code Ce premier atelier était destiné aux personnes n'ayant encore jamais participé à une contribution de ce type. ### Feedback d'Asceline Boullen Au BearStudio, je suis régulièrement amenée à faire des **wireframes** pour des projets générés par mes collègues avec JHipster mais sans en savoir réellement plus sur l’aspect technique de ce générateur. J'appréhendai un peu le déroulé de la journée (format de l'événement, niveau de technicité attendu...). Mais mes doutes ont rapidement disparus ! Le format workshop était cool, les gens rapidement à l’aise. La track Beginners m’a permis de faire mes premiers pas avec JHipster et de comprendre le fonctionnement du générateur. Durant cette track on devait prendre en mains l’outil afin de pouvoir **corriger certaines issues** de la communauté. Pour me lancer, j’ai choisi une [issue](https://github.com/jhipster/generator-jhipster/issues/12457) qui m'a semblé accessible malgré mes compétences limitées en dev : modifier les icônes du menu d’administration de Jhipster. La tâche semblait plutôt simple, mais j’ai rapidement compris l’enjeux du générateur : proposer une génération en Vue, en Angular et en React. Au final j’ai réussi à fix cette issue front en faisant les imports des icônes Font Awesome voulues et en changeant aux bons endroits, les références des icônes appelés. J'ai aussi proposé une **ré-organisation du fichier**, ce qui a été apprécié par [Pascal](https://twitter.com/pascalgrimaud) qui a merge mon travail et **m’a récompensé avec un bug bounty de 100$**. Je ne connaissais pas ce principe mais j’ai trouvé ça super cool et encourageant ! Ensuite, je suis passée sur la **création d’un nouveau personnage** pour l'ajouter à ce qu’ils appellent la _Jhipster family_. J'ai même poursuivi cette [issue](https://github.com/jhipster/generator-jhipster/issues/12487) sur mon temps libre et proposer plusieurs créations. C’est cool de voir que **peu importe le niveau technique, chacun peut apporter quelque chose à la communauté.**
![Aperçu des personnages proposés par Asceline Boullen](images/mochup-asceline-jhipster-1024x683-1.jpeg)
_Aperçu des personnages que j'ai proposés_
C’était pour moi la première contribution de ma vie, mes premiers pas dans l’open source et c’est cool ! Merci le billet diversité, qui m’a permis de participer à cette journée et m’encourager à y aller 😊 ### Feedback de Fabien Essid On utilise JHipster quasiment tous les jours au [BearStudio](/fr/) mais au final je n’avais jamais généré un projet. La track _Beginners_ m’a permis de faire mes premiers pas avec JHipster et de découvrir le fonctionnement du générateur. Les participants de cette track avaient pour objectif de corriger des issues. Elles étaient bien **ciblées pour des débutants**, ce qui m’a permis de rapidement être à l’aise avec le générateur. Au final **j’ai réussi à fix une issue front** (passer le personnage de JHipster de la droite vers la gauche sur les apps [React](https://fr.reactjs.org/) pour être raccord avec les autres technos) et à bien avancer sur une seconde (que je poursuis d'ailleurs sur mon temps libre). Elle consiste à ajouter un bouton de _refresh_ sur les listings des entités et des utilisateurs. C'est pas mal de boulot car il faut reporter la modification sur chaque techno : React, Angular et VueJS. En prime, la génération de projets JHipster n’a plus de secrets pour moi ! J’avais un peu d’appréhension en début de journée, mais au final **c’était vraiment très intéressant** et pertinent à mon sens. **Première contribution de ma vie** aussi, et ça c’est cool. ### Feedback d'[Ivan Dalmet](/fr/equipe/ivan-dalmet) Adepte de l’open source, c’était avec plaisir de découvrir la partie maintainer de JHipster :) Comme c’était la première fois que j’allais jouer avec le générateur, j’ai assisté à la track _Beginners_ en début de journée. Après avoir compris comment le générateur fonctionne j’ai voulu m’attaquer à un sujet qui me tient à coeur : **un nouveau front-end pour JHipster avec Chakra UI**  Pour cela il a fallu se plonger dans le concept de blueprint. Je dois avouer que les premiers pas ont été hasardeux... Mais en **fin de matinée et avec l’aide de** [**Deepu**](https://twitter.com/deepu105) (core maintainer de JHipster), j’ai réussi à faire tourner **mon premier blueprint** qui permet de choisir un nouveau frontend ! Bon malheureusement, jusque là, rien de bien palpitant car le frontend généré était un simple fichier vide 😅 L’**après midi a donc été consacrée à vraiment setup le code généré** par ce nouveau blueprint. En plus de ⚡️ [Chakra UI](https://chakra-ui.com/), j’ai installé une stack frontend moderne avec ⚛️ [React Query](https://react-query.tanstack.com/), ⚛️ [React Router](https://reactrouter.com/) et 🐜 [Formiz](https://formiz-react.com/) Setup du layout, du routing public, et authentifié du formulaire de login et de la homepage. Le tout pour avoir une démo fonctionnelle en fin de journée.
![illustration homepage jhipster](images/localhost_3000_-1024x560-1.png)
_Vous pouvez admirer la nouvelle illustration créée par Asceline._
Mais pour avoir une vraie démo, il faut un nom pour ce nouveau blueprint. Et là, seule une bonne private joke pouvait faire l’affaire. **Je vous présente donc le Blueprint JHipster Miaou 🐈** Comme vous pouvez vous en doutez **il reste encore pas mal de développement** avant de pouvoir avoir un blueprint complet. Cette journée a été un bon point de départ. On **espère donc pouvoir bientôt publier ce nouveau blueprint pour la communauté** 😊 _Update :_ le projet a été renommé mais voici le [lien du résultat](https://github.com/ivan-dalmet/start-ui) (toujours en cours de travail) ! ## La track API rest de la Jhipster Code Celle-ci visait principalement à améliorer les standards de JHipster en optimisant le [caractère Restful](/fr/blog/articles/votre-api-est-elle-vraiment-restful) de son API. ### Feedback de Quentin Lerebours **On a commencé par de la théorie** sur les APIs Restful et les conventions d'une telle API. J'ai appris qu'une vraie API REST se développait sur 4 niveaux de conventions (URI, verbes, code de retour et HATEOAS), et que plus de 99% des APIs ne respectent pas la dernière convention. On a donc décidé de discuter de la meilleure manière d'**améliorer le respect des convention**s de REST sur JHipster. Notre première idée a été d'améliorer certaines URI qui n'ont pas des noms de ressources mais d'actions, ce qu'on a commencé à faire avant de se rendre compte des problèmes que ça poserait en terme de migrations. On s'est donc arrêté là sur cette tâche, mais ça nous a permis de bien **comprendre le fonctionnement du générateur de code**. On est donc passés sur la deuxième tâche de la journée : ajouter des _endpoints_ PATCH dans les Contrôleurs lors de la génération d'entités, tout ça accompagnés par Christophe Bornet. En fin de journée, on avait accompli environ 50% du travail, la [PR](https://github.com/jhipster/generator-jhipster/pull/12727) était ouverte sur GitHub et on était tous très satisfait d'avoir travaillé là-dessus. C'était très intéressant de comprendre en profondeur le fonctionnement du générateur et d'être initiés à la contribution sur ce projet, **ce qui simplifiera les prochaines corrections d'issue ou développement de features**. ### Feedback de Jessy Baer On a commencé avec une **présentation de la future version de Jhipster**, la version 7, ce qui nous à permis de voir les nouvelles features qui arriveront prochainement Après j’ai travaillé sur la track API, avec pour objectif de rendre Jhipster plus Restful, c’est à dire un peu plus respectueux des conventions. L’atelier m’a permis de voir comment on peut contribuer sur le générateur **à l’aide d’un exemple concret**. L'expérience est super intéressante et permet de faire un **premier pas dans l’univers de l’open source**. ## La track JDL de la Jhipster Code Ici, le but était de travailler à l'amélioration du **JDL Studio**, un outil qui permet de visualiser son schéma d'entités pendant sa rédaction. ### Feedback de [Renan Decamps](/fr/equipe/renan-decamps) La première track que j'ai suivi consistait à **améliorer le langage jdl utilisé** dans [jdl-studio](https://www.jhipster.tech/jdl/). Il faut savoir que dans la version actuelle, le code n'a jamais été réadapté au fur et à mesure des nouvelles features. Nous avons donc d'abord listé toutes les incohérences au niveau des paramètres de chaque instruction. (Par exemple, pouvoir mettre `no false` à un paramètre mais n'avoir que `no` sur un autre). Puis nous avons réfléchi à une solution qui permettrait d'unifier le langage et de le rendre plus clair. La solution sur laquelle nous somme tous tombés d'accord permet de résoudre l'ensemble de ces problèmes. J'ai ensuite laissé mon groupe pour travailler sur l'intégration du nouveau jdl-studio avec JHipster online. Pour cela j'ai d'abord échangé avec **Deepu**, le créateur du jdl-studio, pour comprendre comment fonctionnait l'app. **J'ai commencé à coder l'intégration**. Une [PR](http://github.com/jhipster/jdl-studio/pull/105\(ouvre un nouvel onglet\)) a d'ailleurs été ouverte à ce sujet, qui a été merged entre-temps. ### Feedback de [Nicolas Torion](/fr/equipe/nicolas-torion) Journée très sympa durant laquelle on a pu échanger avec la core team de jHipster sur de multiples sujets. J’ai passé du temps sur l’**amélioration de la syntaxe JDL** du générateur avec : - [Renan](/fr/equipe/renan-decamps) - [Mathieu ABOU-AICHI](https://github.com/MathieuAA), membre de la core team - [Arnaud Freismuth](https://twitter.com/arnaudfreismuth), membre de la core team C’était extrêmement intéressant comme session de travail. D'abord sur l’apprentissage du fonctionnement de la partie gestion du JDL du générateur. Mais aussi sur la conception d’un nouveau mot clé pour simplifier l’application d’options sur les entités dans le JDL. ## La fin de journée  Bien entendu la journée s’est terminée avec un repas tous ensemble, très sympa pour créer du lien entre les contributeurs. - ![Quentin Lerebours et Rudy Baer](images/14-1-1024x768-1.jpg) - ![Renan Decamps, Asceline Boullen et Nicolas Greverie](images/13-1-1024x768-1.jpg) - ![Couché de soleil](images/2-1-1024x768-1.jpg) - ![Renan Decamps et Quentin Lerebours](images/10-1-1024x768-1.jpg) - ![Photo de group du Bearstudio](images/untitled-design-1.png) - ![Renan Decamps](images/8-1-768x1024-1.jpg) ## Mon bilan Une réussite sur tous les plans ! La team est non seulement formée pour pouvoir contribuer à Jhipster mais aussi motivée ! Les contributions ont continué bien après la conférence comme vous pouvez le voir à travers ces liens : | [https://github.com/jhipster/generator-jhipster/pull/12727](https://github.com/jhipster/generator-jhipster/pull/12727) | | ---------------------------------------------------------------------------------------------------------------------- | | [https://github.com/jhipster/jhipster.github.io/pull/1020](https://github.com/jhipster/jhipster.github.io/pull/1020) | | [https://github.com/hipster-labs/jhipster-terraform-poc](https://github.com/hipster-labs/jhipster-terraform-poc) | | [https://github.com/jhipster/generator-jhipster/pull/12507](https://github.com/jhipster/generator-jhipster/pull/12507) | Le format de conférence était également super motivant : **un hackathon de contributeurs open source sans compétition**, avec juste l'envie et la motivation du partage. Ça m'a donné des idées pour un futur évènement [Codeurs En Seine](https://www.codeursenseine.com/2020)… (wait & see) D’un point de vue **team building**, on a commencé le week-end par une visite de Bordeaux sous 30°, avec de la nourriture, du vin… Comme nous sommes des gens simples, ils ne nous en faut pas plus pour être heureux :D Pour la communauté, 8 nouveaux contributeurs c’est pas mal. Même si forcément la motivation va peut-être baisser un peu, c’est déjà ça de pris ! De toute façon je vais continuer à forcer  motiver la team à s'impliquer. Jusqu’à la fin d’année 2020, tous les développeurs (au sens large, je ne vous oublie pas les UX Designer) ont eu une journée par semaine dédiée à de la contribution pour des [projets open source](/fr/blog/articles/linux-logiciels-libres-et-open-source-retrouvez-votre-liberte). --- ### Brève 6 : Bug Bounty rime avec solidarity URL: https://www.bearstudio.fr/fr/blog/articles/bug-bounty-solidarity Date: 2021-01-29 Pour la première fois, certains membres de [l'équipe](/fr/equipe) ont remporté des gains (bug bounty pour les amateurs) lors de contribution en open-source à des projets collaboratifs tels que la JHipster Code. C'est pour cette raison qu'à l'occasion des fêtes de fin d’année, le BearStudio a eu l'idée d'effectuer un don en soutien à une association. Notre recherche de bénéficiaire potentiel s’est axée autour de 2 critères principaux. D’abord, il nous paraissait évident d’opter pour une **initiative solidaire locale**. Mais la crise sanitaire nous a aussi amené à considérer les difficultés rencontrées par le secteur médical. Et dans un second temps, nous souhaitions trouver quelque chose lié de près ou de loin à **notre image**… Saurez-vous faire le rapprochement entre le bourdonnement des abeilles rouennaises et notre réputation d’ours mal léché ? Après discussion avec l’ensemble des collaborateurs, deux projets à impact positif semblaient faire l’unanimité. Plutôt que de diviser la somme, nous avons choisi de la doubler pour apporter notre soutien à 2 projets méritants !  Nous sommes ravis d'accompagner les **Ateliers Sainte-Claire**, un centre de réadaptation qui prend en charge des personnes socialement fragiles. Cet établissement médical d’accueil de jour agit en faveur de l’entraide sociale depuis plus de 40 ans.   De même, c’est avec plaisir que nous affirmons notre soutien à **[Happy Culture](https://happyculturecitadine.fr/miellerie-rouen/)**, une initiative pour implanter des ruches en milieu urbain et ainsi protéger la biodiversité. En partenariat avec l’association Interm’aide Emploi, ce dispositif vise également à défendre l’insertion via le travail et l’apprentissage.  On espère que 2021 nous permettra de réitérer ce genre d'opération ! --- ### 9 trucs dont il faut faire abstraction quand on manage URL: https://www.bearstudio.fr/fr/blog/articles/9-trucs-abstraction-quand-on-manage Date: 2021-01-21 ## Nos conseils pour mieux manager une équipe Même si ça ne semble pas du tout naturel, il faut se forcer à mettre certains choses de côté pour prendre confiance et établir une ambiance de travail bienveillante. Attention, je ne prétends pas que ce sont là des vérités absolues ! Il est possible qu’à un moment donné vous soyez obligés de considérer l’un de ces points comme un problème, mais cela doit rester l’exception qui confirme la règle.  ![Échange d'idée en réunion autour de post-it collés sur un tableau](images/photo-1552664730-d307ca884978-11.08.22.jpeg) ### 1- Les horaires Le plus important c’est que le taf soit fait ! Il ne suffit pas de dire cette phrase, encore faut-il l’appliquer ! C’est pourquoi vous devez absolument éviter de tomber dans le flicage inutile et **contreproductif**… Donc si un salarié veut partir plus tôt pour passer un week end en Auvergne (oui oui, il y a vraiment des gens qui font ça…) peu importe ! De même, il peut arriver qu’un de vos salariés arrive un matin avec trente minutes de retard. Et alors ? Il rattrapera sur le temps du midi ou restera un peu plus tard que d’habitude en fin de journée. Bon par contre, s’il y avait justement une réunion importante à laquelle il était attendu, c’est une autre affaire ! Tout ça pour dire qu’il faut savoir différencier les retards qui impactent le travail des autres de ceux qui ne concernent que la personne en question. Votre rôle n’est pas de vérifier qu’un gars est bien à son bureau de 9h à 18h, mais que son boulot est fait correctement ! ### 2- Les congès Quand on a la tête dans le guidon c’est jamais le bon moment… Pourtant, à moins de manager une équipe de super héros qui sauve le monde des catastrophes et des terroristes, je ne vois aucune raison valable pour refuser un congé à quelqu’un, à condition qu’il soit **suffisamment anticipé** ! Et ce, même si on se rend compte une ou deux semaines avant qu’une grosse échéance se profile. Le rôle d’un manager par rapport aux congés c’est de s’assurer qu’il reste un minimum de monde pour faire tourner la boite et que les gens en prennent suffisamment régulièrement pour se reposer et éviter de tout prendre d’un coup. ### 3- Le matos Que ce soit en tant que salarié ou employeur je n’ai jamais compris pourquoi un grand nombre de sociétés refuse de **fournir du matériel** à leurs employés… En particulier quand il s’agit de développeurs ! Quand tu payes un gars 40k par an, pourquoi le limiter avec un PC de merde pour économiser 2k qui finiront par passer en **amortissement** de toute façon ?! La seule raison “valable” ça serait de ne pas avoir la trésorerie pour. Mais dans ce cas-là, c’est que ça ne sent pas bon pour l’avenir de la boîte… Donc dans l’idéal : pas de débat ou d’économie de bout de chandelle qui ralentissent la prod. ### 4- Les informations à cacher Il m’arrive parfois d’être consterné au vue du temps et de l’argent investis dans le but de compartimenter et de dissimuler certaines informations. Un des principaux rôles du manager c’est justement de faciliter et d’optimiser le travail des équipes. Si vous voulez que les gens prennent les meilleures décisions possibles et soient autonomes, le plus simple c’est qu’ils aient une **vision d’ensemble** du problème : la fameuse big picture ! Ce n’est pas compliqué de se rendre compte qu’en cachant des infos, les gens ont une vision partielle. Encore une fois, si tu payes quelqu’un pour régler un problème, il n’y a aucune raison de lui mettre des bâtons dans les roues… Au passage, sachez que cacher de l’information est absolument **chronophage** pour un manager ! ### 5- Divulguer les enjeux économiques Attention révélation exclusive : une société est, par nature, destinée à générer des profits. Faire de l’argent un **sujet tabou** en interne, n’a donc aucun sens. Comme disent les anglais : _“eat your own dog shit”_. Si vous décidez de conserver une couche d’opacité sur les enjeux économiques, vous risquez de créer une séparation entre les finances de l’entreprise et vos équipes. D’autant que si votre entreprise ne gagne plus trop d’argent à un moment donné, cela aura forcément des conséquences sur vos salariés ! (évidemment dans les grosses boîtes les choses s’avèrent un peu plus compliquées, mais ça reste vrai quand même). ### 6- Avouer ses erreurs ou ne pas savoir Tout le monde fait des erreurs. Ne pas les avouer par peur de perdre en crédibilité c’est triplement stupide : - Parce que vous passez pour un con ET pour un lâche - Ça vous empêche de vous améliorer et d’obtenir un **feedback** constructif - L’humain est généralement plus enclin à aider ou pardonner quelqu’un qui assume et essaye de corriger son erreur plutôt que quelqu’un qui rejette la faute sur les autres ou la cache sous le tapis ### 7- Les moments non productifs Personne n'est productif à 100% en permanence. En tant que manager, vous êtes tenu de **garantir un certain ratio**. Inutile donc de passer son temps à vérifier que tout est le monde donne son maximum, assurez-vous juste qu’il n’y ait pas trop d’abus. De plus, si les gens se sentent surveillés, ils vont probablement développer des techniques pour ne pas se faire griller… ce qui ne fera que vous compliquer la tâche. Au final c’est encore plus de temps et d'énergie de perdus pour tout le monde. Retrouvez un [article complet pour améliorer votre productivité au travail sur notre blog](/fr/blog/articles/vous-avez-dit-productivite). ### 8- Arrêter la prod pour la formation Il y a toujours des commandes urgentes à honorer et des **deadlines** à tenir qui vous donnent une bonne raison de ne pas s’arrêter. Un peu comme pour les congés. Envoyer quelqu’un en formation ça se gère et personne ne va en mourir. ### 9- Les trucs perso Je ne sais pas comment ça se passe dans les autres pays, mais en France, on souffre un peu de frénésie administrative (même s’il commence à y avoir de plus en plus de services en ligne). Les gens ont une vie perso et ont forcément des choses à gérer. D’un autre côté, l’entreprise a aussi parfois besoin que le salarié fasses des trucs pros sur son temps perso… C’est pourquoi il est important d’arriver à **créer un cercle vertueux et équitable**. Laissez un gars de votre équipe s’absenter 1h pour récupérer le fu\*\*\*\* colis pour lequel le livreur a laissé un avis de passage alors même qu’il était chez lui à ce moment-là, vous serez bien content quand il gérera l’urgence client un soir ou un week end ! ## Conclusion Pas de panique si vous avez l'impression d'être à côté de la plaque ! Nos conseils ne se prétendent pas universels. Et puis le bon sens n'est pas inné, ça s’apprend et ça se travaille... Retenez aussi que certes, ça paraît évident, mais un salarié heureux aura moins de mal à se motiver et n'en sera que plus efficace ! Voici [un autre article très intéressant sur le sujet](https://www.welcometothejungle.com/fr/articles/feedback-manager). --- ### Brève 5 : Comment optimiser les images de son site web ? URL: https://www.bearstudio.fr/fr/blog/articles/optimiser-images-site-web Date: 2021-01-12 ## Pourquoi optimiser les images de son site ? Optimiser les images d’un site web, ça sert à quoi au final ? Des juniors se sont peut être déjà posés la question. La réponse est plutôt simple : **accélérer le chargement du site, et [avoir un meilleur référencement](/fr/blog/articles/checklist-seo-technique).** Donc l’optimisation des images n’affecte pas seulement le site, mais aussi son accessibilité. De plus, sachant que les images représentent une grand partie de son poids, il est important de ne pas négliger cet aspect afin d’optimiser les performances de son site. ## Évaluer les performances de son site [GTmetrix](https://gtmetrix.com/) est un outil simple à utiliser qui permet d’évaluer les performances de son site. En fonction des résultats, GTmetrix propose des outils et des méthodes pour améliorer celui-ci Le rapport fourni par Gtmetrix se compose de cette façon : - On a 2 scores différents, qui nous donne notre note GTmetrix : - La performance de la page - La structure, qui indique si notre page est construite de façon optimisée - Pour aller dans les détails, le rapport indique aussi : - Le LCP (Largest Content Paint), qui indique le temps que la page met à charger - Le TBT (Total Blocking Time), qui indique combien de temps met la page à être interactive - Le CLS (Cumulative Layout Shift) est un score représentant la stabilité de la page pendant son chargement ![Score GTmetrix](images/gtmetrix-1-1024x143.png) Juste en-dessous de cet élément, on a un rapport plus détaillé, avec différents onglets. ![Rapport détaillé de Gtmetrix](images/gtmetrix-2-1024x288.png) ## La compression des images Une façon d’optimiser les images d’un [site web](/fr/blog/articles/arretez-de-vous-faire-avoir-par-votre-agence-digitale), c’est de les compresser. Plusieurs sites se sont spécialisés dans ce genre de service, pour différents formats. **Fun Fact :** _Ces sites ne compressent pas l’image au sens propre du terme, mais optimisent l’encodage de l’image. La taille de l’image n’est donc pas réduite, mais les informations qui ne sont pas nécessaires, comme par exemple les métadatas, sont supprimées._ Deux sites pour les compressions d'images : - [Tinyjpg](https://tinyjpg.com/) - [Tinypng](https://tinypng.com/) ## Afficher le terminal sans problème Comment afficher un terminal sans que l’image soit floue ou de mauvaise qualité ? C’est une problématique à laquelle nous nous sommes confrontés au Bearstudio lors de la [rédaction d’articles](/fr/blog). Avant de trouver une solution, on faisait seulement une capture d’écran, mais la qualité dépendait du PC sur lequel on se trouvait, ce qui rendait le résultat trop aléatoire. Mais maintenant, on utilise un nouvel outil : [Carbon](https://carbon.now.sh/) ![Interface de l'outil Carbon affichant un snippet JavaScript avec les options d'export : iFrame, URL et clipboard](images/carbon-2.png) Avec cet éditeur, il est possible de **personnaliser la police, la couleur du texte et la couleur du fond**. D’autres paramètres sont disponibles pour changer l’apparence du terminal. L’image est ensuite téléchargeable en 2 formats : SVG et PNG. Une fois l’image téléchargée, il ne faut pas oublier d’optimiser l’image. _PS : il est aussi possible, au lieu de télécharger l’image, de générer un lien ou une iFrame (une balise HTML intégrant du contenu venu d’une autre page)._ ![Capture de l'outil Carbon avec un snippet JavaScript affiché dans un terminal personnalisé sur fond sombre](images/carbon2-3.png) --- ### Brève 4 : Votre API est-elle vraiment RESTful ? URL: https://www.bearstudio.fr/fr/blog/articles/votre-api-est-elle-vraiment-restful Date: 2020-12-09 Il y a peu de temps, j'apprenais qu'environ 100% des API dites "REST" ne le sont pas réellement. C'est assez étonnant, mais seulement lorsqu'on ne connaît pas le **[modèle de maturité de Richardson](https://guide-api-rest.marmicode.fr/api-rest/le-modele-de-maturite-de-richardson)**. Ce modèle définit 4 niveaux de maturité pour les API REST : ![niveaux-api-rest](images/guide-api-2.png) ## **Niveau 0** On parle de **Swamp of POX**, soit le "domaine du Plain Old XML", lorsque votre API n'utilise aucune fonctionnalité HTTP. On parle alors de XML-RPC over HTTP. En clair, on peut contacter votre API via un point d'entrée unique, on spécifie l'action à effectuer ainsi que la ressource sur laquelle l'effectuer, dans le contenu de la requête. De même, la réponse sera toujours une [200](https://developer.cdn.mozilla.net/fr/docs/Web/HTTP/Status/200#:~:text=Le%20code%20de%20statut%20de,dans%20le%20corps%20du%20message) avec des informations sur le bon (ou mauvais) déroulement de l'action. C'est le fonctionnement standard des **API SOAP**. ## **Niveau 1** À ce niveau, on utilise les **ressources**, c'est à dire que l'API n'aura plus un endpoint unique mais que chaque ressource aura son propre endpoint (`/users/posts/1/comments`, etc…) ## **Niveau 2** C'est à ce niveau qu'on met en place l'utilisation des **verbes HTTP**. Il ne sera donc plus nécessaire de dire qu'il s'agit d'une suppression dans le body, puisqu'un endpoint en verbe DELETE sera exposé sur la ressource. Au-delà de l'utilisation des verbes, ce niveau inclut aussi l'utilisation des codes de réponse HTTP (200, 400, etc), afin de ne plus répondre en 200 systématiquement, avec un message d'erreur dans la réponse (si nécessaire). ## **Niveau 3** C'est le dernier niveau, qui fait que peu d'API sont entièrement RESTful, il s'appelle Hypermedia Controls (ou HATEOAS). À ce niveau, il est possible d'**explorer l'API sans documentation** et sans front-end pour nous guider au travers des endpoints. La problématique est la suivante : lorsque que vous récupérez la liste des utilisateurs sur `/api/users`, comment faites vous ensuite pour récupérer le premier utilisateur ? Par convention, ou par divination, vous me direz de requêter `/api/users/1`, mais ça ne vous permet pas de connaître la liste des actions possibles pour les utilisateurs (comment désactiver mon utilisateur par exemple). L'idée de ce niveau est donc d'inclure suffisamment d'informations dans la réponse pour permettre d'utiliser l'API sans aucune ressource supplémentaire. Maintenant que j'ai apprivoisé ce modèle pour créer des API optimisées, on va pouvoir [le mettre au service de nos futurs devs](/fr/prestations) ! ### Pour aller plus loin... [Spring Data REST](https://spring.io/projects/spring-data-rest) permet de développer des services respectant les 4 niveaux du modèle de Richardson. De plus, la dépendance `spring-data-rest-hal-browser` permet de visualiser l'API à l'aide d'une interface graphique, basée sur la spécification de l'API qui est standardisée. Note : [Christophe Bornet](https://twitter.com/cbornet_) propose aussi un [format d'API](https://github.com/cbornet/ohm) respectant le standard HATEOAS, et permettant une visualisation via l'interface de Swagger/OpenAPI. --- ### Vous avez dit productivité ? URL: https://www.bearstudio.fr/fr/blog/articles/vous-avez-dit-productivite Date: 2020-11-25 ## Améliorer sa productivité en 10 étapes L’enjeu de la productivité au travail a rarement été aussi primordial que dans la société d’aujourd’hui où tout rime avec la fameuse maxime des temps modernes : _“time is money”_. Pourtant, contrairement à ce qu’on pense, il ne suffit pas de comparer le temps passé sur une tâche aux résultats obtenus, pour prétendre analyser l’efficacité d’une personne dans son travail !  Certains l’ont sans doute déjà compris, au [BearStudio](/fr/) nous ne sommes pas très portés sur la langue de bois... Il est temps de voir un peu plus loin que les conseils bateau qu’on peut trouver sur le net, comme par exemple : prendre des notes, écrire des _to-do_ et faire des pauses. C’est pourquoi nous vous avons concocté une petite **liste des bonnes pratiques** pour rester productif (presque) en toutes circonstances !  ![améliorer sa productivité](images/photo-1507099985932-87a4520ed1d5.jpeg) ### **1- Mettre ses objectifs par écrit et les relire** Il y a ceux qui ont une mémoire à toute épreuve avec une capacité de concentration impressionnante sur leurs priorités. **Well, vous n’aurez pas besoin de mettre vos objectifs par écrit parce que vous êtes badass.** Dans le cas contraire, il vous faudra développer l’habitude d’écrire vos objectifs quotidiennement. Nous recevons trop d’informations à traiter chaque jour et finalement il n’y a que les documents « urgent » qui obtiennent notre attention. Alors, mettez vos objectifs par écrit avec la mention « Urgent » ou « A faire absolument » et il y aura de plus fortes chances que vous les lisiez et pensiez à vous en occuper. C’est un des exercices les plus simple au monde. Mais il faut avouer que c’est aussi un peu enquiquinant de devoir relire ses objectifs si cela vous amène à constater que vous êtes loin d’avoir tout fait. Pour éviter de tomber dans ce sentiment de culpabilité, beaucoup de gens préfèrent ne pas relire leurs objectifs, d’autres décident carrément de ne pas les mettre par écrit. Méfiez-vous de cette fausse solution. **En effet, relire ses objectifs et ses plans d’action de manière régulière vous permet de vous concentrer sur vos priorités parce que vous les avez à l’esprit.** A l'inverse, un objectif trop longtemps mis de côté risque de vous sortir complètement de la tête pour vous revenir en pleine figure le jour où il sera devenu urgentissime... Au BearStudio par exemple on utilise [Trello](https://trello.com/fr), c’est une sorte de grand tableau interactif. Des cartes se baladent entre les différentes colonnes : to do, to test/review … Et nous avons la colonne "objectif", où chacun complète sa progression au fur et à mesure. Pour en savoir plus sur les outils qui vont révolutionner votre quotidien d'entrepreneurs, nous vous invitons à lire cet [article](/fr/blog/articles/outils-incontournables-pour-un-entrepreneur). ### **2- Garder les tâches demandant le moins d’énergie pour la fin de journée...** Même en étant moins performant que le matin, on peut avancer sur des tâches « de fond » afin d’optimiser son temps de travail. Privilégiez donc les tâches simples lorsque la fatigue de la fin de journée commence à se faire sentir. A l'inverse, privilégier les tâches **qui requièrent davantage de créativité le matin**. Il est évident qu'après une bonne nuit de sommeil, on est paré à affronter même les tâches les plus difficiles. Ces habitudes simples vont vous permettre de réaliser en un rien de temps de tâches qui vous paraissaient habituellement chronophages ! On a pu remarquer au BearStudio qu’après une journée passée à développer, on a la tête comme une citrouille. La pire chose pour un développeur c’est de répéter des erreurs bêtes et perdre du temps à cause de ça.  ### **3- Réduire le nombre de réunions quotidiennes**  Combien de fois avez-vous eu l’impression de ne faire qu’enchaîner les réunions ? Si les réunions entre collaborateurs, les échanges d’informations et la création de rapports sont importants, la gestion de vos tâches quotidiennes l’est tout autant. Chez nous, le **stand-up** est un **rendez-vous quotidien** qui permet de faire le point sur les tâches de chacun. Un peu avant midi, nous prenons ainsi une petite demi-heure pour que chacun puisse s'exprimer ou demander de l'aide. C'est aussi le moment de remercier ses collègues pour tel ou tel coup de main ! Mention spéciale pour le rendez-vous tant attendu du vendredi soir : le "[B&B](/fr/blog/articles/le-b-b-cest-quoi)". ### **4- Procéder par ordre de priorité**  En terminant les tâches les plus urgentes en premier, **on s’évite le stress** provoqué par cette sensation d’inachevé. Traiter les courriers urgents, répondre aux questions des clients ou des collègues et préparer une **liste des priorités** de la journée permet déjà d’améliorer sa productivité. Et puis ça motive de garder les tâches les plus sympas pour la fin, on commence pas un repas par le dessert … 😛 ### **5- Savoir précisément quel est le résultat à atteindre et prévoir un plan d’action**  L’habitude d'avoir clairement en tête le résultat souhaité est un bon moyen de vérifier que nous allons dans la bonne direction et que le rythme auquel nous progressons est en accord avec ce qui est prévu. Cet exercice est d'ailleurs rendu plus aisé grâce aux nouveaux outils à notre disposition. Le fait d'avoir une idée claire de ses priorités permet de ne pas (trop) s’en éloigner. Une méthode classique qui a fait ses preuves consiste à imaginer **plusieurs étapes** avant d'arriver au bout d'une tâche. Et si on sent qu'on risque de ne pas y arriver, on demande de l’aide ! Ben oui, un projet ça ne s'improvise pas comme ça : il faut avoir de la visibilité tant en termes de planning que de besoins technique et humain... ### **6- Désactiver les notifications de son smartphone**  Avant de commencer une tâche qui demande beaucoup de concentration, il est conseillé de **désactiver les alertes de votre téléphone portable** (SMS, e-mail...) afin de ne pas être interrompu sans arrêt. Vous serez ainsi plus serein pour mener à bien votre travail. Surtout s'il suffit d'une mouche qui vole pour vous distraire... Toutefois, les personnes souhaitant rester joignables peuvent avoir recours à d'autres techniques. Par exemple, prioriser certains groupes ou applications pour ne pas être submergés de notifications mais recevoir les informations essentielles. Idem, attribuer différentes sonneries à tel ou tel contact est un bon moyen de ne pas manquer un message important. ### **7- Se fixer une limite de temps**  La plupart d'entre nous travaillent mieux lorsqu'ils gèrent bien leur temps au quotidien ou sur la semaine. Ce n'est pas un secret : **bien gérer son temps** est souvent synonyme de productivité élevée. Mais il s'agit généralement d'un défi de taille. Pour y parvenir, fixez-vous une certaine durée pour chaque tâche de votre planning en utilisant un chronomètre, une appli ou un outil en ligne. Notez le temps passé pour chaque tâche afin d'identifier celles qui vous prennent le plus de temps. Vous arriverez ainsi petit à petit à mieux évaluer votre charge de travail et à donc mieux partager votre temps.  Pour vous donner un exemple, en tant que prestataires de services, nous sommes obligés de noter précisément combien d'heures nos développeurs travaillent sur un projet. Chaque soir, il revient donc à chacun de remplir son **"Compte-Rendu d'Activités"** pour assurer le suivi du consommé d'un projet. ### **8- Faire régulièrement des pauses**  Rester motivé veut dire avoir l'énergie suffisante pour continuer à travailler de manière efficace peu importe ce qui se passe autour de vous, bien que les choses se corsent un peu dans le cas des OpenSpace... Personne ne s'attend à ce que vous soyez à fond à chaque minute de la journée, donc pour le bien de votre état mental et physique, **accordez-vous des petites pauses pour recharger vos batteries**. Cela vous permettra de vous remettre au travail en étant plus concentré, sans compter qu'un œil frais est généralement plus à même de trouver de nouvelles solutions. C’est le moment parfait pour aller saigner la machine à café de la boîte ! Au BS elle fonctionne à plein régime. ### **9- Profiter des jours de repos et des vacances pour déconnecter** En vous laissant aller à la **procrastination** et en rapportant du travail à la maison ou sur votre lieu de vacances, vous n’aurez aucune chance d’améliorer votre productivité. Rien de tel que partir pour mieux revenir.  Qui à part des [développeurs passionnés](/fr/equipe) amèneraient leur travail avec eux en vacances de toute façon ? ### **10- Faire ce qui a été planifié et sans excuses**  Pour beaucoup de raisons, nous recherchons de plus en plus à avoir des journées « soft ». Rien de plus normal. Si vous êtes adeptes du minimalisme, il restera toujours dans votre emploi du temps un minimum de choses que vous devez faire. Sinon, nous tomberions facilement dans la culpabilité de la paresse et nous nous surchargerions donc le planning de la journée pour **rattraper les tâches en retard**. En effet il n’y a que la discipline - faire ce que nous devons faire, que ce soit plaisant ou non – pour nous aider à progresser dans l'avancement de nos projets personnels et professionnels. Tout le monde a du boulot là-dessus, que ce soit au BS ou dans n’importe quelle autre boîte. Et c’est sans doute le conseil le plus difficile à mettre en œuvre ! ## Bilan Nous voilà arrivés à la fin de cette liste, certes non-exhaustive, mais déjà bien fournie concernant les bonnes pratiques qui peuvent être adoptées pour gagner en productivité ! Vous n'êtes évidemment pas supposé TOUT mettre en place dès demain, mais on espère quand même que ces conseils vous seront utiles. N'hésitez pas à nous **partager vos astuces** et outils pour améliorer l'efficacité au travail via les réseaux sociaux ! Cela pourrait être utile à nos ours ;) Les auteurs : [Emma Monchablon](https://www.linkedin.com/in/emma-monchablon/) & [Nathan Lesouef](https://www.linkedin.com/in/nathan-lesouef-0101b4152) --- ### Brève 3 : Simplifier l’écriture d’interfaces utilisateurs avec React JS URL: https://www.bearstudio.fr/fr/blog/articles/simplifier-ecriture-interface-utilisateur-react-js Date: 2020-11-24 ⚡ [Chakra UI](https://chakra-ui.com/) est un **projet Open Source** qui permet de simplifier l’écriture d’[interfaces utilisateurs](/fr/prestations/ux-design) avec [React JS](https://reactjs.org). Dans ce domaine il existe déjà beaucoup de librairies Open Source comme [Material UI](https://material-ui.com/) ou [Reactstrap](https://reactstrap.github.io/) Alors pourquoi ⚡ ️Chakra UI ? ## API de composition Chakra UI propose une **approche utilitaire** dans l’esprit de [Tailwind CSS](https://tailwindcss.com/) mais dans l'écosystème React.  La librairie ajoute à l’approche utilitaire la notion de [composition](https://epicreact.dev/soul-crushing-components). La composition est un des **patterns** les plus importants dans le développement UI moderne. Elle permet d’éviter de créer des composants qui se transforment rapidement en monstruosités et de **combiner souplesse et réutilisabilité**. ![Chakra UI react JS](images/carbon-768x576_59972bb1df96d49ed45e4681f75fa446.png) ## Accessibilité Par défaut, tous les composants de Chakra UI sont disponibles. Et surtout la librairie permet d'implémenter ses propres composants en les rendant accessibles. Gestion du focus, navigation au clavier, gestion des attributs [ARIA](https://developer.mozilla.org/fr/docs/Accessibilit%C3%A9/ARIA/Techniques_ARIA) et autres bonnes pratiques [UX/UI](/fr/prestations/ux-design) font partie intégrante de la librairie. ## Gestion du thème Chakra arrive avec un thème de base déjà bien configuré. Mais la puissance de la solution vient du fait que changer le thème est un jeu d’enfant ! Cela permet de pouvoir gérer le fameux **Dark Mode** mais pas seulement. Par exemple, sur le site de [Codeurs en Seine](/fr/blog/articles/codeurs-en-seine-2019-des-devs-de-lux-et-de-lagilite), tout le site change de thème entre la partie [conférence annuelle](https://www.codeursenseine.com/2020) et la partie [meetups](https://www.codeursenseine.com/meetups). On peut voir que l’ensemble des composants (navigation, boutons, etc…) change sans pour autant avoir à les réécrire ou devoir charger une autre feuille CSS. Si vous souhaitez générer rapidement des couleurs compatibles avec Chakra UI, je ne peux que vous conseiller [Smart Swatch](https://smart-swatch.netlify.app/) 😉 (c’est d’ailleurs ce que conseille également la [documentation de Chakra](https://chakra-ui.com/docs/theming/theme) 😛). ## Communauté En dehors de l’aspect technique, le créateur [Segun Adebayo](https://twitter.com/thesegunadebayo) et tous les contributeurs sont très accessibles et bienveillants. Participer au projet est donc super simple et avec mes petites modifications apportées, je fais aussi partie des [contributeurs](https://chakra-ui.com/team) 😇 ## Conclusion  Comme vous l’aurez peut être compris, je ne peux que vous recommander d’aller faire un tour sur la **documentation** de la version 1.0 qui vient de sortir au moment où j’écris ces mots. Documentation de la version 1.0 [https://chakra-ui.com/](https://chakra-ui.com/) --- ### Brève 2 : Un système de test end to end simple et complet : CodeceptJS ! URL: https://www.bearstudio.fr/fr/blog/articles/systeme-de-test-end-to-end-simple-complet-codeceptjs Date: 2020-10-20 ## **Qu’est-ce qu’un test end-to-end déjà ?** Le système de test **end-to-end** est un principe de test utilisé pour vérifier si une application ou un morceau d’application se comporte comme prévu “de bout en bout”. Ces tests sont souvent détaillés en **scénarios de tests**, qui définissent le comportement de l’application et qui prévoit donc les différents clicks, remplissages de champs, pages sur lesquelles nous sommes redirigées etc… Pour vérifier qu’une application possède le comportement attendu, des **tests manuels** sont possibles mais peuvent aussi être automatisés via certains outils. ## **La solution : CodeceptJS !** [CodeceptJS](https://codecept.io/), c’est l’outil le plus simple qu’on ait trouvé pour mettre en place des tests end-to-end et il a plusieurs **avantages**. Il permet de créer des scénarios de tests très lisibles, de définir simplement ses règles, ses actions et de préciser simplement ce qu’on va voir, la page sur laquelle on est censé naviguer etc. Il va aussi permettre de lancer ses système de tests sur un vrai navigateur et faire le test devant vous. Vous serez alors capable de voir en temps réel vos tests s'exécuter (et c’est bien satisfaisant ! 🤩)
![Exemple de code d'un test rédigé avec CodeceptJS](images/feature-codecept.png)
_Exemple de code de test via CodeceptJS_
Côté technique, CodeceptJS fonctionne avec plusieurs moteurs de test (c'est ce qui lance un navigateur et exécute les tests automatiquement...). Vous aurez donc le **choix entre plusieurs navigateurs** Web, Mobile ou API en fonction de ce que vous voulez tester ! À noter que bien sûr, CodeceptJS utilise Javascript, et fonctionne à 100% avec React, Vue ou Angular ! 😉 ## **Et bien plus encore !**  CodeceptJS propose encore d’autres features très intéressantes ! C’est un outil complet, avec une **documentation** détaillée et une **communauté** disponible en cas de besoin (GitHub, Slack, réseaux sociaux…). À noter aussi que CodeceptJS a lancé en beta une interface permettant de faire ces tests, qui s’appelle CodeceptUI. N’hésitez donc pas à suivre le projet et à tester cet outil qui peut-être, vous permettra d’éviter quelques bugs en prod sur [votre projet](/fr/prestations) 😎 Cet article vous a plu ? Alors vous aimerez sans doute [celui-ci qui vous explique comment simplifier l'utilisation de React JS.](/fr/blog/articles/simplifier-ecriture-interface-utilisateur-react-js) --- ### Comment se faire un réseau pour trouver un premier stage ? URL: https://www.bearstudio.fr/fr/blog/articles/comment-se-faire-un-reseau-pour-trouver-un-premier-stage Date: 2020-10-19 _Disclaimer : cet article a été écrit avant la crise du coronavirus_ 😷 Cela fait un moment que [Rudy](/fr/equipe/rudy-baer) voit passer des jeunes développeurs et des gens en reconversion qui galèrent à trouver des entreprises pour un stage ou une alternance. En général, il leur donne des conseils et il compte d’ailleurs continuer à le faire. Toutefois, nous allons essayer d’en synthétiser un maximum ici. Mettons-nous en situation : Mohamed (j’utilise volontairement un prénom à consonance musulmane dans un autre contexte qu’une histoire péjorative sur BFM TV) est en reconversion professionnelle à Rouen. Il ne connaît personne qui travaille dans le milieu informatique ni dans celui des startups. --- ## Le CV Je ne vais pas détailler le problème. Tous les gens de ma promo ont le même CV. Je vous invite à lire l’article [d’Arnaud Lemercier](https://codedesign.fr/candidature-manque-experience-alternance/) à ce sujet. Suivez donc ses conseils pour mettre en avant vos compétences ou vos expériences perso. Quant au problème de s’appeler Mohamed et d’avoir moins de chance que Nicolas de trouver un travail je n'ai malheureusement pas de solution… Sachez que le numérique est encore relativement préservé de ce phénomène. Je ne connais pas les raisons exactes mais ça doit probablement être un mélange entre culture, mentalité bienveillante et partage, propre à l’Information Technology ( IT ) depuis le début du web (open source, conférence etc.). C'est peut-être également une réalité business due à la pénurie de développeurs sur le marché du travail. Une fois qu’il a son CV et sa lettre de motivation, que doit faire Mohamed ? En général, les écoles ont des listes d’entreprises à contacter. Elles invitent généralement les étudiants à aller à des salons. Parfois, elle font aussi venir des entreprises qui galèrent à recruter, à faire des présentations dans les écoles. Je ne vais pas m’étendre là-dessus. Voyons d’autres pistes... --- ## Les intervenants extérieurs dans les écoles Dans les formations, il y a deux types de prof. Les salariés de l’école ou du centre de formation et les intervenants extérieurs. Ce sont ces derniers qui vont nous intéresser. En général, ils travaillent dans le privé. Même s’il n’ont pas tous le réflexe d’en parler lorsqu’ils se présentent (au BearStudio c'est le cas 😛 ), **leurs boîtes cherchent généralement des stagiaires ou des alternants.** N’hésitez pas à les solliciter ou à leur demander les coordonnées de la personne qui gère ça. Vous pouvez également, juste à partir du nom de la boîte, essayer de trouver le contact. --- ## Les communautés chaudes de ta région La plupart des villes de France ont une communauté IT plus ou moins active. Dans le cas de Mohamed, il y a au moins une fois par mois un [meetup Codeurs en seine](https://www.codeursenseine.com/meetups/) qui a lieu généralement à Seine Innopolis, en plus de la [grande messe annuelle de **Codeurs en seine**](/fr/blog/articles/codeurs-en-seine-2019-des-devs-de-lux-et-de-lagilite) au mois de novembre ! C’est un bon moyen de **rencontrer des gens en activité**, qui sont dans une démarche de partage et de bienveillance. Voir même pour certains, en galère pour recruter. **Quelques tips :** - N’hésitez pas à **engager la conversation** sur ce que vous venez de voir avant de demander : _"KIKOO TA BOITE CHERCHE DES STAGIAIRES ?!"_. - Si vous voyez ou sentez que la personne en face n’a pas envie de vous parler, **ne faites pas le relou** à lui tenir la conversation pendant une heure. - **Demandez des tuyaux**, genre : _"Je cherche un stage, t’aurais pas des tips ou des boîtes qui cherchent ?"_. - Je n'ai pas d’avis sur le CV papier. Le CV en ligne est pratique à partager et ça permet de récupérer un contact. ### Comment trouver ces communautés ? Demandez aux écoles, regardez sur les réseaux sociaux. Le site : [Meetup](https://www.meetup.com/fr-FR/) est un bon moyen de trouver également (perso je l’utilise pour trouver des communautés quand je suis à l’étranger). ![Trouvez la communauté qui vous ressemble.](images/capture-du-2020-04-01-15-18-21-1024x528.png) Toutes ces communautés ont généralement au moins un **Twitter / Facebook / LinkedIn / Youtube et un site**. N’hésitez pas à suivre leurs réseaux et surtout à regarder les précédents posts pour trouver des pistes. ### Une piste assez simple : les sponsors ! Généralement, ces communautés sont gérées par des bénévoles et font appel à ce que l'on appelle des **sponsors** pour payer leurs frais. La contrepartie c’est de leur faire de la com à des fins de recrutement ou de mise en avant de leurs produits. Donc vous vous débrouillez pour trouver cette liste de sponsors, qui se trouve généralement sur le site + sur les réseau + les orgas en parlent pendant les confs, voire même ils ont des stands aux évènements. Trouvez donc la liste des sponsors et contactez-les ! --- ## Slack Une tendance de ces dernières années, c’est la fédération de ces communautés autour d’un Slack. Dans le cas de Mohamed à Rouen il y a le Slack de codeurs en seine ([En voici le lien](https://codeursenseine.slack.com/join/shared_invite/enQtNjQ3MDEyMzY3MjY0LTE1MWY0MGM1ODgwYzZlZjY4MDk1NzgyYWYxNzQ5NjU3YjZjYzQyY2U1YzlhZWRkNGEyMTUwYzZiMmMyMGY0OTg)). En général l’un des premiers channel qui est créé est le #CV / #Jobs. L’idée est de permettre aux recruteurs de poster leurs offres et aux candidats de poster leur CV. Ces Slacks vous permettent d’avoir **un contact plus humain** que le traditionnel formulaire de [candidature](/fr/contact/processus-candidature-bearstudio). --- ## Les façons atypiques de candidater - **Tag ou MP quelqu’un sur Twitter.** Utilisez les réseaux sociaux de manière intelligente pour avoir un contact plus direct. - **Les bars** (notamment à bière). Je n'ai pas essayé mais je suis prêt à parier qu'il y a forcément des développeurs dans les bars le vendredi soir. À Rouen par exemple, chez "Papa boit de la bière" [vous croiserez souvent des devs du BearStudio]() - **Visez les CTO, les Lead dev ou les VP engineering etc.** En gros, les gens qui gèrent une équipe. Il y en a bien un qui doit se dire : "_Ah ouais, un stagiaire ou un alternant pourrait s'occuper de ça_.". J'aurais tendance à vous inciter à éviter les RH. Surtout dans les grosses boîtes. Cependant je n'ai jamais travaillé ni eu affaire à eux. Je sais que dans certaines confs business et/ou IT les gens s'en plaignent. --- ## Les events business Dans **toutes les villes** il y aussi des événements “digital” plutôt orientés business, startup, entrepreneur, souvent boycottés par les développeurs car trop de Bullshit. N’hésitez pas à y aller pour trouver des contacts. Un conseil : si c’est un event “digital”, et non numérique, dites-vous que la plupart des gens n’y connaissent rien au dev, donc vous êtes forcement plus expert qu’eux. Ça vous donnera un peu de confiance en vous mais faites gaffe à ne pas tomber sur le dev obligé de venir à cause de son patron et passer pour un con :p Dans le cas de Mohamed à Rouen il y a des events organisés par **NWX** par exemple, ou la **french tech Rouen**. Il y a aussi des Slack business dans certaines villes. Malheureusement, à Rouen je crois que Slack est un peu trop "digital du futur". On n'a pas de communauté business... 😢 --- ## Le feedback après un entretien Demandez systématiquement un retour par mail après un entretien. Si vous sentez que vous n’avez pas été pris parce qu’ils ont choisi quelqu’un de meilleur (en gros si vous n’avez pas juste été un gros boulet), demandez s’ls connaissent des boîtes qui pourraient être intéressées par votre profil. Soyez sincère, genre : _« je galère à trouver, mais j’en ai vraiment envie blabla… »_. --- Voila ! Si je devais troller je dirai qu’il faut juste **se sortir les doigts**… :p  En vérité, je sais que c’est difficile de commencer quand on a aucun réseau. Cependant, il faut juste **essayer et faire pas mal d’efforts** au début. On trouve souvent par chance la première fois, et puis au fur et à mesure des rencontres ça se développe et l'on apprend. Ma mère étant femme de ménage, mon père ouvrier en bâtiment, j’ai commencé sans réseau ni même un seul contact dans le secteur tertiaire. Je me souviens que j’osais à peine prendre le téléphone pour appeler et demander s’il prenait des stagiaires. Je passais une heure pour envoyer un mail de candidature. Par un heureux hasard j’ai trouvé un stage à la Région Normandie. J’ai fais du Java et une fois cette expérience sur mon CV c’était beaucoup plus simple… (en gros la première fois est toujours un peu stressante 😅 ) On a la chance d’être dans un secteur d’activité avec **beaucoup de demande.** Passé un certain stade, envoyer un profil LinkedIn suffit pour trouver un job ;). --- ### Pourquoi nous vous proposons des minis audits UX gratuits ? URL: https://www.bearstudio.fr/fr/blog/articles/pourquoi-proposer-des-minis-audits-ux-gratuits Date: 2020-10-19 Vous ne le savez peut-être pas mais au BearStudio, nous vous proposons des **mini audits UX gratuitement** pour votre plateforme web ou votre application mobile.  ## En quoi consiste un mini audit UX ? Vous avez une application web ou mobile, un produit déjà développé, un POC (Preuve de concept en français), un prototype ? Nous faisons intervenir un de nos experts pour qu’il réalise un **mini audit UX de votre produit**, et ce gratuitement ! L’audit nous permettra d’analyser votre projet et de **mettre en exergue les incohérences** qui peuvent pâtir à l’expérience utilisateur et donc à votre taux d’utilisation.  ## De quoi avons-nous besoin ? Pour réaliser ce mini audit UX, l’équipe BearStudio a besoin d’un accès à une plateforme de tests ou de démonstration. Nous planifions également un brief rapide ensemble pour la présentation de votre projet à un UX Designer. ## C’est gratuit donc où est l'arnaque ? On a l'habitude de se dire que ce qui est gratuit n'est pas forcément qualitatif ou que côté entreprise, c'est du temps-homme jété par les fenêtres... Rassurez-vous ce n'est pas le cas au BearStudio ! Il est certain que si nous avions 150 demandes d’audit par jour, nous ne pourrions pas les traiter ! Nous nous gardons le droit de refuser et avons une **limite de 2 mini audits UX maximum par semaine**. On ne va pas vous mentir, nous faisons ça dans un but commercial afin de générer des leads puis **vendre des** **prestation**s. L’idée étant de prouver que nous sommes compétents et que nous savons de quoi nous parlons.  Ensuite, il y a un intérêt formateur en interne : un UX designer travaille généralement sur plusieurs produits en parallèle mais son travail demande une veille constante sur les bonnes pratiques et les [règles d’ergonomie](/fr/blog/articles/la-loi-de-proximite). Du coup, travailler sur des cas concrets lui permet d’**acquérir de l’expérience**. Surtout que les développeurs ont un don pour inventer des patterns ou des design WTF, avoir de bons exemples de choses à ne pas faire est très formateur pour expliquer les bonnes pratiques.
![Nos minis-audits gratuits](images/audit-ux-bonnes-pratiques.png)
_Ce qu'il faut retenir et ce qu'il ne faut pas_
## Combien de temps pour un mini audit UX ? Nous faisons en sorte que nos UI/UX designer passent 1h à 2h maximum sur la réalisation de l’audit. En terme de délais de réalisation, cela va dépendre des plannings de l’équipe. Et comme le mini audit UX est gratuit, nous donnons au **maximum 2 semaines pour le réaliser**, à partir du moment où nous vous avons indiqué que nous pouvions le faire pour vous.  ## A quoi ressemble le livrable ? Enfin, une fois l’audit terminé, nous vous envoyons des **slides en PDF avec les points positifs ou négatifs** que nous avons relevé, ainsi que des explications pour mettre en avant ce qui ne va pas. Généralement, nous faisons une visioconférence avec vous pour présenter et expliquer les résultats. ## Après le mini audit, quelle est la prochaine étape ? Autant prévenir, la prochaine étape ne sera pas gratuite 😉 Il y a [plusieurs possibilités](/fr/prestations) qui dépendent un peu du contexte : 1. Un audit plus poussé avec des préconisations 2. Une prestation de réalisation de [wireframes](/fr/prestations/ux-design) ou [maquettes](/fr/prestations/ux-design)  3. Une prestation de réalisation de styleguide ou storybook 4. Une formation de vos développeurs sur les bonnes pratiques en ergonomie ## Comment faire pour bénéficier d’un mini audit UX ? - Nous suivre sur au minima 2 de nos réseaux sociaux ([Twitter](https://twitter.com/_BearStudio) ou [LinkedIn](https://www.linkedin.com/company/bearstudio/) par exemple). - Faire une demande via le [formulaire de contact](/fr/contact). - Optionnel : si vous êtes contents, nous recommander à votre réseau.😉 ![Trois icônes représentant les piliers du mini audit UX : fonctionnement technique, expérience utilisateur et communication](images/audit-ux-gratuit-bearstudio-1.png) --- PS : N’hésitez pas à nous interpeller pour des produits que vous utilisez et qui auraient vraiment besoin de nos services #troll. (Par contre les institutions ou les trucs publics ce n’est pas la peine de penser à nous, nous ne voulons pas nous faire chier avec les appels d’offres pipeautés 😜 ) --- ### Brève 1 : Rendre une méthode atomique en Java en 2 minutes URL: https://www.bearstudio.fr/fr/blog/articles/breve-1-rendre-une-methode-atomique-en-java-en-2-minutes Date: 2020-09-11 _Temps de lecture : 3 minutes_ ## Qu'est-ce qu'une méthode atomique ? Une méthode (ou fonction) atomique, c'est une méthode qui ne pourra pas s’exécuter plusieurs fois en même temps, parallèlement. Si deux threads appellent la fonction en même temps, les deux exécutions seront effectuées les unes après les autres. ## Comment rendre une méthode atomique très simplement avec Java ? La librairie `Funtom Java Utils` permet de rendre une méthode atomique en quelques lignes, à l'aide de la classe `SynchronizedExecutor` Lorsque vous souhaitez rendre du code atomique, dans un service de votre application [Spring](/fr/blog/articles/versionner-entite-jpa) par exemple, il vous suffit : - D'instancier un executeur synchrone (SynchronizedExecutor) en attribut de classe: `SynchronizedExecutor atomicExecutor = new SynchronizedExecutor();` - Utiliser cet executor dans une méthode pour rendre du code atomique: `atomicExecutor.execute(() -> { // some code to execute });` ### **Un exemple concret :** Vous [développez une application](/fr/prestations/developpement-web) pour commander des places de cinéma et vous vous attaquez à la fonction permettant de réserver une place. Vous avez besoin de rendre ce code atomique car sinon deux personnes pourraient réserver en même temps la dernière place de cinéma disponible. ![Exemple de code d'une fonction Java atomique](images/atomic_method-2-1024x600.png) ### Pour aller plus loin : La librairie propose aussi d'autres synchroniseurs - `PerKeySynchronizedExecutor` qui permet de bloquer les exécutions parallèles seulement si une exécution parallèle est effectuée avec la même "Clé". Dans notre exemple, il serait très utile car ce serait préférable de bloquer l’exécution uniquement pour des réservations sur une même séance de cinéma. Le code: `private final PerKeySynchronizedExecutor atomicExecutor = new PerKeySynchronizedExecutor<>();` . Ici, `Long`  c'est le type de la clé qu'on va donner. Lors de son utilisation: `atomicExecutor.execute(movieShow.getId(), () -> { // some code });` où `movieShow.getId()` est l'identifiant de la séance. Si une personne A réserve sur la séance d'id 1 et une personne B réserve sur la séance d'id 2, elles pourront le faire parallèlement. - `ReadWriteSynchronizedExecutor`  qui permet de bloquer l’exécution parallèle en écriture mais pas en lecture - `PerKeyReadWriteSynchronizedExecutor` qui fait de même mais uniquement sur un clé spécifiée --- ### Le B & B, c'est quoi ? URL: https://www.bearstudio.fr/fr/blog/articles/le-b-b-cest-quoi Date: 2020-06-19 Dans la série des articles de blog sur le thème de l'entrepreneuriat, j'avais envie de vous partager un peu le quotidien au BearStudio. C'est pourquoi je vais vous parler d'un rituel que j'ai mis en place avec mon équipe. Pour info, cet article date de l'an dernier, avant les évènements de 2020 qui ont compliqué un peu les choses... Continuons donc avec les pratiques de management simples mais efficaces. Tout cela part d’une réflexion que mes associés m’ont fait au début du BearStudio. “_On sait que toi tu gères et que tu as une vision globale car c’est ton rôle, mais nous on a le nez dans la production et on a du mal à voir où l’on va…_”. Alors je me suis dit : _"Pas de soucis, il faut faire un point régulier pour leur donner de la visibilité sur l’activité commerciale, etc_. _Mais je fais ça quand ? Le lundi matin ?_ _Généralement je suis full, en plus je sais qu'ils ne vont pas écouter ou avoir autre chose de plus prioritaire_..." À ce moment-là, je me suis rappelé de ce pote qu’on attend toujours le vendredi soir car ils prennent des bières entre collègues pour décompresser de la semaine… Nous nous n’avons pas ça mais ça serait bien ! Ah bah on va faire d’une pierre deux coups ! --- ## Qu'est-ce que c'est ? Tous les vendredis vers 17h30 ou 18 h, la team prend une **Bière** et fait le **Bilan**. En général je présente où en sont les chiffres : voir si nous sommes en retard ou en avance. Je leur montre également où ils peuvent trouver cette information. Et s’il y a des points particuliers à aborder en groupe c’est généralement le moment privilégié : embauches, nouvelles idées, annonce de départ 😭 (RIP Luis), présentation de side projects ([TraveledMap](/fr/blog/articles/traveledmap-outil-indispensable-pour-vos-photos-de-voyage) par exemple). TOUT ÇA... autour d’une bière (ou d’un truc sans alcool pour ceux qui ne boivent pas). Même si ça a lieu presque toutes les semaines, ce n’est pas un moment obligatoire… La récurrence fait que **tout le monde participe** forcément au moins une à deux fois par mois. Ça s’est vite imposé comme une tradition, même s’il n’y a rien de spécial à dire. En général, on raconte à tous ceux qui les auraient loupées, les anecdotes de bureau complètement WTF de la semaine. Et croyez moi, il y en a ! ![Scène culte de la série Kaamelot](images/kaamelott-arthur-cest-systematiquement-debile-mais-cest-toujours-inattendu.jpg) --- ## Les effets positifs du bière & bilan Le principal effet positif c’est simplement que tout le monde passe un bon moment, sans stress avec des gens que nous côtoyons tous les jours. Ça permet également de communiquer de l’information de la part de la “direction” sans avoir à faire une réunion d’agence chiante 1 fois tous les 6 mois… De plus, les informations financières (de manière générale) ont du mal à être comprises donc la fréquence et l’arrivée de nouveaux (stagiaires ou salariés) permettent d’avoir plusieurs fois l’explication et donc que chacun puisse la comprendre à son rythme. [Nous sommes passés de 3 à 15 en 4 ans](/fr/blog/articles/rex-4-ans-entrepreneuriat-au-bearstudio) : il faut bien _onboarder_ tout le monde… Pour les développeurs en _remote_ permanent, nous pouvons les faire participer à ce moment de _team building_ malgré la distance. Certains vont parfois dans un bar ou fumer une chicha pour le B & B **😉** --- ## Les autres trucs amusants que nous faisons avec les B & B - Le classique B & B qui se prolonge au bar. - 2 teams de B&B croisées : une partie des dev à Rouen et l’autre en remote en Tunisie ou en Thaïlande se réunissent. - Les guests qui viennent au B & B : conjoints ou conjointes, potes, voisins, clients… - Les fins d’entretien au B & B : rien de tel pour montrer sa sincérité que d’inviter un candidat à prendre une bière avec ses futurs collègues pour finir de le convaincre Voila ! En soi rien de révolutionnaire, mais trop de managers sous-estiment l’impact d’un moment de détente régulier sur la cohésion d’[équipe](/fr/equipe). Au passage ce billet de blog permettra à nos futures recrues de savoir ce qu’est le B&B. Si vous avez des feedbacks ou des pratiques similaires n’hésitez pas à nous en parler sur [Twitter](https://twitter.com/_BearStudio) ou [LinkedIn](https://www.linkedin.com/company/bearstudio/). **😉** --- ### Dans les coulisses du BearStudio en temps de crise: un projet déterminant pour le suivi des malades URL: https://www.bearstudio.fr/fr/blog/articles/coulisses-bearstudio-temps-de-crise-projet-suivi-malades-covid Date: 2020-06-08 ## Sur les traces d'un projet au coeur de l'actualité... Nous sommes Nathan et Emma, étudiants en école de commerce, actuellement en stage au BearStudio. Voilà maintenant quelques semaines que nous avons intégré l'équipe ! Notre première mission : retracer le développement d’une interface de monitoring pour les patients atteints du Covid-19. En effet, aucun de nous deux n’est familier avec l’univers de la tech, d'où notre regard de néophytes. D'abord, nous nous sommes immiscés dans les _“channels”_ de discussion instantanée [Slack](/fr/blog/articles/outils-incontournables-pour-un-entrepreneur) utilisés par l’entreprise pour suivre l’avancement des projets. Ensuite, nous avons pris le temps d’échanger avec les porteurs du projet du côté de **KerNel Biomedical**. De même, nous avons interrogé les développeurs du Bearstudio sur le coup : [Ivan](/fr/equipe/ivan-dalmet) et Philippe (a.k.a Tic). Cela nous a permis d’avoir une vision globale et d’en apprendre davantage sur le processus de création.  --- ## A l’origine du projet À la demande d’un hôpital de région parisienne en manque de ventilateurs de réanimation, **[KerNel Biomedical](https://kernelbiomedical.com)** s’est vu adresser une commande urgente. Pour faire simple, les services de réanimation leur ont demandé de développer un système électronique capable de centraliser les constantes vitales de plusieurs patients au même endroit. L’idée était donc de récupérer les données transmises par des respirateurs dans chaque chambre pour les retransmettre vers un PC central afin de faciliter le travail des soignants. De cette façon, le personnel médical pourra les analyser plus facilement et même déclencher des alertes en fonction de seuils préalablement paramétrés par le médecin. En plus de faciliter le suivi des malades atteints du Coronavirus, ce dispositif contribue également à améliorer les conditions de travail des infirmières en limitant les contacts non nécessaires avec les patients contagieux.  Si la start-up a fait appel à notre cher studio de développement, c’est notamment parce qu’ils avaient déjà travaillé ensemble pour la mise au point de _[Dotter](https://dotter.science)_. C'est une plateforme en ligne permettant d’optimiser la gestion électronique des données de recherche clinique. Dans le cadre du projet _Monitoring Ventilation Covid_ (MOVECO), KerNel a donc fait confiance à l’expertise du Bearstudio dans le domaine de l'UX design pour les aider à créer une interface lisible et facile d’utilisation par le corps médical, en très peu de temps. ### Schéma processus **MOVECO** ![schéma MOVECO](images/schema.png) ## L'équipe Quand [Rudy](/fr/equipe/rudy-baer), le “chef” du **BearStudio**, a reçu l’appel d’Emeline fin mars, il a compris qu’il s’agissait d’un projet urgent. Avant même d’avoir signé le contrat, il réfléchissait à qui il pouvait confier la mission. Finalement, il a missionné Ivan ainsi que Tic, alors en train de finir son alternance. Pour la petite anecdote, cet épisode s’est déroulé quelques jours avant l’arrivée officielle d’Ivan dans les locaux du BearStudio, pour lequel il a longtemps opéré en tant qu'advisor UX (Consultant expérience utilisateur). Le fait de placer un nombre très réduit de personnes sur la création de l’interface est un choix stratégique : pour être efficace dans ce domaine, il faut à tout prix éviter de se marcher dessus. D’ailleurs, un duo parvient souvent à fournir des résultats étonnants. Et le partenariat junior/expérimenté est une combinaison qui fonctionne très bien ; d’autant que nos 2 acolytes avaient l’habitude de travailler ensemble. En ce qui concerne la répartition des tâches, Ivan s’est davantage positionné sur la partie exploitation des données, tandis que Tic s’est chargé de la mise en forme des graphiques.  Malgré l’atmosphère un peu tendue et les exigences liées à ce projet, Tic s’est senti vraiment fier d'en faire partie. De son côté, la vaste expérience d’Ivan en tant qu’UX designer est un atout dans ce genre de projet.  L’équipe était aussi composée d’Emeline et d’Adrien, deux chercheurs de chez KerNel. Davantage tournés vers la recherche médicale, ils ont bossé main dans la main avec leurs homologues du BearStudio, restant disponibles pour répondre à la moindre question à propos des “features”.  > _**“Dans ce genre de rush, il n’y a pas de place pour le doute, l’important c’est d’être en communication permanente avec le client”**_ > > Ivan, UX designer au BS ## Le rush : atouts et défauts ### Comment se manifeste le rush? Ivan a un point de vue intéressant : il trouve très formateur de travailler dans le rush. Pour lui, il est tout à fait possible de combiner des projets dans le "rush", et d’autres qui prennent plus de temps. Lorsqu'on est moins pressé, il est possible d’explorer plusieurs options en jonglant avec différents codes pour trouver le plus efficace. Dans les périodes de rush, toute cette expérience acquise s’avère très utile pour aller à l’essentiel. Il n’est alors pas question de passer du temps sur un codage “intelligent & joli” : le plus efficace fera amplement l’affaire.  C’est là que Rudy nous a parlé de “quick & dirty” : il s’agit de travailler au brouillon pour avoir une idée approximative du résultat final. Pour coder rapidement, ils ont utilisé _[Chakra UI](https://chakra-ui.com)_, une bibliothèque de code avec beaucoup de composants prêts à l’emploi, qui leur a permis d’aboutir à un écran fonctionnel dès le premier jour. Le lendemain, ils se sont lancés dans du “refactoring”, un processus qui consiste à changer le système d’un logiciel de façon à ce que cela n’altère pas le comportement externe du code, mais améliore sa structure interne. Le but n’était bien sûr pas d’aller trop vite en faisant du “buggy”, dans le jargon cela signifie rempli de bugs. Par la suite, ils ont opté pour du “quick & dumb”, qui consiste à faire simple, minimisant ainsi les bugs. L’objectif étant toujours de tirer un maximum de valeur, même dans un délai très court. ### Les particularités de ce projet Même s’ils avaient déjà été amenés à travailler pour le domaine médical, les circonstances actuelles ont rendu leur tâche encore plus importante puisqu'il s'agissait d'aider, indirectement, à sauver des vies. En témoigne le dévouement de l’équipe, loin de rechigner à l'idée de travailler tard le soir ou le week-end. > **_"L_**_e BearStudio a été très réactif, ils ont été supers, donnant des updates jusqu’à tard le soir”_ > > Emeline, co-fondatrice de KerNel Biomedical Nous avons demandé à l’équipe s’ils avaient l’habitude de travailler dans ces conditions. Selon Rudy, c’est un peu le propre du métier de devoir se surpasser au BearStudio. Dans ce genre de configuration, précise-t-il, on ne compte plus ses heures, on avance au gré de multiples petites itérations. Ce type de progression permet d’éviter qu’il ne manque des choses à la fin du projet. Il faut donc savoir développer de façon agile et réagir rapidement. Le rendu final n’a pas besoin d’être parfait mais fonctionnel.  De son côté, KerNel, qui ne compte que 4 salariés au total, a davantage l’habitude de ce genre de rush. Il arrive en effet que leurs commandes doivent être livrées dans des temps impartis assez courts. A la différence du BearStudio qui dispose d’un effectif plus important, ils ont donc tendance à travailler sur beaucoup de projets à la fois. Par ailleurs, ils ont moins de rushs car ils s'organisent pour éviter les rushs non nécessaires. Cependant, il est important de rappeler que des projets réalisés dans le rush revêtent souvent un aspect délicat dans la mesure où ils engagent la responsabilité et l’image du **BearStudio**. C’est pour cette raison que l’entreprise préfère parfois décliner certaines demandes de clients plutôt que de compromettre la qualité du travail. En effet, si la quantité de “features” à intégrer ne paraît pas réalisable par rapport au temps imparti par exemple. En outre, nous avons été surpris d’apprendre que le BearStudio ne facture pas forcément le “rush” plus cher. N'ayant pas de contrat ni d'accord commercial au démarrage du projet, ils étaient conscient qu'ils travaillaient potentiellement gratuitement (pas les salariés). --- ## Les principales étapes du développement de ce projet ### 1) Le besoin du client Les développeurs se sont attelés à la tâche sans délai, prenant sur leurs jours de congés et leurs autres disponibilités. Grâce aux données qu’Emeline leur a fournies dès la première réunion, ils ont pu effectuer les premières simulations. Les maquettes ci-dessous ont permis à nos développeurs de cerner précisément l'exigence du client. Vous pouvez voir [ici](https://www.youtube.com/watch?v=7mSr_H_Dpjg) une vidéo du BearStudio qui traite de l'importance des maquettes.
-
![Maquette de la première interface](images/4-maquette_opt_54f2e80524aff50409fa509de2531348.png)
La maquette de la première interface
-
![Maquette de la deuxième interface](images/1-maquette_opt_7d86da3d821d39549614b45d2ea93be7.png)
La maquette de la deuxième interface
### 2) Le travail des développeurs Une des premières tâches à exécuter consistait à détailler ce à quoi l’interface ressemblerait, en voici les premières ébauches. Au fur et à mesure, la mise en forme a bien évolué… D’autant que le choix des couleurs et des graphiques revêt un caractère important, notamment pour des questions de cohérence (les graphiques de la SpO2 -saturation en oxygène, comme leur retransmission doivent être en bleu par exemple).
-
![Maquette au premier jour](images/2-premier-jour_opt_b0d108277de736aa2718f330469f5c53.png)
L'interface le premier jour ...
-
![Maquette au bout de 6 jours](images/3-6e_cc_80me-jour_opt_37f4ed40c7e0177cea4241ecda80e1fd.png)
... et au bout du sixième
Le fameux Adrien qui travaille aux côtés d’Emeline se révèle finalement être de mèche avec Ivan et Philippe, avec qui il semble partager une langue étrange… ![Correction adrien array](images/array-768x121_03537c8cfeda9e8f4bdd1ce78e19465b.png) ![Erreur retournée par l'exécution du programme](images/6-code-2.png) ![Adrien collecteur](images/adrien-768x103_afb5e3ff027f4de1aa07c2831809fea8.png) ![Ivan et Emeline](images/8-ivan-2-768x485_f3e2bf417164edbe4dfb5c2b4ef6c196.png) Au total, le développement du projet peut se résumer en trois étapes : 1. Mettre en place le layout, le squelette; 2. Lancer la navigation pour éviter de tout casser; 3. Mettre rapidement en place le “dashboard” et l’écran de détail, puis les paramètres avant de repasser sur le dashboard, ainsi de suite ... Pour Ivan, la meilleure solution repose sur un avancement en mode incrémental. D'habitude, ils passent la journée à étudier différentes possibilités pour donner la meilleure version d'un point précis. Ici, le timing imposé ne permet pas de tester différentes approches simultanément ; il s'agit plutôt d'allier rapidité et concision. Et pour progresser encore plus rapidement, les développeurs allaient même jusqu'à faire un point sur l'avancement toutes les heures ! L'équipe du **Bearstudio** a surtout travaillé sur l’interface, la récupération de données étant directement assurée par Adrien. Selon Emeline, il n’y a pas eu besoin de faire des modifications après coup. _**"Le**_ **_travail de l’interface a été très bien fait, le BearStudio a été très réactif et plus rapide que nous”_**. Après avoir travaillé d'arrache pied sur 6 jours, ils ont réussi à délivrer un résultat de qualité en un temps record. Cela a permis à Kernel de mettre en place le dispositif sur le terrain sous 10 jours. ## Le mot de la fin Si c’était à refaire ? Il va sans dire que nos deux développeurs seraient prêts à réitérer sans problème ! Idem pour l’ensemble de [l'équipe](/fr/equipe) du BearStudio. En plus, si **KerNel Biomedical** parvient à obtenir la certification _[CE](https://aviesan.fr/aviesan/accueil/menu-header/vademecum-reglementaire/dispositif-medical-marquage-ce)_, leur dispositif pourrait être mis sur le marché et utilisé par de nombreux autres centres hospitaliers. Autrement dit, il se pourrait que cette technologie se révèle utile à plus long-terme.  Après quelques recherches supplémentaires nous avons pu constater que cette interface a effectivement eu un réel impact sur le terrain. Par exemple, l’entreprise KerNel Biomedical a remercié, via [Twitter](https://twitter.com/KerNelBiomed/status/1247234142888132609), Philips France et Asten Santé pour leur réactivité. Dans les _[Echos](https://www.lesechos.fr/politique-societe/societe/coronavirus-criteres-durcis-en-rea-1190991)_, nous avons trouvé un article saluant l'implication de cette même société face à la crise sanitaire.
![remerciement KerNel Biomedical sur Twitter](images/9kernel-1024x863-1.png)
_Le tweet de KerNel Biomedical_
Nous voilà arrivés au bout de notre enquête. Cela a été l’occasion pour nous de découvrir le monde du développement numérique depuis l’intérieur. De plus, les interviews que nous avons effectuées auprès de plusieurs membres de l’équipe nous ont aidé à nous intégrer. Ecrire cet article était aussi l’occasion idéale de nous familiariser avec les outils de la communication. Grâce à cette expérience enrichissante, nous avons pu nous rendre compte du fonctionnement interne d'une start-up. Les auteurs : [Emma Monchablon](https://www.linkedin.com/in/emma-monchablon/) & [Nathan Lesouef](https://www.linkedin.com/in/nathan-lesouef-0101b4152) --- ### jHipster : le générateur de projet pour hipsters URL: https://www.bearstudio.fr/fr/blog/articles/jhipster-generateur-projet-hipsters Date: 2020-05-28 ## Pourquoi un générateur de projet ? Sur tous les [projets techniques](/fr/prestations), notamment les applications web, les mêmes problématiques reviennent toujours. Comme la gestion des entités, la création des requêtes CRUD (Create, Read, Update, Delete) pour chaque entité, la gestion des comptes et de rôles, ou encore le développement d’une partie administration par exemple. Toutes ces mêmes problématiques ont un coût en développement non négligeable et ne font pas partie des problématiques liées au métier de l’application. Les **générateurs de projets** ont pour but d’[alléger le temps passé sur le développement](/fr/blog/articles/jhipster-une-technologie-qui-vous-fait-economiser-de-largent) de ces types de problématiques récurrentes. Ils vont pouvoir générer automatiquement les parties non spécifiques au métier, qui n'apportent pas de valeur ajoutée à l’application développée. Développés par des communautés compétentes et souvent en [open-source](/fr/blog/articles/linux-logiciels-libres-et-open-source-retrouvez-votre-liberte), les générateurs de projets apportent aussi un cadre au projet en développement avec l’apport de normes et de standards. --- ## Le projet jHipster ![Jhipster Logo](images/jhipster-1-tiny.png) **Java Hipster** ou [jHipster](https://www.jhipster.tech) est un projet **open-source** qui permet de générer une application web complète avec une partie [back-end](/fr/prestations/developpement-web) en **Java / Spring-Boot** et une partie [front-end](/fr/prestations/developpement-web) avec la techno de son choix parmi : - React ⚛️ - Angular - Vue JS Le principe de **jHipster** est relativement simple. Vous définissez un **schéma d’entités** (leurs définitions + leurs relations) et à partir de ce schéma, jHipster va pouvoir générer : - La création des entités dans la base de données du projet - La définition des entités dans le back-end - La mise en place d’une API et des requêtes CRUD pour gérer les entités - La modélisation des entités dans le front-end - Les services d’accès aux entités côté front-end - Une partie d’administration des entités dans le projet front - La gestion des comptes utilisateurs et de leurs rôles Le projet rassemble aujourd’hui plus de 15 700 stars sur [Github](https://github.com). Il est utilisé par de nombreux grands groupes comme HBO, HSBC, Bosch, Carrefour, Adobe, Ippon, voire même Google. --- ## Générer son premier projet jHipster ! Pour générer un projet jHipster, vous avez deux options principales : - Passer par l’outil en ligne : [https://start.jhipster.tech/#/](https://start.jhipster.tech/#/) - Passer par le jHIpster CLI La première option est plutôt recommandée lorsque vous débutez avec jHipster et que vous voulez vous faire une idée de son potentiel. Si vous voulez plutôt passer par l’outil en ligne de commande vous pouvez utiliser npm pour installer le CLI : `npm install -g generator-jhipster` Voici les différentes étapes pour générer un projet jHipster via le CLI : Commencez par créer un dossier pour votre projet jHipster : `mkdir jhipsterDemoApp && cd jhipsterDemoApp` Lancez la commande : jhipster ![Commande jhipster](images/carbon-1.png) Le CLI de **jHipster** se lance et vous demande quel type d’application vous voulez générer. Ici nous allons sélectionner “Monolithic application”. C’est-à-dire que nous aurons une seule application avec un serveur unique pour l’ensemble des opérations à réaliser. Les autres options concernent les micro-services. Lorsque vous commencez un projet, une architecture en micro-services est rarement nécessaire. Elle trouve plutôt son utilité lorsqu’une application doit supporter un grand nombre de requêtes à traiter, lorsqu’il y a déjà plusieurs milliers d’utilisateurs au moins. ![Jhipster Name Application](images/carbon13-2.png) Le CLI demande ensuite le nom de l’application à générer, vous pouvez laisser par défaut le nom du dossier créé. Choisissez aussi le nom de package pour la partie back-end. ![Choose default Java package](images/carbon-10.png) Vous pouvez choisir d’utiliser ou non le jHipster registry qui vous permettra d’accéder à différentes statistiques et données sur votre application. ![Jhipster registry](images/carbon-15-after-jhipster.png) ![Technology Choice](images/carbon-3.png) jHipster est capable de gérer différents types de bases de données : les bases classiques de type SQL, mais aussi les bases No-SQL comme MongoDB. On sélectionne ici le type SQL. ![Database Choice](images/carbon-9.png) jHipster va alors demander les types à utiliser en développement et en production. Pour le développement, le type H2 avec persistance sur le disque est très pratique. Il permet aux développeurs du projet de ne pas avoir à configurer eux-mêmes une **base de données** pour travailler sur le projet. ![Production Database Choice](images/carbon-11.png) ![Dev Database Choice](images/carbon-7.png) Vous pouvez choisir d’utiliser un système de cache supplémentaire sur la **base de données**. ![Cache choice](images/carbon-17.png) Si vous le souhaitez, vous pouvez rajouter des options spécifiques à votre projet jHipster, comme la recherche avec Elasticsearch. ![Supplementary Tech Choice](images/carbon-3.png) Maintenant pour la partie front-end du projet, vous avez le choix entre [Angular](https://angular.io) et [React](https://fr.reactjs.org). Pour avoir VueJS il faudra passer par ce [blueprint](https://github.com/jhipster/jhipster-vuejs). On sélectionne par exemple ici React. ![Front-End Options](images/carbon-12.png) Vous pouvez aussi choisir un thème Bootstrap par défaut pour votre projet. ![Bootstrap Theme](images/carbon-5.png) Vous avez le choix d’intégrer ou non un système de traduction et de sélectionner les différentes langues à supporter. ![Intertionalize Support](images/image-code-internationalization.png) ![Native Language Choice](images/carbon-8.png) Enfin le CLI vous demande si vous voulez rajouter un outil pour les tests unitaires ou utiliser un module présent dans le jHipster marketplace. On ne va rien ajouter ici pour notre génération. ![Unit Test Choice](images/carbon-14.png) ![Other Jhuipster Generators](images/carbon-16.png) On valide et ensuite jHipster génère le projet dans le dossier courant. Il va générer tous les fichiers nécessaires au bon fonctionnement du back-end et du front-end. ![Confirmation message](images/carbon16-2.png) On retrouve ensuite dans le projet généré, 2 sous-projets, 1 pour le back-end en **Java** avec le framework **Spring-Boot** et 1 pour le front-end avec des fichiers TypeScript et la librairie React Js. ![Structure d'un projet Jhipster](images/image-code-19.png) Lançons maintenant le projet en mode développement : Pour lancer le serveur back : `./mvnw` Pour lancer la partie front-end : `yarn && yarn start` Et voilà vous avez généré et lancé votre premier projet jHipster ! 🎉🎉🎉 Vous pouvez vous connecter en tant qu’administrateur sur la plateforme (admin / admin) et découvrir les écrans générés par jHipster. --- ## Gérer son schéma d’entités avec le JDL Studio Voyons maintenant comment importer un schéma d’entités dans un projet **jHipster**. jHipster propose un outil en ligne nommé [JDL Studio](https://start.jhipster.tech/jdl-studio/) particulièrement utile et simple d’utilisation. Cet outil va vous permettre de déclarer vos différentes entités ainsi que les relations entres elles via une [syntaxe](https://www.jhipster.tech/jdl/entities-fields) assez simple. Vous pouvez ensuite exporter ce schéma dans un fichier via l’outil. Ce même fichier peut ensuite être importé dans votre projet via cette ligne de commande : `jhipster import-jdl jhipster-jdl.jh` jHipster va alors vouloir écraser certains fichiers, vous pouvez répondre oui à chaque fois parce que c’est la première génération d’entités dans votre projet. Et voilà vos entités vont être créées dans votre projet et vous allez pouvoir les gérer depuis l’administration. --- ## Quelques bonnes pratiques Comme vous l’avez vu, **jHipster** vous a généré pas mal de fichiers pour chacune de vos entités. Dans le back-end, pour chaque entité, on retrouvera par exemple : - Une couche **repository** : pour accéder à la base de données et faire des opérations dans celle-ci en rapport avec l’entité - Une couche **service** : pour contenir la logique sur l’entité - Une couche **resource** : pour lister les endpoints dans l’API qui seront disponibles sur l’entité A chaque fois que l’on veut mettre à jour une entité, jHipster va regénérer les fichiers liés à celle-ci. Pour éviter les conflits sur ces fichiers, il est nécessaire de ne pas les utiliser pour la logique propre à son application. Pour cela, une méthode que nous utilisons au BearStudio est d’étendre les fichiers générés par jHipster. Ainsi, si l’on veut ajouter un nouveau endpoint accessible dans l’API par exemple pour l’entité “Location” on va créer ces 3 fichiers : - `LocationResourceExtended` qui étend la classe **Java** `LocationResource` précédemment générée par jHipster - `LocationServiceExtended` qui étend `LocationService` - `LocationRepositoryExtended` qui étend `LocationRepository`  De ce fait, lorsqu’on modifiera l’entité Location, il n’y aura pas de conflits avec la re-génération de jHipster sur ces fichiers. --- ## Mettre à jour une entité Pour mettre à jour une entité avec jHipster il vous suffit de modifier votre **schéma d’entités** précédemment créé via le JDL Studio et de le réimporter. Vous pouvez aussi modifier l’entité via le CLI avec la commande suivante : `jhispter entity NomEntité` ![Entity Update](images/carbon-6.png) jHipster vous demande si vous voulez simplement regénérer les fichiers liés à l'entité, ou ajouter / supprimer des champs et relations à votre entité. Une fois votre choix fait et vos modifications appliquées, le générateur va modifier tous les fichiers liés à votre entité et il vous demandera votre autorisation pour cela. Vérifiez bien pour chaque fichier que les modifications proposées par jHipster ne vont pas impacter votre propre logique. C'est pour cela qu'il vaut mieux étendre et ne pas modifier les fichiers de bases générés par jHipster. ### Mise à jour de la base de données avec Liquibase Lorsque vous mettez à jour une entité, jHipster va vouloir mettre à jour la table liée à cette entité en proposant une modification des fichiers Liquibase gérant cette table. > Mais c'est quoi Liquibase ? [![Liquidbase](images/logo-org.svg)](https://www.liquibase.org) [Liquibase](https://www.liquibase.org/) est une bibliothèque permettant de versionner et d'appliquer des changements dans un schéma de **base de données**. jHipster utilise ainsi Liquibase pour gérer les tables liées aux entités du projet. Les fichiers liés à Liquibase sont dans le dossier `/src/main/resources/config/liquibase` de votre projet. Le fonctionnement de Liquibase avec jHipster est simple : - Le sous-dossier `changelog` contient des fichiers XML représentants chacun un `changelog` (une suite de modifications à appliquer dans le schéma) - Le fichier `master.xml` rassemble la liste des `changelogs` à appliquer avec les liens vers les fichiers XML du sous-dossier `changelog` Lors de la génération initiale de vos entités, jHipster va créer les fichiers Liquibase (les changelogs) pour créer les tables correspondantes aux entités. Et lorsque vous allez vouloir mettre à jour une entité, jHipster va proposer de modifier les fichiers Liquibase générés à la base. Or Liquibase est un outil pour **versionner** les changements sur les bases de données. [Un peu à la manière de Git](/fr/blog/articles/git) avec les commits, chaque changement devra se faire dans un nouveau `changelog` et il est impossible de modifier un `changelog` précédent. Liquibase lèvera une erreur si vous autorisez jHipster à modifier les fichiers Liquibase initiaux. Pour ce point vous avez deux options possibles : - **Votre projet n'est pas encore en production**, vous êtes au stade du setup. Alors vous pouvez autoriser jHipster à écraser les fichiers Liquibase de base et vider votre base de données locale avec la commande suivante : `./mvnw clean` pour que votre projet en local fonctionne toujours. - **Votre projet est déjà en production**. Dans ce cas, vous allez devoir créer un nouveau `changelog` sous forme de fichier XML et indiquer dans celui-ci les modifications à appliquer en respectant la syntaxe de Liquibase (documentation : [https://docs.liquibase.com/change-types/home.html](https://docs.liquibase.com/change-types/home.html)). N'oubliez pas d'indiquer le nouveau changelog dans le fichier `master.xml`. Si vous souhaitez ne pas avoir à vous occuper de cette partie, vous pouvez utiliser ce [blueprint](https://www.npmjs.com/package/generator-jhipster-with-new-changelogs). ## Aller plus loin Pour supporter jHipster : [https://opencollective.com/generator-jhipster](https://opencollective.com/generator-jhipster) Guide d'utilisation : [https://www.ionos.fr/digitalguide/sites-internet/developpement-web/jhipster/](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/jhipster/) _"Etre productif avec jHipster"_ \- **Julien Dubois**, Devoxx France 2017 : [https://www.youtube.com/watch?v=wJruVpv0WH4](https://www.youtube.com/watch?v=wJruVpv0WH4) --- ### Le quotidien du BearStudio en vidéo URL: https://www.bearstudio.fr/fr/blog/articles/quotidien-du-bearstudio-en-video Date: 2020-02-18 Depuis le mois de juillet 2019, notre équipe vous propose le premier de chaque mois une courte vidéo récapitulant en 1 seconde par jour ce que nous avons vécu durant le mois qui vient de s’écouler. Du fun et du #nobullshit, à notre image ! ## Pourquoi réaliser une vidéo du quotidien au BearStudio ? Début 2019, la communication du BearStudio s’est accélérée et nos réseaux sociaux ont été alimentés quasi-quotidiennement pour permettre de partager un maximum d’informations ou de veille en tout genre. L’envie était de montrer au monde entier (au moins) le quotidien de l’[équipe du BearStudio](/team) dans ses déplacements et son travail. La vidéo d’une seconde par jour est donc rapidement devenue une évidence pour rendre le tout un peu plus dynamique. Une jolie manière de **partager avec vous ce que nous vivons au quotidien**. Cette vidéo vous permet de découvrir notre équipe, qu'elle soit dans nos bureaux au Petit-Quevilly ou à plusieurs centaines de kilomètres, et notre manière de travailler et de nous détendre.  Si nous voulions pousser la question un peu plus loin, il est vrai que nous pourrions aussi dire que la vidéo est un [bon allié pour une stratégie de marque employeur](https://www.parlonsrh.com/pourquoi-la-video-est-le-meilleur-allie-de-votre-strategie-marque-employeur/). Montrer notre quotidien permet à chacun de se faire une idée de l’ambiance de travail dans nos bureaux. Et en toute franchise, c’est marrant de voir nos équipes jouer le jeu des vidéos un peu funky jour après jour.  ## Comment réaliser cette vidéo ?  La réalisation de cette vidéo est très rapide chaque mois. La célèbre application [1 Second Everyday](https://1se.co/) est utilisée pour compiler l’ensemble des vidéos aux dates des jours ouvrés, puis de notre côté un travail de montage est fait pour éclaircir l’image et ajouter une fin de vidéo qui nous ressemble.  ## BearStudio au quotidien sur Youtube Découvrez sans plus tarder l'ensemble des vidéos déjà réalisées depuis le mois de juillet sur notre [playlist Youtube dédiée](https://www.youtube.com/playlist?list=PL3phsoEh8sHebM1tFqyQujNSfZuHdvFDs) à notre quotidien : Et n'oubliez pas de vous abonner à [notre chaine Youtube](https://www.youtube.com/channel/UC-2hpnhKgU2C_OFucjEN0IA), d'autres vidéos doivent arriver dans les semaines à venir 😉 --- ### TraveledMap : l’outil indispensable à vos voyages URL: https://www.bearstudio.fr/fr/blog/articles/traveledmap-outil-indispensable-pour-vos-photos-de-voyage Date: 2020-02-11 Lorsque nous voyageons, pour le travail ou par passion, nous aimons partager nos aventures avec nos proches, mais les réseaux sociaux ne sont pas toujours adaptés… [TraveledMap](https://www.traveledmap.com/?bs) existe justement pour proposer une **alternative adaptée aux voyageurs**, et l'outil est développé par un employé du BearStudio ! ## L’histoire de TraveledMap **Quentin Lerebours**, [employé du BearStudio](/fr/equipe) depuis son lancement, s’est lancé il y a un an dans le développement d’un projet personnel. Sous le nom de TraveledMap se cache un [outil](/fr/blog/articles/outils-incontournables-pour-un-entrepreneur) répondant à un besoin ressenti par Quentin au fur et à mesure de ses voyages : partager facilement et **sauvegarder ses photos de voyage en fonction des lieux visités**. Une cartographie précise couplée à la diffusion de photographies.  BearStudio et son équipe soutiennent pleinement Quentin dans son projet et souhaitent l’aider pour son développement.  ## L’idée de TraveledMap L’idée est de permettre un partage facile de ses photos de vacances avec ses proches, mais aussi de permettre de retrouver soi-même ses photos de voyage par destination. Quentin l’avoue lui-même : il adore voyager mais ne prend jamais le temps de regarder les photos qu’il a pu prendre sur place. C’est ainsi que l’idée de TraveledMap lui est venue. L’outil en ligne permet de **retrouver ses photos, par destination**, mais aussi de les **partager avec famille et amis** tout au long d’un road trip par exemple.  Pour aller encore plus loin dans l’utilisation de TraveledMap, il est également possible de dessiner directement des itinéraires puis d’ajouter les photos de chaque lieu visité sur votre carte personnalisée. [Tester TraveledMap](https://www.traveledmap.com/?bs) ![TraveledMap](images/outil-traveledmap-par-quentin.png) ## TraveledMap et BearStudio Puisque nos équipes voyagent très souvent, nous avons créé une carte TraveledMap pour **partager avec vous l’ensemble de nos périples**. Du CES Asia au DevFest du Bout du Monde, vous avez de quoi découvrir nos nombreux déplacements grâce à l’intégration de la carte directement sur notre site.  Découvrir les périples BearStudio ## S’inscrire et utiliser TraveledMap ### Pour quelle utilisation ? TraveledMap est parfait pour **publier vos photos de voyage** et partager le tout sur votre site, votre blog ou tout simplement avec vos proches. Un plugin WordPress est disponible pour vous faciliter la tâche. Tout est fait pour faire en sorte que ce soit simple !  ### Tarifs de TraveledMap Une offre gratuite est disponible pour vous permettre d’utiliser l’outil pour vos voyages, cependant, pour l'intégrer sur votre site, il vous faudra passer sur une offre payante (à partir de 3$ par mois).  Il ne vous reste plus qu’à vous inscrire en ligne sur [www.traveledmap.com](https://www.traveledmap.com/builder?bs) et à ajouter les villes de vos voyages.  ![Logo du service en ligne Traveledmap](images/logo-traveled-map.jpg) --- ### Linux, les logiciels libres et l’open-source : retrouvez votre liberté grâce à la communauté URL: https://www.bearstudio.fr/fr/blog/articles/linux-logiciels-libres-et-open-source-retrouvez-votre-liberte Date: 2020-02-04 Vous avez déjà entendu parler de **Linux**, des logiciels libres ou encore de l’open-source mais vous ne savez pas à quoi sont associés ces termes ? A l’inverse vous ne savez pas du tout ce que c’est ? Ou vous le savez mais ne voyez toujours pas l’intérêt ? Alors ne partez pas, cet article s’adresse à vous tous ! L’objectif de cet article est simple : vous **présenter le concept et la philosophie** du logiciel libre et de l’[open-source](/fr/blog/articles/jhipster-generateur-projet-hipsters), les faits historiques, et par la même occasion, vous convaincre de sauter le pas. ## Ce que vous connaissez : les logiciels propriétaires Les logiciels propriétaires sont tout simplement les logiciels que vous utilisez depuis toujours. Si vous avez un PC, vous utilisez surement Windows de Microsoft et possiblement leur suite bureautique : Microsoft Office, que ce soit chez vous ou à votre travail. Et si vous avez un Mac, vous utilisez le système d’exploitation **propriétaire de la marque** à la pomme : Mac OS X. ### C’est quoi déjà un système d’exploitation ? C’est tout simplement le “super-logiciel” qui s’occupe de **faire tourner l’ensemble de vos logiciels** et applications sur votre machine. C’est l’interface entre vous, utilisateur, et le matériel informatique. De manière plus technique, un système d’exploitation ou OS (Operating System) a pour mission de gérer et de répartir la mémoire de l’ordinateur entre les différents logiciels et de faire fonctionner les multiples périphériques de la machine. ### Et du coup qu’est-ce qu’ils ont ces logiciels que j’utilise? Ca veut dire quoi propriétaire? Pour vous répondre, présentons tout d’abord les **4 libertés logicielles**, à savoir : - La liberté d’**utiliser** le logiciel - La liberté de **copier** le logiciel - La liberté d’**étudier** le logiciel - La liberté de **modifier** le logiciel Et bien les logiciels propriétaires ne garantissent pas, limitent, voire empêchent, d’exercer simultanément ces 4 libertés. Concrètement, votre suite Office vous demande une clé de licence payée pour utiliser le logiciel. Idem pour votre système d’exploitation Windows, peut être que vous n’avez jamais eu à la saisir, mais vous l’avez payée à l’achat de votre ordinateur. Et vous n’avez pas eu le choix, car probablement aucun autre système d’exploitation que Windows ne vous a été proposé à l’achat. Cela va même plus loin, on vous a fait croire depuis toujours qu’il n’existait qu’un seul et unique système sur PC : Microsoft Windows. **Windows est vendu sur la quasi-totalité des PC** vendus neufs grâce à des accords passés entre Microsoft et les constructeurs de PC. C’est la stratégie de Microsoft depuis ses débuts pour avoir la part de marché la plus importante possible. ![vente-microsoft](images/vente-microsoft.jpg) Cela porte un nom : **la vente forcée**. Microsoft a plusieurs fois été [amené en justice](https://www.zdnet.fr/actualites/la-cjue-ne-remet-pas-en-cause-la-vente-liee-pcwindows-39841610.htm) pour cette vente forcée de son produit avec l’achat d’un ordinateur. Mais ces actions en justice ne sont jamais allés au bout et Microsoft s’en est toujours sorti sans condamnation. A l’inverse, un logiciel propriétaire peut être **gratuit** mais n’aurez jamais accès au code de celui-ci pour voir ce qu’il réalise réellement et comment il le fait. Vous ne pourrez pas non plus le modifier. ## L’autre monde : les logiciels libres Contrairement aux logiciels propriétaires, les logiciels libres garantissent l’application des 4 libertés logicielles. C’est à dire qu’ils peuvent être **utilisés sans restriction**, partagés et leur code étudié et modifié par d’autres développeurs. Mais quel est donc l’intérêt de pouvoir modifier un logiciel ? Cela paraît dangereux à première vue si n’importe qui peut modifier le code du logiciel. Ce n’est pas comme cela qu’il faut voir les choses, mais c’est normal de les voir comme cela. Depuis les débuts de l’ordinateur personnel, les sociétés de création de logiciel ont habitués les utilisateurs à l’idée que plus un logiciel est cher, plus il est performant et sécurisé. Et bien sûr avec aussi l’idée que seuls les créateurs du logiciel sont aptes à le modifier, sortes de demi-dieux qui eux seuls possèdent le pouvoir de modifier leur création. Or dans le monde du logiciel cette hypothèse n’est pas vraie et Linus Torvalds l’a prouvé en créant le **projet Linux**, un système d’exploitation libre et open-source. Comme l’explique Linus Torvalds dans ce TED, il a commencé le projet Linux seul alors qu’il était **étudiant à l’université d’Helsinki** dans les années 90. En 1991, il diffusa les premiers prototypes de Linux en expliquant qu’il souhaitait à terme des contributions externes sur son projet. Au début simplement des reports de bugs sur le logiciel, puis, des propositions de modification du code. Et c’est là que Linus Torvalds compris le grand intérêt de rendre son logiciel libre quand il constata que les propositions de modification du code étaient réellement pertinentes. Aujourd’hui, plus de **1600 développeurs contribuent au projet Linux** et chacun peut proposer des modifications du code source. Bien entendu, ces propositions seront ensuite contrôlées, vérifiées et testées par les développeurs à temps plein sur le projet (Fondation Linux). C’est toute la philosophie et la puissance du logiciel libre. Les utilisateurs de celui-ci qui ont aussi des compétences dans le [développement](/fr/prestations/developpement-web), peuvent proposer des **améliorations du produit** que ce soit pour combler des failles de sécurité, des **manquements de fonctionnalité** ou toute autre modification pertinente. Le logiciel libre est donc en constante amélioration et l’équipe de développement n’est pas la seule à contribuer à son projet, offrant d’autres points de vues et de nouvelles idées. ## Limites du modèle entièrement libre Les licences de diffusion des logiciels libres ont eu tendance à rebuter les professionnels sur plusieurs points. Notamment, sur la non-possibilité d’intégrer un logiciel libre au sein d’un logiciel basé sur un autre modèle, propriétaire par exemple. En effet, la vision du logiciel libre portée par son initiateur Richard Stallman est qu’un logiciel propriétaire, allant à l’encontre des libertés de l’utilisateur, ne peut être éthique. Et donc, un logiciel ou un programme libre ne peut faire partie intégrante d’un logiciel propriétaire lorsqu’il est diffusé sous une licence libre respectant entièrement cette philosophie. L’acronyme englobant ces licences appliquant le principe de “**Copyleft**” (inverse de “Copyright”) est [GNU General Public License](https://www.gnu.org/licenses/gpl-3.0.fr.html). Il est ainsi **difficile de concevoir un business model** qui soit viable avec des licences libres de type Copyleft. Car même s’il est tout à fait possible de vendre un logiciel libre, les utilisateurs peuvent redistribuer le logiciel par la suite comme ils le souhaitent. Et impossible de ne réaliser qu’une partie d’un logiciel en libre pour l’intégrer ensuite dans un autre suivant un autre modèle. Attention ! Cela n’est pas pour autant impossible d’avoir un business model viable avec un logiciel libre. [Red Hat](https://www.redhat.com/fr), société multinationale éditant des systèmes d’exploitation basés sur le noyau Linux, en est le parfait exemple car elle ne fait pas de profit sur la distribution de ses logiciels dont le code est librement accessible par quiconque. Mais elle le réalise sur les tous les **besoins autour de ses logiciels** comme les cours, les certifications ou encore le support en lien direct avec l’équipe technique accessible via un abonnement. C’est une autre manière de **convertir l’expertise technique de l’entreprise en profit**. Et ça marche ! Red Hat vise aujourd’hui les 3 milliards de chiffre d’affaires annuel. ## L’équilibre dans la force : l’open-source Pour s’affranchir des limites posées par la philosophie du logiciel libre, l’**Open Source Initiative (OSI)** a créé en 1998 l’[Open Source Definition (OSD)](https://opensource.org/osd), un autre modèle de licence libre. Ce modèle apporte une vision plus pragmatique et mieux adaptée au domaine du développement de l’application des 4 libertés logicielles. La première différence avec les licences GNU GPL concerne l’intégration du logiciel à d’autres modèles. Un logiciel ayant été développé selon le modèle open-source, avec tous les avantages présentés précédemment que celui-ci tire du monde libre peut être intégré dans un logiciel suivant un modèle différent du libre. Ainsi, concrètement, un business model peut être envisagé directement sur la diffusion d’un logiciel dont certaines parties ont été développées en libre. Et ça, ça a tout changé pour les grands groupes et éditeurs de logiciels, car les avantages du libre peuvent ainsi s’appliquer à leur modèle. Une nouvelle ère dans le développement de logiciels et de programmes a pu débuter : celle du **partage de compétences entre tous**. ![contributors](images/contributors.png) Google, Microsoft, Facebook, Amazon, IBM, Intel (pour ne citer que les plus connus) : toutes ces entreprises ont proposées ou contribuées à des projets open-source. L’intérêt est tout d’abord bien-sûr d’un point de vue éthique mais il n’est pas le seul. L’externalisation d’un problème sur un sujet technique permet d’**obtenir des solutions** qui auraient pu ne pas voir le jour en interne. Ainsi, il n’est pas rare de voir certains groupes collaborer ensemble dans le but de résoudre plus rapidement et de meilleure manière un problème technique, et de placer la solution sous licence open-source. Solution qui peut de ce fait être utilisée par chacun des parties dans leurs logiciels suivant leurs propres modèles de licence de diffusion. Bien entendu, la mise à contribution de la communauté open-source ne s’arrête pas seulement à la résolution de problèmes techniques mais va aussi jusqu’à la création de logiciels open-source complets. Parmi les belles réussites de l’open-source, l’on retrouve l’excellent éditeur de code **Visual Studio Code de Microsoft** dont le projet a rassemblés 830 contributeurs et plus de **4500 propositions de modification du code**. ## La faillite du modèle propriétaire. Place au libre et à l’open-source ? Oui, le modèle entièrement propriétaire a plusieurs fois montré ses **failles** et il est clair aujourd’hui qu’il n’est pas une solution viable autant pour les éditeurs de logiciels que pour leurs utilisateurs. ### Internet Explorer : l’échec avec un grand E ![internet explorer](images/internet-explorer_opt.png) Aaaah, **Internet Explorer**… Par où commencer ? Lancé en 1995 par Microsoft, c’était le navigateur web installé par défaut sur tous les PC Windows (soit presque tous les PC..). Jusqu’en 2012, il était de ce fait le **navigateur web le plus utilisé** par les utilisateurs du monde PC. Mais avec l’arrivée de concurrents (Mozilla Firefox, Google Chrome entre autres), Internet Explorer perdit petit à petit ses utilisateurs jusqu’à sa mort aujourd’hui. La faillite d’Internet Explorer peut s’expliquer en plusieurs points. Le premier, concerne le logiciel en lui-même et sa non efficacité. Combien de fois vous est-il arrivé qu’Internet Explorer plante lorsque vous aviez à l’utiliser ? Un nombre de fois important surement. ![error-internet-explorer](images/error-internet-explorer.png) Le fait que le logiciel soit souvent inutilisable a donc été la source de motivation principale de l’**abandon d’Internet Explorer** pour la plupart des personnes. Le deuxième point est la sécurité du logiciel et celle de la machine l’exécutant. Internet Explorer était connu pour ses **nombreuses failles de sécurité** arrivant à répétition au fur et à mesures des versions. Récemment Microsoft a même publié un post sur son blog appelant à ne plus utiliser du tout Internet Explorer pour des raisons de sécurité. Mais dès 2010, les gouvernements Allemands et Français déconseillaient son usage. Enfin, le troisième point porte sur la **non prise en compte des standards du web**. Les standards du web sont des normes principalement établies par la [W3C](https://www.w3c.fr/) pour définir comment il est possible de réaliser des pages et sites web. Ces normes permettent ainsi aux développeurs web de savoir quelles possibilités ils ont lors du développement. Et permettent aux navigateurs web de comprendre et d’interpréter le code des sites internet. Soyons clair : Internet Explorer était aux fraises sur la prise en compte de ces standards. Il avait toujours du retard sur ses concurrents directs. Et cela a eu pour conséquence de désintéresser les développeurs d’Internet Explorer, car le logiciel respectant moins voire quasiment pas les derniers standards du web, il leur offrait moins de possibilités de [développement](/fr/prestations/developpement-web). De plus, les utilisateurs étaient aussi directement impactés car certains sites utilisaient les derniers standards et n’étaient pas rétro-compatibles avec Internet Explorer. Globalement, IE était constamment dans le passé et il était devenu une épine dans le pied des développeurs et éditeurs de sites car il demandait un temps de développement spécifique en plus dans le projet. Internet Explorer est le parfait exemple des **faillites du modèle propriétaire** car c’est justement son modèle entièrement propriétaire qui a causé sa perte face à ses concurrents. Citons d’ailleurs ses deux principaux concurrents de l’époque : Mozilla Firefox et Google Chrome. Le premier est un logiciel libre. Le second est un logiciel propriétaire mais basé sur un projet open-source nommé **Chromium**. Alors qu’il fallait attendre longuement Microsoft pour corriger les failles de sécurité et mettre à jour Internet Explorer, Firefox et Chromium/Google Chrome sont mis à jour régulièrement grâce aux contributions et aux retours de leurs communautés. Celles-ci peuvent proposer toutes les améliorations possibles sur le logiciel, corriger des failles de sécurité détectées, ou encore implémenter la prise en compte des derniers standards. Internet Explorer ne pouvait pas rivaliser face à ces concurrents en s’en tenant à vouloir conserver coûte que coûte son modèle entièrement fermé. Microsoft a maintenant bien retenu la leçon en souhaitant maintenant utiliser le [projet Chromium comme base de son nouveau navigateur web Microsoft Edge](https://www.zdnet.fr/actualites/microsoft-edge-pourquoi-ca-a-mal-tourne-et-ce-qui-va-suivre-39877763.htm). ### Spoiler : les logiciels propriétaires vont nous coûter beaucoup plus cher que prévu ![WannaCry mapmonde](images/wannacry-mapmonde.png) Mai 2017, panique à bord, un logiciel malveillant nommé **WannaCry** infecte plus de **300 000 ordinateurs dans plus de 150 pays**. Son mode d’action est simple : crypter les fichiers de l’ordinateur cible et demander une rançon à son propriétaire pour décrypter les fichiers (_inchallah_). Plusieurs grands groupes et institutions sont même bloqués suite à cette attaque, parmi eux : Vodafone, FedEx, Renault, Telefónica, le National Health Service, le Centre hospitalier universitaire de Liège, le ministère de l’Intérieur russe et la Deutsche Bahn. WannaCry a exploité une faille de sécurité présente sur les systèmes d’exploitations antérieurs à Windows 10, à savoir 8, 7, Vista et Windows XP qui sont encore utilisés chez certains particuliers ou même dans certaines entreprises. Ces systèmes n’ont pas été mis à jour depuis longtemps car c’est leur vocation : être un bien de consommation dans un temps réduit mais pas fait pour durer. Microsoft propose la mise à niveau de ses systèmes (passage de Windows 7 à Windows 10 par exemple) mais en échange d’une contribution financière. Le coût supplémentaire du renouvellement des licences de l’ensemble d’un parc d’ordinateurs Windows peut donc freiner une entreprise ou une institution à le mettre à jour. Mais ce n’est pas la seule explication de la non mise à jour de certains parcs. Il y a aussi l’utilisation de logiciels propriétaires qui ne sont parfois plus mis à jour et uniquement compatibles avec la version du Windows de la machine. Vous voyez le blocage ? Mettre à jour un parc de logiciels propriétaires peut parfois être impossible afin de conserver certains logiciels utiles à l’activité mais vital pour la sécurité. Et pour débloquer (temporairement) justement certaines entreprises touchées par l’attaque de WannaCry et dans cette situation, Microsoft a exceptionnellement dépêché une équipe pour déployer une mise à jour sur Windows XP, Vista, 7 et 8. La mise à jour d’un parc d’ordinateurs utilisant des logiciels libres ou open-source aurait aussi un coût bien-sûr pour une entreprise, là n’est pas la question. Mais elle resterait réalisable dans toutes les situations. Admettons même que l’éditeur d’un logiciel libre ferme et bien le code source resterait à disposition. Et donc avec le code source, la communauté peut **continuer de faire vivre le logiciel** et de le rendre compatible avec les nouvelles versions des systèmes d’exploitation. Alors que lorsque l’éditeur d’un logiciel propriétaire décide de ne plus mettre à jour et d’arrêter le développement du logiciel, _c’est pour toujours_. Le code source n’étant pas disponible, personne ne peut redonner vie au projet. Il n’est pas rare de voir dans certains services publics, hôpitaux ou dans des entreprises des ordinateurs fonctionnant toujours avec d’anciennes versions de Windows qui ne sont plus supportées aujourd’hui par Microsoft. Ces ordinateurs sont donc de fait de véritables **bombes à retardement** pour ces organisations qui s’exposent à de grandes pertes financières. Le geste de Microsoft était aussi impératif qu’exceptionnel pour limiter les dégâts dans le monde informatique. Mais la compagnie ne pourra indéfiniment combler à elle seule les brèches de son ancien monde. ## Convaincu ? Libérez votre machine avec Linux ! Heureusement, vous pouvez changer les choses que ce soit chez vous dans votre entreprise. **Adopter Linux sur son PC**, c’est choisir un système libre, stable et sans virus qui sera régulièrement mis à jour et qui pourra être facilement mis à niveau. Si vous souhaitez donc sauter le pas et installer Linux sur votre machine, je vous conseille d’installer **Ubuntu**. C’est la version la plus simple pour commencer l’expérience Linux. Direction donc le site officiel pour télécharger un fichier image : [https://www.ubuntu.com/download/desktop](https://www.ubuntu.com/download/desktop) Je vous conseille de télécharger la version LTS (Long Term Support) qui assure un support à long terme, c’est à dire des mises à jour sur une plus grande période de temps. Et quand une nouvelle version LTS fera son apparition vous pourrez bien-sûr mettre à niveau votre système gratuitement. Fini les chantages financiers de Microsoft ou d’Apple pour mettre à niveau votre système ! Je ne vais pas ici vous faire un **tutoriel d’installation d’Ubuntu** sur votre machine, il y en a déjà d’excellents sur la toile que je peux vous conseiller : [https://openclassrooms.com/fr/courses/43538-reprenez-le-controle-a-laide-de-linux/36939-tester-et-installer-ubuntu](https://openclassrooms.com/fr/courses/43538-reprenez-le-controle-a-laide-de-linux/36939-tester-et-installer-ubuntu) Pour installer Linux à côté de Windows, c’est à dire pouvoir choisir au démarrage quel système utiliser : [https://lecrabeinfo.net/installer-ubuntu-18-04-lts-dual-boot-windows-10.html](https://lecrabeinfo.net/installer-ubuntu-18-04-lts-dual-boot-windows-10.html) Sur Mac : [https://doc.ubuntu-fr.org/dual_boot_macos_x_ubuntu](https://doc.ubuntu-fr.org/dual_boot_macos_x_ubuntu) Si vous rencontrez le moindre soucis durant l’installation ou l’utilisation de votre nouveau système Linux, n’hésitez pas aller détailler votre problème sur le forum de la communauté française d’Ubuntu. Vous obtiendrez sûrement une réponse, cette communauté est extrêmement active et disponible : [https://forum.ubuntu-fr.org/](https://forum.ubuntu-fr.org/) **À vous de jouer !** Une fois votre distribution installée, profitez de votre liberté retrouvée ! --- _Sources de l'article :_ - [https://fr.wikipedia.org/wiki/Linux](https://fr.wikipedia.org/wiki/Linux) - [https://fr.wikipedia.org/wiki/Microsoft_Windows](https://fr.wikipedia.org/wiki/Microsoft_Windows) - [https://www.lexpress.fr/actualite/monde/vague-internationale-de-cyberattaques_1907798.html](https://www.lexpress.fr/actualite/monde/vague-internationale-de-cyberattaques_1907798.html) - [https://fr.wikipedia.org/wiki/Logiciel_libre#%C2%AB_Logiciel_libre\_%C2%BB_et\_%C2%AB_open_source\_%C2%BB](https://fr.wikipedia.org/wiki/Logiciel_libre#%C2%AB_Logiciel_libre_%C2%BB_et_%C2%AB_open_source_%C2%BB) - [https://www.bortzmeyer.org/free-software-open-source.html](https://www.bortzmeyer.org/free-software-open-source.html) - [https://medium.com/france/qu-est-ce-que-l-open-source-1b09362bea44](https://medium.com/france/qu-est-ce-que-l-open-source-1b09362bea44) - [https://www.zdnet.fr/actualites/la-cjue-ne-remet-pas-en-cause-la-vente-liee-pcwindows-39841610.htm](https://www.zdnet.fr/actualites/la-cjue-ne-remet-pas-en-cause-la-vente-liee-pcwindows-39841610.htm) --- ### Les outils incontournables pour un entrepreneur URL: https://www.bearstudio.fr/fr/blog/articles/outils-incontournables-pour-un-entrepreneur Date: 2020-01-29 À la création d'une société, nous avons toujours un tas de choses à faire. Par où commencer ? Cela dépend essentiellement de votre business. Cependant, il y a un certain nombre d’outils incontournables à connaître pour votre entreprise.  ## Choisir sa boite mail professionnelle Le vainqueur par KO : [**G Suite**](https://gsuite.google.fr/intl/fr/) (qui est en fait l’offre payante de Gmail, très bien adaptée pour les professionnels). Avec G Suite, Google offre un service de boite mail mais aussi un espace de stockage sur Google Drive, l’accès à l’ensemble de ses outils et une utilisation illimitée de Meet pour les visioconférences.  L’intérêt de passer par G Suite plutôt qu’un Gmail classique ? Vous pouvez notamment configurer l’outil pour y relier votre nom de domaine et ainsi avoir des adresses mails en _prenom@nomdedomaine.com_ très facilement. Une simplicité d’utilisation pour un tarif très abordable puisque celui-ci débute à **5,20 € par mois, par utilisateur** (soit par adresse mail, en excluant les alias). Vous disposez donc de l’ensemble des outils suivants avec G Suite : - **Mail** : messagerie via Gmail - **Drive** : espace de stockage dans le cloud (30Go ou illimité en fonction de l’offre) - **Agenda** : agendas en ligne partagés pour l’ensemble d’un même groupe G Suite (permet de voir l’agenda de l’ensemble de ses collaborateurs et aide à la synchronisation des équipes) - **Meet** : pour vos téléconférences ou visioconférences - **Docs, sheets et slides** : outils de traitement de texte, de feuilles de calcul et outil de création de présentation (très similaire à son concurrent Microsoft) - **Forms** : questionnaires en ligne, permet de stocker les résultats sous forme de tableau exportable - **Sites** : outil de création de site web proposé par Google (présent également dans Google My Business) - **Keep** : outil de notes partagées  - Et plus encore, en fonction de l’offre pour laquelle vous optez !  Si vous ne souhaitez pas passer par ce genre d’outil, vous pouvez toujours bidouiller avec un Zimbra ou tout autre outil exotique. Dans le même esprit, vous pouvez également retrouver **Office 365** proposé par Microsoft qui a beaucoup évolué ces derniers temps et qui se défend sur le marché. Tout dépend de l’utilisation qui sera nécessaire pour votre entreprise.  ![Utiliser GSuite pour son entreprise](images/gsuite-pour-entrepreneur.png) ## Optimiser sa communication interne Messagerie interne, réseau social d’entreprise ou autre appellation d’époque, aujourd’hui c’est simple nous appelons cela [**Slack**](https://slack.com/intl/fr-fr/) ! Souvent comparé à un MSN d’entreprise, Slack est une **messagerie instantanée adaptée à une activité professionnelle**. Plusieurs utilisateurs avec des niveaux de droits différents peuvent être renseignés et des chaînes de discussions sont créées pour permettre de bien cadrer les conversations. Tout est personnalisable, vous pouvez donc créer vos propres chaines de discussion pour que votre Slack corresponde à 100% à votre activité, et les rendre public ou privé à vos utilisateurs en fonction de votre utilisation. L’outil est adapté pour échanger sur des choses simples qui demandent un **retour rapide**, là où le mail n’est pas toujours justifié. Des chaînes dédiées peuvent notamment permettre de partager la veille effectuée au sein de l’entreprise par chaque employé, et permet ainsi un échange de savoir. C’est un [gain de temps](/fr/blog/articles/vous-avez-dit-productivite) pour les équipes, et un soulagement pour nos boites mails.  Avec Slack, la communication interne se trouve être **renforcée et plus fluide**. Il permet à chacun de suivre les projets (s’il fait parti de la chaîne dédiée) mais aussi de créer un climat détendu avec évidemment quelques blagues qui surgiront de temps à autre. ### Slack en version gratuite ou payante ? Le modèle économique de Slack est bien fait : si vous êtes 2 ou 3 sur votre slack, la version gratuite sera suffisante, et quand vous grossirez vous sentirez naturellement le besoin de passer à un modèle payant pour garder un **historique des conversations et des fichiers partagés**, mais aussi pour accéder aux options supplémentaires : ajout d’add-on, possibilité d’inviter des utilisateurs dans une seule chaîne de discussion, etc.  Bon à savoir : [pour les associations](https://slack.com/intl/fr-fr/help/articles/204368833-Slack-pour-les-associations), il est possible de bénéficier de la version “forfait standard” gratuitement si celle-ci compte moins de 250 membres !  ![Slack en entreprise](images/slack-en-entreprise.png) Certes grâce à ces deux premiers points nous pouvons envoyer des mails, faire des présentations et discuter en interne (avec des gifs à la con). Mais maintenant il nous faut des prospects et des clients !  ## Gérer sa relation client avec un outil de vente performant Oubliez les usines à gaz qui coûtent un bras, il est grandement conseillé par le BearStudio d’utiliser [**Pipedrive**](https://www.pipedrive.com/fr) ! En plus d’être super **intuitif**, personnellement ce CRM m’a appris des bonnes pratiques commerciales sans que je ne m’en rende compte.  Comme son nom l’indique, Pipedrive permet de suivre sa prospection commerciale qui est dans “les tuyaux”. Par des actions simples, l’outil permet de voir la progression d’un lead de la **première prise de contact à l’acceptation du devis**. Il intègre des rappels pour ne pas oublier les relances mais également un système de statistiques pour avoir des moyennes temporelles avant la concrétisation d’une collaboration. L’utilisation de l’outil peut être très poussée et peut vous servir de CRM pour la gestion de votre relation client.  ![Pipedrive pour sa gestion de prospection](images/pipedrive.png) ## Suivre la gestion de projet avec facilité Il y a certainement d’autres outils plus orientés dans votre métier mais [**Trello**](https://trello.com/) reste une valeur sûre pour une gestion de [projet](/fr/prestations) efficace. Se basant sur la méthodologie de gestion de projet Kanban, Trello est grandement personnalisable. Dans une version simpliste, il vous permettra de faire un suivi des tâches avec des statuts de suivi : à faire, en cours, en attente de validation, fait. A vous d’adapter l’outil à votre besoin, la version gratuite est déjà très complète et devrait vous satisfaire.  ## Gestion de sa trésorerie professionnelle L’idéal est d’avoir une néo-banque pour les opérations courantes (virement en ligne, ajout de justificatif, etc) et une banque vieille “classique” pour les opérations plus traditionnelles. Au BearStudio, [**Qonto**](https://qonto.eu/fr/) aura répondu à nos besoins pour les opérations courantes notamment avec la possibilité de créer des cartes bancaires virtuelles pour certains employés afin de faciliter le paiement de leurs frais professionnels (tels que des déplacements en train). Un vrai gain de temps pour tout le monde, et une facilité de gestion appréciable au quotidien.  ![Qonto pour faciliter les paiements](images/qonto.png) ## Gestion des réseaux sociaux pro Pour une entreprise, gérer chaque réseau social individuellement peut s’avérer chronophage, heureusement [**Buffer**](https://buffer.com/) résout une partie du problème en proposant un outil de publication. Pour expliquer rapidement le principe : il suffit de rédiger une publication une seule fois pour la publier sur l’ensemble des réseaux sociaux de votre entreprise. Le **gain de temps est réel** et la visibilité sur le planning de publication est un avantage. Vous pourrez même personnaliser chacun des messages en fonction du réseau et définir vous-même vos heures de publication. Une version gratuite est disponible si vous voulez tester dès maintenant. ## L’outil bonus à avoir dans sa poche Pour réserver rapidement et simplement vos billets de train, il est indispensable d’avoir l’application [**Trainline**](https://www.trainline.fr/) sur son smartphone. L’outil existe aussi en version web, et permet d’effectuer une réservation de train rapidement et à tout moment, avec des offres aux meilleurs prix. L’outil fournit des justificatifs de paiement qui sont parfaits pour les trajets professionnels. N’hésitez pas une seule seconde. ![Trainline, version web ou mobile pour réserver son train rapidement](images/trainline.png) --- Avec cet article, j’ai probablement enfoncé des portes ouvertes pour beaucoup, mais si un de ces outils vous est inconnu, foncez ! Si vous pensez que j’ai oublié un _must have_, n’hésitez pas à me corriger en me contactant : [@RudyBaer](https://twitter.com/RudyBaer) 😉 Dans un prochain article, j'essaierai de vous présenter des outils un peu plus poussés mais tout aussi puissants ! --- ### Maitriser la dette technique de son projet numérique URL: https://www.bearstudio.fr/fr/blog/articles/maitriser-dette-technique-projet-numerique Date: 2020-01-22 Dans notre [précédent article sur la dette technique](/fr/blog/articles/dette-technique-cout-sous-estime-des-projets-numeriques), je présentais le concept en prenant quelques exemples. Voici maintenant quelques c**onseils pour maîtriser cette dette** sur son projet. ## Anticiper la dette technique Tout d’abord, il est important de savoir **quel niveau de dette technique** vous attendez. Pour cela, il faut vous demander si vous développez un POC, une V1 ou un produit “final”. Il faut comprendre qu’un POC aura une dette technique plus élevée car l’objectif est de développer un projet rapidement, qui réponde au besoin, et avec le coût le moins élevé possible. Il servira à tester le marché et sera soit jeté à la poubelle pour une V1, soit revu en grande partie, il n’est donc pas nécessaire d’être trop exigeant sur la qualité de code par exemple. En ce qui concerne une V1 ou un MVP, il faut savoir qu’il peut être amené à servir plus d’une année, il ne faut donc pas se permettre trop de liberté. Cependant, **il faut savoir prendre des décisions qui amèneront à avoir une dette technique**, si ces décisions ont un apport sur le business par exemple. Le tout est qu’il s’agisse de décisions prises consciemment. Un produit final, quant à lui, a tendance à être utilisé par un grand nombre d’utilisateurs, dans le cadre d’une entreprise avancée qui n’en est souvent plus à sa phase StartUp. Il est donc primordial de limiter la dette technique des fonctionnalités principales en ayant un process de [test](/fr/blog/articles/systeme-de-test-end-to-end-simple-complet-codeceptjs), en **optimisant le code**, en écrivant une **documentation maintenue à jour**, et surtout en migrant le code vers de nouvelles technologies quand c’est nécessaire. ## Choisir ses technologies ### Comment choisir des technologies limitant la dette technique ? Il faut savoir que certaines technologies amènent une dette dès le début du projet. C’est le cas des technologies qui ont une **courte durée de vie** par exemple, il sera nécessaire de rapidement migrer vers d’autres technologies. Pour éviter ces problèmes, il est préférable de choisir des **frameworks ou librairies** qui ont une communauté conséquente ou qui sont supportés et utilisés par de grosses entreprises qui y sont fortement liées. De cette manière, l’entreprise apportera des ressources pour la maintenir.  Pour limiter la dette technique apportée par les technologies, il est aussi nécessaire de choisir celles ayant une bonne “expérience développeur”. À mon sens, l’**expérience développeur permet d’augmenter la durée de vie** d’une technologie qui est alors très utilisée par la communauté, mais aussi d’augmenter la **qualité des développements** en simplifiant ces derniers. Pour répondre à la question initiale sur “comment choisir”, je dirais qu’il faut s’assurer que les personnes choisissant un outil ont une **expérience** avec, et qu’ils l’ont déjà comparé à des outils similaires. Il vous sera impossible de dire si un tournevis à manche en bois est meilleur qu’un tournevis à manche en plastique sans avoir testé les deux pendant un certain temps. Le raisonnement est le même pour les technologies et outils de développement. ![Maitriser sa dette technique](images/maitriser-sa-dette-technique.png) ## Monter en compétences Mon troisième conseil est simple mais n’est pas évident pour tout le monde. Si des personnes ayant peu d’expérience travaillent sur un projet, il est nécessaire de s’assurer que leur travail soit supervisé. Il peut s’agir de stagiaires, d’alternants, de développeurs juniors ou encore de nouveaux arrivants expérimentés mais ne connaissant pas les processus de l’entreprise. Si vous gérez une entreprise et que vous n’avez pas les moyens d’employer un développeur sénior, il est possible de prendre de la [prestation auprès d’entreprises](/fr/prestations) telles que le BearStudio pour **encadrer les développeurs junior** et mettre en place les premiers processus de l’entreprise. Ayant développé 3 projets d’entreprise dont deux en tant qu'étudiant / développeur junior, je vous conseille fortement de **vous faire accompagner** si vous n’avez pas de développeur expérimenté au sein de votre entreprise. J’écrirai prochainement un article de retour de l’expérience sur ce que le BearStudio m’a apporté en tant que développeur et entrepreneur. ## Qualité de code Je ne m’attarderai pas sur ce point, mais diminuer la dette technique (en tant que développeur) nécessite forcément de connaître et appliquer quelques principes de la qualité de code : - **Lisibilité :** Le code doit être lisible pour être relu et compris facilement, par d’autres développeurs ou pour soi même quelques semaines après son écriture. - **Maintenabilité :** Le code doit être maintenable, c’est-à-dire qu’il ne doit pas être nécessaire de le réécrire pour apporter de petites modifications. - **Simplicité :** Plus un code est simple, plus il est lisible et maintenable. - **Factorisé :** C’est le fait de mettre du code en commun entre différentes parties de l’application, de façon à pouvoir le réutiliser, augmenter sa maintenabilité et améliorer sa lisibilité. - **Ne pas réinventer la roue :** Réinventer la roue, c’est développer de la logique qui existe déjà ailleurs, ce qui amène des bugs, une perte de temps et une augmentation de la quantité de code, le rendant moins lisible et plus compliqué à comprendre. Pour finir, je tiens tout de même à attirer votre attention sur le fait que mes conseils portent en majeure partie sur la **diminution de la dette technique**. Cependant, le meilleur conseil que je puisse donner, c’est qu’il est dangereux de ne pas avoir de dette technique du tout. Cela signifierait que vous réalisez un projet de grande qualité, qui nécessite donc un gros budget à y allouer. Si votre entreprise n’a pas ce budget, **essayez de prendre du recul** pour vous assurer que vous n’êtes pas en train de saboter votre projet. --- ### Comment j'ai délégué la responsabilité pour les augmentations URL: https://www.bearstudio.fr/fr/blog/articles/comment-deleguer-la-responsabilite-pour-les-augmentations Date: 2020-01-14 En 2018, pour la première fois, j'ai été réellement confronté à la problématique des augmentations au BearStudio. ## Le contexte de la première demande d’augmentation dans la société Mon contexte :  - 3ème année fiscale de la boîte. - L'équipe s'est défoncée pour tenir les objectifs de chiffre d’affaires et de production ! Le **ratio est de x2** par rapport à l'année dernière (voir article [4 ans d'entrepreneuriat](/fr/blog/articles/rex-4-ans-entrepreneuriat-au-bearstudio)). - Je me paie depuis le début, mais avec un salaire égal à quand j'ai commencé ma carrière il y a presque 10 ans et en tant que dirigeant, je ne cotise pas comme les autres salariés. Ce qui justifie en partie qu'un "patron" soit payé plus qu'un salarié, dans la limite du raisonnable et des possibilités de l'entreprise. - Un des stagiaires que nous avons accueilli est vraiment bien intégré et l'équipe veut que nous l'embauchions. - L'année a été intense. En terme de management, certains problèmes se sont révélés avec des membres de l'équipe. Mon ressenti et mon caractère rancunier m'inciteraient à ne pas augmenter ces derniers. - Certains membres de la team sont trop gentils et n'oseraient même pas envisager demander une augmentation. - Qui dit augmentation, dit **incidence sur les objectifs de chiffre d’affaires**. Je dois donc prendre des décisions qui impactent toute l'équipe, sur lesquelles **je ne suis pas du tout impartial** et je suis persuadé de faire des erreurs. En discutant avec un des développeurs, je me suis rendu compte que ma rancune et mon ressenti sur le management ne tenaient pas compte de plein d'autres points et que l'équipe ne voyait pas du tout les choses de la même façon que moi. Rien à foutre d'être CEO de la boîte, je n'avais franchement pas envie de porter la responsabilité d'une décision qui serait forcément une erreur… J'ai donc décidé de faire **porter la responsabilité à l'équipe entière** ! ## Ma méthodologie pour les augmentations Un vendredi soir, j'ai programmé une **réunion pizza** avec toute l'équipe pour décider des augmentations et de l'embauche éventuelle du stagiaire. En amont, j'ai préparé un Google Sheet qui détaille les salaires de tout le monde _(oui je sais, ce n’est pas très RGPD tout ça…)_. Le salaire net, le salaire brut, le **coût pour l'entreprise** (qui n'est pas la même chose que le brut) : avec de simples formules et des ratios, le tout nous donne l'objectif de chiffre d’affaires en fonction des salaires. ![Tableau Excel Augmentation](images/tableau-excel-augmentation.png) L'idée est de pouvoir avoir en temps réel l'incidence des augmentations sur le chiffre d'affaires à réaliser. Car malheureusement dans la vraie vie d'une entreprise, si tu veux augmenter ton salaire à un moment, ça va forcément avoir une **incidence sur le chiffre d'affaires**. Le brief pour la réunion était simple : chacun vient avec des doléances et des arguments puis nous faisons un tour de table où chacun s'exprime. Une fois toutes les demandes de chacun collectées, nous refaisons des tours de table pour savoir si tout le monde est d'accord. Y compris pour dire : _“Je suis pas d'accord moi je pense que "machin" devrait avoir une augmentation”_.  L’idée est que tout le monde arrive préparé avec de vrais arguments. Pour ce faire, je leur ai envoyé de la lecture et une fiche d'auto-évaluation du site [Outils du manager](https://www.outilsdumanager.com/). Au final, la réunion s'est super bien passée. Nous avons décidé d'augmenter les membres qui sont là depuis le début et aussi d'**embaucher le stagiaire**. L'équipe a pris la décision et la responsabilité d'augmenter beaucoup plus que prévu les objectifs de chiffres d’affaires. 8 mois plus tard, ça semble toujours être la bonne décision. Par contre, ils ont moins rigolé quand je leur ai dit à la fin de cette soirée : “_Je viens de faire un entretien avec une super recrue... Nous allons prendre la décision ensemble, mais il y a de grande chance que nous l'embauchions_ 😁”. Mais ça, c'est une autre histoire… En 2019, il s’est avéré que **cette solution était la bonne**, puisque le chiffre d’affaires de la société a continué d’augmenter. Nous avons donc [renouvelé l’expérience](https://twitter.com/_BearStudio/status/1184732906176077824) de la réunion d’augmentation, et la nouvelle recrue est bien arrivée en février 2019 parmi les salariés. C’est d’ailleurs en partie de sa faute si la [stratégie de 2020 évolue](/fr/blog/articles/le-mot-du-chef-rudy-baer) vers de la communication. ![Methodologie Augmentation](images/methodologie-augmentation.png) --- ### La dette technique : un coût sous-estimé des projets numériques URL: https://www.bearstudio.fr/fr/blog/articles/dette-technique-cout-sous-estime-des-projets-numeriques Date: 2020-01-07 Le terme **dette technique** est utilisé dans le domaine de l’informatique en comparaison à la dette du domaine financier. Celle-ci permet de symboliser les coûts liés aux mauvaises décisions techniques d’une entreprise. Cet article s’adresse donc aussi bien à ceux qui prennent les décisions qu’à ceux qui les suivent, puisqu’il est important de minimiser cette dette en vue d’une pérennité de l’entreprise ou du projet. Un exemple simple d’action menant à l’accroissement de la dette technique est de laisser un environnement de travail vieillir sans prendre le temps de le mettre à jour. Il peut s’agir, par exemple, de ne pas mettre à jour un ordinateur, **ne pas mettre à jour les dépendances d’un projet**, ou ne pas prendre le temps de revenir sur ses décisions et revoir la conception d’une fonctionnalité. Ces exemples sont particulièrement intéressants puisqu’ils paraissent assez courants. ![Développeur en pleine action](images/dette-technique-rex.png) Il est important de se méfier de l'abus de ce genre de pratique, ce que j'ai compris lors de mon séjour dans une entreprise canadienne. ## Dette technique : l'exemple d'une entreprise canadienne Cette entreprise a commencé ses [développements](/fr/prestations/developpement-web) au milieu des années 1990 en ayant pour objectif de mettre en place une application unique, visant à gérer des flottes de transporteurs. Cette application étant vouée à contenir beaucoup de formulaires, [Visual Basic 6](https://fr.wikipedia.org/wiki/Visual_Basic) a été la technologie choisie à l’époque, puisque leader sur le marché. C’est une technologie de Microsoft permettant une conception logicielle simplifiée à l'aide de _drag'n'drop_ d'éléments pour créer des formulaires. Ayant fait un choix judicieux, l'entreprise a donc **rapidement pu vendre sa solution** à des entreprises de transports, lui apportant une bonne croissance. Lors de ma venue dans l'entreprise en 2016, la solution n’avait **pas** été migrée vers de nouvelles technologies, plus récentes, sécurisées et performantes. **La majeure partie du code était toujours en VB6, qui n’est plus maintenue depuis 2004 par Microsoft.** C’est un exemple concret qui m’a permis de me poser la question : **Quelles conséquences cette dette technique aura pour l'entreprise et ses clients ?** VB6 étant une technologie qui prend de l'âge, elle ne fonctionne que sur les versions 32 bits de Windows, limitant son utilisation à des ordinateurs de 4Go de mémoire RAM. Cette limitation impacte directement la durée des [développements](/fr/prestations/developpement-web) à venir puisque la moindre opération est longue sur des machines si peu puissantes. La compilation prend jusqu’à 3 minutes, les éditeurs de texte prennent quelques secondes à retranscrire ce que le développeur écrit et le mode visuel s’ouvre en plusieurs dizaines de secondes. Les temps de développement se rallongent, la qualité tend à diminuer et **l’agacement dans l’entreprise augmente**, tant pour les développeurs que pour les managers. Je vois plusieurs conséquences directes liées à ces problèmes: - La **satisfaction client diminue** car la qualité est impactée. - Un turnover important se met en place, notamment chez les développeurs. Dans cette entreprise, j’ai vu des employés rester moins de 3 mois, ce qui amène la qualité de la solution à diminuer encore et encore. - Le **[coût des développements](/fr/blog/articles/no-estimate) augmente**, impliquant une augmentation des tarifs ou une baisse de rentabilité. Ces différentes conséquences entraînent un cercle vicieux qui peut durer jusqu’à la faillite de l’entreprise car les développeurs la désertent et les clients cherchent des solutions alternatives, moins coûteuses et de meilleure qualité. ## Le concept de la dette technique La notion de dette technique prend tout son sens lorsqu’on réfléchit à une issue de secours dans ce genre de situation : il est nécessaire d’investir beaucoup de temps et d’argent pour rattraper le temps perdu, en migrant le code partie par partie, le tout sans impacter la solution actuellement utilisée par les clients et qui est toujours en évolution. La dette technique n’est finalement qu’une dette financière qu’il est nécessaire de **savoir maîtriser pour ne pas la subir**. Dans cet article, j’ai ciblé un exemple, mais il faut savoir que la dette technique peut aussi se manifester par l'**absence de conception**, de tests, de documentation ou de **migration de code** qui permettent à terme de maintenir un projet dans de bonnes conditions et satisfaire pleinement les différentes parties d'un projet. De plus, il est important de ne pas être extrémiste concernant la dette technique, car quand elle est maîtrisée, elle permet de donner un élan de lancement aux projets, d’**être plus flexible** et donc d’atteindre la cible du projet plus rapidement. ![Un développeur du BearStudio](images/code-dette-technique.png) --- Si vous souhaitez en savoir plus sur la dette technique, vous pouvez en lire plus dans mon article sur la [maîtrise de la dette technique](/fr/blog/articles/maitriser-dette-technique-projet-numerique). --- ### Le mot du chef URL: https://www.bearstudio.fr/fr/blog/articles/le-mot-du-chef-rudy-baer Date: 2019-12-30 Je pense que vous l’avez tous remarqué mais en 2019 nous nous sommes mis à la communication ! C’est à dire que nous avons embauché Laurie, fucking [masse salariale](/fr/equipe). _BearStudio style_, nous avons bêta testé plein de trucs avec toujours cette touche #nobullshit et sincère qui nous caractérise. ## Pour 2020, on monte d’un cran en communication ! Maintenant, nous avons une stratégie (et surtout un nouveau site internet). De ce fait, nous avons de nombreux sujets de travail dans les tuyaux pour l’année 2020 : - Publier plus d’articles sur notre blog : au moins 1 par mois ! - Continuer la communication sur les réseaux sociaux mais en adaptant le contenu à chaque canal : - De l’entrepreneuriat et du [management](/fr/blog/articles/9-trucs-abstraction-quand-on-manage) sur [LinkedIn](https://www.linkedin.com/company/bearstudio/) - De l’[UX](/fr/prestations/ux-design) sur [Instagram](https://www.instagram.com/_bearstudio/) - De la tech sur [Twitter](https://twitter.com/_BearStudio) Choisissez le réseau qui vous convient ou suivez-nous partout pour ne rien louper 😁 Après 4 ans d’existence, nous commençons à avoir **plein de choses à dire sur les Startups** et l’[entrepreneuriat](/fr/blog/articles/rex-4-ans-entrepreneuriat-au-bearstudio). Du coup, nous nous sommes dit que nous allions prendre les plus bavards du BearStudio (Rudy, Ivan et Nicolas Grèverie) pour les faire parler devant une caméra afin de partager leurs connaissances ! Forcément, le tout sera à retrouver sur [notre chaine Youtube](https://www.youtube.com/channel/UC-2hpnhKgU2C_OFucjEN0IA). ## Dans les autres trucs importants et en cours pour 2020 Nous allons également organiser notre première conférence tech à l’international : **LA BEARCON 2020 !** Je ne vais pas trop vous en dévoiler, mais vous devriez bientôt en savoir plus sur cet événement qui sera ensoleillé. Par ailleurs, nous avons aussi au BearStudio des projets plus ou moins vastes : - Un produit en développement dont nous allons vous parler d’ici peu - Et le recrutement d’une **star d’UX** : Ivan Dalmet 🎉  Quelques idées que j’ai également en tête (et qui ne devraient pas tarder à arriver dans ma liste de tâches) : - Une formation entrepreneur #nobullshit - La rédaction d’un livre blanc - La rédaction d’un livre (tout court) - Et d’autres surprises ! Pas d’inquiétude, l’équipe va également continuer de **développer les produits de nos clients** avec des réalisations sur lesquelles nous avons déjà travaillé en 2019 mais qui vont évoluer : - **[Prolicent](https://www.prolicent.com/)**, une plateforme en ligne pour vérifier sa conformité avec le RGPD - [**Spiwo**](https://spiwo.fr/), une application pour les professeurs afin de gagner du temps dans la correction des copies - **Mybop**, pour commander et payer à l’avance votre repas pour ainsi gagner du temps ## Pour ma résolution de 2020 en tant qu’entrepreneur ![Livre "La finance d'entreprise pour les nuls"](images/entreprise-pour-les-nuls.jpg) J’ai acheté un livre sur la compta et la finance d’entreprise 😑 D’accord, tous **nos bilans comptables sont positifs**, mais bon ce serait peut-être bien que j’arrête de dire aux comptables “_Non mais je m’en bats les couilles de ce que tu racontes… dis moi combien je dois faire de CA_ !”. Je crois que ça les vexe un peu… (Evidemment, ceci est un petit troll, mais il n’en reste pas moins vrai qu’il faut que j’apprenne à mieux les connaître) --- P.S. : Si jamais vous n’aviez pas encore compris, 2020 sera l’année où il sera indispensable de nous suivre sur les réseaux sociaux pour votre veille technique et pour profiter de toutes nos bonnes idées. L’inscription à la newsletter sera également prochainement disponible ! --- ### REX : 4 ans d'entrepreneuriat au BearStudio URL: https://www.bearstudio.fr/fr/blog/articles/rex-4-ans-entrepreneuriat-au-bearstudio Date: 2019-12-23 Un jour, je me suis dit que ça pourrait être cool de faire un petit article de **retour d’expérience sur l’entrepreneuriat en tant que développeur**. J’ai donc commencé à écrire un article retour d’expérience après 1 an d'entrepreneuriat… Je n’ai jamais eu le temps de le finir et j’ai perdu la première version… Du coup voici la version 4.0 ! ## Pourquoi j’ai monté ma boite ? Rien d’extraordinaire, j’ai commencé ma carrière en tant que **développeur Java dans une ESN** (SSII à l’époque), ensuite j’ai eu l’opportunité d’entrer dans une startup appelée **SmartPanda Network**. Je suis passé de développeur à CTO : le produit ne trouve pas son marché, trop de cash dépensé, du coup l’équipe technique passe de 5 à 1. Je monte alors une nouvelle équipe moins coûteuse et plus efficace. Quelques années plus tard, l’entreprise reçoit une proposition de rachat par **Docaposte**. C’est cool, mais par contre je suis de plus en plus en désaccord sur le [management](/fr/blog/articles/9-trucs-abstraction-quand-on-manage) avec mon CEO. 2 choix s’offrent à moi :  - continuer à être en mode grincheux, me plaindre et dire que ce n’est pas comme ça que l’on fait, mais ne rien faire pour que ça change réellement, - ou partir et monter ma boite pour prouver que l’on peut faire les choses comme je le pense ! Ouai, en gros, je suis parti à cause d’un problème d’égo 😜 Mais bon, je me suis dit que dans la foulée, j’allais essayer de créer la boite dans laquelle **j’aurai rêvé de travailler** en commençant ma carrière. 😉 --- ## Année 0 d'entrepreneuriat **Effectifs :**  - 0 salarié - 1 prestataire (moi) - 0 actionnaire Dans la mesure où ce que j’allais proposer était du service, je me suis dit que le plus simple serait de créer l’entreprise UNE FOIS que j’aurais des clients à facturer. J’ai donc commencé en **freelance**. Ça m’a permis également de parler de mon projet et de chercher du monde pour me rejoindre dans l’aventure. Contrairement à d’autres secteurs d’activités, personne n’a essayé de me décourager ou de me dire que c’était une mauvaise idée. En revanche, j’ai eu quelques personnes enthousiastes qui souhaitaient me rejoindre mais n’étaient jamais disponibles au moment où il fallait faire des choses… Du coup, j’ai fait sans eux 😉 J’ai quand même réussi à trouver 7 personnes pour suivre. Une partie en conseil et une autre en production. Pour l’anecdote, je leur ai dit : “_Donnez moi votre argent pour être actionnaire, par contre vous ne le reverrez jamais._” Et ils ont dit OK. Nous commençons à 3 freelances et 1 freelance présent un jour par semaine uniquement. Nous trouvons nos premiers clients sans trop de problème. --- ## Année 1 d'entrepreneuriat **Effectifs** :  - 1 salarié (moi-même) - 4 prestataires - 7 actionnaires Ça y est la boite est officiellement créée. Nous avons plusieurs clients et il faut **augmenter la capacité de production**… Le problème est que les développeurs sont hyper sollicités et les salaires trop élevés pour être compatibles avec notre typologie de client, surtout sur une boite qui cherche sa cible de client. Du coup, je me suis dit, plutôt que d'essayer de me battre avec toutes les autres boites pour avoir les seuls bons développeurs qui valent le coup… Je vais plutôt essayer de créer moi-même ces perles rares, à partir de zéro : “**les stagiaires**”. Pas trop compliqué pour moi de trouver et surtout de motiver des stagiaires à venir chez nous : > *“Vas-y viens bosser sur les dernières technologies dans une boite qui se monte en mode startup. J’en ai rien à foutre que tu sois stagiaire et moi Président de mon cul… si t’as un truc à dire tu le dis tant que le boulot est fait et que tu acceptes mes critiques assez bourrines “conseils”. Si tu es motivé c’est tout ce qui compte. Au pire, si ça te plait pas dans 6 mois, tu auras un super CV et je te trouverai moi-même du travail si on ne peut pas t’embaucher”.*  Ils ont dit OK. Ça avance tranquillement, par contre nous rencontrons nos premiers “clients” compliqués. Quand tu commences une **boite de développement**, tu trouves toujours des gens qui ont un projet et 0 budget (ou presque), mais qui paradoxalement sont les plus “exigeants” pour rester poli. Je me suis rendu compte qu’ils étaient **chronophages** et que les autres clients, qui eux ne se plaignent pas car ils nous font confiance, passent après eux. Ce n’est pas logique ! Nous leur avons donc fait une proposition : > *“Voilà ce que l’on a produit, voilà ce que ça vaut selon nous. Soit vous payez et on continue sur des bases saines, soit on vous donne le code, vous ne payez rien puisque vous n’êtes pas satisfaits et on vous laisse trouver un autre prestataire. Bien entendu, pas de soucis pour briefer celui qui va reprendre, le but n’est pas de vous mettre dans la merde mais d’arrêter une relation de travail qui ne satisfait aucun des 2 partis.”*  Ils ont choisi de partir. Mis à part quelques petits soucis d’organisation avec un de mes associés, le reste se passe bien. Ma seule erreur c’est le choix du PUTAIN de comptable mais ça je ne le sais pas encore à ce moment là… L’équipe tourne bien, j’ai entendu que certains entrepreneurs ne partent pas en vacances et ne se paient pas les premières années… Sauf que nous, nous faisons du service donc si je ne peux pas me payer ni partir en vacances c’est que ce n’est pas viable. Je me paye donc un salaire (du même niveau qu'à mon début de carrière mais un salaire décent quand même) et j’ai décidé de **tester la résilience de ma boite** en partant 1 mois en vacances en Asie. En gros, j’ai dit à l’équipe _“Bon je pars, la boite elle tourne. Je reviens, la boite elle doit toujours tourner…”._ Bien sûr, j’étais joignable sur Slack pour répondre aux questions et débloquer les situations si besoin mais globalement c’était simplement rassurer des juniors qui voulaient bien faire et avaient besoin d’une “validation” sur des décisions qui leur semblaient risquées.. Nous clôturons notre **premier bilan comptable positif**. ![Carte de visite du BearStudio](images/bearstudio-entrepreneuriat.jpg) --- ## Année 2 d'entrepreneuriat : Ah merde **Effectifs** :  - 2 salariés  - 3 prestataires - 7 actionnaires **Embauche de mon premier associé** (qui était jusqu’ici en freelance). Les vrais problèmes ont commencé : Les problèmes d’organisation avec un de mes associés ont été plus compliqués, de mon côté j’avais besoin d’augmenter le niveau d’exigence et la vitesse de production donc j’ai mis plus de pression… Nous nous sommes rendus compte que c’était contre productif pour lui et qu’il valait mieux se séparer en bon terme plutôt que d’aller dans le mur. Le vrai gros problème de l’année : à la base je pensais prendre des stagiaires, en voir un sortir du lot, l’embaucher puis recommencer l’année suivante et augmenter tranquillement… Malheureusement pour moi (ou pas) j’en ai eu 4 en même temps… Dans une [société de service](/fr/prestations), généralement, tu trouves les clients, de plus en plus de projets donc tu recrutes quand tu as besoin de capacité de production… Le problème c’est que généralement les bons profils sont déjà partis. C’est comme ça que des SSII (ESN je sais mais je suis vieux 😜) te font miroiter une embauche pendant des semaines sans forcément te le dire. Personnellement, ça me faisait chier de les voir partir. Clairement, ils avaient et ils incarnaient tout ce que je voulais faire, en tant que personne, avec le BearStudio. Nous avons donc pris une décision ensemble : ils commencent en **freelance** puis l’entreprise les embauche dans 6 mois environ et nous allons nous démerder pour trouver le business qui **permet d’alimenter tout le monde**. Ça n’a pas été simple mais nous avons réussi. 😉 **Nous avons doublé le chiffre d'affaires de l’année précédente.** Par contre, malheureusement pour la profession, les clichés sur les experts comptables se sont révélés vrais pour moi… Beaucoup trop procéduriers (pour moi), avec une mentalité trop différente de la mienne… La séparation nous a coûté financièrement, mais **vaut mieux payer que rester coincé avec un comptable au mauvais “mindset”**. Il y a de plus en plus d’administratif, j’ai de plus en plus de choses à gérer… Du coup, nous décidons de trouver quelqu’un sur l’administratif en freelance. Plutôt quelqu’un d'expérimenté qui saura où aller et pourra me débarrasser de ça. Par un concours de circonstances étranges, nous avons trouvé une junior de 23 ans... --- ## Année 3 d'entrepreneuriat : les recrutements **Effectifs** :  - 5 salariés  - 0 prestataire - 7 actionnaires  Un de mes associés décide d'arrêter sa boite en fin d’année… De notre côté, nous avons besoin de quelqu’un pour **trouver du commerce** mais nous ne voulons pas d’un commercial “bullshit” qui vend de la viande. Lui, il a été entrepreneur, il est tech à la base… Du coup, nous le recrutons. Les 6 mois de freelance sont terminés pour les anciens stagiaires, nous les recrutons également. Dont au passage un étranger. Notre assistante freelance a fini son CDD, du coup nous la recrutons également. Un bon profil junior en UX design passe dans le coin, du coup nous recrutons. Le problème de tous ces recrutements, c’est qu’il faut faire le chiffre d’affaires qui va avec… Ça a été dur mais nous avons réussi. Nous avons encore **doublé le chiffre d'affaires de l’année précédente**. ![Flyer du BearStudio](images/flyer-bearstudio.jpg) --- ## Année 4 d'entrepreneuriat **Effectifs** :  - 10 [salariés](/fr/equipe) - 2 prestataires - 7 actionnaires  Il parait qu’il faut 3 ans pour stabiliser une boite, **mission accomplie** ! Ça ne veut pas dire que la bataille est gagnée. Nous restons vigilants mais nous savons qu’il est possible de **concilier business, travail de qualité et environnement de travail agréable**. Et pour les besoins de mon égo : _lalala\*_, j’avais raison C’EST POSSIBLE ! _\*Le lalala dit avec un petit air chantonnant est une phrase visant à narguer son interlocuteur au BearStudio._
![Retour d'expérience sur l'entrepreneuriat, avec un clin d'oeil au digital.](images/rudy-certifie-digital-bearstudio-1024x624.jpg)
Image humoristique illustrant à la perfection le "lalala" pour narguer son interlocuteur.
--- Note de l'auteur : l’article sort avec un an de retard, j’aurai pu faire une version 5.0 mais je n’ai pas trop le temps ! Si vous voulez savoir comment ça se passe actuellement, suivez l’activité de [notre chaine youtube](https://www.youtube.com/channel/UC-2hpnhKgU2C_OFucjEN0IA). 🤓 --- ### Startup, Lost In Tech : la communauté des devs et des startupers URL: https://www.bearstudio.fr/fr/blog/articles/startup-lost-in-tech-la-communaute-des-devs-et-des-startupers Date: 2019-12-13 Le mardi 26 novembre 2019, au [Perlouse](http://perlousepigalle.fr/), s’est tenue la première édition de l’**afterwork** “[Startup, Lost In Tech](https://www.meetup.com/fr-FR/Startup-lost-in-tech/)”. Cet événement a été créé à l’initiative de deux entrepreneurs, Carène Tchong de [Twosday](https://twosday.app/), réseau de mise en relation professionnel et Rudy Baer du BearStudio.
![Rudy Baer à gauche et Carène Tchong à droite, les organisateurs de l'événement](images/lost_in_tech_rudy_carene.jpg)
Rudy Baer et Carène Tchong - Copyright Halimé Taboye
## Des **développeurs**, des **porteurs de projet** et un bon resto ! L’objectif de cet événement était d'organiser la rencontre entre les porteurs de projet et les développeurs. Le but n’était pas de promettre des CTO (Chief Technical Officer) aux porteurs de projet directement après l’afterwork mais de les aider à prendre conscience de la difficulté que peut représenter le développement d’un projet numérique. En effet, il est important de réfléchir aux ressources humaines nécessaires en interne, la capacité à gérer une équipe technique et les ressources financières dont la startup dispose. Un profil CTO, dans le contexte actuel, représente un véritable [coût](https://www.tech.rocks/blog/quel-salaire-pour-les-cto-et-tech-leaders-en-france-en-2019) pour une entreprise ; c’est donc une décision à prendre de façon réfléchie. Les développeurs ont ainsi pu aider les porteurs de projet à y voir plus clair sur la partie technique de leur projet.  Afin d'éviter certaines déconvenues ; perte de temps ou d’argent, les startupers doivent donc être plus avertis sur les enjeux techniques et financiers que représentent leur projet afin de faire le bon choix entre [agence digitale](/fr/blog/articles/arretez-de-vous-faire-avoir-par-votre-agence-digitale), studio de développement et compétences internes. 
![Affiche de bienvenue et stickers du BearStudio sur un tonneau.](images/lost_in_tech_affiche.jpg)
Afterwork entre CTO et Startupers - Copyright Halimé Taboye
Pour cet événement, les organisateurs ont choisi le restaurant [Perlouse](https://www.facebook.com/PerlousePigalle/), au 49 Rue de Douai à Paris. L’histoire de deux amis normands, l’un est ostréiculteur sur les côtes du Mont Saint Michel et l’autre restaurateur. C’est ainsi qu’Alexis nous a reçu avec de jolis plateaux d’huîtres et de saumon fumé durant toute la soirée.  [Carène Tchong](https://www.linkedin.com/in/carene/) a répondu à quelques questions afin de nous expliquer d’où est parti le projet et ce qui ressort de cette première édition. ## De l’idée à la réalisation d’un tel événement, il n’y a qu’un pas ! ### D'où te vient l’idée de mettre les gens en relation ? _“Je le faisais déjà naturellement à titre professionnel comme personnel. Je me suis vite rendue compte que c'était une vraie appétence. Quitte à aimer ce que l'on fait, autant lancer une activité qui soit complètement liée à ce qui nous épanouit le plus,_ **_connecter_** _des personnes en vrai.”_ ### Comment a commencé ta démarche avec Rudy ? _“Nous étions inscrits sur des_ **_Meetup Entrepreneurs_** _et_ **_Développeurs_**_. Trois mois de suite le rendez-vous mensuel s'est annulé. Pour le dernier, Rudy avait déjà fait 1 heure de route avant que je lui annonce. De là, l'idée a germé. Je recherchais un_ **_développeur_**_, lui des_ **_porteurs de projet_**_. Je savais organiser des événements sur Paris alors pourquoi ne pas créer notre propre événement ensemble. Au moins on saura que rien ne sera annulé à la dernière minute.”_
![Capucine Abrysch, Nathalie Granchon et Carène Tchong qui accueillent les participants](images/lost_in_tech_entree.jpg)
Capucine Abrysch - Nathalie Granchon - Carène Tchong Accueil des participants - Copyright Halimé Taboye
### Quel est l'objectif premier dans ce type d'événement ? _“L'objectif numéro 1 est de créer une grande et belle_ **_communauté_**_. Plus il y aura de personnes aux profils diversifiés, plus chacun pourra y trouver son compte.”_ ## Un afterwork réussi et des organisateurs en quête d’améliorations ### Quelle analyse fais-tu de cette première édition ? _“Objectif plus que rempli avec 60 invités. Du monde, de la bienveillance et des retours positifs de la part des invités sur place. Il faudra veiller à trouver les deux profils pour chaque événement afin d'en préserver le concept.”_
![Vue d'ensemble de l'événement](images/lost_in_tech_groupe.jpg)
Vue d'ensemble de l'événement - Copyright Halimé Taboye
En effet, cette première édition a permis aux participants de se présenter, pour certains sous forme de **pitch** et pour d’autres grâce à l’activité mise en place pendant la soirée. Ce franc succès, mis en images par [Halimé Taboye](https://www.linkedin.com/in/taboyehalim%C3%A9), fondatrice de [Born to Create](https://www.instagram.com/borntocreate_agency/), est donc un bon début pour les éditions prochaines. ### As-tu des idées pour la prochaine édition ? _“Proposer une pitch session en bonne et due forme avec micro en demandant aux personnes de s'inscrire pour pouvoir pitcher (développeurs et startupers). Proposer davantage d'animations et intégrer les_ **_recommandations_** _des invités.”_
![Discussion entre trois personnes pendant l'afterwork.](images/lost_in_tech_discussion2.jpg)
Bonne humeur et partage de connaissances - Copyright Halimé Taboye
Cet **afterwork** a donc donné l’élan à d’autres projets et d’autres formats d’**événements** qui seront organisés durant l’année 2020. Des conférences, des débats, du contenu en ligne sur les différentes plateformes d’échanges… L’objectif est de tisser un réel réseau de partage des connaissances et d’entraide.  Vous pouvez également [nous contacter](/fr/contact) pour plus de renseignements ou tout simplement pour parler de votre projet. Le [BearStudio](https://www.facebook.com/allyouneedisbear/) a ainsi été créé : pour répondre à vos questions !   En attendant de fêter la nouvelle année et d’avoir le programme des réjouissances, nous vous invitons à vous inscrire aux groupes [Meetup](https://www.meetup.com/fr-FR/Startup-lost-in-tech/) et [Facebook](https://www.facebook.com/groups/521992361896607/) afin d’avoir toutes les informations nécessaires sur nos prochains **événements**. ### Auteur Marlène Ziapkoff --- ### Codeurs en Seine 2019, des devs, de l’ux et de l’agilité ! URL: https://www.bearstudio.fr/fr/blog/articles/codeurs-en-seine-2019-des-devs-de-lux-et-de-lagilite Date: 2019-12-02 L'événement [Codeurs en Seine](https://www.codeursenseine.com/2019/) s’est tenu le 21 novembre dernier au Kindarena à **Rouen** avec près de 1000 participants. Depuis 2009, l’initiative de quelques développeurs aguerris s’est ainsi agrandie pour le bonheur de notre **communauté numérique** et **novatrice**. ## Une organisation rodée et efficace Depuis plusieurs années, le BearStudio a la fierté d'être un des sponsors de l'événement et de mobiliser une partie de son [équipe](/fr/equipe) dans l'organisation de cette journée. Le BearStudio était **sponsor** et une partie de son [équipe](/fr/equipe) fut organisatrice de l'événement axé sur des **conférences** aussi instructives qu’inspirantes. Nous vous proposons donc un retour sur notre expérience 2019 ! « Niveau organisation nous sommes bien rodés, ça tourne bien, on a simplifié plein de choses, notamment à l’accueil, ça se fluidifie bien. Nous avons eu pas mal d’organisateurs cette année donc ça permet de bien avancer et de répartir les tâches. » ([Rudy Baer)](https://www.linkedin.com/in/rudybaer/) Les intervenants très hétéroclites et tous prêts à nous apporter leur lumière sur **JavaScript**, l’**ITCSS** ou encore sur le bien-être au travail. [Andréa Cauchoix](https://www.linkedin.com/in/andr%C3%A9a-cauchoix/) livre ses impressions : « Super première de Codeurs en Seine pour moi, j’ai beaucoup aimé les plénières d’ouverture et de fin. L’organisation est vraiment chouette et rodée. Les organisateurs sont vraiment aux petits soins avec les speakers et ça fait plaisir. Les deux personnes qui se sont occupées de la salle C étaient adorables et très rassurantes. Des belles rencontres et de beaux échanges. C’est vraiment top de pouvoir avoir les retours avec les gommettes sur le tableau de nos **conférences**. » ## Partager les connaissances et débattre sur les métiers web et design ### Les plénières La journée s’est divisée en deux formats de **conférences**. Nous saluons tout particulièrement les plénières de [Thierry Croix](https://www.linkedin.com/in/thierrycroix/), [Benjamin Anseaume](https://www.linkedin.com/in/benjaminanseaume/) et [Frédéric Leguédois](https://www.linkedin.com/in/fr%C3%A9d%C3%A9ric-legu%C3%A9dois/) qui simplifient, démystifient et orientent les nouvelles conditions de **développement** et de coopération entre professionnels du **web**. Une vraie réussite !
![Grande salle avec des gradins pour les plénières et les conférences](images/codeurs_en_seine_pleniere_copyright_arnaud_lemercier.jpg)
Salle des plénières - Copyright Arnaud Lemercier
### Les conférences Les **conférences** d’une quarantaine de minutes tout au long de la journée sur différents sujets techniques ou sur l’écosystème du **web** ont également permis à tout le monde d’y trouver son compte. De la **cybersécurité** à la **programmation** en passant par le **design system**, les visiteurs ont pu apprendre et échanger sur les rudiments du **développement** et de l’**[expérience utilisateur](/fr/prestations/ux-design)**.  Le domaine du **développement** se caractérise par sa continuelle évolution, ce « refresh » quasi permanent de nos connaissances sur les techniques employées. Ainsi, « nous consommons de la connaissance que nous redistribuons par la suite ». Codeurs en Seine a donc été créé pour diffuser de la connaissance, prendre du recul sur celle-ci et partager les solutions techniques appropriées. 
![Salle de conférences](images/codeurs_en_seine_conference-1.jpg)
Une des conférences de Codeurs en Seine
## Les sponsors de Codeurs en Seine ont la parole Du côté des sponsors, quelques animations, des goodies et de belles rencontres professionnelles. L’autre utilité de Codeurs en Seine est de favoriser le **recrutement** des différents profils en recherche d’emploi, la promotion d’**entreprises** actrices de ce secteur et permettre aux **startups** de créer des **synergies** entre elles ou auprès de grands groupes, en Normandie, comme dans la France entière.  « C’est avant tout avoir une présence et se faire connaître dans la région auprès des différents acteurs (étudiants, partenaires, etc.), promouvoir l’entreprise, faire éventuellement du **recrutement** et montrer les projets sur lesquels nous sommes actifs. Pour nous, c’est aussi une occasion d’inviter nos collaborateurs à participer, à s’enrichir et à apprendre des choses. » ([Thierry Libeau](https://www.linkedin.com/in/thierry-libeau/) - Manager IT - [Sopra Steria](https://www.soprasteria.com/fr))
![Stand de l'entreprise Enovea à Codeurs en Seine](images/codeurs_en_seine_enovea.jpg)
Stand Enovea
![Stand Microsoft à Codeurs en Seine](images/codeurs_en_seine_microsoft-1.jpg)
Stand Microsoft
## Qu’en pensent les visiteurs ? Tout au long de la journée, nous avons pu avoir des **retours d’expérience** via notre système de notation de conférences et quelques témoignages. « J’ai assisté à des présentations ce matin qui étaient de qualité et assez pointues sur pas mal de domaines. Comme c’était dit à la plénière, cela permet à nos jeunes d’avoir des retours de ce qui se fait sur le marché à la fois en matière de technologies et en matière de spécificités liées à leur métier en évitant de baigner dans un monde marketing qui peut nous noyer dans des appellations, des technologies ou des choses qui paraissent compliquées alors qu’à la base nous répondons à des problèmes simples. » ([Benoît Poirier](https://www.linkedin.com/in/poirierbenoit/) - Architecte Microsoft - Sopra Steria) [Julie Fiolet](https://www.linkedin.com/in/juliefiolet/), **UX** & **UI Designer** chez [Ftel](https://www.ftel.fr/) (également **sponsor** de l’événement) nous confie ses impressions sur la promotion 2019 :  « Je ne suis pas venue ce matin car il y avait plein de trucs pour les devs et pour ma part, je ne comprends pas une seule ligne de code. Justement cette après-midi c’est la première fois que je viens car il y avait beaucoup plus de **conférences** qui n’étaient pas sur le **développement**, le **code**, mais plus sur l’**ux design** avec notamment «  Et si Mario était ux designer ? » et une autre qui avait l’air très intéressante sur le **bien être au travail**. » A ce propos, Rudy Baer (Fondateur/CTO du [BearStudio](/fr/) et secrétaire de l’association Codeurs en Seine) nous explique le processus de choix pour les différentes **conférences** : « Historiquement il y a 4 tracks : **JAVA**, **Web**, **devOps**, **Agilité**. Ça a toujours été dans l’ADN de Codeurs en Seine et on a toujours essayé d’avoir des sujets variés comme l’ux design par exemple. Codeurs en Seine est une conférence assez hétérogène. Lors du « Call For Paper », les gens soumettent leur sujet et nous sommes une trentaine de personnes à voter tout en faisant attention à la diversité des sujets. » Pour conclure, Codeurs en Seine s’affiche de plus en plus sur la scène régionale comme le rendez-vous qualitatif des professionnels du **web** et des **logiciels** en Normandie. Toutefois, cet événement reste sous-côté au niveau national. « On a de bonnes **conférences**, notre programme, notre organisation et notre nombre de participants est plutôt pas mal donc on doit continuer à faire connaître et parler de Codeurs en Seine pour le faire passer peut être sur deux jours l’année prochaine. » (Rudy Baer). ### Auteur Marlène Ziapkoff --- ### Et si vous arrêtiez de faire des estimations ? Découverte du mouvement #NoEstimates ! URL: https://www.bearstudio.fr/fr/blog/articles/no-estimate Date: 2018-05-25 ## Avant propos _Voilà ! Après de longs mois de préparation, le Business Plan est enfin clôturé et votre premier POC (Proof of Concept) a été couronné de succès : vous êtes fin prêt à lancer votre projet ! Recruter une équipe de développement en interne ? Trop long et risqué... Vous n’avez donc plus qu’une seule solution : contacter de potentiels prestataires et leur demander… Des estimations !_ ## L’Estimation, cette vieille tradition Passage obligé à la bonne relation entre le porteur de projet et ses prestataires techniques, les estimations font aujourd’hui figure d’habitude lors du lancement d’un projet. En même temps, difficile de s’en passer. Sans elles, comment peut on : - **Prédire** le budget, la vélocité et le niveau de qualité du projet - **Savoir** si le projet est assez abordable pour générer du profit - **Choisir** le prestataire avec qui travailler et à qui accorder sa confiance - **Décider** des fonctionnalités à développer et de leur priorisation - **Engager** le prestataire à respecter les différents points précédents - **Se rassurer** En gros, les estimations vont nous servir à **prendre de bonnes décisions** (techniques, stratégiques, business…), essayer d’anticiper les différentes étapes du projet et comparer les choix possibles sur la base de données empiriques. Ces données une fois validées permettront d’**établir les critères de succès du projet** (fonctionnalités à développer, budget à tenir, délai à ne pas dépasser) et par la même occasion **fixer les garanties** que le prestataire devra s’engager à respecter durant toutes les différentes phases de [développement](/fr/prestations/developpement-web). Mais ces grilles d’évaluations sont-elles toujours pertinentes ? Que penser d’un projet respectant sur le papier son cahier des charges / budget / planning, mais en pratique inutilisable par l’utilisateur ? Que dire de cet autre au périmètre partiellement développé, mais dont le ROI (Retour Sur Investissement) rapide et important permet d’amortir la suite des évolutions ? La notion de réussite ou d’échec est ici assez relative. ## Limites des estimations
![Les estimations de projets IT par CommitStrip](images/strip-supermarche-650-final.jpg)
[©️ CommitStrip](http://www.commitstrip.com/fr/2018/02/05/it-project-estimates/)
Ces exemples sont plus courants qu’on ne le pense, et permettent de relever un certain **manque d’Agilité et de souplesse** du modèle, que ce soit du côté commanditaire ou prestataire. Entre le lancement du projet et sa mise en ligne, il n’est pas rare de voir de complets revirements de situation : pivots stratégiques, changements de cible ou évolutions du marché… **Le projet est finalement en perpétuelle évolution**, là où le rôle de l’estimation est justement de le figer dans le temps. Résultat ? D’un côté, **le client ne peut plus adapter son projet** aux fluctuations du marché, de la législation, des retours qu’il reçoit de ses utilisateurs, ou encore de ses ambitions. Il perd totalement la main sur le devenir de celui-ci. D’un autre, **le prestataire perd la possibilité de conseiller** son client au fur et à mesure de l’avancée du projet, de s’adapter aux évolutions de celui-ci et de surtout privilégier les meilleurs choix techniques, autrement dit faire ce pour quoi il est payé ! Au lieu de ça, **l’accent est mis sur la déculpabilisation de chaque partie**, qui n’a plus que pour objectif principal de prouver qu’il n’est pas en faute. Un contexte de projet sain ? On ne pourrait pas en être plus éloigné... ## Et si l’alternative aux estimations était de ne pas en faire ? Née des débats animés des deux experts en Agilité Woody Zuill et Neil Killick, la philosophie **No Estimate** tente d’apporter une vision un peu plus moderne des estimations. Le principe ? Se baser sur l’évaluation non plus d’un périmètre global et fixe dès le début du projet, mais de petits lots de fonctionnalités - appelées **User Stories** - (ex.: “Se connecter via Facebook”, “Rechercher un produit par date de mise en ligne”, “Modifier les informations de tous mes collaborateurs”...). L’idée est ainsi de pouvoir mesurer régulièrement et tout au long du [développement](/fr/prestations/developpement-web) l’évolution du [projet](/fr/blog/articles/rex-deroulement-projet-ux-bearstudio), et de **se baser sur ce progrès pour prévoir et jauger la suite des évènements.**
![Explications du Backlog et des User Stories dans un processus sans estimation via des illustrations simplifiées](images/no-estimates.png)
[©️ Magnus Dahlgren](https://magnusdahlgren.com/2017/03/23/noestimates-just-story-points-done-right/)
## Avantages du No Estimate Mais “Pourquoi tant de mauvais sites web produits ?” me demanderez-vous. C’est simple, dans le marketing et la communication classique, l’objectif est de plaire au plus gros salaire de la réunion pour remporter le budget de la campagne publicitaire. En anglais, le terme est “HIPPO” (Highest Paid Person Opinions)3. Sur votre moteur de recherche préféré, vous trouverez d'ailleurs beaucoup de méthodes sur comment gérer ce type de profil lors d’un projet. Qu’est-ce que cela apporte ? D’abord un **rapport de confiance mutuel** entre le porteur de projet et son prestataire. Tandis que le premier peut **modifier intelligemment son périmètre** (et ne plus être prisonnier d’une estimation signée en amont), le second peut quant à lui **s’adapter avec souplesse** aux aléas du projet tout en assurant la qualité de ce dernier. Le fait de travailler sous forme de petits lots plutôt que sur une enveloppe globale permet également de **mieux rationaliser les coûts** : comme le paiement n’est plus en fin de [prestation](/fr/prestations) mais plutôt effectué sous forme de forfait mensuel (provisions d’un certain nombre de jours, paiement au mois en fonction du temps passé...) et sans engagement pour le client, celui-ci devient ainsi libre d’arrêter les développements à tout moment. L’objectif du prestataire, s’il veut pérenniser la collaboration, devient alors, non plus le respect strict du cahier des charges, mais bien la **satisfaction du client et la qualité du projet**. De son côté, le prestataire n’est pas réticent aux modifications car il est rémunéré tant que le projet continue et que le client est satisfait. Enfin, la plupart des tâches de planification en amont étant éliminées, c’est d’autant plus de **temps et d’énergie** alloués au projet. En promettant par exemple de livrer un lot en semaine 30 tout en faisant se rencontrer le porteur de projet et son prestataire de manière régulière (1 fois toutes les 1 ou 2 semaines par exemple), il devient plus simple d’échanger sur les progrès effectués et définir les étapes suivantes. Bien entendu, je ne suis pas en train de dire qu’il faut tracer une croix sur les concepts d’échéance ou de performance, bien au contraire ! Les estimations pourraient ne pas disparaître, mais le temps et les efforts qu'on y consacre pourraient diminuer. Pour résumer, nous pourrions dire que le No Estimate nous invite à : - **Rationaliser** le budget, la vélocité et le niveau de qualité du projet - **Adapter** le projet en fonction des besoins et des impératifs du marché - **Travailler** en toute confiance et transparence avec le prestataire choisi - **Se concentrer** sur les fonctionnalités apporteuses de valeur pour l’utilisateur - **Collaborer** intelligemment, de manière itérative et agile - **Se rassurer** N’est-ce pas finalement tout ce que nous recherchions en mettant en place des estimations ? ### Sources - [https://blog.goood.pro/2014/07/25/developper-sans-faire-destimation-le-mouvement-noestimates/](https://blog.goood.pro/2014/07/25/developper-sans-faire-destimation-le-mouvement-noestimates/) - [https://blog.cellenza.com/software-craftsmanship/estimer-sans-estimer/](https://blog.cellenza.com/software-craftsmanship/estimer-sans-estimer/) - [https://magnusdahlgren.com/2017/03/23/noestimates-just-story-points-done-right/](https://magnusdahlgren.com/2017/03/23/noestimates-just-story-points-done-right/) ### Auteurs Axelle Boucher et David Endico [https://twitter.com/axelle_boucher](https://twitter.com/axelle_boucher) [https://twitter.com/DavidEndico](https://twitter.com/DavidEndico) --- ### Git de survie en milieu hostile URL: https://www.bearstudio.fr/fr/blog/articles/git Date: 2018-02-20 ## De quoi s’a**git**\-il ? Outil incontournable à n’importe quel développeur, Git n’est pas un gestionnaire de versions, mais LE gestionnaire de version. Principalement pensé pour le code, il permet de gérer les différentes modifications de n’importe quel document texte, tout en étant parfaitement pensé pour le travail collaboratif. Si vous ne connaissez pas, ou que vous souhaitez simplement renforcer vos connaissances, vous êtes au bon endroit ! A travers cet article, nous allons vous expliquer le fonctionnement de Git, comment vous en servir, et surtout, comment régler les petits soucis sans y laisser des plumes. C’est parti ! ## Comment ça fonctionne ? Pour comprendre, il va falloir co**git**er un peu ! ### Comment sont gérées les modifications sur votre ordinateur ? Pour bien utiliser Git, il est important de comprendre comment il gère toutes les versions et modifications de vos fichiers. C’est donc par cela que nous allons commencer. Git gère une architecture dite “à trois arbres”. Mais on pourrait aussi bien parler de trois zones, ou de trois espaces. Les voici : - La **copie de travail (working directory)** représente votre espace de travail. C’est l’endroit où vous avancez sur vos tâches en cours en éditant des fichiers. Jusque là, rien qui sorte de l’ordinaire ! - **L’index (staging area)** est une zone de transition. Cette zone représente l’ensemble des modifications qui constitueront la prochaine version de votre travail. Ces modifications peuvent être ajoutées à l’index grâce à la commande : ```bash git add ``` > La commande `add` pemet d’ajouter les modifications de la copie de travail à l’index. C’est à dire que ces modifications feront partie de la prochaine version de votre travail (**ATTENTION !** Ce sont bien des modifications que l’on ajoute, et non pas des fichiers ! Ainsi, la suppression d’un fichier doit être ajoutée à l’index. Ça va, la tête ?). - Le **dépôt local (local repository)** est l’endroit où sont conservées toutes les versions de votre travail. Une version est composée de modifications ayant été précédemment ajoutées à l’index, et ayant été validées grâce à la commande : ```bash git commit [-m ] ``` La commande commit permet d’ajouter à votre dépôt local une nouvelle version de votre travail. Un commit doit être associé à un message décrivant le contenu de celui-ci. Pour cela, vous pouvez par exemple : - Utiliser la commande commit avec l’option -m pour entrer directement un message - Ne pas utiliser l’option. Dans ce cas, Git ouvrira un éditeur de texte dans le terminal afin que vous entriez le message de commit. Chaque commit est associé à un identifiant unique, son hash, qui permet ensuite de s’y référer.
![Architecture de git, copie de travail, index et dépôt local](images/git__archi_3_arbres-1024x600.png)
Architecture Git
Voilà, maintenant, vous savez selon quels processus sont gérées les modifications de votre travail. Pourtant, si vous ouvrez votre dépôt Git dans votre explorateur de fichiers, il est probable que l’état actuel des arbres ne vous saute pas aux yeux... et c’est normal ! Tout ce que vous montre l’explorateur de fichiers, c’est le contenu de votre copie de travail. Pour connaître l’état de votre index, il suffit d’utiliser la commande : ```bash git status ``` > La commande status permet d’afficher l’index et la copie de travail. La copie de travail est affichée en deux parties, les fichiers qui sont “suivis” par Git et ceux qui ne le sont pas encore. Chaque fichier est annoté de façon à connaître le type de modification qui le concerne. ## Comment accéder aux différentes versions de votre travail ? Un des intérêts d’utiliser un logiciel de versionnement, c’est de pouvoir consulter les différentes versions de son travail. Il est possible de lister tous les commits effectués grâce à la commande : ```bash git log ``` Il est également possible de retourner à une ancienne version afin de naviguer dedans grâce à la commande ```bash git checkout ``` La commande checkout a deux fonctions. D’une part, elle permet de visionner une ancienne version de votre projet. D’autre part, elle permet de changer de branche (nous verrons cela plus loin). Son comportement dépend des arguments avec lesquels elle est appelée. > Dans tous les cas, elle a pour résultat de mettre à jour votre copie de travail avec le contenu de la version sur laquelle vous venez de faire le checkout. Dans les parties suivantes, nous étudierons plus en détail le comportement de la commande ci-dessus. ## Apprendre à gagner du temps, ça vous branche ? Avec les **branches**, on attaque la partie épineuse de Git (sans mauvais jeu de mot, pour cette fois). Pourtant, une fois que vous saurez les maîtriser, vous vous rendrez compte qu’elles sont indispensables au versionnement efficace de votre travail. Pour bien se représenter les branches, il faut les voir comme des progressions différentes de votre projet. Elles sont constituées d’une succession de commits. La branche principale de votre projet se nomme par défaut master. L’objectif des branches est de pouvoir paralléliser facilement le [développement](/fr/prestations/developpement-web) de plusieurs fonctionnalités de votre projet. Cela permet de gagner en clarté et de faciliter la possibilité de retour en arrière. Et je peux vous le prouver. Imaginez que vous développez une application web comportant, entre autre, une fonctionnalité de publication d’article et une fonctionnalité de recherche parmi ces articles. Imaginez maintenant que vous ne prenez pas la peine de créer deux branches différentes pour développer ces deux fonctionnalités. Vous travaillez tantôt sur l’une, tantôt sur l’autre. Voici à quoi peut ressembler l’historique des commits de votre projet : ![historique des commits sur la branche master](images/git__branches2.png) Pendant un temps, tout va bien, et vous vous demandez bien à quoi peuvent servir ces maudites (à dire avec l’accent Québecquois) branches (tabarnac !). **Mais voilà qu’un beau jour, vous vous rendez compte que vous regrettez la modification de l’algorithme de recherche.** Vous souhaitez donc retrouver une version antérieure de cette fonctionnalité, par exemple le commit r1. Pas de problème, c’est à ça que sert Git ! Oui mais voilà. Entre ce commit et votre dernier commit, il y a également des progressions sur la fonction de publication que vous ne souhaitez pas annuler. Cela complique un peu les choses, non ? **Et cela n’arriverait pas en suivant plutôt le schéma suivant :** ![Système de branches dans git dont la master, article et recherche](images/git__branches.png) Maintenant que vous êtes convaincu, voici un petit mode d’emploi des branches - **Pour créer une nouvelle branche**, il faut utiliser la commande : ```bash git branch ``` - **Pour lister vos branches**, utilisez la même commande mais cette fois-ci sans argument : ```bash git branch ``` - **Pour supprimer une branche**, c’est encore la même commande, avec une option : ```bash git branch -d ``` > Vous l’aurez compris, la commande branch permet d’accéder aux fonctionnalités de gestion des branches. Il existe de nombreuses autres options que l’on ne listera pas ici (par exemple pour renommer une branche). Nous vous renvoyons à la documentation officielle de Git. - **Pour changer de branche**, il faut utiliser la commande : ```bash git checkout ``` Une fois que vous êtes sur la branche souhaitée, vous pouvez avancer sur votre travail normalement. Les commits effectués sur une branche ne seront alors pas visibles sur les autres branches. ## Fuuuuuuu-sion ! C’est bien joli d’avoir toutes les fonctionnalités sur des branches différentes, mais une fois qu’elles sont terminées, on aimerait bien les rassembler. Histoire d’avoir quelque chose qui ressemble à un vrai projet, quoi. Dans ce cas, il suffit de fusionner les branches en question. La fusion se fait en partant d’une branche A vers une branche B. Par exemple, on fusionne la branche “inscription” dans la branche “develop”. Il faut se placer sur la branche destination et lancer la commande suivante : ```bash git merge ``` > La commande merge permet d’importer les modifications d’une branche vers la branche courante. Cependant, il arrive que les deux branches fusionnées comportent des modifications sur les mêmes portions des mêmes fichiers. Il y a alors des conflits, et il faut les régler. On en parle juste après ;-) Un merge peut aussi être annulé : git merge --abort. ### Ici, pas besoin d’être diplomate pour régler les conflits Comme mentionné plus haut, lorsque l’on merge des branches ensemble, des conflits peuvent apparaître. Cela signifie simplement que deux portions d’un même fichier ont été modifiées dans deux commits différents et que Git ne sait pas traiter cela. Faut-il garder la version de la branche source ? Celle de la branche destination ? Ou encore, faut-il combiner les deux ? Git ne peut hélas pas le deviner. Tout ce qu’il peut faire pour vous, c’est faire ressortir les conflits grâce à des suites de caractères bizarres, ça ressemble à ça : ```bash <<<<<<< HEAD ======= >>>>>>> feature-B ``` Sympa, non ? Ce que vous avez à faire, c’est de sélectionner les portions de fichier à garder (et supprimer les caractères bizarres, bien entendu ! ). Ensuite, il faut indiquer à Git que les conflits ont été réglés. Pour cela, il suffit d’utiliser la commande `add` (dont nous avons déjà parlé) sur les fichiers concernés pour ajouter les modifications à l’index courant. Enfin, effectuez un commit. Git vous proposera un message de commit par défaut que vous pouvez conserver. Et voilà, c’est tout ! ## Les dépots distants : l'origin du monde Si vous avez lu jusqu’ici sans vous endormir, vous savez normalement gérer votre dépôt Git local et [versionner](/fr/blog/articles/versionner-entite-jpa) votre travail sans en créer manuellement plusieurs copies aux noms compliqués. Mais si vous vous déplacez et devez utiliser un autre ordinateur, vous n’avez plus accès à vos fichiers. Une solution serait d’en emporter une copie sur un support amovible. Mais ne serait-ce pas un peu saper tous les efforts effectués jusqu’ici pour éviter de multiplier les copies de votre projet ? Il existe heureusement une solution simple. En effet, il est possible d’héberger un dépôt Git sur un serveur distant (c’est donc… un dépôt distant !) Pour utiliser un dépôt distant, il faut l’indiquer à Git grâce à la commande : ```bash git remote add ``` > La commande git remote add permet de configurer Git pour ajouter un dépôt distant disponible. Vous l’aurez compris, ça sera le nom donné au dépôt distant (le nom par défaut est "origin" et c’est également celui que vous trouverez dans de nombreux exemples et tutoriels sur le web, cet article y compris). Le paramètre, quant à lui, est l’adresse où est hébergé le dépôt. Vous pouvez consulter la liste des dépôts distants que vous avez paramétrés grâce à la commande : ```bash git remote -v ``` Une fois le dépôt distant ajouté, vous pourrez à votre guise mettre à jour le dépôt distant avec votre dépôt local (et vice versa), ainsi que récupérer votre travail depuis n’importe quel ordinateur bénéficiant d’un accès internet. Pour faire simple, il y a trois catégories d’opérations possibles sur un dépôt distant : - Envoyer des données depuis votre dépôt local vers un dépôt distant. Cela est possible grâce à la commande : ```bash git push origin ``` > La commande push permet de transférer les différents commits sur un dépôt distant. Elle prend en premier argument le dépôt distant et en deuxième argument le nom de la branche sur laquelle envoyer les modifications. - Récupérer des données du dépôt distant (et les placer sur votre dépôt local). Cela est possible grâce à la commande : ```bash git pull ``` > La commande pull permet de mettre à jour une branche locale par rapport à une branche distante. Il faut se placer sur la branche à mettre à jour et lancer la commande. On peut dire que cela revient à lancer git fetch suivi de git merge. - Et bien entendu, consulter l’état du dépôt distant comme vous le faites déjà sur votre dépôt local. Souvent, il suffira d’ajouter des options ou arguments aux commandes que vous connaissez déjà. Voici les plus couramment utilisées : ```bash git log origin ``` ```bash git branch -r ``` Si on ajoute le dépôt distant au schéma précédent, il ressemble maintenant à cela :
![Architecture de Git avec le dépôt distant communiquant avec le dépôt local](images/git__archi_trois_arbres_remote.png)
Architecture Git avec le dépôt distant
### Il est où le dépôt distant ? Il est où ? Où vous voulez ! Il suffit d’une simple machine (enfin, ça ne fonctionne pas avec un minitel) pour pouvoir héberger un dépôt distant. Vous pouvez même avoir un dépôt distant sur votre propre machine, juste à côté de votre dépôt local. Mais sachez que ça ne sert à rien. Plus couramment, on appréciera d’avoir son dépôt distant sur un serveur dédié. Pour cela, deux options s’offrent à vous. - **Vous pouvez choisir de configurer votre propre serveur Git, afin de pouvoir héberger gratuitement autant de dépôts que vous le souhaitez** (dans la limite de l’espace mémoire dudit serveur). Cela n’est pas foncièrement compliqué, et vous pouvez facilement trouver des guides sur le web vous expliquant comment procéder. - **La seconde option est d’utiliser les services d’un des gestionnaires de dépôts disponibles sur le web**. Les plus connus sont GitHub, GitLab, BitBucket. Sachez qu’il peut être nécessaire de souscrire à un abonnement payant pour pouvoir posséder un nombre illimité de dépôts, cacher leur visibilité au public, etc. De nombreux critères sont à prendre en compte avant de choisir ! ## A vous de jouer versionner ! Vous connaissez maintenant les bases du logiciel Git. Il ne vous reste plus qu'à mettre en pratique en l'utilisant dans vos projets ! Et très vite, on vous expliquera comment vous sortir des situations épineuses dans la suite de ce guide (coming soon ;-) ) ### Auteur Axelle Boucher [https://twitter.com/axelle_boucher](https://twitter.com/axelle_boucher) --- ### Digital vs Numérique URL: https://www.bearstudio.fr/fr/blog/articles/digital-vs-numerique Date: 2017-06-26 ## Avant propos _Il n’est pas rare aujourd’hui de voir les termes Digital et Numérique se confondre en un sens admis par tous comme synonymes. Par tous ? Pas tout à fait. Nous devrions même dire qu’une guerre fait rage sur la signification de ces deux mots. Alors avons-nous le droit de les utiliser impunément et sans distinction ? C’est ce que nous allons voir !_ ## The Origins Avant toute chose, remontons quelques décennies en arrière afin de comprendre un peu mieux l'Histoire de ce débat. ### Numérique Apparu un siècle avant la naissance de notre cher Jésus Christ, le concept de `nombre` fût d’abord signifié par l’adjectif latin `numerus`, très vite récupéré tel quel par la langue française en devenant `numérique`. Le dictionnaire Larousse définit d’ailleurs le sens de ce mot en ces termes : - **Qui relève des nombres, se fait avec des nombres, est représenté par un nombre.** - **Qui est évalué ou se traduit en nombre, en quantité.** Néanmoins, c’est avec l’évolution des techniques d’enregistrement du siècle dernier (notamment issues des milieux informatiques et des télécommunications, basés sur des systèmes binaires, donc numériques) que le terme a le plus évolué, donnant à `numérique` les sens de : - **Représentation d'informations (ou de grandeurs physiques au moyen de caractères, tels que des chiffres).** Voilà, maintenant vous pourrez briller lors des dîners de famille avec tonton Denis (je vous laisse vous débrouiller pour le caser par contre, chacun son travail hein !). Là où le débat se corse, c’est lorsque nous commençons à aborder le sens de notre fameux `digital`. Une fois encore, retournons aux fondements du concept. ### Digital À la base, `digital` est un adjectif issu du latin digitalis, qui signifie `doigt` : - **Qui appartient aux doigts.** Vous voyez le problème ? En fait, je dois vous avouer avoir omis une petite information : `digital` est un mot polysémique, c’est à dire qu’il a plusieurs sens : un en français, et un en anglais. Car oui ! Ce mot est aussi anglophone ! Chose amusante, c’est parce que l’on comptait sur ses doigts que, de l’origine également latine, l’anglais s’est orienté vers le terme de `digit`, le `chiffre`, puis vers digital, `qui utilise des nombres`, utilisation attestée depuis 1945. L’univers du marketing étant friand d’anglicismes et de buzzword, “_digital_” au sens anglais s’est donc très rapidement retrouvé sur toutes les lèvres et dans toutes les conversations des milieux IT. Alors du coup, qui de “_digital_” ou de “_digital_” est-il juste d’employer ? Là est bien le nerf de la guerre ! ## Qu’en disent les spécialistes ? Une fois encore, même les autorités compétentes ont du mal à trancher. Tandis que l’Académie Française "_\[se garde\] bien de confondre ces deux adjectifs “digital”, qui appartiennent à des langues différentes et dont les sens ne se recouvrent pas_”, “_le français \[ayant\] à sa disposition l’adjectif “numérique”, un certain nombre de linguistes s’accordent à dire que l’évolution des usages conditionnent les termes utilisés_". Ainsi, `digital` serait aujourd’hui aussi légitime que `numérique`, comme l'explique le linguiste Typhon Baal Hammon : > En ce qui concerne les mots `numérique` et `digital`, les deux semblent effectivement se trouver plus ou moins en concurrence. Il se trouve que les deux mots ont fini par recouvrir à peu près les même choses, c’est à dire grosso modo l’ensemble des équipements électroniques utilisant des représentations binaires. Il est à noter qu’aucun des deux n’avait ce sens à la base, et c’est par une évolution récente qu’ils ont acquis ce sens, comme, on le présume, pour la plupart du vocabulaire de ce domaine (mis à part les néologismes, bien sûr). > J’en profite pour insister sur un point : l’étymologie d’un mot ne nous donne en aucun cas son "vrai sens". Le sens des mots fluctue et évolue de façon parfaitement naturelle et parfois hautement imprévisible : le puriste qui insiste pour utiliser un mot dans un sens désormais totalement désuet est exactement semblable à quelqu’un qui inventerait un mot de toute pièce et s’étonnerait qu’on ne le comprît point. Aujourd’hui, il devient ainsi assez commun d’employer le terme de `numérique` pour parler d’une facette plutôt technique, tandis que `digital` aura une portée plus "marketing" ou centrée sur les habitudes des utilisateurs (utiliser son smartphone, jouer sur une tablette, taper sur un clavier…). Et là est bien le problème... ## Un débat idéologique : l’innovation à tout prix En fait, il s’avère que le marketing, à grands coups de `destruction créatrice` et d’innovation `disruptive`, à tendance à ne pas tenir compte des réussites du passé. Or, la plupart des technologies, des concepts et donc inévitablement des termes qui les définissent sont ancrés dans notre Histoire. L’historien David Edgerton rappelle que la plupart des technologies que nous utilisons tous les jours n’ont pratiquement pas changé depuis un siècle ou plus. L’usage des buzzwords peut donc se révéler effectivement positive lorsqu’elle sert à traduire une réelle innovation dans les usages et les outils. Mais force est de constater qu’elle est encore trop souvent employée pour créer une impression de nouveauté sur des concepts pourtant préalablement existants. Le terme "Buzzword" lui-même en est un parfait exemple : initialement apparu en 1946 sur les bancs étudiants anglosaxons (pour la petite histoire, il désignait les mots-clé importants à bêtement apprendre par coeur lors d’un cours magistral). Redéfini ensuite en 1988, il devient alors un mot ou une expression creuse ou imprécise employée par un nombre de personnes limité, mais faisant forte impression sur celles extérieures (ou "mot à la mode" en français). Légèrement tombé en désuétude, voilà quelques années que celui-ci réapparaît massivement dans le jargon professionnel, sous couvert de concept innovant. Conclusion : `Numérique` restera sans doute longtemps le terme préféré de ceux qui forment la technique et non le marketing. Néanmoins, `digital` est tellement utilisé, notamment dans le secteur de la communication, grand pourvoyeur d’anglicismes, qu’il fait aujourd’hui partie intégrante du langage courant et recouvre plus ou moins les mêmes champs que `numérique`, les deux termes ayant finalement des définitions assez larges. Au BearStudio, nous nous attachons aux termes justes et non galvaudés : numérique restera donc numérique. Mais cela n’engage bien évidemment que nous ! ;) ### Sources - [http://www.larousse.fr/dictionnaires/francais/num%C3%A9rique/55253](http://www.larousse.fr/dictionnaires/francais/num%C3%A9rique/55253) - [http://www.larousse.fr/dictionnaires/francais/digital/25501](http://www.larousse.fr/dictionnaires/francais/digital/25501) - [http://www.lemonde.fr/economie/article/2014/01/14/dilemme-numerique_4347680_3234.html](http://www.lemonde.fr/economie/article/2014/01/14/dilemme-numerique_4347680_3234.html) - [https://pressenter.fr/communication/digital-abus-langage/](https://pressenter.fr/communication/digital-abus-langage/) - [https://en.oxforddictionaries.com/definition/digital](https://en.oxforddictionaries.com/definition/digital) - [http://www.blogdumoderateur.com/numerique-ou-digital/](http://www.blogdumoderateur.com/numerique-ou-digital/) - [http://www.academie-francaise.fr/digital](http://www.academie-francaise.fr/digital) - [http://internetactu.blog.lemonde.fr/2016/04/23/linnovation-se-fait-elle-au-detriment-de-la-maintenance](http://internetactu.blog.lemonde.fr/2016/04/23/linnovation-se-fait-elle-au-detriment-de-la-maintenance/) ### Auteur David Endico [https://twitter.com/DavidEndico](https://twitter.com/DavidEndico) --- ### Retour d’expérience d'un petit ourson devenu grand URL: https://www.bearstudio.fr/fr/blog/articles/rex-stagiaire Date: 2017-06-22 ## Avant propos _Découragé par mon échec aux examens de fin d’année (en Master 1 Génie Informatique Logicielle), j’ai sérieusement songé à arrêter mes études… Mais pourquoi tout stopper, alors que j’adore ça ? C'est donc quelques remises en questions plus tard, redoublant d’efforts, que je décidais de reprendre de plus belle mon cursus. Contre vents, marées, et vacances... Oui car, ayant validé mon premier semestre, je me rendis compte que mes cours ne reprendraient que 4 mois plus tard, en janvier. Soit une sacrée période à investir intelligemment !_ Continuer à travailler dans la restauration ? Non, pas question ! J’avais vraiment besoin de trouver un emploi utile à mon avenir et c’est ainsi que le BearStudio et moi avons croisé nos chemins. ## Pourquoi avoir choisi le BearStudio ? Des personnes de mon entourage m’ont informé que la startup recherchait des stagiaires venant de la FAC, mais habituellement plutôt en fin de second semestre, voire pour les vacances d’été. Mais là, *TIMING PARFAIT* ! 3 stagiaires terminaient leur contrat, et l’entreprise souhaitait renouveler une partie de cette main d'oeuvre. Merci donc à [Rudy](/fr/equipe/rudy-baer) de m’avoir donné l’opportunité de m’épanouir professionnellement en m’acceptant en stage, alors que j’étais en cours de redoublement. Une convention plus tard, me voilà à Seine Innopolis, dans la cour des grands. ## En quoi consistait le stage ? Arrivé en pleine livraison de produit, je dois avouer avoir d'abord été plutôt effrayé. Tout le monde est à cran, les clients rapportent des bugs inédits qu’il faut corriger le plus vite et efficacement possible. Effectivement, c'est effrayant… Mais c’est aussi la meilleure formation du monde, de quoi rentrer dans le bain sans avoir le temps d’enfiler des palmes. Au départ, beaucoup d’observation, le temps pour moi d'appréhender des technologies jusque là inconnues. Puis viennent les premières missions, les premiers bugs, les premières corrections et les premières réussites. Le développement web ([Front](/fr/prestations/developpement-web) comme [Back](/fr/prestations/developpement-web)) ne m’était pas inconnu, mais j’avais quelques lacunes à combler afin de rattraper mon retard. ## Quels ont été les plus grands défis sur toute la durée du stage ? Au début, je pensais que mon intégration serait compliquée, mais l’équipe m’a réservé un très bon accueil, ce qui facilita bien des choses. L’un des plus grands défis auquel j’ai eu affaire fût le premier rush de développement. Une deadline approchant à grands pas, des difficultés à comprendre la volonté des clients de part mon expérience encore balbutiante et enfin des fonctionnalités qui ne fonctionnent pas comme je voudrais. Un cocktail de bon stress qui m’a permis d’avancer de plus belle. ## Qu’est ce qui a été le plus plaisant ? Oulà ! Difficile de choisir, beaucoup de bons, voire de [très bons moments](/fr/blog/articles/quotidien-du-bearstudio-en-video). Un événement se démarque quand même du reste. La "Starteupouïk" (ou StartupWeek pour les non-initiés), une semaine de team building organisée au mois de décembre dernier. Un escape game, une création de jeu vidéo et les batailles de Nerf...
![Photo de l'équipe du BearStudio à la StartupWeek](images/equipe_bear_studio_starteupouik.jpeg)
_Petit souvenir de la Starteupouik_
## Et maintenant ? Le stage est maintenant fini, les cours à la FAC ont repris pour moi et j'ai maintenant validé mon année universitaire, en grande partie grâce à toute l'expérience acquise tout au long de ce stage, mais également grâce au soutien indéfectible du BearStudio à mon égard, qui n'est pas prêt de s'arrêter ! En effet, après quelques déclarations administratives pour devenir auto-entrepreneur, la startup est rapidement devenue une cliente fidèle. De quoi continuer à acquérir une expérience significative et en retirer un salaire. One more thing ? Le BearStudio m'engage en contrat de professionnalisation dès la rentrée prochaine, alors il ne me reste plus qu'une chose à dire : Merci pour tout ! Vraiment ! ## MERCI ♥ **Auteur :** [Loïck Lemarchand](https://twitter.com/LoLo_GeeK) --- ### BEMIT, ou l'utilité du nommage en HTML et CSS URL: https://www.bearstudio.fr/fr/blog/articles/bemit Date: 2017-06-14 ## Your princess is in another div _Ne vous est-il jamais arrivé de retourner sur un vieux projet (vous savez, celui mis en suspens il y a deux mois) ou de récupérer celui d'un collègue, et de pester car vous ne retrouviez pas les composants que vous cherchez ? Parce que les classes utilisées sont incompréhensibles et qu'il vous faut un temps fou pour appréhender la logique derrière la structure du code ? Eh bien grâce à BEMIT, nous allons pouvoir éviter bon nombre de ces frasques !_ Qu'est-ce que BEMIT me demanderez-vous ? C'est en fait la synthèse de deux conventions déjà existantes : BEM (pour Block Element Modifier) et ITCSS (Inverted Triangle CSS Architecture). ## Salut, ça BEM ? Première composante de cette convention, et non des moindres : BEM. Son but est d'apporter plus de clarté et de transparence dans votre code en adoptant un formalisme de classe à trois niveaux : - **Block :** la racine du composant, notée `.block` - **Element :** un élément de Block, noté `.block__element` - **Modifier :** une variante ou extension de Block, notée `.block--modifier` Voici une illustration : ```css .person /* Un block lambda */ .person__hand /* Une partie de ce block */ .person--female /* Une variante de ce block */ .person--female__hand /* Une partie de la variante */ .person__hand--left /* Une variante de la partie */ ``` De façon plus concrête, voici ce qu'un code en CSS simple donnerait une fois retranscrit selon la nomenclature BEM : ```html

...

``` Deviendra : ```html

...

``` Même si de prime abord la solution semble un peu plus verbeuse, il faut peu de temps pour s'apercevoir qu'elle permet surtout d'instantanément identifier les différentes composantes et les liens de parenté entre chacune. `article`, `article--sponsorised`, `article__photo` et `article__presentation` sont liés les uns aux autres, tandis que `card`, `card__img` et `card__text` forment un autre groupe identifié, alors que `logo` est une dernière classe isolée n'ayant aucun lien de parenté avec les autres éléments cités. Faisant la part belle aux concepts tels que le *Don't Repeat Yourself*, la convention BEM apporte clarté, sécurité et compréhension accrue de la structure du code. Il peut demeurer fastidieux d'identifier exactement le rôle de chacun, non seulement d'un point de vue relatif mais surtout global et inhérent au projet, afin de comprendre rôle, comportement et implantation de chacun. Et vous avez de la chance, le namespacing est là à la rescousse ! ## Namespace oddity Le Namespace correspond au préfixage des classes dans le but d'ajouter précision et compréhension quant à leur usage et leur place au sein de votre code. Personnellement, j'aime à décomposer cette structure en 4 préfixes principaux, qui peuvent être complétés et aggrémentés suivant les besoins et les ressources de votre projet : - **Layout : `l-`** : Il regroupe tous les éléments faisant partie de la mise en page. C'est l'une des parties générales et structurelles de votre UI, utilisée généralement sur tous les écrans de votre site. Exemple : `l-header` `l-typography` `l-sidebar` `l-contact` `...` - **Object : `o-`** : Il signifie que cet élément est un objet. C'est une partie d'UI déterminée et identifiable (_"Ceci est un bouton", "Ceci est une modale"..._) qui peut être utilisée de manière répétée dans votre projet. Exemple : `o-buttons` `o-cards` `o-panels` `o-breadcrumbs` `...` - **Component : `c-`** : Il signifie que cet élément est un composant. C'est un élément spécifique (parfois même abstrait), qui peut être utilisé de manière ciblée, sans discernement de sa position dans le code. Exemple : `c-media` `c-input-slider` `c-checkbox` `c-avatar` `...` - **Utility : `u-`** : C'est une classe utilitaire. Elle est utilisée pour écraser et modifier le comportement des éléments ciblés. Exemple : `u-text-align` `u-display` `u-spin` `u-no-margin` `...` ```html

...

``` Dans cet exemple, nous pouvons donc facilement identifier les différentes strates qui composent ce bout de code : un élément structurel principal `l-content` regroupant un objet `o-card` et ses dépendances `o-card__img` et `o-card__text`, modifié par un composant spécifique : `c-article`, `c-article--sponsorised`, `c-article__photo` et `c-article__presentation`. En plus de ces préfixes principaux, vous pouvez également trouver : - **State : `is-` / `has-`** : C'est une classe d'état. Elle sert à indiquer un changement visuel lié à une action effectuée sur la page. Exemple : `is-loading` `is-collapsed` `has-error` `has-result` `...` - **JavaScript : `js-`** : Cette dernière classe indique la présence d'une interaction JavaScript. Exemple : `js-map` `js-slider` `...` (Plus marginaux, d'autres préfixes peuvent également être utilisés, tels que `t-` pour les classes destinées à modifier le thème du projet, `s-` pour les éléments de pure stylisation graphique, `qa-` pour les tests ou encore `_` pour les gros hacks de guedin.) Néanmoins, nous pouvons déjà constater qu'avec uniquement cette liste de brefs préfixes, il devient beaucoup plus agréable de communiquer et de comprendre le rôle de l'ensemble des éléments et des classes utilisées (de même que de détecter les héritages ou erreurs qui logiquement ne seront pas préfixés). Mais ne nous arrêtons pas en si bon chemin ! ## Mon développeur était maçon Outre le fait de pouvoir facilement lire et comprendre son code, demeure la question de retrouver ses classes CSS au sein du ou des différents fichiers de votre projet. Heureusement, là encore des solutions existent ! En s'appuyant sur le namespacing précédent, nous pouvons décomposer l'architecture de nos fichiers CSS en autant d'artefacts nécessaires. Un premier filtrage peut être effectué au niveau des types d'éléments utilisés, traités sous forme de dossiers de la manière suivante : - **Settings :** Les paramètres et variables de configurations génériques à l'ensemble du site (typographies, couleurs, marges, etc...) - **Layouts :** Les éléments génériques composant les principaux blocs et pages de votre site (header, article, blog...) - **Objects :** Les éléments courants utilisés de manière récurrente sur le site - **Components :** Les petits éléments utilisés de manière spécifique - **Utils :** Les classes utilitaires utilisées pour modifier le comportement des éléments HTML Une fois cette architecture mise en place, il devient aisé dans chacun de ces dossiers d'ajouter un fichier CSS par élément créé, tous appelés ensuite dans un fichier global (_app.less ou app.scss par exemple_) de la manière suivante : ```scss /* ----- SETTINGS ----- */ /* Legacies, settings and overall configuations */ @import "base/_colors"; @import "base/_fonts"; @import "base/_resets"; ... /* ----- LAYOUT ----- */ /* Layout and general components' style */ @import "layout/_body"; @import "layout/_content"; @import "layout/_sidebar"; ... /* ----- COMPONENTS ----- */ /* Specific and small items' style */ @import "components/_datetimepicker"; @import "components/_divider"; @import "components/_input-period"; ... /* ----- OBJECTS ----- */ /* Containers, forms, et others specific general items' style */ @import "objects/_breadcrumb"; @import "objects/_buttons"; @import "objects/_cards"; ... /* ----- UTILS ----- */ @import "utils/_utils"; ``` Ce type de structure de fichier a deux avantages : commenter/décommenter une feuille de style spécifique en cas de problème, de test ou d'inutilisation devient un jeu d'enfant, ce qui offre un gain de temps non négligeable. De plus, il devient d'autant plus facile de comprendre la hiérarchie, l'utilité et le comportement de l'ensemble des classes utilisées sur le projet. Que demande le peuple ? ## Le mot de la fin Comme vous pouvez le constater, il n'a fallu que quelques apports simples à BEM pour le transformer en BEMIT: l'ajout d'un préfixage et la mise en place d'une architecture mettant l'accent sur la compréhension et la lisibilité se révèle être un atout inestimable lors du [développement](/fr/prestations/developpement-web) de vos sites, applications et webapps. Adieu râleries, classes sans queue ni tête et architectures chaotiques, désormais, votre code est robuste, maintenable et lisible, et ce pour tous les acteurs de votre projet ! --- ### Faire faire son site web : arrêtez de vous faire avoir par votre agence digitale URL: https://www.bearstudio.fr/fr/blog/articles/arretez-de-vous-faire-avoir-par-votre-agence-digitale Date: 2017-04-04 ## Avant propos _Cet article est illustré par des copies d’écran du nouveau site NWX lors de sa sortie, et ceci à la fois afin de disposer d'exemples pertinents (site tout neuf) et d'un point de vue neutre. En effet, il était initialement prévu pour cet article de paraître au sein du magazine SHOOT de NWX (mais la longueur de l’article ne le permettait pas), dont je suis moi-même membre du CA. Il ne faut donc y voir aucune charge vers tel ou tel site, l’objectif de l’article étant d’expliquer les erreurs classiques et surtout de donner à tous les outils pour analyser la qualité d’un site web._ ## Digital ou numérique Depuis quelques années, on parle beaucoup d’agence de communication digitale. Enfin... En réalité, nous parlons d’agences de communication classique (papier, télévision) qui entament leur transition numérique vers le monde de l’internet. Comme toutes les structures qui commencent leur transition, elles n’ont pas encore appris les codes de ce nouveau domaine (l’industrie numérique n'ayant que 25 ans). Ces agences vont vous facturer des sites certes jolis, mais qui oublient bien trop souvent les règles de base du monde du web. Or, en 2017, et avec la course aux meilleures places dans les résultats de recherche Google, cela ne pardonne plus. > Pour être encore plus précis, ces agences françaises utilisent un terme anglais [“digital” qui se traduit correctement par numérique](/fr/blog/articles/digital-vs-numerique). Pour la blague, quand on parle des “métiers du digital”, un développeur va penser à une esthéticienne-manucure ou à un proctologue. Je vous laisse cette dernière image pour la prochaine fois que vous entendrez digital. ## Comic sans Au début des années 2000, on demandait à son neveu de 14 ans de faire son site web. On était à l’époque de l’amateurisme. Le leader du web s’appelait Yahoo, on pouvait faire l’annuaire de l’ensemble des sites web à la main. Depuis, Google a repris le flambeau de grand manitou et le web a connu une croissance exponentielle. On retrouve de moins en moins ce type de site web, sauf chez des petits artisans. Terminé les sites jaunes avec la police Comic sans MS1 & 2. Ce dernier cas était la blague récurrente au sein des communautés de développeurs web qui commençaient à se professionnaliser au travers de conférences d’experts comme Paris Web. Les années 2014 à 2016 sont aussi caractérisées par la blague du site Wordpress avec le thème Jupiter.
![Bannière anti-comic sans dont le titre est : Stop the madness ban comic sans](images/banniere_anti_comic_sans.jpg)
Bannière Anti-Comic Sans
## Wordpress Ah… Les sites avec le thème Jupiter, l’intérêt est d’avoir un site esthétique avec peu d’efforts, cela a le goût d’un beau site web de la Silicon Valley, mais pas la saveur. Quand nous parlons de saveur, on parle pour un site web de contenir les caractéristiques nécessaires à un bon référencement, une bonne accessibilité et un bonne compatibilité sur les appareils mobiles.
![Aperçu du thème Jupiter de Wordpress](images/apercu_theme_jupiter_wordpress.jpg)
Le thème Jupiter pour WordPress cela donne envie non?
La question n’est pas si Wordpress est mauvais ou non, la question est qu’il donne l’illusion que le travail s’arrête là. Pour avoir un site moderne (c’est tout à fait possible), il faut juste travailler les 20% supplémentaires. En général, un site Wordpress + Jupiter va être mal optimisé et prendra plusieurs secondes (des dizaines ?) à être chargé, le coût de maintenance va être important (rien que pour changer une couleur) et il est mal adapté aux exigences mobiles actuelles. Comme Drupal (son principal concurrent) Wordpress est un CMS (Content Management System), c'est à dire une plateforme permettant de déléguer la partie contenu à des personnes non-techniques. Il faut juste que la configuration de base ne soit pas faite par les stagiaires exploités par les agences digitales. ## La règle du plus gros salaire Mais “Pourquoi tant de mauvais sites web produits ?” me demanderez-vous. C’est simple, dans le marketing et la communication classique, l’objectif est de plaire au plus gros salaire de la réunion pour remporter le budget de la campagne publicitaire. En anglais, le terme est “HIPPO” (Highest Paid Person Opinions)3. Sur votre moteur de recherche préféré, vous trouverez d'ailleurs beaucoup de méthodes sur comment gérer ce type de profil lors d’un projet. Les pratiques de Google et du web ont commencé à changer ces modes de décision. Maintenant, avec les données issues des campagnes, on peut tester différentes configurations de site web et prioriser pratiquement en temps réel les campagnes publicitaires. Des agences comme Criteo ont même développé des sociétés entières sur un système d’enchères basées sur le coût de la publicité. Le changement est important, on passe d’un monde avec des campagnes TV de plusieurs millions sur lesquelles le droit à l’erreur n'est pas permis, à un monde où un site moche peut battre à plate couture les plus grands (Leboncoin). C’est devenu même une manière de se différencier : des sites comme Reddit, Priceminister, Cdiscount jouent notamment sur cet axe4. ## Mesurer la qualité La bonne nouvelle, c’est que maintenant vous pouvez mesurer la qualité d’un site web sur différents plans : performance, accessibilité, ergonomie et compatibilité mobile. Si vous couvrez bien ces quatre points, vous avez couvert 90% des critères techniques nécessaires à un bon référencement sur vos moteurs de recherche.
![Aperçu du site Craigslist](images/image_craigslist.jpg)
Craigslist : c’est moche et c’est 3 millions de visiteurs par jour
## La performance Avec la fibre, l’ADSL et la 4G, la performance peut sembler secondaire. Erreur ! C’est une des premières sources de taux de rebond (personnes quittant le site sans action spécifique). Pire, sur les sites à gros volume, c’est une perte de visiteurs (50% au delà de 2 secondes) et de chiffre d’affaire (estimé à 7% par seconde de chargement)5conséquente et non négligeable. Pour continuer, le taux de rebond et la performance sont 2 indicateurs clefs dans le calcul de votre placement sur Google. Pourquoi la performance ? Eh bien, analyser des sites lents a un coût pour Google et ralenti le rafraîchissement des résultats (Google est en compétition avec Twitter sur la recherche, les résultats doivent donc être le plus à jour possible). Enfin, mettre de belles [images](/fr/blog/articles/optimiser-images-site-web) ou de belles vidéos, cela peut plaire au directeur marketing. Mais gardez à l'esprit que si cela met 4 secondes à charger, quasiment personne ne les verra. Comment s’y retrouver ? Évaluer le site web réalisé par votre potentiel fournisseur ! Pour cela, voici 2 outils : [https://gtmetrix.com](https://gtmetrix.com/)et [https://testmysite.thinkwithgoogle.com](https://testmysite.thinkwithgoogle.com/). Revenons à Wordpress et avec le thème Parallax (un autre thème beaucoup utilisé). [Si vous prenez la démo](https://themify.me/demo/themes/parallax/), les performances sont presque acceptables (hors le temps de chargement de 4 secondes) et comparables au thème Jupiter. Si vous prenez un site rapidement mis sur Parallax, les performances se dégradent fortement et deviennent juste inacceptables, surtout sur un mobile doté d'une connexion moyenne.
![Bons résultats de test sur GTMetrix avec le thème de démo de Parallax](images/gtmetrix_performances_parallax.jpg)
GTMetrix : Les performances du thème de démo de Parallax
![Mauvais résultats de test sur GTMetrix](images/gtmetrix_resultats_test.jpg)
GTMetrix : Ouch, l’intégration a été un peu trop rapide.
Attention, le diable est dans les détails, ne vous limitez pas à la page d’accueil ! Exemple avec le nouveau site de NWX utilisant le thème Jupiter de Wordpress, la page d’accueil a été travaillée, nous avons donc des performances acceptables. Mais si vous allez dans les autres pages du site, vous pourrez avoir des surprises, exemple, les fiches de membres.
![Résultat de tests sur thinkwithgoogle.com avec la page d'accueil nwx.fr](images/index_nwx.jpg)
Page d'accueil de nwx.fr avec thinkwithgoogle.com
Lorsque vous testez et réalisez un site web, vous êtes dans des conditions quasi optimales ! Mais testez-le avec ces outils afin de tester dans des conditions plus difficiles : votre téléphone dans une zone à deux barres en 3G par exemple.
![Résultat de tests sur thinkwithgoogle.com avec une page membre](images/thinkwithgoogle_membre.jpg)
Page d'un de nos membres avec thinkwithgoogle.com (certaines tombent à 23/100)
## Android, iPhone et tablettes En parlant de conditions réelles, vous avez maintenant plus d’une chance sur deux6 que votre visiteur arrive via son mobile sur votre site (via un email, Twitter, Facebook ou une recherche sur Google). Votre site doit s’afficher de manière adaptée à votre smartphone, ce n’est plus une option. Ce n’est pas chose facile, en effet, vous devez adapter votre contenu éditorial et le prioriser pour pouvoir l’adapter aux petits écrans. Vous devrez choisir ce que vous voulez mettre en avant et, comme “choisir c’est renoncer”7, la tâche ne sera effectivement pas facile. Comment mesurer la qualité de votre fournisseur potentiel ? Toujours avec [https://testmysite.thinkwithgoogle.com/](https://testmysite.thinkwithgoogle.com/) et le livre blanc de Google/Answer Labs8.
![Thinkwithgoogle zoome sur 2 indicateurs clefs pour mobile et pour ordinateur](images/kpi_thinkwithgoogle.com_.jpg)
Thinkwithgoogle zoome sur 2 indicateurs clefs pour mobile et pour ordinateur
## Ergonomie Un site rapide et avec un bon contenu ne suffit malheureusement pas. Si l’internaute arrive rapidement sur une page, mais est dans l'incapacité de naviguer jusqu’au contenu souhaité, cela ne sert à rien. Une bonne ergonomie est plus importante que le rendu esthétique. Cela ne veut pas dire que ce dernier est négligeable, mais seulement que son impact dans la réussite d’un site est moindre. Et surtout, qu’un beau site non utilisable le restera, surtout une fois l’effet “Wahou” des 2 premières secondes passé. Faire rentrer un site classique au chausse-pied dans un écran mobile ne veut pas dire qu’il en deviendra utilisable pour autant. Comme on a pu le voir précédemment, le trafic web se fait autant sur mobile que sur ordinateur. Peut-être que l’**approche “Mobile First”**9 pourrait enfin devenir la norme dans les agences mais surtout pour vous ! Cette approche permet de partir de la réflexion sur un mobile pour ensuite enrichir l’expérience sur tablette, puis sur ordinateur. Ce n’est pas parce que vous ou votre patron aime voir le rendu sur ordinateur que ce doit être la première version pour les maquettes et l’élaboration de votre site.
![Image tirée du blog de Stéphanie Walter - Responsive Retrofitting et Mobile First Responsive Design](images/responsive_design.jpg)
Image tirée du blog de Stéphanie Walter10
Mais comment savoir si votre agence respecte bien les règles de base de l’ergonomie web ? Dans un premier temps, vous pouvez regarder les conseils donnés sur **GoodUI.org**11 qui regroupe des dizaines de bonnes pratiques, et voir si votre site ou les maquettes proposées les respectent. Mais surtout, **testez votre site sur différents appareils** ! Prenez votre smartphone et naviguez VRAIMENT sur votre site. En effet, si même vous qui connaissez votre site n’arrivez pas à naviguer confortablement, alors imaginez un internaute pour qui ce dernier est complètement inconnu ! Si vous voulez voir des exemples de problèmes d’ergonomie sur des sites ou applications, vous pouvez aller sur le blog de Charles Le Prévost : [http://uxui.fr](http://uxui.fr/)12 ## Accessibilité Enfin dernier point, l’accessibilité de votre site. Les personnes aveugles consulteront votre site avec un lecteur de site audio. Si celui-ci ne respecte pas les règles basiques de construction d’une page internet, cela peut rapidement devenir un cauchemar. Vous me direz, en tant qu’entrepreneur capitaliste, je n’ai pas l’argent pour faire un site pour un pour mille de la population française13 ! Eh bien, détrompez-vous ! Pensez aux personnes mal voyantes, à vos grands-mères ou grands-oncles qui traînent sur Facebook, à votre collègue de plus de 50 ans qui a le maximum de zoom sur son iPhone... Il y a des points très faciles, par exemple le niveau de contraste entre le texte et le fond (si on regarde le site dans une endroit très ensoleillé, comme au bord d’une piscine, vous aurez logiquement plus de mal à percevoir le texte). Pensez également aux vieux moniteurs. Pire, le texte pourra être complètement exclus si votre lecteur parcourt trop rapidement votre page. Les principales sources de ces problèmes sont l’ignorance de ces principes, et les maquettes Photoshop des graphistes qui vont jouer sur les niveaux de gris pour privilégier l’esthétisme à la lisibilité et au confort de lecture du contenu. Pour mesurer cela, Opquast14 propose un test gratuit, Google fournit un Accessibility Developer Tools en extension à son navigateur et vous avez aussi à votre disposition [http://wave.webaim.org](http://wave.webaim.org/). Pour en savoir plus sur le sujet, Elie Sloïm a donné une conférence en plénière à Codeurs en Seine le 24 novembre 2016. Elie Sloïm est un des meilleurs spécialistes français sur l’accessibilité.
![Aperçu de l’extension Google Accessibility Developer Tool](images/google_accessibility_developer_tool.jpg)
L’extension google Accessibility Developer Tool
![Aperçu de Codeurs en Seine avec Wave](images/codeurs_en_seine_wave.jpg)
Codeurs en Seine avec Wave
## Ce n’est que le début Pour conclure cet article, ne tombez pas dans le piège de rester sur votre budget initial de création de site. En effet, vous allez payer entre 2 000 € et 30 000 € pour la première parution de votre site. Vous pensez avoir terminé ? Et non ! Ce n’est que le début des festivités ! Vous aurez encore des choses à améliorer sur les différents points abordés dans ce document, et surtout, vous devrez faire vivre votre site. Avoir un contenu frais est une des variables prépondérantes à l’algorithme de Google. **Prévoyez dès maintenant votre budget pour faire vivre le site tout au long de votre activité !** Vous pouvez même faire encore mieux : au lieu de vous enfermer dans un effet tunnel, vous pouvez **faire produire votre site web de manière itérative !** En terme de suivi comme en terme de diffusion, vous n’êtes pas obligé de livrer un site complet dès le premier jour. Livrez une première version pour ensuite compléter au fur et à mesure le contenu du site web. En bonus, vous en apprendrez beaucoup plus à propos du comportement de vos utilisateurs via Google Analytics. Enfin, n’oubliez pas que même si vous faites faire votre site web, vous devez demander la **cession des droits d’auteurs du code constituant votre site ainsi que la cession à titre exclusif du droit d'exploitation des éléments graphiques** (logos, illustrations, maquettes)15. Demandez dans les livrables le code du site ainsi que les sources des images (un fichier photoshop - .psd - ou illustrator - .ai - ). Si c’est un CMS comme Wordpress ou Drupal, demandez les identifiants et mots de passe d’administration. Enfin, le nom de domaine doit être déclaré au nom de votre société : **ne laissez pas votre prestataire déclarer votre nom de domaine en son nom.** Nous espérons que cet article vous aura aidé à y voir plus clair sur comment différencier un bon site web d’un mauvais site web et bien choisir votre prestataire ou évaluer le résultat de votre équipe technique au delà de la qualité des photos, des formulations et des choix de couleurs ! ### Sources - 1[http://www.etaletaculture.fr/geekeries/letonnante-histoire-du-comis-sans-ms/](http://www.etaletaculture.fr/geekeries/letonnante-histoire-du-comis-sans-ms/) - 2[http://whatis.techtarget.com/definition/HiPPOs-highest-paid-persons-opinions](http://whatis.techtarget.com/definition/HiPPOs-highest-paid-persons-opinions) - 3[http://www.presse-citron.net/10-sites-moches-qui-cartonnent/](http://www.presse-citron.net/10-sites-moches-qui-cartonnent/) - 4[http://tribes.no/2013/10/28/how-website-speeds-affects-online-sales/](http://tribes.no/2013/10/28/how-website-speeds-affects-online-sales/) - 5[http://searchengineland.com/half-of-google-search-is-mobile-232994](http://searchengineland.com/half-of-google-search-is-mobile-232994) - 6[https://lescastcodeurs.com/2016/07/27/lcc-152-interview-sur-la-productivite-personnelle-avec-guillaume-lours/](https://lescastcodeurs.com/2016/07/27/lcc-152-interview-sur-la-productivite-personnelle-avec-guillaume-lours/) - 7[http://static.googleusercontent.com/media/www.google.com/en//intl/ALL_ALL/think/multiscreen/pdf/multi-screen-moblie-whitepaper_research-studies.pdf](http://static.googleusercontent.com/media/www.google.com/en//intl/ALL_ALL/think/multiscreen/pdf/multi-screen-moblie-whitepaper_research-studies.pdf) - 8[http://www.lukew.com/resources/mobile_first.asp](http://www.lukew.com/resources/mobile_first.asp) - 9[https://blog.stephaniewalter.fr/en/freebies-responsive-retrofitting-vs-mobile-first-responsive-strategy-illustration/](https://blog.stephaniewalter.fr/en/freebies-responsive-retrofitting-vs-mobile-first-responsive-strategy-illustration/) - 10[https://goodui.org/](https://goodui.org/) - 11[http://uxui.fr/](http://uxui.fr/) - 12[http://www.avh.asso.fr/fr/sante-des-yeux](http://www.avh.asso.fr/fr/sante-des-yeux) - 13[https://reporting.opquast.com/fr/](https://reporting.opquast.com/fr/) - 14[http://www.village-justice.com/articles/Developpement-contrat-droit-auteur,12450.html](http://www.village-justice.com/articles/Developpement-contrat-droit-auteur,12450.html) Image : © Dr. House / Une création de Fox et NBC Universal ### Auteurs Youen Chéné et Ivan Dalmet [https://twitter.com/youen_chene](https://twitter.com/youen_chene) [https://twitter.com/IvanDalmet](https://twitter.com/IvanDalmet) --- ## Blog Articles (EN) ### IA & Client: Vibecoders URL: https://www.bearstudio.fr/en/blog/posts/ia-and-client-vibecoders Date: 2026-05-12 ## In the previous article In the [first article about client "Prototypers"](/en/blog/posts/ia-and-client-prototypers), I presented how our clients now use AI to prototype their ideas, turning these "shadow prototypes" into real specifications. But a new chapter begins when clients are no longer content to simply exhibit... they want to **build with us**. ## Surviving the Rise of Vibe Coders Clients: How We Adapt Client A's case was the first step: accepting AI as a specification tool. But with another client (let's call them "Client B") we faced a much more chaotic reality. They operate with the same budget constraints but aim to deliver more features by working alongside us rather than replacing our role. Their objective is to entrust us with the heavy, cross-cutting, and maintenance-oriented work, while retaining the autonomy to complete long-standing backlog tickets on their side. This approach allows them to address items they previously could not prioritize within their budget, while still relying on us for review and oversight when needed. The problem? They did not tell us at first. One day, they simply sent me a pull request fully vibe-coded with no context, no ticket description, and nothing even listed in the backlog. Our first reaction was confusion. I spent hours reviewing the code, trying to reverse-engineer the intent, the impact, and what needed to be tested. It was unsustainable. I couldn't just "fix" their code; we had to fix the collaboration. Finally, they came to us with a proposal that would give most traditional developers a heart attack: > We don't have the budget for you to build everything. We want to vibe-code features alongside you. You handle the core; we'll handle the rest. The old reflex: ![annoyed](images/annoyed.jpg) Two years ago, our answer would have strongly discouraged this because of the review and maintenance cost. In the traditional agency model, the development team retains full responsibility for the production codebase. Contributions are therefore tightly controlled to ensure consistency, reliability, and security. Any external changes can introduce defects or risks that the team remains accountable for, making unmanaged contributions difficult to sustain. But as [Rudy](/en/team/rudy-baer) often says: **"Adapt or disappear."** If we refused, Client B would have just hired a freelancer who didn't care about quality, or they would have tried to do it all themselves and crashed six months later. ## The new process: the "guardrails" strategy We accepted the challenge. But to make it work, we had to tear down our production process and rebuild it around a new concept: **We are no longer the authors of every line of code; we are the editors.** Here is the exact workflow we implemented to survive "vibe coding": ### 1. The "pre-code" check (the planning phase) Client B uses Claude Code with the "Planning" feature. Now, instead of coding immediately, they generate the Plan. We intervene here. We review their human brief and the AI's proposed execution plan. We iterate on the logic before a single line of code is generated. If the plan is flawed, the code will be garbage. We fix the blueprint, not the house, by iterating until we are both satisfied: we simplify the architecture, optimize processes, verify the different business cases upfront... ### 2. Context is key (agents.md) You cannot just let an AI guess your architecture. We worked with them to create strict context rules. We defined agents.md files, specific "skills," and coding standards (linting, security audits). We effectively taught their AI how to behave as much as possible like a BearStudio developer, ensuring the business logic remained intact. At the same time, the client teaches it his business rules and his intention. ### 3. Integration over unit tests Historically, unit tests were often limited due to time and budget constraints. Today, with AI, we can generate them systematically and much faster, providing a baseline level of safety with minimal additional effort. However, the real shift happens at the integration testing level. We significantly reinforce this layer, as it becomes critical in this context. The client defines the test scenarios since they generate the features, and AI can then enhance these scenarios by adding edge cases or variations we might not have considered. Local testing and pre-production testing with the client are all the more effective when we already have an initial checklist to validate against. ### 4. The new pull request review process We implemented an auto-review by AI for the basics with the review skills: general, security, architecture... but the human review changed scope. We stopped looking for syntax errors (the linter catches those). We started looking for Architectural Coherence. Is this maintainable? Does it respect the legacy logic? Are the performances okay? ### 5. When AI turns technical debt into a growth accelerator Another strong signal emerged with Client B: the issue of major version upgrades. For years, our team had recommended a significant upgrade of the technical stack: the project was nearly ten major versions behind. As is often the case, this evolution was never prioritized: it delivered no visible feature and required allocating budget to something difficult to justify from a business perspective. Recently, however, the request came back to us, this time initiated by the client himself after an AI tool explicitly recommended the upgrade. It was no longer an abstract matter of "technical debt." It had become a concrete blocker to his ability to experiment. Modern tooling was no longer functioning properly in his environment: testing workflows were limited, and assistants such as Claude Code could not reliably run build and development commands in a Node 14 setup. **The AI did not create the technical need: it made it visible and immediate.** Where our earlier recommendations felt preventative, AI reframed modernization as an operational prerequisite. For the first time, the upgrade was not perceived as a cost, but as an accelerator. ![fastTyping](images/fast-typing.jpg) ## The unexpected benefit: cracking the legacy code This chaos actually revealed a superpower. This project had a heavy legacy codebase with old language subtleties that even our team found tedious. We discovered that the AI, when properly guided, could navigate this "mess" faster than us. A feature that would have taken days of digging into old files was generated in hours. We realized that by delegating the "coding" to the client's AI, we were moving faster, but it required us to accept a shift in our role. **We were no longer the sole writers; we were the Editors-in-Chief.** ## The golden rule Even with the best processes, agents.md files, and automated reviews in place, you cannot simply let an AI roam free across your entire codebase. To make this "co-building" model work, we had to establish a golden rule with our clients to determine who builds what. It all comes down to the blast radius of a feature. We divide the roadmap into two categories: **Local** and **Transverse**. ### 1. Local features (the client's playground) Local features are isolated. They are the standalone UI components, a specific settings page, a new dashboard widget, or a basic CRUD (Create, Read, Update, Delete) interface. AI is exceptionally good at this. The context window required is small. If the client's AI hallucinates or writes messy code here, the worst-case scenario is a broken button or a misaligned div. **Our stance: Go crazy.** "Vibe code" these features as fast as you want. As long as it passes the linter and basic security checks, we will merge it. ### 2. Transverse features (the BearStudio fortress) Transverse features are the nervous system of the application. This includes routing, state management, authentication, database schemas, and deep integrations with legacy code. These features touch everything. If you change a transverse core component, you risk a cascading failure across the entire app. AI notoriously struggles here because it cannot easily hold the entire architectural mental model of a complex, multi-layered system in its active memory. **Our stance: this remains under our responsibility.** A client can propose a plan for a transverse feature, but they are not allowed to generate and push the code independently. ### The triage in action Now, when a client like Client B wants to use their AI planner, the first question we ask during the "pre-code check" is: **Is this local or transverse?** If a Client B member wants to build the UI for his new chat feature (Local), he can do it in 2 hours. But when that chat needs to manage real-time WebSocket connections, persist data securely to the admin platform, and sync with the legacy user database (Transverse), the BearStudio team steps in. This distinction is what saves the project from collapsing under the weight of AI-generated technical debt. It gives the client the thrill of building visible features at warp speed, while we silently ensure the foundations never crack. ![safe](images/safe.jpg) ## How this prepares us for the future This hybrid model with Client B wasn't just a one-off experiment; it was a glimpse into the future of our industry. We discovered that when we stop fighting the client's desire to code, we unlock a massive efficiency boost. - **They feel powerful:** They can tweak a button color or add a text field in 10 minutes without paying us for an hour of work. - **We feel focused:** Freed from the trivial UI changes, our senior developers focused purely on high-level architecture and complex logic (the work that actually requires human expertise). We are entering an era where our value isn't measured by the volume of code we write, but by the **stability of the system we curate**. ## The "adapt or disappear" reality Let's address the elephant in the room. Does this mean clients will eventually just "vibe code" everything, leaving us unemployed? The answer is a definitive **"No."** While tools like ChatGPT or Claude allow a founder to build a prototype in 2 hours, they don't solve the complexity of a scaling business. **Not everyone wants to code.** Most of our clients are business experts, not engineers. Client A enjoyed it, but he ultimately wanted to hand over the keys so he could focus on his business. **Vibe Coding has a ceiling.** It's great for a feature, but it gets messy fast. As we saw with Client B, without "Guardrails," AI generates technical debt at the speed of light. We are not facing an extinction event; we are facing an **Acceleration Event**. The "value" we provide is no longer in knowing the syntax of a for loop in Java. It is in knowing where to put that loop so it doesn't crash the server during Black Friday. ## Conclusion We don't have a crystal ball, but we have a compass. If we had reacted defensively to Client A's screenshot or Client B's pull request, if we had said "Don't touch the code", we would have lost those clients. More importantly, we would have missed the opportunity to evolve. At BearStudio, we don't claim to know exactly what the agency model will look like in 5 years. We are honest about that. We are relearning our jobs every day, just like you. We are rewriting our playbooks, adopting tools like MCP, and training our teams to be "AI-Augmented Architects." But here is what we do know: **The clients who win will be the ones who use AI to move fast. The agencies that win will be the ones who help those clients move fast without breaking everything.** So, here is our offer to you: Whether you have a napkin sketch, a "shadow prototype" you built in 2 hours, or a team ready to "vibe code" alongside us, bring it on! We won't judge your code. We won't feel threatened by your tools. We will take your raw energy, mix it with our technical expertise, and build something robust, scalable, and real. **Let's build the future together. Faster.** ## Keep reading Curious about how we use AI on the technical side? Check out our dedicated article: - [Discovering MCP: a new approach for your AI agents](/fr/blog/articles/decouvrir-le-mcp-une-nouvelle-approche-pour-vos-agents-ia) (French only) More interested in how we collaborate with our clients? Take a look at these case studies: - [UX Case Study: Cuisinez pour bébé](/en/blog/posts/ux-case-study-cuisinez-pour-bebe) - [Lea English Case Study](/en/blog/posts/lea-english-case-study) --- ### IA & Client: "Prototypers" URL: https://www.bearstudio.fr/en/blog/posts/ia-and-client-prototypers Date: 2026-04-29 It wasn't a tense boardroom showdown. It was just a Slack notification on a random Tuesday. We were in the middle of estimating tickets for a client (let's call him "Client A"). Some of them, like building a chat directly integrated into the app, had been flagged as "substantial work." In other words, these features required time, testing, and a sizable budget. Then, the notification popped up in the channel. Client A had been tinkering on his own version of the app as a side project. He posted an image of a fully functional chat with a typing indicator and wrote: > Out of curiosity, I tested creating a chat yesterday. Here is the result in < 2 hours. For a development team, seeing a feature estimated at several days of work appear in "less than 2 hours" can trigger a moment of panic. Are we too slow? Is our expertise becoming obsolete? Even our internal chat lit up with questions: "Wait, do we use these tools enough? Are we behind?" ![This is fine](./images/this-is-fine-meme.jpg) But Client A wasn't trying to trap us. He wasn't asking us to blindly copy-paste his AI generation. In fact, we never even saw his code, only the interface. His message was actually an invitation: he trusted our ability to build a robust, maintainable application, but he was challenging us to harness that same raw speed to accelerate the process. ## Client A isn't an anomaly. He is the new standard. Since the arrival of generative AI, we are seeing a shift in how clients interact with us. They are no longer just "specifiers"; they are "makers." 1. Some, like Client A, use AI to prototype visions they want us to industrialize. 2. Others go further, wanting to "vibe code" alongside us, producing features in real-time while expecting us to guarantee the stability of the whole. At BearStudio, we realized we couldn't just ignore this. We had to move from being "The Builders" to becoming "The Warrantors." **In this first article, I want to show how we are adapting our service model to clients who sometimes code faster than we do, and why they still need us more than ever. A second article will follow soon to explore a scenario that goes even further.** ## The "shadow" prototype: from gatekeepers to warrantors To understand why this interaction with Client A was a turning point, we have to look at how we, and the entire tech industry, operated just two years ago. ### The old way: the "discovery" game In the pre-AI era, when a client wanted a complex feature like a chat system, we played a telephone game. Like the children's game in which a message is whispered from one person to another and becomes distorted as it passes along, a client's original idea often changed or lost clarity as it moved through multiple intermediaries (Product Owner, Designer, Developer). Each step involved interpretation, which could lead to misunderstandings or deviations from the client's initial vision. It was a process designed to minimize risk, but it was slow. If a client arrived with their own code, we were the "Gatekeepers." We would usually look at their amateur attempts, politely smile, throw it in the trash, and rewrite everything from scratch. We charged for the "what" (the feature) and the "how" (the code). ### The shift: the Client A incident Then came Client A's Slack message. He hadn't just described the chat; he had built it. When he offered to show us his "admin platform" and the chat he built in under 2 hours, he was actually nervous. He jokingly said he felt a "big pressure" because he knew his code wasn't professional grade. This was the moment that changed our perspective. Internally, the reaction was raw: > If a client can generate the interface in a lunch break, what are we billing for? But during the meeting, the dynamic flipped. Client A didn't say, "I did your job." He said, "I can show you the rest, and you can tell me how badly the AI probably did it." He didn't want us to build the chat anymore. He had already "built" the vision. **He wanted us to professionalize it.** ### The future: the prototype IS the specification This experience forced us to accept a new reality: The "Shadow Prototype" is not a competitor; it is the ultimate specification. Instead of spending days on abstract user stories ("As a user, I want to see a typing indicator"), we simply looked at his screen. The ambiguity was gone. - **Before**: We estimated 10 days to figure out what he wanted and build it. - **Now**: We estimate 5 days, but 0% of that time is spent guessing, and 100% is spent on architecture, security, and integration, the whole propulsed by the use of AI in the codebase. The code generated by AI worked for a prototype, but did not always cover the requirements of a production environment (robustness, security, scalability) nor all of our best practices. And that’s expected: it wasn’t its role. Its real value was elsewhere: enabling us to skip the “discovery” phase and move straight to “engineering.” ![Galaxy brain](./images/galaxy-brain.jpeg) ## How this prepares us This is the future of our service. Clients will come to us with more than just ideas; they will come with working (but broken) prototypes. Our value proposition is shifting. We are no longer the ones who reveal the magic of code (AI does that now). We are the ones who provide the certainty of engineering. **We are moving from being "The Builders" to being "The Warrantors": the experts who take a client's dangerous, exciting 2-hour experiment and turn it into a boring, stable, money-making product.** But Client A's case was relatively safe. He built in his sandbox, and we built in ours. The two codebases never touched. What happens when the client doesn't just want to show you the path, but wants to drive the car with you? This brings us to a second, more disruptive scenario. We are seeing the rise of tech-savvy teams who aren't just using AI to prototype ideas; they are using it to ship features. They have tight budgets, aggressive deadlines, and a philosophy that terrifies traditional CTOs: "vibe coding." They don't want us to rebuild everything. They want to code alongside us. **In the next article, we dive into this new co-construction model, its risks, and the guardrails we put in place to prevent speed from turning into chaos.** ## Keep reading Curious about how we use AI on the technical side? Check out our dedicated article: - [Discovering MCP: a new approach for your AI agents](/fr/blog/articles/decouvrir-le-mcp-une-nouvelle-approche-pour-vos-agents-ia) (French only) More interested in how we collaborate with our clients? Take a look at these case studies: - [UX Case Study: Cuisinez pour bébé](/en/blog/posts/ux-case-study-cuisinez-pour-bebe) - [Lea English Case Study](/en/blog/posts/lea-english-case-study) --- ### Testimonial: Working from the other side of the world URL: https://www.bearstudio.fr/en/blog/posts/working-from-the-other-side-of-the-world Date: 2026-04-16 Last year, I had the opportunity to spend two weeks in Vietnam in a personal context. The idea was not to take a vacation but to work remotely from abroad, with an organization designed to stay aligned with my team and my company in France. My objective was simple: to see whether it was possible to combine efficient work, time difference, and discovering a country, without sacrificing the quality of communication and work, nor the pleasure of being there. --- ## Time difference: the real challenge The first obvious thing to take into account in this kind of project is the time difference—in my case, it was 6 hours. So you need to think about adjusting your days and working hours to stay as synchronized as possible with your team in France. In Vietnam, I worked from **1 PM to 8 PM**. This corresponds to **7 AM - 2 PM in France**, which allowed me to: - have **2 hours of solo focus**, as the French team starts at 9 AM - have **5 overlapping hours** with my team - attend **important meetings** - enjoy the **morning and evening for visiting** Luckily, all my important meetings were in the morning, so I didn’t need any specific adjustments on that side. But it’s an essential point to anticipate: - Do you have meetings at inconvenient times? - Are they mandatory? - Are they flexible? Or do you need to adjust your schedule? > Example: a meeting at 3 PM in France corresponds to 9 PM in Vietnam. You can imagine that a meeting with three or four colleagues can be exceptionally rescheduled, whereas a guild involving dozens of people cannot. ### The 2 hours alone: constraint or opportunity? The 2 hours alone at the beginning of the day might seem like a constraint, but it was actually **a major advantage** for me. Of course, it allowed me to **stay focused** for a long time and make progress on my tasks, but there were other benefits. The project POs tended to start their day earlier than the development team. This 2-hour window allowed me to **interact much more easily** with them before they got overwhelmed. Another positive aspect was my **availability**. At the time, we had just released the application to production, so we were in a stabilization phase. Knowing that I was connected from 7 AM and available to handle feedback or emergencies reassured the team. However, this advantage requires **anticipation**. If I got stuck at the beginning of my day, I had to wait 2 hours before asking someone for help. 👉 Every day before leaving, I did a quick check to make sure I had everything I needed for the next day. ### A well-structured day My days were organized as follows: - **Morning**: visits, exploration, and lunch - **1 PM - 8 PM**: work - **Evening**: restaurants and walks I respected my 7 working hours per day without neglecting the tourist aspect. 👉 It wasn’t “working between visits,” but a truly **structured day**. --- ## Equipment and working conditions ### From a hotel to a seaside restaurant To stay reliable remotely, you need to anticipate two things: a **connection**… and a **backup plan**. Concretely, that means: - Selecting hotels with **Wi-Fi** - Buying a Vietnamese SIM card with **unlimited 4G** (easy to get and with excellent coverage) This way, I could use hotspot sharing if the Wi-Fi weakened. It may seem obvious, but it’s an important point to study to ensure you don’t miss any meetings and avoid the anxiety of an internet outage. Not to mention the freedom that comes with having a stable connection—you might even end up working in a seaside restaurant… 👀 ### What do you bring? Equipment is a key point, but on a plane you can’t bring everything. Every gram counts, so more than ever I asked myself: **what do I REALLY need?** Here’s what I brought: - **Laptop and charger** - obviously - **A lightweight wireless mouse** - I’m used to working with a mouse - **A hub** - smaller than the one I usually use - **A compact noise-canceling headset** - useful for working in noisy places and staying focused - **A suitable bag** - not something you think about immediately, but taking care of your equipment and your own comfort matters This list reflects what I **personally** need to work, but depending on **your computer** or **your habits**, it may vary: maybe you wouldn’t bring a mouse or a hub, maybe you’d bring an extra portable screen—anything is possible. 👉 The most important thing: **don’t travel heavy, travel optimized.** Every item must have a real and regular use, not just be there “just in case.” --- ## Working alone… but as a team We’ve covered the time difference, the equipment, and the working conditions, but there’s one important point left: your team. Because yes, you’re alone on the other side of the world, but the project still needs to move forward collectively. So how do you do it? First, you need to anticipate the distance. In my case, part of my team was already working from Morocco, so we were used to it and had processes in place to work with people without being in the same office. Distance wasn’t a challenge for me, but it’s something to consider depending on your situation. The real challenge for me was the time difference. And the most important thing to make everything work smoothly is **communication**. Here are a few examples of what I put in place: - Clearly stating my **working hours** (local and French) - Posting a message every day to say “**Good morning**” when I start working - Posting a message to say “**Goodbye**” when I stop working - Keeping my **calendar updated** to avoid surprises - Scheduling **meetings** during overlapping hours - Switching to **asynchronous communication** for certain topics 🎯 Goal: be **geographically far**, but stay **close to the team**. --- ## A good experience? Such an experience highlights many positive points: - **Long focused work sessions** where I could make progress on my tasks - A **“natural” motivation** linked to the change of environment - A **real balance** between tourism in the morning and work in the afternoon - Maintaining **discipline** and **personal rigor** But it’s not all ideal either: - **Fatigue** due to the time difference and the intense daily rhythm - The **urge to do everything** (especially sightseeing), you also need to rest to avoid burnout - Constant **logistics** to manage - The need for strong **self-discipline** 👉 In reality, it all comes down to a **mindset**: it’s not “working on vacation,” it’s **working in a different environment**. --- ## Summary and advice Even though the experience was tiring, it remains extremely positive. It allowed me to discover a country, continue working efficiently, and prove my ability to adapt and maintain self-discipline. 👉 I highly recommend the experience. But as you’ve understood, none of this happens without planning and anticipation. Here are, in my opinion, the **most important tips to remember**: - Check and define the organizational agreement with your company - Get a SIM card with unlimited 4G to avoid any issues - Define fixed working hours and stick to them - Reduce your equipment to the essentials - Invest in a good compact noise-canceling headset - Think of your backpack as a portable office - Don’t hesitate to take a few days off to fully enjoy the experience Working from the other side of the world without losing efficiency **is possible**. And above all: **I would do it again.** --- ### Deploy Start UI Web on Upsun URL: https://www.bearstudio.fr/en/blog/posts/deploy-start-ui-web-on-upsun Date: 2026-03-31 ## Foreword As part of exploring modern deployment solutions, I decided to try out [Upsun](https://upsun.com/), a relatively new PaaS platform built by the team behind Platform.sh. My goals were twofold: - **Assess Upsun as a potential alternative to Clever Cloud**, which I already use, and compare the developer experience, setup process, and overall usability. - **Attempt a first deployment “from scratch” with no prior knowledge of Upsun and no DevOps background**. The perspective here is deliberately that of a developer discovering the tool for the first time. For this experiment, I chose to deploy our in-house tool, [Start UI Web](https://start-ui.com/), a modern application starter built with React, Vite, and Node.js, which we regularly use as a foundation for front-end projects. (To learn more, you can already check out our [Start UI introduction article](/en/blog/posts/start-ui-opinionated-ui-starter)!) This article is intentionally hands-on. It combines a **step-by-step tutorial** with **practical feedback**, highlighting strengths, friction points, and limitations along the way. --- ## Step 1: Creating an Upsun Account First, you need to create an account on the Upsun platform via the official console. _⚠️ This tutorial was made on Upsun v3.3.45 !_ You can sign up using an email address or a third-party provider (GitHub, Google, etc.). A 15-day free trial is available. During this period, you can access a single project with the following resources: 1 organization (with 1 project and 2 running environments) and unlimited users. At the end of the trial, your project will be suspended until you add a valid payment method to your account. Once logged in, you’ll need to activate a project before you can proceed with deployments. So far, the interface feels promising, and the setup process is fairly standard. --- ## Step 2: Fork / Initialize the Start UI Web v3 Repository and set Up Locally The official Start UI Web v3 repository can be forked from the [BearStudio GitHub repository](https://github.com/BearStudio/start-ui-web). Forking it gives you your own copy of the project under your own GitHub account. You should then clone the forked repository locally to ensure everything installs and runs correctly before attempting any deployment. The official Start UI Web documentation specifies that the project requires a recent version of Node.js as well as [pnpm](https://pnpm.io/) as the package manager. A local environment file can be generated from the provided example file to enable local development. Alternatively, you can initialize a new project using `pnpm create start-ui -t web myApp`. In both cases, the project must be pushed to a GitHub repository to be eligible for deployment. (Both approaches were tested and work equally well!) --- ## Step 3: Syncing a GitHub Repository with Upsun Upsun allows you to directly sync a GitHub repository using its native integration. From the Upsun project settings, you can add a GitHub integration and then select the cloned or newly created Start UI Web repository. This integration enables Upsun to automatically trigger a deployment whenever changes are pushed to the configured branch. With this setup, deployments are driven by GitHub rather than by pushing directly to an Upsun remote. It’s also possible to configure manual deployments and disable automatic deployment if needed. ![Upsun dashboard. The interface invites us to create a project to deploy our application.](images/upsun-dashboard-onboarding.png) ![Upsun authentication modal. Shows the permissions that will be granted to Upsun after connecting with GitHub.](images/upsun-modal-authenticated.png) ![Installing Upsun PaaS, selecting the workspace.](images/install-upsun-PaaS.png) ![Permissions modal following the installation of Upsun PaaS.](images/authorize-upsun-PaaS.png) This is where things started to get a bit tricky :( After selecting the “Sync GitHub repository” option and confirming the repository choice on GitHub, I was redirected back to Upsun with an error. I had to repeat the process twice, even trying with two different repositories before attempting again with the Start UI one. I didn’t find any clear explanation for the issue — but eventually, it worked! 🤷🏼‍♀️ ![Upsun error page when attempting to synchronize a GitHub repository.](images/upsun-invalid-installation.png) --- ## Step 4: Initial Upsun Project Configuration Once the project is linked to Upsun, an initialization step is required to generate the necessary configuration files. This step allows you to: - define the technology used (Node.js), - add required services such as a database, - automatically generate a `.upsun` folder at the root of the project, - create a main configuration file and a `.environment` file. At this point, the generated configuration can be kept as-is. A first deployment is then triggered after committing and pushing the changes. I assumed it was normal for this initial deployment to fail or not produce a working build, since the application-specific build instructions have not yet been defined. ![Upsun project creation modal.](images/upsun-project-details.png) ![Setting up the new Upsun project - part one](images/upsun-prepare-project.png) ![Setting up the new Upsun project - part two](images/upsun-prepare-project-suite.png) ![Summary of the new Upsun project created.](images/upsun-prepare-project-success.png) I tried using the AI-assisted configuration generation option during the project initialization, but it didn’t work out. I was hoping for a kind of one-click deployment miracle. However, since I didn't really understand the generated code, its architecture, or its purpose, I chose to switch back to a manual configuration. I had to revise it several times before fully understanding which fields were absolutely required (hooks, the start command, environment variables, etc.). --- ## Step 5: Retrieving the Application and Database URLs The public URL of the application is directly available in the Upsun interface, under the environments and routes section. The database connection details are accessible through Upsun relationships. These relationships provide the host, port, database name, username, and password needed to construct the connection string. These details are essential to complete the application configuration, yet they’re not immediately obvious to find. You need to dig a bit into the documentation to understand how to access and verify Upsun’s environment settings. ![Command “upsun relationships” to retrieve information from the database.](images/upsun-infos-base-de-donnees.png) --- ## Step 6: Customizing the Upsun Configuration File The configuration file located in the `.upsun` folder needs to be adapted to match the requirements of Start UI Web. ### Environment Variables Sensitive variables should not be stored in plain text in the repository whenever possible — for example in the Upsun configuration file that gets pushed to the branch (and no, I’m definitely not speaking from experience 😇…). Upsun allows you to define environment-specific variables directly from the management interface, but they must be entered one by one. The `.environment` file, on the other hand, is used by Upsun to automatically connect the application to the declared services. It is not meant to contain all application variables, nor is it simply a copy of your `.env` file. For Start UI, I kept the database-related environment variables that were automatically added. I then added the following environment variables through the interface: - the database connection string, - authentication secrets, - session-related settings, - variables used by Vite for the frontend, - the runtime environment. The menu to configure environment variables is accessible from the main options menu (which I kept looking for as a separate tab next to the overview 😅). ![Dashboard - Overview of the Upsun project.](images/upsun-deployment-dashboard.png) ![Dashboard - Management of Upsun project environment variables.](images/upsun-deployment-environment-variables.png) ![Page for creating a new environment variable on the Upsun project.](images/upsun-deployment-create-new-environment-variables.png) ### Build and deployment hooks Upsun hooks must be configured to install dependencies, build the application, and run the scripts required for Start UI Web to function properly. The **build hook** is used to install dependencies and generate the production build. Using `--ignore-scripts` during installation is important to prevent Husky and Git hooks from being set up, which would otherwise clutter the logs with unnecessary errors. In our case: ```bash npm i -g pnpm npm-run-all pnpm install --ignore-scripts pnpm postinstall pnpm build ``` ![Configuration file - Build hook](images/upsun-hook-build.png) The **deployment hook** is used to run scripts related to database initialization. In our case: `pnpm db:init` ![Configuration file - Deployment hook](images/upsun-hook-deploy.png) These hooks are automatically executed by Upsun on each deployment. ### Starting the Application Don’t forget to update the command in the `web > commands > start` section to: `pnpm start`. ![Configuration file - Modify the project launch command.](images/upsun-command-start.png) After many attempts, these should normally be the only commands required. --- ## Step 7: Commit, push, and deploy Once the configuration is finalized, the changes need to be committed to the Git repository and pushed to the branch tracked by Upsun. If a GitHub integration is enabled, simply pushing to the remote repository automatically triggers a deployment on Upsun (`git push` deploys to Upsun, and `upsun push` also pushes to GitHub). Without the integration, the push must be made directly to the Upsun remote. The first full deployment can take several dozen minutes ⏱️. --- ## Step 8: Accessing the Deployed Application Once the deployment is complete, the application is accessible via the URL provided by Upsun. A short additional delay may occur on the first load, especially if the database is still being initialized (around +3 minutes ⏱️). ![Deployed Start UI login page](images/start-ui-login-deployed.jpeg) ![Deployed Start UI dashboard](images/start-ui-dashboard-deployed.png) --- ## Commands, Tips, and Additional Notes ### Viewing Logs The Upsun interface mainly displays logs related to the build and deployment phases (though an auto-scroll feature to keep the latest logs visible would be a nice improvement). To view runtime application logs, you need to use the dedicated command via the Upsun CLI: `upsun log` (`upsun log app`, `upsun log deploy`, etc.). It’s also possible to access the machine via SSH to inspect the log files generated by the application. However, it’s a bit of a shame that these logs aren’t fully accessible directly from the interface. ### SSH Access Upsun provides **SSH** access directly from its interface. This allows you to diagnose issues, inspect generated files, or check the state of the running application. ![Adding an SSH connection to the Upsun project.](images/upsun-SSH-connexion.png) ### Ports and Environment Variable Management Upsun does not allow the use of manually exposed **static ports**. Ports are assigned **dynamically** and automatically managed by the platform. This does not impact Start UI Web, which relies on the standard deployment mechanisms provided by Upsun. The **“environment variables” tab** in the Upsun interface allows you to define values specific to a given environment. Variables defined in the configuration file are not automatically duplicated in this interface, as they serve different purposes — although this is where I initially expected to find them. **Static variables** defined in the configuration file are version-controlled and **shared** across all environments, whereas variables defined via the **interface** can **vary** depending on the **context** (production, staging, etc.). --- ## Feedback and Areas for Improvement ### Interface and Usability Issues - The deployment time displayed in the interface is **6 minutes**, while in reality it often exceeds **20 minutes**, which can be a bit frustrating 😅. - The interface isn’t particularly intuitive: the “Redeploy” button lacks visibility, some options feel repetitive and appear in multiple submenus, access to certain tabs isn’t clearly indicated, and there are quite a few menus, buttons, and tabs with inconsistent styles. - The modals are not very ergonomic and make the experience less fluid: - having to click on “Options” and then on another button, - or going through the status button to perform an action. - The **options located in the left sidebar** are not very well highlighted and can be difficult to read. ![Focus on the options on the Upsun project dashboard.](images/upsun-deployment-options.png) - Some cards or UI elements have a hover effect even though they are not clickable, which creates confusion. ![Upsun project dashboard - Hoover useless on non-clickable cards.](images/upsun-hoover-card.png) - There are **too many “Options” buttons**, often redundant and offering the same actions in multiple places. - Selecting the environment and branch is not intuitive, and no branch is selected by default. - All tooltips appear at the same time on pages containing graphs, which overloads the interface and can make it harder to read. ### Environment Variables - Environment variables used in `config.yaml` are not clearly reflected in the interface, and the dedicated menu is hard to find. - Adding environment variables one by one through the interface is frustrating. - Once an environment variable has been created, it’s impossible to rename it, which is quite limiting. ### Deployment & Errors - The button used to create a new branch sometimes displays “Cannot create a new branch” without providing any explanation, making the issue difficult to diagnose (to this day, I still don’t know why 😅). - When navigating between tabs, a fetch issue can occasionally cause the deployment history to disappear, which is quite confusing when everything suddenly looks empty. ### Logs and Observability - Viewing logs through the interface is not very convenient: the modal has its own internal scroll in addition to the page scroll, there’s no auto-scroll when new logs appear, and to access application logs, you need to use SSH + `cat` or run `upsun log`, which isn’t exactly ideal. ### Billing and Payments - It’s possible to leave the payment method empty and still receive an invoice, which feels inconsistent — although it does help anticipate potential costs. - The dark mode could use some improvement, especially the payment modal in the “Billing Details” tab, which is quite hard on the eyes. ![Upsun project dashboard in dark mode.](images/upsun-dark-mode.png) - Some users are required to verify their identity with a credit card, while others are not, with no apparent logic (I happened to be in the second group 😝). - It’s not possible to view the registered payment method at the time of verification (it would be worth checking whether it’s clearly stated that payment details are not stored). ### Other UI Remarks - In the Backup tab, the “i” button located under the title is not very clear. - The “Manage schedule” button lacks visual consistency with the rest of the interface and doesn’t look very polished. --- ## Conclusion Deploying Start UI Web v3 on Upsun is absolutely possible and works properly once the configuration is in place. However, **the learning curve is real**, especially for a junior developer or someone discovering Upsun without guidance. Upsun offers a solid technical foundation, but its **usability and developer experience could benefit from simplification**, particularly when it comes to: - environment variable management - error readability - log accessibility As an alternative to Clever Cloud, Upsun is definitely worth testing, but at this stage it requires a fairly significant upfront investment in time and effort. If you’d like to go further, you can explore our _made-in-BearStudio_ open-source libraries: [UI-State](/en/blog/posts/why-did-we-create-ui-state) and [Ficus UI](/en/blog/posts/ficus-ui-simple-and-composable-ui-for-react-native). --- ### Why we migrated from WordPress to Astro URL: https://www.bearstudio.fr/en/blog/posts/why-we-migrated-from-wordpress-to-astro Date: 2026-03-17 _In February 2026, we finally made the move: bearstudio.fr now runs on Astro. Here's the full story behind a ~200-page redesign — about thirty days of collective work and a real source of team pride. An article especially relevant for tech teams, React and front-end developers, and anyone considering breaking free from WordPress._ --- ## A bit of history: three versions, three eras The BearStudio website has had three lives.
![First version of the bearstudio.fr website built in 2016](images/premiere-version-du-site-developpee-en-2016.jpeg)
The first version of the website, built in 2016. This screenshot is from Internet Archive.
The first version, of which [an archive from November 2016](https://web.archive.org/web/20161107063014/http://www.bearstudio.fr/) still exists, ran on **GravCMS** — a file-based CMS with no database. In [November 2019](https://web.archive.org/web/20191117075057/https://www.bearstudio.fr/), we switched to WordPress — the obvious choice at the time, the one that "just worked." And for over six years, it did the job. Until February 2026, when we migrated everything to [Astro](https://astro.build/).
![Second version of the bearstudio.fr website](images/deuxieme-version-du-site-mis-en-production-fin-2019.jpeg)
Second version of the website, deployed in November 2019
This wasn't a decision taken lightly. It was the result of years of accumulated friction, piling technical debt, and the desire to take back control of our own tool. --- ## What finally convinced us to leave WordPress WordPress is a proven solution. But over time, several issues became impossible to ignore. ### Developer Experience was a real struggle The workflow was painful. We had sources on GitHub that needed to be deployed to the WordPress instance. Slow, tedious, error-prone. For a development agency whose website is its showcase, that's hard to accept long-term. We were piling up technical debt on a tool we didn't fully control. ### Performance hit a ceiling WordPress does server-side rendering by default. The result: pages that could take a while to load, disappointing Lighthouse scores, and a user experience below what we expected for our own site. Switching to static generation with Astro changed things dramatically. ### Security was a constant risk WordPress code is widely used, making it a prime target. Security updates come one after another, and plugins can introduce vulnerabilities. For a statically generated site built at compile time, the attack surface is virtually zero. And our new site is fully open source, available on GitHub — a stance that aligns with our values and our involvement in the community. ### Hosting costs were optimizable We used WP Engine for hosting: around $300 per year. Today, we're on a shared account that covers several of our applications for $20 per month — split across all our projects. Much more cost-effective at scale. ### A stack that no longer evolved with us It was also the perfect opportunity to rethink our offerings in the age of AI. Our development processes have evolved significantly: we now integrate AI into our workflows and the projects we support. Our showcase website should clearly reflect that for clients discovering us. --- ## Why Astro over Next.js, Nuxt or Gatsby? We already had experience with other solutions. I had notably worked on the Codeurs en Seine website with Gatsby, then migrated that same site to Next.js with ContentLayer for Markdown file management. It was quite heavy and the ecosystem was fairly passive — ContentLayer was no longer evolving. Astro stood out on several points: **Built-in content management**: Astro lets you define content schemas directly in code. If a field is missing or incorrectly filled in a Markdown file, the build fails with an explicit error message. It's an extremely practical safety net for day-to-day work. **Performance by default**: Astro takes a "zero client-side JavaScript by default" approach, which delivers ultra-fast sites without any special configuration. **Astro Islands flexibility**: you can integrate React, Vue or Svelte components only where needed, without loading an entire framework for the whole page. We chose not to use a headless CMS. All content is managed in Markdown or MDX files (for articles that need embedded React components). Simple, versioned with the code, no external dependency. What initially felt like a constraint turned into an advantage: everything is in one place, all the context is available, and with AI, that's a real strength. --- ## A redesign, not just a migration The thirty or so days needed included much more than pure development. Here's how the project broke down:
![On the left, the sitemap as a mindmap of the new bearstudio.fr website, on the right, screenshots and links to competitors](images/veille-concurentielle-et-sitemap.jpeg)
Competitive research and information architecture were a major part of the time spent on this new website.
- **Upfront thinking and competitive research** to define the direction of the new site — I actually spent a fair amount of time looking at what was being done elsewhere internationally - **Setting up the technical foundation** by [Grégoire](/en/team/gregoire-protas) and [Noé](/en/team/noe-tatoud) - **Development and design** primarily driven by [Ivan](/en/team/ivan-dalmet) and myself - **Editorial and SEO work** to preserve existing gains and refine our marketing message
![Screenshot of Figma showing a quick wireframe.](images/reflexion-de-decoupage-du-nouveau-site.jpeg)
A lot of thinking went into the layout and structure of the new site.
From now on, the entire team can contribute, whether on the technical side or through blog posts. ### Serious editorial work We started with about 200 pages — blog posts, service pages, team members, contact pages — and took the opportunity to **rework the marketing content in depth**: merging front-end and back-end categories under a single "web development" axis, adding a "project boost" category and a dedicated AI category. This wasn't just a technical migration. ### The most complex part: the translation system The most time-consuming technical challenge was multilingual support. We wanted a site available in French and English — we already have international clients and are active in the open source and React community. We also support startups and tech teams as a development partner or in a role close to CTO advisory, and in that context, being fluent in English — including on our website — is essential. Astro doesn't provide a complete built-in solution for translations (though it offers some minimal options). We had to build a custom solution, with subtleties to manage around collections as well as **Astro Islands**: when passing props to interactive components, you need to be careful not to unnecessarily bloat the client-side bundle. ### SEO was a project in itself We had years of SEO work on the old version. Losing it all was out of the question. Significant effort went into URL mapping, setting up redirects, and verifying meta tags to preserve what we'd built. --- ## The major changes in the new site ### A redesigned look, a preserved brand identity Ivan delivered a strong design overhaul while keeping our visual identity intact. BearStudio's colors — blue and yellow — are still there, but their usage has been streamlined. On the old site, yellow was everywhere to the point of being "too much." The new design uses it more surgically, where it truly creates impact. ### UX choices focused on people and clarity The new site puts more emphasis on the people who make up BearStudio. Navigation is clearer, access to our services more direct. We also introduced a more indirect and memorable communication style through "polaroids" — a visual element that creates personality without cluttering the page. The blog page perfectly illustrates this evolution: several articles are now immediately visible, even on mobile, which wasn't the case with the old WordPress theme. ### A site that also speaks to international clients The English version of the site was a priority. Being present in English opens doors with clients and communities we weren't reaching enough before. And let's be honest, it's also much easier today thanks to AI — we do a quick pass, review it, and we have our page. --- ## What we gained in our daily work **Performance**: loading is significantly faster. Static generation does its job. **Peace of mind**: we control the entire stack. No mysterious plugins, no endless WordPress updates, no shaky deployment workflow. We write code, push to GitHub, and it's live (and we even get deploy previews before going to production — handy for testing). **Ownership**: we don't have a dedicated marketing team updating the site. Having a stack we know inside out is what makes all of this viable and enjoyable long-term. --- ## Who should consider this migration? Astro is an excellent choice for **any predominantly static site**: showcase site, portfolio, blog, agency site. If your content is stable and you want maximum performance without sacrificing flexibility, Astro checks all the boxes. On the other hand, if you have a large non-technical team that needs to update content daily, the lack of a CMS interface can become a blocker. In that case, an Astro + headless CMS combination (Sanity, Contentful, Directus…) will be more suitable. **One piece of advice**: don't reduce the migration to a technical exercise. It's the perfect opportunity to rework your content, clarify your message, and modernize your design. That's what we did, and it's clearly what makes the difference. --- ## What's next? What we're preparing The migration isn't an end in itself. It's a solid foundation we'll keep building on. ### Content that truly reflects who we are The long-term goal for the site is to be a real showcase of BearStudio: who we are, what we do, and the humans behind it all. Almost a public database of ourselves — a place where we make publicly accessible everything we have internally: our technologies, our way of working, our open source projects, like [Start UI](/en/blog/posts/start-ui-opinionated-ui-starter). With that in mind, we're preparing several new sections. One dedicated to **events** — to know where to find the BearStudio team in real life, whether at meetups, conferences, or React and open source community events. Another focused on the **technologies we use** and our open source contributions, to document our technical choices and share what we build. ### AI is already in the site We've started preparing the site for the era of agents and LLMs. An `llms.txt` file is already in place at the root, and all blog posts are accessible in Markdown by appending `.md` ([example with this article](/en/blog/articles/why-we-migrated-from-wordpress-to-astro.md)) to any URL. The site is designed to be readable by both humans and AI. And internally, we use **Claude Code** daily to build the site's evolutions. AI isn't a future topic for us — it's already in our tools. ### Ongoing technical work One thing we set aside during the migration: **dynamic Open Graph images**. Currently, sharing images are static. We're in the process of reintegrating dynamic generation, building on the work we'd developed for the [Fork it! Community](https://www.forkit.community/) website. It's a short project, but one that will have a real impact on how our articles look when shared on social media. --- ## Thank you A big thank you to everyone who contributed to this project, directly or indirectly: Grégoire, Noé, and a special thanks to **Ivan** for the design and the shared thinking on content. --- ### UX Case Study: Cuisinez pour bébé URL: https://www.bearstudio.fr/en/blog/posts/ux-case-study-cuisinez-pour-bebe Date: 2026-01-27 ## About Cuisinez pour bébé The story of _Cuisinez pour Bébé_ begins with Clémence, a young mother passionate about cooking who wanted to offer her child healthy, simple, and varied meals. Like many parents, she asked herself the essential questions: ##### How do you successfully introduce solid foods? How do you prepare balanced meals without spending hours in the kitchen? To answer these questions, she started sharing her homemade recipes on a blog, which quickly grew into a structured WordPress website. The success was immediate: young parents found clear guidance, practical ideas, and a relaxed approach to cooking for babies. Today, _Cuisinez pour Bébé_ brings together over **1,800 recipes**, sorted by **age**, **weekly meal plans** for **batch cooking**, along with a wealth of practical tips to **support** every stage of food diversification. ## The Challenge / The Need With over **150,000 monthly visits** and a highly active community on social media, _Cuisinez pour Bébé_ has established itself as an essential resource for parents seeking simple and balanced recipes for their children. However, this success revealed a clear need: to make the experience smoother, more mobile-friendly, and more personalized. The majority of users were already browsing the site from their phones and expressed the need to access their recipes, favorites, and weekly menus more quickly directly from an app. The challenge was therefore to translate the website experience into an intuitive mobile format, staying true to the existing universe, while integrating key features: a freemium model, age-based navigation, and simplified access to batch cooking menus. The app had to become a natural extension of the website, serving the same goal: **supporting parents every day in preparing meals for their baby.** ## Our Role On the [BearStudio](/en/) side, the project is driven by a dedicated team whose composition has evolved over time. Current team: - 1 Lead UX/UI Designer - 1 UX/UI Designer - 1 Lead Full-Stack Developer Past contributions: - 1 Front-End Developer ## Product Design (UX/UI) Our team supported _Cuisinez pour Bébé_ in the complete design of the mobile experience, from understanding user behaviors to defining user journeys: - Analysis of young parents' needs and identification of specific expectations on mobile - Structuring the information architecture and designing simple journeys centered on real use cases - Low-fidelity prototypes → high-fidelity prototypes (_interactive mockups_) - Multiple iteration cycles carried out with the client to refine journeys and validate design decisions ## Development On the technical side, BearStudio handled the development of the mobile application connected to the existing WordPress infrastructure: - Mobile development in React Native (_Android & iOS_) - Content integration via WordPress REST API (_recipes, menus, profiles_) - Implementation of Algolia search for fast and filtered access to recipes - Authentication management and freemium/subscriber model - Optimization of visual and technical consistency through shared components and close collaboration between designers and developers ## Design & Iterations ### Main Screens of V1 - Laying the Foundations The first version of the _Cuisinez pour Bébé_ app aimed to bring the key features of the existing website into a mobile environment. This V1 served as a functional foundation, designed to address the essential use cases identified by the CPB team as a priority: **browsing recipes**, **organizing weekly meals, and understanding the value of the subscription**. At this stage, the goal was not yet to optimize every interaction, but to validate the core journeys and the relevance of the app format. The application was built around a few central building blocks: 1. **Access to weekly menus** right from the app's home screen 2. **Browsing a recipe catalog** sorted by age 3. **Recipe cards** with the essential information needed for preparation 4. **A favorites section** to find saved content 5. A **user profile** focused on **account management** and **subscription** 6. **A paywall** designed to present the freemium offering 7. **A sign-up flow** that was intentionally highly sequential This first version laid the product's foundations, tested initial hypotheses against real-world usage, and provided a solid base for future improvements. ### Main Screens Today The current screens of _Cuisinez pour Bébé_ are not the result of stacking features on top of each other. They are the result of a user-centered approach, iterated over time, with a constant goal: making a rich experience simple to use on mobile, in a real-world context (_a busy parent, phone in one hand, a child to manage, cooking in progress_). Rather than designing screen by screen, we structured the application around "driver" journeys — those that come up most often in parents' daily routines: - Planning the week's meals without having to think about every decision - Quickly finding a relevant recipe _(age, texture, context)_ - Cooking without friction, maintaining a clear and continuous reading experience - Tracking food diversification over time - Managing a family profile and premium access without confusion ### Design Method To turn these use cases into a mobile experience, we favored a very hands-on approach: **prototype, simulate, observe, adjust**. We used interactive prototypes to validate: - Understanding of screen sequences _(where to click, when, and why)_ - Navigation depth _(avoiding tunnels)_ - Readability and information hierarchy in dense lists - Consistency across screens _(same visual cues, same patterns)_ This method allowed us to quickly test hypotheses before development and to detect common mobile issues early: visual overload, hard-to-reach gestures, overly complex filters, secondary actions that were too prominent, lack of continuity between listings and details. ### What This Approach Changed Through iterations, several key themes emerged as structural: - Prioritizing information rather than showing everything: photo, title, age, and a few strong cues before the rest - Shortening the path to action: opening a recipe, adding to favorites, generating a shopping list — without multiplying screens - Creating "hub" screens _(e.g., Weekly Menu, Recipes)_ that focus on the main need, then link to details at the right moment - Ensuring visual continuity: if a parent understands a recipe card in the catalog, they should understand it everywhere _(menu, favorites, suggestions)_ The screens "today" embody this level of balance: an interface capable of handling dense and variable content while remaining smooth, consistent, and reassuring. ###### _Preview of the current screens: organization, exploration, execution, tracking._ ![Cuisinez pour bébé](images/image-1-1024x473.png) ### Design Zoom - Recipe Card Component The Recipes section is one of the most demanding modules of the app. It's a space where the user needs to quickly explore a very large catalog while maintaining a sense of control. #### Product Intent The central goal was not to provide an advanced search engine. The goal was to enable simple decision-making based on criteria that matter to parents: **age, texture, meal type, dietary restrictions, current context**. In other words, the recipes section had to function as: - A source of inspiration - A sorting tool - A quick access point to action _(cook, save, plan)_ ###### _The catalog is designed to be scanned in a few seconds: image, title, age._ ![Planning of the meals for the week, and catalog of the recipes with two active filters](images/image-3-1024x971.png) #### Constraints Encountered This section combines several complex constraints: - **Density**: many recipes on screen and many recipes in total - **Variability**: very long titles, different information across recipes - **Multi-criteria**: the right choice depends on several parameters _(age, texture, type, ingredients)_ - **Mobile**: short interactions, simple gestures, immediate readability - **Continuity**: the list must prepare for the recipe card, without disruption The main risk was twofold: - A catalog that's too visually "rich," where nothing stands out anymore - Or a filter system too complex, discouraging exploration #### Key Decision #1: The Recipe Card as a Unit of Reading The recipe card is the component that carries the essential understanding. It must enable three very quick mental actions: 1. Recognize the idea _(via the image)_ 2. Understand the content _(via the title)_ 3. Validate the fit _(via the age)_ This requires a strict hierarchy: - **Dominant image**: the eye decides first based on visuals — a deliberate choice made obvious by the richness and exceptional quality of _Cuisinez pour Bébé_'s photos, a true visual asset of the brand - **Title optimized for length**: typography, spacing, number of lines - **Age present but secondary**: visible, without stealing attention ![Focus on the two first recipes proposed in the catalog to notice the recipe card's organization](images/image-515x1024.png) #### Key Decision #2: Filters as the Main Lever (Not an "Extra") In this app, filters are not a secondary feature. They are the mechanism that makes the catalog usable on a daily basis. The idea was not to "add lots of filters" but to **provide a system that helps progressively narrow the search space without requiring significant mental effort**. The choices that make the filters effective: - **Clear categorization**: reasoning by families _(diet, type, time of day, season, special requirements)_ - **Quick selection** - **Explicit validation**: apply when ready, rather than triggering results with every micro-choice - **Immediate feedback**: seeing the number of recipes found prevents the feeling of "filtering into the void" ![Focus on the filter part of the catalog, showing most of the possible filters and the result](images/image-2-1024x964.png) ## A Collaboration Built Over Time Since 2021, the collaboration between BearStudio and the _Cuisinez pour Bébé_ team has been ongoing. It is built on a relationship of trust, strong responsiveness, and constant dialogue around the product's evolution. The CPB team regularly shares feedback from their community, formulates new ideas, and seeks advice to evolve the app. These exchanges take various forms: Slack messages, regular check-ins, or Loom videos to detail expectations, suggest improvements, or ask for advice. This dynamic has allowed the application to gradually evolve beyond its first version. Several major features have enriched the experience over time, such as **managing multiple children** within a single account or implementing **the shopping list**, which has become a key element of daily organization. Some existing features have also been reworked and refined, particularly around **premium content access** and conversion screens, to improve clarity and the overall experience. This shared iteration rhythm keeps the product alive, aligned with parents' real needs, and evolving continuously — driven jointly by the CPB and BearStudio teams. ## What Users Say Beyond mockups, features, and iterations, the most valuable indicator remains user satisfaction. Since the app's launch, reviews left on the stores and messages sent to CPB reflect a real impact on parents' daily lives. What comes up most often: - Ease of use - Clarity of recipes - Time saved in meal planning - Quality of the content offered - Trust in the CPB brand The ratings on the App Store and Google Play, along with the many positive messages, confirm that the app meets a strong need: **supporting parents in a reliable, intuitive, and caring way**. This feedback in turn fuels the project, as every constructive comment or recurring request inspires future improvements, further reinforcing the continuous improvement cycle between CPB, its users, and our team. ![Cuisinez pour bébé reviews](images/image-4-1024x576.png) ## Going Further _Cuisinez pour Bébé_ continues to support thousands of parents every day through its content ecosystem, app, and educational resources. To discover the full universe, here's where to find the brand and follow its latest news: **Official website**: Recipes, tips, batch cooking, and practical guides [https://www.cuisinez-pour-bebe.fr/](https://www.cuisinez-pour-bebe.fr/) **Mobile app**: Available on the App Store and Google Play Access to weekly menus, filters, favorites, shopping list, and premium features **Instagram**: Recipe sharing, tips, practical videos, community feedback [https://www.instagram.com/cuisinezpourbebe/](https://www.instagram.com/cuisinezpourbebe/) **Facebook**: Active community, exchanges between parents, live sessions and exclusive content [https://www.facebook.com/cuisinezpourbebe/](https://www.facebook.com/cuisinezpourbebe/) **YouTube**: Explainer videos, filmed recipes, workshops and masterclasses [https://www.youtube.com/cuisinezpourbebe](https://www.youtube.com/cuisinezpourbebe) And feel free to check out [our previous case study on Léa English](/en/blog/posts/lea-english-case-study)! --- ### Ficus UI 🌿 — Simple and Composable UI for React Native URL: https://www.bearstudio.fr/en/blog/posts/ficus-ui-simple-and-composable-ui-for-react-native Date: 2025-12-24 **Designing a coherent and maintainable React Native UI library** is a central challenge in modern mobile app development. For many years, we have been using React Native for its cross-platform capabilities, which allow targeting both Android and iOS while retaining the benefits of React and native mobile. However, styling and UI management in React Native remains limited by default: the framework provides basic components for structuring views, but few tools for creating advanced, customizable, and consistent mobile interfaces at scale. The React Native community quickly developed UI libraries to address these issues, but we couldn't find one that matched what we use on React web: [Chakra UI](https://chakra-ui.com/) That's why we developed at [BearStudio](/en/) a new open-source UI library: [React Native Ficus UI 🌿](https://ficus-ui.com/) ## Why Ficus UI? We love Chakra UI for several reasons: its simplicity, consistency, and "styled system" philosophy that allows you to quickly build elegant, accessible, and customizable interfaces. When we started looking for a similar experience on React Native, we found that no library truly combined these qualities. Some libraries offered rich components but were difficult to theme. Others provided flexibility, but at the cost of great complexity or lack of consistency between components. **Ficus UI** was born from this observation: to provide a **Chakra-like experience for React Native**, with a simple, expressive API that is 100% compatible with mobile constraints. ## Comparison with "vanilla" React Native UI Before Ficus UI, most React Native interfaces were built with native components and styles (`View`, `Text`, `StyleSheet.create`). This works very well... but it's often verbose, not very expressive, and difficult to maintain as the application grows. ### In "classic" React Native ![Example card component displayed, texts shown:
React Native Ficus UI 🌿 Discover Ficus UI for your React Native apps
Button: Explore](images/Capture-decran-2025-12-18-a-16.47.58.png) ```tsx import { StyleSheet, Text, TouchableOpacity, View } from 'react-native'; export default function Card() { return ( React Native Ficus UI 🌿 Discover Ficus UI for your React Native apps Explore ); } const styles = StyleSheet.create({ card: { backgroundColor: '#f7fafc', padding: 16, borderRadius: 12, shadowColor: '#000', shadowOpacity: 0.1, shadowRadius: 4, }, title: { fontSize: 24, fontWeight: 'bold', color: '#2d3748', marginBottom: 8, }, subtitle: { fontSize: 16, color: '#4a5568', marginBottom: 12, }, button: { backgroundColor: '#319795', paddingVertical: 10, borderRadius: 6, }, buttonText: { color: '#fff', fontWeight: '600', textAlign: 'center', }, }); ``` This code is functional, but it: - requires **a separate style block**, often redundant, - makes reading less fluid, - doesn't easily adapt to a theme or dark mode, - and complicates reuse (each component manages its own styles). ### With Ficus UI The same component, written with Ficus UI, becomes much more **declarative and composable**: ```tsx import { Box, Button, Text } from 'react-native-ficus-ui'; export default function Card() { return ( React Native Ficus UI 🌿 Discover Ficus UI for your React Native apps ); } ``` **Major differences:** - **No more StyleSheet** to maintain: styles are integrated as props. - **Colors, spacing, and sizes** are linked to the global theme. - The component is **self-documenting**: structure and style are read together. - The theme handles **dark mode, responsive, and color schemes** without extra effort. In other words: > With "vanilla" React Native, you describe how to style. > > With Ficus UI, you describe _what you want to achieve_. ## A powerful and customizable theme system Ficus UI includes a **centralized theme system**, inspired by Chakra UI, that defines colors, spacing, typography, breakpoints, and global variants of your components. This allows you to maintain visual consistency across your entire application while making it easy to customize your design system. ![Default theme color palettes](images/Capture-decran-2025-12-18-a-16.51.38.png) ```tsx import { AppRegistry } from 'react-native'; import { ThemeProvider } from 'react-native-ficus-ui'; import App from './src/App'; // this is our custom theme const theme = { colors: { // Use Smart Swatch to generate colors palette violet: { 50: '#f0eaff', 100: '#d1c1f4', 200: '#b199e7', 300: '#9171dc', 400: '#7248d0', 500: '#592fb7', 600: '#45248f', 700: '#311968', 800: '#1e0f40', 900: '#0c031b', }, }, fontSizes: { '6xl': 32, }, space: { xs: 2, '5xl': 64, }, // components defaults can also be customized components: { Text: { color: 'gray.100', }, }, }; export default function Main() { return ( ); } ``` ## Create your own components with `ficus()` One of the most powerful aspects of Ficus UI is its `ficus()` function, which allows you to **transform any React Native or third-party component into a Ficus component**. This makes it easy to integrate custom elements into your design system while benefiting from style props. ![Ficus component displaying a circle with "teal" color as background](images/Capture-decran-2025-12-18-a-16.44.12.png) ```tsx import { View } from 'react-native'; import { ficus } from 'react-native-ficus-ui'; const Circle = ficus(View, { baseStyle: { borderRadius: 'full', bg: 'teal.500', }, }); ; ``` In just a few lines, your component adopts all the power of Ficus: theme, responsive, color schemes, etc. ## Bridging React Native and Chakra UI Ficus UI doesn't seek to replace React Native, but to **add a layer of comfort and consistency** inspired by Chakra UI. It therefore preserves the **native components that every React Native developer already knows**, while adding the power of the style system and theme. ### The basic components you know Rather than reinventing names, Ficus UI keeps the same components as React Native core: - `Button` → a styled button, but based on native `Pressable` - `Pressable`, `TouchableOpacity`, `TouchableHighlight`, etc. → still available and compatible - `Text`, `Image`, `Input` → unchanged, but with **style props** and **theme** - `Box` and `ScrollBox` → the only intentional exceptions, replacing `View` and `ScrollView` to match Chakra UI's API Thus, **you keep your React Native reflexes**, while gaining the syntax and flexibility of a web-inspired system. ### Useful overlays for popular libraries In addition to enhanced basic components, Ficus UI offers **"high-level" components** that encapsulate common use cases in modern mobile apps. These components are built on recognized React Native libraries, but with a simplified, consistent, and themeable API. ### `PinInput` ![Ficus PinInput component (4 number input fields to enter a 4-digit code for example)](images/Capture-decran-2025-12-18-a-16.45.20.png) [Try it in the docs](https://ficus-ui.com/docs/Components/Inputs/pininput) ```tsx const SimplePinInput = () => { const [pinValue, setPinValue] = React.useState(null); return ( ); }; ``` Based on [https://github.com/retyui/react-native-confirmation-code-field](https://github.com/retyui/react-native-confirmation-code-field) ### `Slider` ![Ficus Slider component displayed as example](images/Capture-decran-2025-12-18-a-16.45.53-1024x47.png) [Try it in the docs](https://ficus-ui.com/docs/Components/Inputs/slider) ```tsx ``` Built on [https://github.com/callstack/react-native-slider](https://github.com/callstack/react-native-slider) ### `DraggableModal` ![DraggableModal example](images/image-1.jpg) [Try it in the docs](https://ficus-ui.com/docs/Components/draggable-modal) ```tsx const SimpleModal = () => { const { isOpen, onOpen, onClose } = useDisclosure(); return ( Settings Your settings ); }; ``` Based on [`react-native-bottom-sheet`](https://github.com/gorhom/react-native-bottom-sheet) ### `Tabs` ![Ficus Tabs component displayed as example](images/Capture-decran-2025-12-18-a-16.47.12.png) [Try it in the docs](https://ficus-ui.com/docs/Components/Layout/tabs) ```tsx Tab 1 Tab 2 Content for the first tab Content for the second tab ``` - Inspired by Chakra UI Tabs - Built on `[react-native-tab-view](https://github.com/react-navigation/react-navigation)` In summary: Ficus UI **doesn't hide React Native,** it **enhances it**. You use the components you already know, with a **more fluid API**, a **consistent theme**, and **ready-to-use integrations** for modern use cases. ## Responsive and cross-platform by design Responsive design is often a headache on React Native. With Ficus UI, style props can accept **values by breakpoint**, just like on the web: ```tsx Adaptive layout ``` This makes it easy to handle differences between phones, tablets, and large screens, while maintaining a clear and declarative syntax. ## Native and intelligent dark mode **Dark mode** is now expected in all mobile applications — it improves visual comfort, saves battery, and offers a more personalized user experience. With Ficus UI, dark mode is **natively integrated**: no need to manually manage conditional styles or separate themes. ### An adaptive theme based on system preferences Ficus UI automatically detects the user's preference (dark or light) and dynamically adapts the theme colors. You can also force a mode or manually toggle between the two. ```tsx const { colorMode, toggleColorMode } = useColorMode(); ; ``` **Color schemes** ensure optimal contrast and automatic visual consistency. ## Comparison with other React Native UI libraries (2025) | Library | Strengths | What Ficus UI adds | | ----------------------------- | -------------------------- | ---------------------------------------------------- | | **NativeBase / Gluestack UI** | Complete, rich, maintained | API closer to Chakra UI | | **React Native Paper** | Based on Material Design | Ficus UI is agnostic, not limited by Material Design | | **UI Kitten** | Complete | Less intuitive API | | **Tamagui** | Cross-platform performant | API closer to Chakra UI | | **Dripsy** | Minimal and extensible | Fewer ready-to-use components | Ficus UI aims for the right balance: **powerful without being complex**, **lightweight without being limited**, and **familiar for web + mobile teams**. ## In conclusion Ficus UI is our way of **making mobile development more fluid, consistent, and enjoyable**. It's a library that reflects our philosophy: **simple, composable tools built to last**. Discover it at [ficus-ui.com](https://ficus-ui.com/?utm_source=chatgpt.com) Contribute on [GitHub](https://github.com/BearStudio/react-native-ficus-ui?utm_source=chatgpt.com) And feel free to discover our other open-source projects: - [Start UI \[Web\]](/en/blog/posts/start-ui-opinionated-ui-starter) - [UI-State](/en/blog/posts/why-did-we-create-ui-state) --- ### Spooky October at BearStudio: Between Commits and Decorations URL: https://www.bearstudio.fr/en/blog/posts/spooky-october-at-bearstudio-between-commits-and-decorations Date: 2025-11-18 Autumn settles in, the days grow shorter, and darkness creeps in a little earlier behind our screens. The cold slips between two commits, and the first shivers set in. Hard to tell if they come from the icy wind or a bug in production. Between ghost lines (the ones that trigger an error on line 45 even though that line doesn't even exist), and trickster bugs playing pranks on us... the scene was already set. So here's a brief look back at October at [BearStudio](/en/). Where the Halloween spirit took control of the team's den. But since we're not the type to let ourselves be haunted, we also took the opportunity to keep spirits high, creativity flowing, and add a touch of eco-friendly decorating with recycled materials. ## 1. Pumpkin Carving Workshop ##### Week of October 6-13 First step: the traditional **pumpkin carving!** Under the last rays of October sunshine, we set up outside, armed with knives, spoons, and varying levels of courage depending on the participant. Some pumpkins became true works of art... others, unhandled exceptions. ![Sandrine Auber Lardans cutting the first pumpkins for Halloween](images/carve-1.jpeg) ![Result of the pumpkin carving workshop](images/carve-2.jpeg) "Nothing is lost, nothing is created, everything is transformed": the leftovers were recycled — not into a carriage (we couldn't find the right _framework_ for that) — but into a delicious **pumpkin soup** to warm us up. And for those with a sweet tooth: **pumpkin-cranberry mini cakes**. Like Rust, it was divisive: some loved it, others preferred not to re-run the script. For the curious, you can check out Yoann's article [here](/fr/blog/articles/rust).
![Ingredient for the pumpkin-cranberry mini cake](images/cook-1.jpeg)
![Pumpkin-cranberry mini cake ](images/cook-2.jpeg)
## 2. Decoration Workshop ##### Week of October 13-20 Second phase: **Halloween decorations.** After a brief _Instagram inspiration_ session (and a few critical failures), we finally got the hang of it. Tip of the day: gluing with water is eco-friendly... but it has a mind of its own and requires a bit of patience to hold! A bit like testing a new code snippet: sometimes it works on the first try. And sometimes you need to tweak a few details for everything to fit together perfectly.
![Tools needed for the decorations creation](images/craft-1.jpeg)
![Results of the decoration creation](images/craft-2.jpeg)
![Decorations glued to the window of the tavern](images/craft-3.jpeg)
### 3. Garland Workshop ##### Week of October 20-27 Time for **creative recycling!** Toilet paper rolls, scraps of colored paper, a marker, and a piece of string later. And there you have it — an army of little ghosts, pumpkins, bats, and other strange creatures ready to invade the office. Some characters looked terrifying, others... a bit too cute to be scary. But the spooky vibe was there between two coffees and three commits on _Lea English_ (you can read the UX case study [here](/en/blog/posts/lea-english-case-study))! ![Tools needed for the garland creation](images/deco-1.jpeg) ![Half created garland](images/deco-2.jpeg) ![Garland installed on a wall at the tavern](images/deco-3.jpeg) ## 4. Werewolf Night ##### October 30 No full moon without **Werewolf!** Everyone under their blanket with a hot chocolate or their dinner. Connected on the [Wolfy](https://wolfy.net/fr) website for an evening full of digital betrayals and intense debates about "who's the werewolf?", "who will be the mayor?", or "who's Cupid? We have scores to settle...". ![Screenshot of a Werewolf game on Wolfy with BearStudio team avatars and the in-game chat](images/wolfy.png) And a little round of GarticPhone that had nothing to do with Halloween to end things on a high note (drawings made with a trackpad and questionable talent that made us laugh even harder!). ![GarticPhone screenshot with Eléa's clue: "un ours qui fait de la balançoire"](images/game-1.gif) ![GarticPhone screenshot with Jeanne's clue: "le magicien d'oz"](images/game-2.gif) In short, a packed October at BearStudio: pumpkins, code, laughs, and a few scares... but above all, a team of bears that knows how to turn _bugs_ into candy and _pull requests_ on [Start UI](/en/blog/posts/start-ui-opinionated-ui-starter) into moments of sharing. ![Closing illustration: four BearStudio bears in witch and vampire costumes in front of a Halloween code screen](images/end.png) --- ### Why did we create ui-state? URL: https://www.bearstudio.fr/en/blog/posts/why-did-we-create-ui-state Date: 2025-10-16 Why did we create [ui-state](https://github.com/BearStudio/ui-state), a TypeScript library to manage ui state display? It all started after reading an excellent article by [Dominic Dorfmeister, aka TkDodo](https://x.com/TkDodo) (we also recommend checking out [his other posts on his blog](https://tkdodo.eu/blog/)). In the article [Component Composition is great btw](https://tkdodo.eu/blog/component-composition-is-great-btw), TkDodo highlights a recurring problem: managing UI states (`loading`, `error`, `empty`, `success`, etc.) in a way that is **readable, maintainable, and type-safe** without making your component structure explode. The typical starting point. You start by writing a simple component: ```tsx export function ShoppingList() { const { data, isPending } = useQuery(/* ... */); return ( Welcome 👋 {data?.assignee ? : null} {isPending ? : null} {data ? data.content.map((item) => ) : null} ); } ``` At first glance, everything seems to "work." But things get messy quickly: - Can we have both `data` and `isPending` at the same time? - Does the absence of `data` mean an error or an empty list? - What happens if `data` is present but empty? You end up juggling several flags (isPending, data, isError, etc.) that can make two parts of the UI appear simultaneously, when that wasn't the intent. **It becomes hard to read, test, and maintain.** ## TkDodo's proposed solution TkDodo suggests a clearer refactor based on `early returns`: ```tsx function Layout(props: { children: ReactNode; title?: string }) { return ( Welcome 👋 {props.title} {props.children} ); } export function ShoppingList() { const { data, isPending } = useQuery(/* ... */); if (isPending) { return ( ); } if (!data) { return ( ); } return ( {data.assignee ? : null} {data.content.map((item) => ( ))} ); } ``` This version is **much clearer**, each state corresponds to a single render. But there's a tradeoff: **You have to extract the layout into a separate component, and what if you don't want the entire screen to change?** `Layout` is duplicated in every branch. You also need to extract typing logic for the `Layout` props. And if you want part of the interface (like a header or sidebar) to remain constant between states, or certain `Layout` parts to depend on the state, your code structure starts to grow complex again. ## What we wanted: a single, well-typed, active state, reusable anywhere At [BearStudio](/en), we wanted to keep the same core principles: - Only one active state at a time - Exhaustive type safety - Readable display logic …but **without breaking up the JSX** or restructuring the entire render around state cases. We wanted to be able to say: > "Give us the current state, we'll handle it. Just make sure we cover every case." ## That's why we created ui-state With `ui-state`, you transform the response from a `useQuery` (or any data source) into a single, explicit state, based on a single call to `getUiState`. ```tsx import { getUiState } from '@bearstudio/ui-state'; export function ShoppingList() { const query = useQuery(/* ... */); const ui = getUiState((set) => { if (query.status === 'pending') return set('pending'); if (!query.data || query.data.content.length === 0) return set('empty'); return set('default', { data: query.data }); }); return ( Welcome 👋 {ui .match(['pending', 'empty'], () => '') .match('default', ({ data }) => data.title) .exhaustive()} {ui .match('pending', () => ) .match('empty', () => ) .match('default', ({ data }) => ( <> {!!data.assignee && } {data.content.map((item) => ( ))} )) .exhaustive()} ); } ``` What we gain from this: - **A single, well-defined state**, always up to date. - **Type exhaustiveness** via `.exhaustive()` ensures no case is forgotten. - **Automatic type narrowing** from TypeScript — for example, data is no longer optional since we've verified its existence. - **Full rendering freedom**, without restructuring JSX around states. - **Better testability**, you can test each UI state independently. Same concept as in TkDodo's article, but **no need to split into multiple components or wrap your entire JSX around state handling**. You keep **clear logic and intact composition**. 🔗 GitHub: https://github.com/BearStudio/ui-state --- ### Lea English Case Study URL: https://www.bearstudio.fr/en/blog/posts/lea-english-case-study Date: 2025-07-03 ## Project Overview Lea English is an online learning platform created by Léa, a **professional multilingual language coach** who speaks five languages fluently. She has built a community of over **350,000 French-speaking learners.** Her teaching approach emphasizes effective learning of everyday English through practical conversational skills. Unlike traditional grammar-focused courses or excessively gamified apps, her minimalist approach prioritizes essential speaking skills and natural language use. **The goal is to achieve quick, real-world fluency.** With a **proven web application and feedback from her paying users,** Léa partnered with our team. This collaboration enabled us to evolve this learning experience through **a thoughtfully designed mobile app** centered on user needs. ## The Challenge / Context Language learners often face **overloaded**, **grammar-heavy** programs that limit their conversational progress. Other methods, conversely, rely too heavily on **gamification at the expense of effectiveness.** **Traditional apps** generally target **beginners,** without truly enabling an effective transition to intermediate or advanced levels. Furthermore, **learners frequently lack** practice in **real conversations** and face **difficulties communicating** confidently in **real-life situations.** ## Our Role - BearStudio ##### Product Designer (UI/UX Designer), responsible for: - **User research** (expert interviews, usability feedback, competitive analysis) - **Information architecture** and **user journeys** - **Wireframing** and **prototyping** - **Usability testing** and **design iterations** - **Iterative collaboration** with **developers** on technical challenges and idea feasibility ##### Developers: - **Development** of the app in React Native / Expo, for deployment on Android and iOS - **Design** of **animations** to enhance the app experience - **Implementation** of the conversational bot feature (based on OpenAI's API) - **Integration** of **feedback** from the product designer and Léa - **Use** of **shared components** from Storybook and Figma to ensure consistency and efficiency in the interface ## Research & Key Insights #### Kickoff Workshop To fully leverage our client's deep knowledge of her users, we held a **focused 3-hour collaborative workshop with Léa**. She shared **extensive feedback** collected directly from **her users**. This data is rich and qualitative. It comes from Léa's field experience and her direct interactions with **over 350,000 engaged learners.** Thanks to this information, we were able to quickly identify **key user needs**. It also helped validate the main pain points encountered. We sketched **initial ideas in real time,** as insights emerged, nourished by Léa's invaluable teaching experience.
![General sketch from our online workshop with the client](images/frame-162-1-1024x752.png)
General sketch from our online workshop with the client
We complemented these valuable client-provided insights with a **targeted competitive analysis** (studying platforms like Duolingo, iTalki, and Simpler). [This allowed us to identify specific UX best practices and areas for improvement.](/fr/blog/articles/pourquoi-lexperience-utilisateur-est-elle-importante) This approach helped us strengthen the solid foundations laid by Léa. We combined her user-centered feedback with industry standards. Thanks to this, we were able to clearly define a strong direction for our design work. #### Additional Details on Initial Data and Research ##### Competitive Analysis To better understand the market, we studied several platforms such as Duolingo (excellent gamification, but limited speaking practice), iTalki (live tutors, but scheduling and lesson content that can feel fragmented), and Simpler (primarily targeting beginners through a grammar-based approach, which doesn't deliver fast results in everyday communication). From this competitive analysis, it became clear that the app to be designed needed to demonstrate **effectiveness** by emulating our client's teaching method and improving **real-time feedback**. Since private lessons are often expensive or inflexible, our goal was to create an integrated solution combining the best of both worlds: interactive online lessons and on-demand exercises, while maintaining an engaging yet **results-oriented** format. ##### User Feedback on the First Version of the Web App **Over 400 learners** participated in feedback through surveys, revealing several pain points: - **Missing features** \- Users made clear suggestions to improve their learning routine on the existing app. - **Motivation and consistency** \- Many struggled to stay consistent without concrete progress indicators and notification features. **Our in-depth analysis** of the **web app**, cross-referenced with feedback from regular **paying users**, highlighted several friction points: - **High cognitive load**, making usage sometimes tiring or discouraging. - **Lack of fluidity** in user journeys, undermining the overall experience. - **Usability issues**, with key interactions deemed unintuitive or unnecessarily complex. These obstacles significantly reduced engagement and accessibility. Beyond UX issues, we also identified **technical flaws, including security vulnerabilities and recurring functional bugs**. ![First web version of Léa English: Podcast page with dialogue list and level filters](images/old-screen.png) ![Three screens of the old mobile version: grammar test, Flash Cards and AI conversation](images/old-screens-1024x585.png) ##### Some of Our Observations - **Excessive clicks in tests -** Users had to chain multiple clicks to move to the next step, adding unnecessary delays and harming the flow of the experience. - **Asynchronous audio experience -** The transcription did not highlight words in real time during playback, making it difficult for users to follow along. - **Limited flash card interaction -** The flip mechanism was unintuitive and did not support a smooth, continuous learning experience. #### Target Audience - Adult learners ranging from **complete beginners (A1) to advanced (C1).** - Users who prefer **practical, effective learning** rather than grammar-focused approaches. - People looking to develop their speaking confidence through **regular, interactive, conversation-oriented practice.** We ensured that design decisions were aligned with **real user needs**. By mapping user behaviors, goals, and frustrations, the research provided a better understanding of the first version's limitations. These limitations mainly concerned usability and the ability to sustain user engagement. Furthermore, this analysis served as a reference throughout the design process. It helped prioritize the necessary improvements. These aimed to enrich the overall experience, streamline interactions, and increase user satisfaction. ## Clear Approach: Guiding Principles and Benefits ##### Seamless Integration to Reinforce Learning Vocabulary, audio, and interactive exercises are **tightly connected**, creating a cohesive ecosystem. Users naturally reinforce their skills through **varied** and **interconnected interactions,** promoting effective memorization and assimilation. ##### Personalized Learning Experience By leveraging the user's level, preferences, and behaviors, the app consistently delivers tailored content and interactions, significantly boosting motivation and learning effectiveness. This leads to **user-centered personalization**. ##### Intuitive and Engaging UX Prioritizing simple, clear, and intuitive interactions ensures minimal cognitive load, allowing users to focus fully on language learning rather than navigation. The integration of gamified interactions, daily limits, clear progress indicators, and immediate feedback motivates users to maintain regular language practice. This leads to **continuous learning motivation**. ##### A Flexible Approach Accessible to All Levels While addressing a broad audience, the app allows users to choose their learning type while following a defined progression to reach the next level. This leads to **sustained platform engagement**. ## Design & Iteration #### Initial Wireframes We used wireframes to define the app's features and structure its main sections as well as its information architecture. - **Interactive Cards** - a short test to ensure the gesture was intuitive for users from the start. - **Audio Listening** - testing quick access to audio levels desired by the user. - **AI Chat** - testing clarity of distinction for users between the daily interactive conversation and past conversations, which needed to be clearly indicated as inactive. ![Low-fidelity wireframes of the Léa English app: Flash Cards, Review and Listen screens](images/wireframes-1024x597.png) #### Usability Testing and Validation We conducted internal **usability testing** sessions with **six colleagues**. These tests were based on low-fidelity wireframes. We focused on task-based scenarios. The goal was to quickly evaluate the clarity of interactions, navigation intuitiveness, and overall engagement. This feedback fueled rapid design iterations. One of the **adjustments** concerned card behavior, with the addition of a "Don't learn" button, requested by users for cases where they no longer wanted to practice a word or expression. ## Design Explained #### Branding and Design System Lea English already had **a clear and well-defined visual identity**, which we naturally integrated into our custom design system. We built upon components from [Start UI Figma](/en/blog/posts/start-ui-opinionated-ui-starter), an open-source Figma library that we designed and use internally. The components we use in Figma are already implemented in [Start UI Native](/en/blog/posts/start-ui-opinionated-ui-starter). This library uses technologies like **TypeScript, React** and **Ficus UI.** Thanks to this, developers can immediately accelerate the implementation phase after design finalization. Furthermore, it ensures consistency for future features to come. ![Léa English Figma components via Start UI: Button, Tag, FormField, Tab, Avatar and NavItem](images/figma.png) #### UX Feature Analysis ###### 1\. Daily Vocabulary Cards - **Interactive Flip Cards** - Users interact via an **intuitive flip gesture** to **reveal the translation**, reinforcing active recall — a proven learning technique. - The flip interaction immediately stimulates cognitive attention, promoting **better retention.** - **Daily Limit** - **Restricting** to 5 cards per day manages cognitive load, **prevents fatigue**, and improves **long-term retention.** - This introduces **a gamification element,** creating anticipation and establishing a daily routine. - **Progress Indicator** - Clearly visible **progress** counters or bars encourage regular user engagement and provide **immediate feedback** on daily goals achieved. ![Vocabulary Cards feature: front and back of the card, and end-of-session screen](images/image-1-e1751294667236-1024x560.png) ###### 2\. "Review" Feature - **Synchronized Listing** - Words flipped in the daily cards **automatically appear** in the review section. These are clearly marked based on the user's interaction (green for known, red for unknown). - This synchronization ensures a **seamless integration** between learning and vocabulary review, **reinforcing assimilation.** - **Personalized Vocabulary Management** - Users can manually add new words to **customize their vocabulary list,** enhancing the personalization of their learning experience. - Options such as marking a word as "known" or removing it with "don't learn anymore" allow for **efficient management** of words to practice. - **Flexible Display Options** - Users can choose to display words in French or English first, according to their **learning preferences**. - **Audio and Examples** - Users can **listen to pronunciation** directly in the review section, supporting auditory learning. - Contextualized word or expression examples help reinforce understanding and correct usage. ![Review feature: vocabulary list, display preferences and word addition form](images/image-e1751294688522-1024x560.png) ###### 3\. "Listen" Feature - **Personalized Audio Recommendations** - Suggested audio content is highlighted at the top of the screen based on **the user's English level** (beginner, intermediate, advanced), ensuring content relevance. - Each audio is clearly labeled by language level, type (dialogue or monologue), and general theme, facilitating quick and informed selection. - **Visual Progress Tracking** - Already-listened audio content is indicated in green, offering immediate visual feedback on the user's progress. - **Advanced Filtering** - Users can filter audio by favorites, offline downloads, and levels, enabling effective personalization of listening sessions. - **Quick Access Features** - Quick download and favorite (heart) options are directly accessible from the audio list, simplifying interactions and improving usability. - **Detailed Audio Screen** - Quick action buttons for downloading, adding to favorites, or marking as listened offer more practical usage. - Interactive transcriptions allow instant switching between English and French, with synchronized text highlighting to accompany reading and listening. - New vocabulary in transcriptions is highlighted in uppercase and bold to facilitate immediate recognition and learning. - **Fixed Audio Control Bar** - Audio controls remain permanently visible during scrolling, with integrated options for adjusting playback speed and showing or hiding the transcription, thus improving user comfort and control. ![Listen feature: filterable audio list and detailed view with bilingual transcript](images/image-4-e1751355919230.png) ###### 4\. AI Conversation: "Practice" - **Daily AI Conversation Sessions** - Users participate daily in guided AI conversations on predefined topics. This practice encourages active grammar use and conversational skill development. - Real-time corrections provided by the AI offer immediate feedback, allowing users to quickly identify their mistakes and learn from them. - The user has quick access to a translator during the conversation. - **Error Highlighting** - Grammar or syntax errors are clearly flagged and corrected during exchanges, helping users internalize correct language structures. - **Structured Daily Topics** - Varied daily themes ensure rich exposure to different vocabularies and grammatical contexts, keeping the exercise relevant and motivating. ![Practice feature: daily conversation, real-time grammar corrections and built-in translator](images/image-3-e1751294625433-1024x562.png) #### Complete Launch Management and Visual Design In preparation for the public release, we designed all the visual assets. This includes **detailed app previews**, optimized for different device formats on **the App Store and Google Play.** Additionally, we managed **the entire launch process** internally. We thus ensured consistent brand representation. Furthermore, we provided a smooth onboarding experience for users across all platforms. #### Iterative Launch and Feature Integration The initial release, **in April 2025,** strategically targeted approximately **300 users** on launch day to create a controlled testing environment. This early feedback was invaluable, allowing us to iterate quickly and improve [the user experience](/en/services/ux-design) based on direct feedback. ###### Learning Pace Customization Users requested a feature allowing them **to choose the number of new cards to flip each day**, in order to adapt their learning to their own pace. ###### Speech-to-Text Feature Users also requested **a speech recognition feature** for AI-generated conversations, which was designed and successfully integrated. ###### Geographic Expansion Community feedback revealed **demand from other regions**. We therefore expanded the app's availability to several countries beyond France, including Morocco, the Democratic Republic of Congo, Canada, the United States, the United Kingdom, and Germany. Launch feedback: ![Four positive user testimonials following the launch of the Léa English app](images/frame-33.png) #### Post-Launch Results - First Month The new mobile app saw strong user engagement in its first month. **Over 2,000 installs** across Android and iOS platforms. ###### Subscription Breakdown - Monthly subscriptions: approximately **60% of users** opted for a **monthly subscription**, with the majority starting with a free trial. - Annual subscriptions: approximately **30% of users** chose an **annual plan**, reflecting strong trust and lasting commitment. - Mid-term subscriptions (6 months): approximately **10% of users** preferred this **intermediate commitment**. ###### Platform-Specific Insights This subscription distribution pattern highlights **the success of the onboarding and subscription strategy,** indicating that the UX effectively communicated the product's value and encouraged long-term engagement. Reviews found on AppStore / Google Play / Trustpilot: ![5-star Trustpilot review by Liliane Brochet: practical app, well-adapted, daily rhythm maintained](images/avis-1.png) ![5-star App Store review by Claudemarie: contextual vocabulary, podcasts and AI praised](images/avis-2.png) ![5-star App Store review by Elodie Ricordel: simple, motivating app, progress in 15 min/day](images/avis-3.png) ![ReUser comment: comprehensive app, method effective when combined with Netflix seriesview](images/avis-4.png) ![User message congratulating the Léa English team for a pleasant and functional result](images/avis-5.png) ## Final Thoughts Based on the data collected, we believe we have successfully designed **an effective application.** It integrates principles of cognitive psychology. It also offers user-friendly and engaging UX interactions. By combining intuitive navigation with interactive learning elements, it delivers a personalized user experience. Thanks to this, our app fosters **regular practice and lasting motivation.** It also enables significant progress in English learning for French-speaking learners. You can check out **the interactive Figma prototype here** → [LINK](https://www.figma.com/proto/OfWcem6ytSSSAvaeP9nnOv/%F0%9F%91%A9%F0%9F%8F%BB%E2%80%8D%F0%9F%8F%AB-Lea-English?page-id=1453%3A591&node-id=1562-4425&p=f&viewport=226%2C167%2C0.05&t=8uDnG5QbLEdpTfjn-9&scaling=scale-down&content-scaling=fixed&starting-point-node-id=1562%3A4425&show-proto-sidebar=1) --- ### Easily Manage Your Website Content with Outstatic URL: https://www.bearstudio.fr/en/blog/posts/easily-manage-your-website-content-with-outstatic Date: 2025-04-25 A while back, I worked on a landing page with a blog section. Two major constraints came up: - Easily integrate this section into an existing Next.js project, - Allow anyone to add articles without writing a single line of code. After several rounds of research and testing, I ultimately chose the [Outstatic](https://outstatic.com/) library. ## What is Outstatic? Outstatic is an open-source CMS (Content Management System) designed for developers using Next.js. But unlike traditional CMS platforms like WordPress, it has several interesting features: - **No database:** Outstatic works solely with Markdown files saved in your GitHub repository. No need to manage a database — everything is simple and fast. - **Hosted directly in the project:** Outstatic integrates directly into your Next.js project. No external service or separate deployment needed. - **Intuitive user interface:** Once configured, anyone (even without technical knowledge) can create articles or pages through an admin interface. ## Pros and Cons Before showing you the library in action, here are what I consider to be some pros and cons of this library compared to more traditional CMS solutions. ### Pros - Simplicity and speed: In just a few minutes, you get a functional blog. - Self-hosted: Everything stays in your project, no external dependencies. - Draft management: Flexible enough to publish your articles at the right time. - No database: Perfect for static projects. ### Cons - GitHub dependency: Outstatic requires a GitHub connection, so every contributor must have an account and be added to the organization. It's not possible to use Outstatic with other version control solutions. Additionally, this can be problematic in some companies for non-technical team members. - Complex collaboration: If you're working with an organization, this requires an OAuth configuration. - Not suitable for large data volumes: When article files stored in your Git repository become too numerous, it can lead to decreased performance on your site. ## How to Configure Outstatic? Setting up Outstatic on your project is very simple — it only takes 3 steps: ### Step 1: Install Outstatic Add Outstatic to your project by running: ```bash npm install outstatic ``` ### Step 2: Create an OAuth App on GitHub Outstatic uses GitHub for authentication and article management. Here's how to create an OAuth app: 1. Go to [GitHub Developer Settings](https://github.com/settings/developers). 2. Click on New OAuth App. 3. Fill in the fields: - Application name - Homepage URL: Your site's URL (for example, `http://localhost:3000` locally). - Authorization callback URL: Add `/api/auth/callback/github` to your URL (for example, `http://localhost:3000/api/auth/callback/github`). 4. Once the app is created, note your client ID and client secret. ![Creation menu for an OAuth app on GitHub](images/image-3-1021x1024-1.png) ### Step 3: Integrate Outstatic into Your Project: 1. Create a .env file with the previously retrieved variables. ```bash OST_GITHUB_ID=YOUR_GITHUB_OAUTH_APP_ID OST_GITHUB_SECRET=YOUR_GITHUB_OAUTH_APP_SECRET # OST_REPO_SLUG # The name of your repository on GitHub without the username OST_REPO_SLUG=YOUR_GITHUB_REPOSITORY_SLUG # OPTIONAL # If empty this will default to your GitHub username OST_REPO_OWNER=YOUR_GITHUB_USERNAME # OPTIONAL # If empty this will default to main OST_REPO_BRANCH=YOUR_GITHUB_REPOSITORY_BRANCH ``` 2. By following the [official Outstatic documentation](https://outstatic.com/docs/getting-started#adding-outstatic-to-a-nextjs-website), it will be very easy to configure the remaining elements: layout, admin page, and API. ## How to Add Content? ### Creating a Collection From the interface, you can create a collection: for example, for a blog you would create an "Articles" collection that will contain all your articles. By default, each collection item has a title, description, image, author, etc., but you can also create custom fields. Once the article is created, it is saved in your GitHub repository as a Markdown file in the defined folder (content by default). ![Menu for the creation of a new collection](images/image-1024x731-1.png) ### Viewing and Retrieving Articles: To retrieve your Markdown articles, use the methods provided by Outstatic: `getDocuments` or `getDocumentBySlug`. Then convert the content to HTML to style it. ```javascript const posts = getDocuments('articles', ['title', 'slug']); const post = getDocumentBySlug('articles', slug, [ 'title', 'publishedAt', 'slug', 'author', 'content', 'coverImage', ]); ``` ## How to Style the Article? In my case, I chose to use Tailwind CSS and specifically [Tailwind Typography](https://github.com/tailwindlabs/tailwindcss-typography) to handle the styling of Markdown articles: you can customize your articles as you wish, by modifying the style of headings, images, etc. ```jsx

{data.title}

Published on {data.date} by {data.author}

{content}
``` ## Writing an Article with Outstatic VS the Result on the Site When you write an article on the admin interface, the style is not the same as on the page where you'll display the article for your users. Here for example is the Outstatic interface in the first image — this is where you write the article, fill in its title, description, etc. In the second image, I've added styling and used the "title", "author", and "cover image" properties to create the article header. ![Article example using Outstatic from the admin side](images/image-1-1024x473-1.png) ![Article example using some styling from the user side](images/image-2-1024x584-1.png) ## My Opinion on Outstatic In the past, I've had the opportunity to use WordPress for several projects, whether in a professional, personal, or academic context. While this tool remains a reference for creating websites and blogs, it does impose certain constraints in terms of customization. Generally, you choose a predefined theme to structure the display of articles, which limits flexibility and integration within a more complex project. With Outstatic, the approach is quite different. This tool offers fully customizable content management, allowing you not only to structure articles according to your own needs but also to integrate it directly into an existing website. It thus becomes possible to benefit from a lightweight and modular content management solution without having to depend on a heavy ecosystem like WordPress. In conclusion, [Outstatic](https://outstatic.com/) is a simple and effective solution for adding a blog section to a Next.js site. It's a perfect tool for projects where content management needs to be fast and accessible, without sacrificing control over the code. Author: [Jeanne Grenet](https://www.linkedin.com/in/jeanne-grenet) --- ### Start UI URL: https://www.bearstudio.fr/en/blog/posts/start-ui-opinionated-ui-starter Date: 2021-11-01 When using User Interface (UI) starters in the past, we found ourselves faced with deciding which technology would be best for us to use. From UI framework, HTTP Client, Routing Library, Style Library, Form Library, to downloading all the configurations and dependencies needed can be very time consuming. To put everything in one place and streamline how we choose these options, we decided to dive into creating our own User Interface Starter called **_Start UI_**_._ ## What is Start UI? 🚀 Start UI is a collection of opinionated UI starters for design, web and mobile (mostly React based at the moment) which lets you easily bootstrap new UI projects. Based on our many years of experience working with starters and on real projects ranging from small to large scale applications, 🚀 Start UI starters are opinionated and made of strong architectural design decisions. They come with many configurations (such as Internationalization, API Mocking, [Storybook](/en/services), Dark Theme…), components and user administration interfaces by default. Those features help to avoid the setup phase and quickly develop the features specific to the project use cases. At the moment, 🚀 Start UI is made of 3 projects: 🚀 Start UI \[web\], 🚀 Start UI \[native\] and 🚀 Start UI \[figma\]. ### 🚀 Start UI \[web\] ... is our most advanced starter that can be used for [SEO](/fr/blog/articles/checklist-seo-technique) (Search Engine Optimisation), PWA (Progressive Web Application), SPA (Single Page Application), SSR (Server Side Rendering). It is web ready and will boost your project setup and your productivity while ensuring code quality. ### 🚀 Start UI \[native\] ... is used to develop mobile applications. Based on React Native with quite a different stack, this starter helps you to quickly push your application to the Stores. ### 🚀 Start UI \[figma\] ... is a Figma file that represents what is possible to do with 🚀 Start UI \[web\] and 🚀 Start UI \[native\]. It is made of components (auto layout, variants, etc) that are available to the developer in the Web and Native version, so your designers are always doing interfaces that are possible for the developer to implement. At BearStudio, we maintain and use all 3 of these starters, and our clients are pleased that we come with a solution to quickly bootstrap their projects. All developers that are comfortable with React can start using 🚀 Start UI \[web\] and 🚀 Start UI \[native\] for their projects, and designers that are comfortable with Figma can start using 🚀 Start UI \[figma\]. The benefits for the \[web\] and \[native\] versions are: **productivity** because you will skip the setup phase, **code quality** using the ESLint and Prettier configuration, **code safety** using TypeScript and tests configuration. For 🚀 Start UI \[figma\], the main benefit is **productivity** because it comes with a lot of components that are available in the \[web\] and \[native\] versions. **Start using 🚀 Start UI \[web\] today using the command line we developed:** `npx create-start-ui --web myApp` ([https://github.com/BearStudio/start-ui-web](https://github.com/BearStudio/start-ui-web)) **Start using 🚀 Start UI \[native\] today using the command line we developed:** `npx create-start-ui --native myApp` ([https://github.com/BearStudio/start-ui-native](https://github.com/BearStudio/start-ui-native)) **Start using 🚀 Start UI \[figma\] today from Figma community** ([https://go.bearstudio.fr/start-ui-figma](https://go.bearstudio.fr/start-ui-figma)) ---