<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Product, Experience &amp; Technology @ OpenClassrooms - Medium]]></title>
        <description><![CDATA[Product, Experience &amp; Technology @ OpenClassrooms - Medium]]></description>
        <link>https://medium.com/openclassrooms-product-design-and-engineering?source=rss----d8de2fb3d85d---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Product, Experience &amp;amp; Technology @ OpenClassrooms - Medium</title>
            <link>https://medium.com/openclassrooms-product-design-and-engineering?source=rss----d8de2fb3d85d---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 28 May 2026 20:58:20 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/openclassrooms-product-design-and-engineering" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Learning to Trust Your Gut: How I (Really) Found My Path in Web Development]]></title>
            <link>https://medium.com/openclassrooms-product-design-and-engineering/learning-to-trust-your-gut-how-i-really-found-my-path-in-web-development-bcf42aadf7a1?source=rss----d8de2fb3d85d---4</link>
            <guid isPermaLink="false">https://medium.com/p/bcf42aadf7a1</guid>
            <category><![CDATA[apprenticeship]]></category>
            <category><![CDATA[education]]></category>
            <category><![CDATA[carreer-change]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Almis Lipon]]></dc:creator>
            <pubDate>Wed, 13 May 2026 10:01:01 GMT</pubDate>
            <atom:updated>2026-05-13T10:01:01.353Z</atom:updated>
            <content:encoded><![CDATA[<p><em>“Happiness is not something ready-made. It comes from your own actions.”</em> — Dalai Lama</p><p>Finding your path. It’s something you hear everywhere. On LinkedIn, in podcasts, from your parents’ mouths. But nobody really tells you how it’s done. I don’t have the recipe either, but I do have my story. And if it can help even one person see things more clearly, then it’s worth telling.</p><p>My name is Almis, I’m about to finish my web developer apprenticeship at OpenClassrooms and, before getting there, it took me several years to understand one simple thing: <strong>the signals were there from the beginning, I just didn’t know how to listen to them yet.</strong></p><p>Maybe you too, reading this article, are wondering about your current job, about a career change, about that little voice telling you something isn’t quite right, or on the contrary, the one that lights up when you touch on a specific topic. If so, I’m writing this article for you. Not to give you a miracle recipe (it doesn’t exist), but to tell you how I learned, at my own expense and through a lot of trial and error, to trust those signals.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SknfSddjHg31rDL7p0EV_A.png" /><figcaption>caption from magnific.com</figcaption></figure><h3>The first ignored signal: the technical degree that didn’t suit me</h3><p>Let’s rewind a bit. After my vocational high school diploma in Sales — a path I’d chosen somewhat by default because I liked interacting with people and because school and I, let’s say, never had a great love story — I left for England for almost a year. Language trip, odd jobs, expat life… It was eye-opening, but when I came back, I found myself facing the same question as before I left: <strong>what do I want to do with my life?</strong></p><p>Without a clear answer, I did what many people do in that situation: I reasoned “logically.” I like math (without passion, let’s be honest), I like solving problems, I need a stable job, so why not a BTS in Public Works? The sector is hiring, it pays decently. And above all, above all, it would reassure my parents who were legitimately worried about seeing me drift without direction.</p><p>I’ll be honest: their criteria slipped into my decision without me really realizing it. Not through direct pressure, but through this visceral desire to stop seeing them worry, to give them a reassuring answer when they asked “so, what are you doing now?”</p><p>Off to Nantes, then. And there, from the very first weeks, <strong>a sense of unease started to emerge.</strong> Faint at first. I felt out of step with my classmates, two years younger than me. Then the signal grew stronger. My friends were moving forward with their studies, some were finishing their bachelor’s degrees, and I felt like I was eternally behind in a race I hadn’t even chosen to run.</p><p>Then it became impossible to ignore. I kept going to class, but my lack of interest grew every week. More than once, I turned around right when I’d nearly arrived, standing in front of the school’s door. My body was telling me something my head didn’t want to hear.</p><p>I eventually dropped out. At the time, it felt like a failure. Looking back, it was probably the first time I really listened to myself.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8D_X8zTiZaS3mld0Tp9UBQ.png" /><figcaption>caption from magnific.com</figcaption></figure><h3>The blurry period</h3><p>Then came Covid, lockdown, and the day jobs to make ends meet. Rent had to be paid, I wasn’t living with my parents anymore, and life doesn’t stop just because you’re searching for your path. In my story, this period might look like a gap. But the truth is, it taught me something precious: <strong>time spent searching is never really time wasted.</strong> Every experience, even the one that seems to have nothing to do with what you’ll do later, shapes the person you become.</p><p>I went back to school through a bachelor’s degree in Applied Foreign Languages with an international business focus. And there, unlike the BTS, I found subjects that genuinely sparked something in me: sales, marketing, fields that resonated with something deep within. I also discovered university life and made connections that, years later, turned into real friendships.</p><p>But something was still missing. The click wasn’t there.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AAImznGp7RTbktaCSJhzjA.png" /><figcaption>caption from magnific.com</figcaption></figure><h3>The moment the signal becomes a shout</h3><p>The click came from a completely unexpected place: a YouTube video. I stumbled almost by chance onto content from <a href="https://www.youtube.com/c/BenjaminCode">Benjamin Code</a>, a developer talking about coding and building websites. I devoured his videos. And then, almost without realizing it, I started coding in the evenings, after work. My first local sites, my first lines that actually <em>did something</em>. I immediately loved the feeling of building something with nothing but a text editor and an idea.</p><p>For several months, I learned on my own. And eventually, the signal became so strong that it was impossible to ignore: <strong>I wanted to make this my career.</strong></p><p>I signed up for a Ruby bootcamp at Le Wagon, geared toward career changers. Two intense months. And there, for the first time in my life, I understood what it felt like to wake up in the morning <em>wanting</em> to go learn. No more U-turns at the door. No more lack of interest creeping in. <strong>The exact opposite.</strong> People around me noticed it before I did: I wasn’t the same person anymore.</p><p><em>That</em> was the signal I wish I’d recognized sooner. That energy that carries you instead of draining you. And the funny thing is, I’ve been passionate about tech since childhood. I always loved buying tech magazines as a kid, keeping an eye out for the latest tech. And yet I never followed that path, because of <strong>one</strong> thing: my prejudices and the things people said. I’d convinced myself that, to work in this field, you had to be a math genius, a geek glued to a screen trying to hack government websites. I never quite knew where those prejudices came from, they just stuck with me until I discovered <a href="https://www.youtube.com/c/BenjaminCode">Benjamin Code</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8QQpPiuZpvPqpXXCOOPWQw.png" /><figcaption>caption from magnific.com</figcaption></figure><h3>Finding my apprenticeship: patience as a strategy</h3><p>After the bootcamp, the job market gave me a reality check: I didn’t find an apprenticeship or a job right away. But this time, it was different. Before, uncertainty paralyzed me. This time, I had a direction. A real one. And when you have a direction, uncertainty becomes just a fog to walk through, not a wall.</p><p>And then one day, I landed an offer at <strong>OpenClassrooms</strong>, the “Site du Zéro” of my childhood, the one I associated with a whole world of passionate geeks. Today, I’ve been there for two years as an apprentice, I’ve earned a bachelor’s-level degree in Symfony/PHP web development, and I’m working on projects that genuinely excite me. It’s only the beginning of my developer story, but it’s starting with a mindset I never thought possible a few years earlier.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/626/1*1u3sIhJg-8lPiuiVFj6pwg.png" /><figcaption>caption from magnific.com</figcaption></figure><h3>A word for those who are hesitating</h3><p>If you’re wondering whether you should change paths, I don’t have a universal answer for you. But I can tell you this: <strong>the signals you’re feeling deserve to be taken seriously.</strong> That Sunday-evening dread, that fatigue that has nothing to do with physical tiredness, that curiosity that lights up when you read an article on a particular topic… these are data points, your own desires. Not whims.</p><p>And to those who have people around them in the middle of searching, in the middle of a career change: help them. Not by telling them what to do, but by giving them permission to explore. <strong>We’re not born with a ready-made calling. We build it, through trial, error, and signals we’ve actually listened to.</strong></p><p>I found mine in the end. And the feeling of doing a job you truly love, one I’m still discovering every day, is well worth the years spent searching.</p><p>Now, it’s your turn.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bcf42aadf7a1" width="1" height="1" alt=""><hr><p><a href="https://medium.com/openclassrooms-product-design-and-engineering/learning-to-trust-your-gut-how-i-really-found-my-path-in-web-development-bcf42aadf7a1">Learning to Trust Your Gut: How I (Really) Found My Path in Web Development</a> was originally published in <a href="https://medium.com/openclassrooms-product-design-and-engineering">Product, Experience &amp; Technology @ OpenClassrooms</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[“It’s Legacy” isn’t an end in itself]]></title>
            <link>https://medium.com/openclassrooms-product-design-and-engineering/its-legacy-isn-t-an-end-in-itself-0630c7517626?source=rss----d8de2fb3d85d---4</link>
            <guid isPermaLink="false">https://medium.com/p/0630c7517626</guid>
            <category><![CDATA[challenge]]></category>
            <category><![CDATA[tech]]></category>
            <category><![CDATA[github]]></category>
            <category><![CDATA[motivation]]></category>
            <category><![CDATA[storytelling]]></category>
            <dc:creator><![CDATA[Florent Delord]]></dc:creator>
            <pubDate>Fri, 03 Apr 2026 09:56:01 GMT</pubDate>
            <atom:updated>2026-04-03T09:56:01.580Z</atom:updated>
            <content:encoded><![CDATA[<h4>Looking back on a successful GitHub migration</h4><p>I often like to quote the famous saying, “It’s legacy.” In a company, those are the building blocks of a process or a product that nobody can really explain the origin of: when someone asks, “Why does it work like this?”, you can answer, “Ah… it’s legacy.”</p><p>At OpenClassrooms, as I imagine in the majority of companies, we also live with certain choices from the past which, although relevant at the time, don’t necessarily make sense anymore today. Those choices don’t make our day-to-day lives any easier, and we have to deal with them. One of our four core values at OpenClassrooms is “We Dare”. So, let’s dare to change.</p><h3>The starting point: two coexisting GitHub organizations</h3><p>Here is the technical context, which I won’t go into in detail in order to keep this article accessible to as many people as possible. Within our GitHub ecosystem, we have two different organizations. Organization A contains the source code repository for <a href="http://openclassrooms.com">openclassrooms.com</a> and all the associated continuous integration. All other repositories are in organization B. “It’s legacy.” The point of friction is that A’s CI needs workflows in B. Our talented DevOps therefore have to do gymnastics involving a GitHub App to make everything work properly. Besides that, those same talented colleagues have to manage the authorizations and other settings of both organizations.</p><p>To sum it up simply, we have a duplicate that has become unnecessary, but that sits at the heart of our school: our website. For years we’ve wanted to merge into a single organization, but there’s a risk because, I insist, it’s the heart of the online school.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*k_lJl2_1vIDuQMNR2n7ttQ.png" /></figure><p>A risk, precisely: what is it? Does it really exist, or have we simply been telling ourselves for years that there is a risk, but nobody can really say what risk it is? That last sentence is worth thinking about, because even risks can evolve and be reassessed. To get to the bottom of it, let’s look for the risks.</p><h3>Analyzing risks and prerequisites</h3><p>Before embarking on this migration, and despite the optimistic tone above, we have to seriously analyze the existing ecosystem. In the end, no major risk emerged. If this migration is carried out, we’ll need to update the repository URL in a few internal tools, evolve the continuous integration workflows, but nothing more — and nothing complex.</p><p>I’ll add a parenthesis here to clarify that all of this is true because, last year, a huge piece of work was done to overhaul our continuous integration. The entire infrastructure was modified and moved to Infra as Code, and continuous integration was migrated to GitHub. This recent work now gives us full mastery of the chain, and therefore a clear view of the risks. Without that prior work, the very idea of migrating organizations would probably never have emerged.</p><h3>From preparation to execution</h3><p>The key to preparation was bringing the right people together to successfully carry out the migration. We chose the date at the start of a sprint (a calmer period) and outside of vacation periods (to have as many experts available as possible). During the migration, there would be a code freeze on the repository, while the changes were made.</p><p>The day before, we had a moment of doubt and sweated a bit when a colleague raised a critical scenario: “Did you consider that if we change this URL here, then over there in the back on the right, it could make production disappear?”. They were right, but I told you above: the colleagues are talented. They found solutions and we didn’t need to postpone the planned migration date (we seriously considered it).</p><p>All signals are green, production is secured: so tomorrow morning, we migrate.</p><figure><img alt="A worried user hesitates to click between two buttons labeled ”Migrate” or “Lost Prod.”" src="https://cdn-images-1.medium.com/max/1024/1*n4WsgfOjSoO-CQLYeaCOYA.png" /></figure><p>During the migration, one of the main technical challenges was handling the change of organization name in our environment deployment chain. Part of the system relies on that name (notably via Docker images), and if we modify only a single link, we risk “making environments disappear” — including in production — which was part of the risks identified upstream. Thankfully, everything had been anticipated and it went as planned. We still had to adjust what was missing on the new target GitHub organization side (environment variables and the GitHub App), and continuous integration gradually returned to normal, without a hitch.</p><figure><img alt="A happy user clicks two buttons simultaneously, labeled ”Migrate” and ”Success.”" src="https://cdn-images-1.medium.com/max/1024/1*rsbJNqqgJvW5Wh54xLAfnQ.png" /></figure><p>The platform team and the principal engineer carried out the migration over half a day, as planned.</p><h3>How does GitHub handle the migration?</h3><p>The good news is that GitHub automatically handles the redirection to the new URL, as long as the old one isn’t reused for a new repository. In theory, there’s therefore almost nothing to change. Here are a few examples:</p><ul><li>A development environment doesn’t need to change the address of its remote (it seems appropriate to do it anyway).</li><li>The Jira ↔ GitHub integration updated the URL on its own.</li><li>Browser bookmarks still work.</li><li>All the repository’s history and current state are migrated.</li></ul><p>We ran into an issue with the indexing of past pull requests, so pull request search is broken. We opened a ticket with GitHub support, who handled this unexpected issue.</p><p>Everything related to the organization, however, will be lost in the repository: teams, secrets, GitHub Apps. All of that has to be recreated in the new target organization, or at the enterprise level, above.</p><h3>What we take away</h3><p>Some decisions were made for good reasons in the past, but as time goes by, knowledge grows and technologies evolve. As a result, decisions can be challenged — not for the sake of it, but to eliminate a point of friction. When a topic regularly comes back to the forefront as not being optimal, but we live with it, it might be the opportunity to question it with an overall, up-to-date perspective. The solution to the problem is sometimes not where we think it is, but perhaps two levels above. What matters is knowing what is really bothersome and what the ideal solution is, without setting technical constraints from the outset.</p><p>Zero risk doesn’t exist, but an analysis done with perspective and kindness can greatly reduce it. Having done this migration work in our team means that we can now start from a satisfying foundation to build our processes the way we want, without outdated technical constraints.</p><p>If you master the building blocks of your organization, don’t be afraid to challenge the status quo, without judgment, but with an open eye toward improvement and the future.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0630c7517626" width="1" height="1" alt=""><hr><p><a href="https://medium.com/openclassrooms-product-design-and-engineering/its-legacy-isn-t-an-end-in-itself-0630c7517626">“It’s Legacy” isn’t an end in itself</a> was originally published in <a href="https://medium.com/openclassrooms-product-design-and-engineering">Product, Experience &amp; Technology @ OpenClassrooms</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Writing an Article in the Age of AI — Part 2]]></title>
            <link>https://medium.com/openclassrooms-product-design-and-engineering/writing-an-article-in-the-age-of-ai-part-2-e8eacfdb8d0f?source=rss----d8de2fb3d85d---4</link>
            <guid isPermaLink="false">https://medium.com/p/e8eacfdb8d0f</guid>
            <category><![CDATA[education]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[article-writing]]></category>
            <dc:creator><![CDATA[Adrien Guéret]]></dc:creator>
            <pubDate>Wed, 25 Feb 2026 11:43:29 GMT</pubDate>
            <atom:updated>2026-02-25T11:46:37.243Z</atom:updated>
            <content:encoded><![CDATA[<h4>How to Go About It?</h4><p><em>This article is the direct continuation of </em><a href="https://medium.com/openclassrooms-product-design-and-engineering/writing-an-article-in-the-age-of-ai-part-1-61916a3cd90e"><strong><em>Writing an Article in the Age of AI — Part 1: Is It Really Useful?</em></strong></a><strong><em><br></em></strong><em>It is </em><strong><em>not</em></strong><em> necessary to have read the first part to read this article, but the reflection discussed there might interest you!</em></p><p>Congratulations! You’ve realized that you have experiences to share and you’ve motivated yourself to write an article. So you launch your favorite text editor and… panic sets in. The blank page. Your fingers refuse to move across the keyboard.</p><p>Wanting to write is the easy part! The hardest thing is to actually get started and begin writing.</p><p>If, as I often hear, you tell yourself “I don’t know how to write,” know that you’re far from alone. It’s not inevitable!</p><p>As we saw in <a href="https://medium.com/openclassrooms-product-design-and-engineering/writing-an-article-in-the-age-of-ai-part-1-61916a3cd90e">the previous article</a>, more than half of the content on the Internet today is <strong>not</strong> generated by humans. You might be thinking that you too could take advantage of new technologies, and in particular these two words: <strong>artificial intelligence</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*SCNZqfWKRqUsEophZZkoZg.png" /><figcaption>“You know, kid, these two words will solve all your problems.” (<strong><em>The Lion King</em></strong>, 1994)</figcaption></figure><p>It’s <strong>not necessarily</strong> a good idea.<br>Well… It depends on your approach. Let me explain.</p><h3>The Mistake to Avoid: Making AI Your Author Who You Commission an Article From</h3><p>The easiest thing would be to write a prompt to get your article in less time than it takes to say it. For example:</p><blockquote>Write an article, ready for publication, about the importance of writing our own articles in the age of artificial intelligence.</blockquote><p>As an anecdote, I used this prompt with Gemini and it generated t<a href="https://medium.com/@adriengueret/the-soul-in-the-machine-cc9fa9f926dd">his article</a>. Only read it if you’re curious about the result (it only takes two minutes), but know that I didn’t edit anything at all: it was written 100% by AI.<br>I don’t deny it has qualities: it gets straight to the point, reads quickly, and explains concepts well. But its style is very standardized, sometimes even a bit clunky.</p><p>In terms of content, it barely scratches the surface of the subject.<br>In terms of form, it’s as if you’ve already read it.<br>It has no personality. Nothing truly original. Nothing creative.</p><p>In short: <strong>an article written entirely by AI has no soul.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*0dsHAPdOqJxfLUvrCgHRCw.png" /><figcaption>It’s all well and good to use new technologies, but sometimes something’s missing… right? (<strong><em>The Lion King</em></strong>, 2019)</figcaption></figure><p>Some will say that it’s enough to ask the AI to apply a particular tone, or even to copy the style of another author for the less scrupulous… The results might be a bit better, but the tone will remain generally very “mechanical.”</p><p>My way of treating the subject “<strong>Writing an Article in the Age of AI</strong>” is much more “human” in its form: I try to capture your attention, I adopt a generally light tone to make your reading flow, I address <strong>you</strong> directly as an individual reader.<br>I placed images from <strong>The Lion King</strong> to illustrate my points because I wanted to touch your nostalgic chord. Even if we don’t know each other, I know that we have in common this popular culture that speaks to us, humans.</p><p>Yes, the risk is that it won’t please everyone. At this stage of the article, if you’re still reading, it’s because you like my tone, and that’s great! But it’s indeed possible that I’ve lost quite a few readers who found my style a bit heavy-handed… And that’s too bad! <em>(they’re missing out on a great article, so they’re the ones to feel sorry for, right?)</em></p><p>The advantage of AI’s sanitized tone is that it’s standardized to avoid raising eyebrows. It’s banal, but it’s neutral.<br>I deliberately chose an opposite tone to write this series of two articles.</p><p>For your own articles, there’s probably a happy medium to find.<br>And to do that, we’re going to use <strong>artificial intelligence</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*Bs3lmsvGUovHTiDk_fRySA.png" /><figcaption>“Hey, you said uh…” (<strong><em>The Lion King</em></strong>, 1994)</figcaption></figure><h3>The Right Approach: Making AI Your Advisor to Improve Your Article.</h3><p>Whatever the field, <strong>asking AI to do all the work for you is generally a bad idea</strong>.<br>On the other hand, using AI to improve your own work — now that becomes interesting!</p><p>Start by structuring your ideas. <strong>If you’re not comfortable with writing, there’s no need to write prose</strong>: even simple bullet points are enough! You’ll ask an AI to format all that.<br>Start a conversation with your favorite artificial intelligence and give it the context of your project. For example:</p><blockquote>I’m writing an article about {YOUR TOPIC}. Here are my ideas for the introduction: {YOUR IDEAS}.<br>Help me shape them into a smooth, reader-friendly introduction.</blockquote><p>It’s a somewhat basic prompt, which you can refine according to your preferences, but it already gives good results!<br><strong>That said, avoid simply copying and pasting the AI’s response.</strong> Rework it and constantly ask yourself the question: “Would I have said it like that?” Don’t hesitate to infuse your own tone and give personality (<strong>your</strong> personality!) to <strong>your</strong> article.<br>Never forget that: it’s <strong>your</strong> article. It should feel like it’s <strong>you</strong> talking to us, not a machine!</p><p>The best approach is to write as much as you can yourself and then ask the AI to improve what you’ve written. The most obvious is to detect mistakes: spelling or grammar errors are in trouble!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bUUTC4jSLufPU9s70H23Eg.png" /><figcaption>Your future teamwork with AI, an allegory. (<strong><em>The Lion King</em></strong>, 1994)</figcaption></figure><p>To go further, you can ask the AI to review the structure of a sentence to make the reading more natural.<br>Actually, that’s exactly what I just did for that last sentence!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/988/1*K60S2858iYuROVKAY293pQ.jpeg" /></figure><p>Moreover, I <strong>didn’t</strong> take one of these suggestions as is: I rather made a mix between my original sentence and the different proposals. Don’t forget the essential: <strong>always make the AI’s response your own!</strong></p><p>Artificial intelligences are also pretty good at translating text. If you want to extend the reach of your article, making a version in another language can greatly help!<br>The article you’re currently reading is actually an AI translation of <a href="https://medium.com/openclassrooms-produit-design-et-ing%C3%A9nierie/ecrire-un-article-a-l-ere-de-l-ia-partie-2-bc14e0b193ee">this original french article</a>. Pretty good, right?</p><h3>So… What Are You Waiting For?</h3><p>Whether it’s a child learning from their parents, a student guided by a teacher, or an apprentice trained by their peers, education is an integral part of our evolution. Human beings have always grown by sharing <strong>their</strong> knowledge and <strong>their</strong> experiences.</p><p>But — I’m repeating myself a bit but it’s important to remember — more than half of the content on the Internet today is generated by machines…</p><p>Isn’t that a bit worrying?<br>Are we ready to entrust new technologies with the generation of our knowledge?</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*QBgVDi-1E_ar3ULDdZIwtw.png" /><figcaption>What legacy will we leave to future generations? (<strong><em>The Lion King</em></strong>, 1994)</figcaption></figure><p>It might be smarter to use these technologies to share even more. <a href="https://medium.com/openclassrooms-product-design-and-engineering/writing-an-article-in-the-age-of-ai-part-1-61916a3cd90e">You have plenty of things to tell</a>, and you now have the best tools to help you do it… so go ahead!</p><p>You just need to use artificial intelligence… <strong>intelligently</strong>.</p><p>And you’re capable of that, aren’t you?</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e8eacfdb8d0f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/openclassrooms-product-design-and-engineering/writing-an-article-in-the-age-of-ai-part-2-e8eacfdb8d0f">Writing an Article in the Age of AI — Part 2</a> was originally published in <a href="https://medium.com/openclassrooms-product-design-and-engineering">Product, Experience &amp; Technology @ OpenClassrooms</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Writing an Article in the Age of AI — Part 1]]></title>
            <link>https://medium.com/openclassrooms-product-design-and-engineering/writing-an-article-in-the-age-of-ai-part-1-61916a3cd90e?source=rss----d8de2fb3d85d---4</link>
            <guid isPermaLink="false">https://medium.com/p/61916a3cd90e</guid>
            <category><![CDATA[motivation]]></category>
            <category><![CDATA[article-writing]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Adrien Guéret]]></dc:creator>
            <pubDate>Wed, 25 Feb 2026 11:42:16 GMT</pubDate>
            <atom:updated>2026-02-25T11:44:57.000Z</atom:updated>
            <content:encoded><![CDATA[<h3>Writing an Article in the Age of AI — Part 1</h3><h4>Is It Really Worth It?</h4><p>Of course! Here’s a structured, impactful article proposal, optimized for smooth reading. It adopts an analytical yet engaging tone, ideal for a professional blog, LinkedIn, or a specialized newsletter.</p><p>If you’re a human like me, congratulations: according to a 2025 study, you’re part of <a href="https://cyberpress.org/ai-driven-bad-bots-now-make-up/">less than half of Internet traffic</a>.</p><p>But more importantly, I imagine you’re rolling your eyes thinking something along the lines of:</p><blockquote>What an idiot this author is, he just copy-pasted ChatGPT’s answer without even reading it.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*QYmYwLLmqS3svAL-w_HqcQ.png" /><figcaption>“I’m surrounded by idiots.” (<strong><em>The Lion King</em></strong>, 1994)</figcaption></figure><p>Well, first of all, know that it’s not very nice to call me an idiot, but more importantly, you’re wrong! This article is indeed written by hand, by a real human, with flaws and a personal writing style. The opening line was just a joke — I’ll leave you to judge its effectiveness.<br><em>(To be 100% transparent: this article was originally written by hand in french, </em><a href="https://medium.com/openclassrooms-produit-design-et-ing%C3%A9nierie/ecrire-un-article-a-l-ere-de-l-ia-partie-1-ca87ef668ef4"><em>you can find it here</em></a><em>, but has been translated in english with artificial intelligence.)</em></p><p>Let’s come back to that stat from earlier: <strong>more than half of Internet traffic is now caused by bots</strong>: AIs, automated scripts… in short, by <em>things</em> that aren’t really human.</p><p>This figure also applies to AI-generated content: <strong>our machines now create more content than we do</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*JL494tYlSySZDNAL2cuXQQ.png" /><figcaption>AI-generated content has now surpassed that created by humans (<a href="https://graphite.io/five-percent/more-articles-are-now-created-by-ai-than-humans">Graphie.io</a>)</figcaption></figure><p>So the question we need to ask ourselves today: what’s in it for me, as a human, to write an article?</p><h3>What’s the Point of Writing an Article?</h3><p>It’s very common to believe that writing an article is just about <strong>transmitting knowledge</strong>. While that is indeed one of the goals, fortunately it’s not the only one!</p><p><strong>Writing an article is above all about organizing your own knowledge.</strong></p><blockquote>What is clearly conceived is clearly stated, and the words to say it flow with ease.<br>_ Nicolas Boileau</blockquote><p>If you decide to write an article on a technical subject (for example, <a href="https://medium.com/openclassrooms-product-design-and-engineering/leveraging-openapi-part-1-creating-and-maintaining-your-api-documentation-3f4b4535634a">maintaining an API via OpenAPI)</a>, you’ll need to do a quick introspection of your own knowledge to make sure you don’t talk nonsense.</p><p>You’ll analyze what you know, you’ll research your topic, you’ll try to simplify your knowledge to explain it and write it down in black and white (or white on black if you prefer <em>dark mode</em>).</p><p><strong>In short, not only will you transmit your knowledge, but you’ll also consolidate it.</strong></p><p>If you ask an AI to write everything for you, this step will be completely lost, drastically reducing the value of the article for you.</p><p>Of course, don’t put words in my mouth: <strong>an article must also be valuable to the reader</strong>, it doesn’t all revolve exclusively around you!</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*qa1Dw9m9fLW1mwVlmMZaiA.png" /><figcaption>Unfortunately, you’re not (yet) the king. (<strong><em>The Lion King</em></strong>, 1994)</figcaption></figure><p>If your goal is to be read, you’ll need to find a topic that can interest readers (and by “readers,” I mean “humans,” which seems important to specify nowadays…).</p><h3>But I Have Nothing to Say! All Topics Have Already Been Covered!</h3><p>You’re both right and wrong!</p><p>You’re right, because indeed all topics have been covered. Especially with AIs generating hundreds of articles per minute that all look the same.</p><p>And you’re wrong, because you do have things to say! Lots of them! And there is at least one topic an AI can never take from you: <strong>your experience</strong>.</p><p>If today <strong>explaining how to do something specific</strong> is no longer really useful, <strong>sharing your experience</strong> <strong>on various subjects has much more value</strong>.</p><p>AIs can write articles explaining complex concepts on the fly, sure, but <strong>they can never share their own feelings as well as we can.</strong> What’s more human than expressing your feelings about a lived experience?</p><p>This is what will set your articles apart from all those generated by AI. <strong>Your authenticity is now your added value</strong>.</p><p>And the best part: since it’s <strong>your</strong> experience, it will necessarily be <strong>unique</strong>. No one else could have written an article on this subject!</p><p>Have you implemented <em>Clean Architecture</em> in your company? Have you migrated a 15-year-old project to <em>Next.js</em>? Have you trained for a marathon even though you’re not an athlete? Have you taken on the challenge of giving up meat entirely?</p><p>No matter the subject: you’re probably not the only one in the world to have done it, but <strong>your experience, the challenges you encountered, and the lessons you learned from it are unique</strong>. And that might interest other people!</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*QT10OTkIRXEizo3HdUWhIg.png" /><figcaption>“The past can hurt, but the way I see it, you can either run from it or learn from it.” (<strong><em>The Lion King</em></strong>, 1994)</figcaption></figure><p>In short: <strong>you have things to say.</strong> So don’t hesitate, and do it!</p><h3>OK fine, but I don’t like writing. I don’t have a “style,” I don’t know how to write an article properly.</h3><p>Sometimes due to lack of time, often due to undervaluing their own writing skills, people who have experiences to share are very often those who don’t take the time to write them down.</p><p>If you’re in this situation and this article has motivated you despite everything to write your own, I invite you to check out its sequel: <a href="https://medium.com/openclassrooms-product-design-and-engineering/writing-an-article-in-the-age-of-ai-part-2-e8eacfdb8d0f"><strong>Writing an Article in the Age of AI — Part 2: How to Go About It?</strong></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=61916a3cd90e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/openclassrooms-product-design-and-engineering/writing-an-article-in-the-age-of-ai-part-1-61916a3cd90e">Writing an Article in the Age of AI — Part 1</a> was originally published in <a href="https://medium.com/openclassrooms-product-design-and-engineering">Product, Experience &amp; Technology @ OpenClassrooms</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to inspire the next generation of girls in tech and science]]></title>
            <link>https://medium.com/openclassrooms-product-design-and-engineering/how-to-inspire-the-next-generation-of-girls-in-tech-and-science-a1dbcefed34b?source=rss----d8de2fb3d85d---4</link>
            <guid isPermaLink="false">https://medium.com/p/a1dbcefed34b</guid>
            <category><![CDATA[women-in-tech]]></category>
            <category><![CDATA[science]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[computer-science]]></category>
            <dc:creator><![CDATA[Justine Adam]]></dc:creator>
            <pubDate>Tue, 17 Feb 2026 11:01:01 GMT</pubDate>
            <atom:updated>2026-02-17T11:01:01.699Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*w680S2KU_UTDJ3vM" /><figcaption>Photo by <a href="https://unsplash.com/@napzphoto?utm_source=medium&amp;utm_medium=referral">Patrick Amoy</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Technology is everywhere in our daily lives. It shapes how we learn, work, communicate, and imagine the future.<br>Yet, for this future to truly reflect our society, it must be built by <strong>all talents</strong>, without exception.</p><p>As an <strong>Engineering Manager</strong> at <a href="https://openclassrooms.com/">OpenClassrooms</a>, a <strong>mentor</strong> for the <a href="https://ellestime6.wixsite.com/mon-site">ElleStime</a> collective, and <strong>mom</strong> of a teenage girl, this topic matters to me both personally and professionally. It is a major issue of equality and diversity for our industry.</p><h3>Why this topic is personal to me</h3><p>To begin with, I am a woman working in Tech. But this also takes me straight back to my time studying computer science at a technical institute. Back then, there were only a handful of women (literally!) in a class of around a hundred students.</p><p>We hoped our presence would help open the door wide for the next generation, and the women who came before us were hoping for the same thing.</p><p>And yet, as an Engineering Manager <strong>today</strong>, I still see middle school girls, including my own child, struggling with doubts about whether they truly belong.</p><p>This is one of the reasons why my involvement with ElleStime is so future-oriented.<br>We cannot settle for the status quo, especially when digital technology shapes every aspect of our society.</p><h3>From 2010 to today: Understanding the past to shape the future</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*98YbBFfXuHv3UsjZ" /><figcaption>Photo by <a href="https://unsplash.com/@soymeraki?utm_source=medium&amp;utm_medium=referral">Javier Allegue Barros</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Looking back often helps us understand where and when things started to go wrong. Comparing today’s data in France with that of the 2005–2010 period highlights several turning points.</p><h4>High School: A new challenge with early specialization</h4><p><strong>Around 2010</strong><br>The proportion of girls in the scientific track (Terminale S) was steadily increasing, reaching around <strong>45%</strong>. Access to science education was more general, and orientation choices left more doors open.</p><p><strong>Today<br></strong>With the introduction of specialized tracks, particularly NSI (Digital and Computer Science, only <strong>15.2%</strong> of students are girls), students must choose their path earlier. This early specialization often leads <strong>young girls to self-select out of science</strong>, even before they’ve had the chance to fully discover their interests.<br>Early choices act as a filter, sometimes unconsciously discouraging talented girls from pursuing scientific paths.</p><p><em>Source: DEPP — French Ministry of Education</em></p><h4>The Mathematics pathway: A key area to watch</h4><p><strong>Around 2010</strong><br>More than <strong>85%</strong> of students studied mathematics until the baccalaureate.</p><p><strong>Today</strong><br>Around <strong>42% of girls</strong> choose not to continue studying mathematics between 11th and 12th grade.<br>This is a strong warning sign, as mathematics remains a major gateway to scientific and technical careers.</p><p><em>Source: “Femmes et Mathématiques” collective / </em><a href="https://smf.emath.fr/node/3575594"><em>Maths &amp; Sciences collective</em></a></p><h4>Higher Education: Stability that needs transformation</h4><p><strong>Around 2010</strong><br>Women represented about <strong>28%</strong> of students in engineering schools.</p><p><strong>Today</strong><br>The figure has risen to <strong>35%</strong> across all STEM fields, a real but fragile improvement.<br>In “pure” computer science, however, female representation remains particularly low, at around <strong>19%</strong>.</p><p><em>Source: </em><a href="https://unesdoc.unesco.org/ark:/48223/pf0000375429"><em>UNESCO</em></a><em> / CDEFI</em></p><h4>The Professional World: A Talent Pool to Unlock</h4><p><strong>Around 2010</strong><br>Women made up around <strong>20%</strong> of the digital sector.</p><p><strong>Today</strong><br>While some roles are becoming more gender-balanced, strictly technical positions still stagnate at around <strong>18%</strong>.<br>The potential is enormous: attracting more female talent to the core of tech means enriching the entire value chain.</p><p><em>Source: INSEE / </em><a href="https://www.femmes-numerique.fr/"><em>Observatoire Femmes@Numérique</em></a></p><h3>Why do teenage girls self-censor?</h3><p>What I observe in real life is that the main barrier is not a lack of skills, but rather <strong>social and cultural obstacles</strong>:</p><ul><li><strong>Lack of confidence and legitimacy</strong><br>“I’m not good enough at maths.”</li><li><strong>Persistent stereotypes</strong><br>The idea that “tech is for boys” settles in long before orientation choices are made.</li><li><strong>Fear of making mistakes</strong><br>Many girls hesitate to ask questions, afraid of appearing incompetent.</li></ul><p>And yet, the curiosity, creativity, and teamwork skills required in our professions are already there.</p><h3>The ElleStime experience: creating the spark</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*rSN0HggRFt2-ueHw" /><figcaption>Photo by <a href="https://unsplash.com/@cristian1?utm_source=medium&amp;utm_medium=referral">Cristian Escobar</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>This is where initiatives like <strong>ElleStime</strong> come in.</p><p>This collective takes very concrete action by organizing one-hour sessions between teenage girls and women mentors from scientific and technical fields.</p><p>The goal is not to create an immediate vocation.<br>The goal is to <strong>make these career paths visible</strong>.</p><p>Because you cannot project yourself into what you cannot see.</p><p>When a student meets an engineer, a developer, a data scientist, and thinks:</p><blockquote><em>“Oh… she looks like me. And she made it.”</em></blockquote><p>Something opens up.</p><h3>What really makes the difference</h3><p>To truly change the game, we need to shift the way we talk about these careers:</p><ul><li><strong>Value effort over “talent”</strong><br>Success comes from work and perseverance, not from an innate gift.</li><li><strong>Normalize the right to make mistakes</strong><br>Errors are part of the scientific process and of software development.</li><li><strong>Increase representation</strong><br>The more female faces we see, the more welcoming tech will feel.</li><li><strong>Connect tech to real-world impact</strong><br>Let’s show that technology is a powerful tool for solving societal challenges.</li></ul><h3>What can we do, concretely?</h3><h4>As Individuals</h4><ul><li><strong>Talk about your job</strong><br>Explain what you do in simple terms, without jargon: this is important to make your profession accessible.</li><li><strong>Encourage curiosity</strong><br>Support interest in science, even (and especially) outside of school.</li><li><strong>Question your own biases</strong><br>Stereotypes are often subtle, and unconscious.</li></ul><h4>Collectively</h4><ul><li><strong>Become a mentor</strong><br> Visit schools, share your journey.</li><li><strong>Support initiatives</strong><br> Engage your companies and networks with collectives like ElleStime.</li></ul><h3>Creating opportunities, not barriers</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*LbqUeSgVCHy8dSKB" /><figcaption>Photo by <a href="https://unsplash.com/@teacheryy?utm_source=medium&amp;utm_medium=referral">YY TEOH</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p><strong>Words</strong> matter.<br><strong>Role models</strong> matter.<br><strong>Opportunities</strong> matter.</p><p>As parents, educators, and tech professionals, we have both the power and the responsibility to open doors.</p><p>Let’s not allow an entire generation of talent to miss out on Tech and Science simply because of a lack of confidence.<br>Let’s work together so that tomorrow, no young girl ever says:</p><blockquote><strong><em>“I’m not good enough for that.”</em></strong></blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a1dbcefed34b" width="1" height="1" alt=""><hr><p><a href="https://medium.com/openclassrooms-product-design-and-engineering/how-to-inspire-the-next-generation-of-girls-in-tech-and-science-a1dbcefed34b">How to inspire the next generation of girls in tech and science</a> was originally published in <a href="https://medium.com/openclassrooms-product-design-and-engineering">Product, Experience &amp; Technology @ OpenClassrooms</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Entering the Age of Artificial Intelligence]]></title>
            <link>https://medium.com/openclassrooms-product-design-and-engineering/entering-the-age-of-artificial-intelligence-6e245695b7bc?source=rss----d8de2fb3d85d---4</link>
            <guid isPermaLink="false">https://medium.com/p/6e245695b7bc</guid>
            <category><![CDATA[product]]></category>
            <category><![CDATA[strategy]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[engineering]]></category>
            <dc:creator><![CDATA[Oualid Abderrazek]]></dc:creator>
            <pubDate>Tue, 13 May 2025 13:38:12 GMT</pubDate>
            <atom:updated>2025-05-13T13:38:12.516Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>OpenClassrooms’ “AI First” Approach</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*rzkI6JcRb_pTkhmm" /></figure><p><a href="mailto:oualid.abderrazek@openclassrooms.com"><em>Oualid Abderrazek</em></a><em> — Chief Product &amp; Technology Officer</em></p><p><strong>Abstract</strong></p><p>Just as the “Mobile First” paradigm revolutionized product design and development by prioritizing the mobile experience, OpenClassrooms now stands at the cusp of a new era. Recognizing the transformative power of artificial intelligence in a rapidly evolving technological landscape, we are embracing an “AI First” approach to redefine online education, grounded in a strong ethical framework.</p><p><strong>The Foundational Shift: From Mobile First to AI First</strong></p><p>A little over a decade ago, the proliferation of smartphones and the surge in mobile internet usage gave rise to the “Mobile First” philosophy. This approach marked a significant departure from the earlier desktop-centric design, where mobile was often an afterthought. “Mobile First” compelled designers and developers to prioritize the mobile experience, acknowledging it as the primary mode of internet interaction for a growing number of users. This fundamental shift spurred several key developments:</p><ul><li><strong>Responsive Design as a Standard:</strong> Websites and applications learned to adapt fluidly to various screen sizes and orientations, ensuring seamless accessibility across devices.</li><li><strong>Touch-Centric Interaction Models:</strong> User interfaces were meticulously crafted for touch input, replacing the traditional reliance on mouse clicks and enhancing mobile engagement.</li><li><strong>Performance Optimization for Resource-Constrained Environments:</strong> Recognizing the limitations of mobile processing power and bandwidth, performance became paramount, leading to the development of efficient code and optimized content delivery.</li><li><strong>Content Distillation and Prioritization:</strong> The smaller screen real estate of mobile devices necessitated a focus on delivering concise and essential information, leading to more impactful user experiences.</li></ul><p>The “Mobile First” approach yielded significant benefits, including improved user satisfaction and engagement on mobile platforms, enhanced accessibility for individuals whose primary internet access was through mobile devices (bridging the digital divide), the emergence of new design patterns and UI/UX best practices tailored for mobile, and a substantial shift in development priorities with increased investment in mobile app ecosystems.</p><p><strong>The Dawn of “AI First”: A Cognitive Transformation</strong></p><p>Today, the technological landscape is once again undergoing a profound transformation, this time driven by the exponential growth and increasing sophistication of artificial intelligence. OpenClassrooms recognizes this pivotal moment and is strategically shifting towards an “AI First” approach. This is not simply about integrating AI as a feature; it represents a fundamental reimagining of how we design, develop, and deliver education, placing intelligent systems at the core of our strategy. This transition is fueled by several converging factors:</p><ul><li><strong>The Data Deluge and Algorithmic Advancement:</strong> The unprecedented volume of data generated daily, coupled with significant breakthroughs in machine learning, deep learning, and natural language processing, now allows AI to extract meaningful insights and automate complex tasks with increasing accuracy and efficiency.</li><li><strong>The Democratization of Computational Power:</strong> The accessibility of powerful cloud computing resources and advancements in hardware have made it feasible to train and deploy sophisticated AI models at scale, democratizing access to advanced AI capabilities.</li><li><strong>The Rise of Personalized User Expectations:</strong> In an increasingly digital world, users have grown accustomed to personalized experiences and intelligent assistance across various platforms, creating a natural demand for AI-powered features in all aspects of their digital interactions, including education.</li><li><strong>The Strategic Imperative for Competitive Advantage:</strong> Businesses across industries are recognizing the immense potential of AI to drive efficiency, foster innovation, and gain a crucial competitive edge. For OpenClassrooms, embracing “AI First” is not just an option but a strategic imperative to remain at the forefront of online education.</li></ul><p><strong>Key Differences and Synergies: Navigating the New Paradigm</strong></p><p>To better understand this transition, it’s crucial to highlight the key differences and underlying synergies between “Mobile First” and “AI First”:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZCgw69_JYM8bIcna4pq8Og.png" /></figure><p>Despite their differences in primary focus and driving forces, both “Mobile First” and “AI First” share fundamental similarities:</p><ul><li><strong>User-Centricity as a Guiding Principle:</strong> Both approaches place a strong emphasis on understanding and meeting the evolving needs of the user as the cornerstone of successful product and service development.</li><li><strong>Strategic Transformation as a Catalyst for Growth:</strong> Both represent a fundamental shift in how organizations design, deliver, and experience their offerings, driving innovation and creating new avenues for growth.</li><li><strong>Disruptive Potential to Reshape Industries:</strong> Both mobile technology and artificial intelligence possess the power to fundamentally alter industries and reshape user behaviors on a massive scale.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BHWel4utzcpiu9lSJQ66Fg.png" /></figure><p>In essence, “Mobile First” was about optimizing for a specific device and the user experience within that context. “AI First,” however, transcends device-specific considerations. It’s about optimizing for intelligence, leveraging AI to enhance every facet of the user experience and streamline business operations, regardless of the device or touchpoint. This represents a broader, more pervasive, and ultimately more transformative strategic shift. Artificial intelligence is rapidly becoming an indispensable element across our organization, influencing product management, development, marketing, and operations. Embracing this technology is not merely about accelerating existing processes; it’s about unlocking new avenues for innovation and establishing a distinct competitive advantage.</p><p><strong>Why “AI First” for OpenClassrooms?</strong></p><ul><li><strong>Hyper-Personalization:</strong> At its core, “AI First” allows us to move beyond simple accessibility and digitalization towards true personalization of learning experiences. Imagine a learning journey tailored to each individual’s unique needs, pace, and learning style. AI has the remarkable ability to learn from user behavior in real-time and dynamically adapt content, flow, and even pedagogical approaches to create truly individualized experiences. This places the learner at the very center of every scenario, feature, and interaction, something that cannot be achieved without the adaptive intelligence of AI.</li><li><strong>Accelerated Innovation:</strong> AI empowers us to optimize our development and delivery cycles significantly. By integrating intelligent systems into discovery, competitive analysis, and market research, we can gain insights with unprecedented speed and accuracy. This enables us to define effective solutions and respond to evolving needs with greater agility and reactivity.</li><li><strong>Differentiated Experiences:</strong> AI fuels our capacity to develop solutions that not only address current needs but also proactively anticipate future user expectations. From sophisticated predictive models to intelligent automation, AI offers a wealth of opportunities to craft unique and deeply personalized educational experiences that set OpenClassrooms apart.</li><li><strong>Operational Excellence:</strong> In crucial areas such as implementation, delivery, and daily operations, AI algorithms can streamline workflows, identify and reduce inefficiencies, and ultimately free up valuable time and resources that can be reinvested in innovation and enhancing the learner experience.</li></ul><p>The time for deliberation is over. The integration of AI is not a future aspiration but a present reality. At OpenClassrooms, we are already leveraging its power in areas like auto-orientation, CV and cover letter generation, learner-mentor matching, adaptive learning sessions, our AI Companion, and student support, as well as within our learning program design and materials. The future we envision is rapidly becoming our present reality.</p><p><strong>Ethics of AI at OpenClassrooms</strong></p><p>Our journey into the age of AI is marked by rapid advancements, demanding that OpenClassrooms not only keeps pace but proactively explores and tests emerging trends. This exploration, however, must be firmly rooted in fundamental ethical principles. We recognize the significant ethical considerations that accompany the development and deployment of AI:</p><ul><li><strong>Algorithmic Discrimination:</strong> AI algorithms can inadvertently perpetuate and even amplify existing societal biases present in their training data, leading to unfair or discriminatory outcomes.</li><li><strong>Lack of Transparency:</strong> The intricate nature of many AI learning models and the datasets they utilize often lack transparency, making it difficult to understand how decisions are made.</li><li><strong>Data Privacy:</strong> The potential for fraudulent use of personal data integrated into AI databases without proper consent or adherence to data subject rights is a critical concern.</li><li><strong>Violation of Copyright:</strong> AI training can inadvertently utilize content protected by intellectual property without the necessary permissions, leading to copyright and trademark infringements.</li><li><strong>Job Transformation:</strong> The automation capabilities of AI may lead to a mismatch between the existing workforce’s skills and the evolving demands of the job market.</li><li><strong>Excessive Surveillance:</strong> AI can be employed for intrusive monitoring of individuals, raising serious concerns about privacy violations.</li><li><strong>Increasing Environmental Impact:</strong> The computational demands of training and running complex AI models contribute to a growing environmental footprint, the full extent of which can be challenging to predict and control.</li></ul><p>OpenClassrooms is steadfast in its commitment to the ethical use of AI. We are dedicated to ensuring that our algorithms strive for <strong>transparency</strong>, aiming for explainability and understandability in their operations. <strong>Responsibility</strong> is paramount; all the teams within OpenClassrooms are accountable for their actions and the outcomes of the AI systems we create and utilize. We are equally committed to <strong>equity</strong>, ensuring that AI is applied fairly and without discrimination, promoting <strong>AI for Good</strong> — the use of artificial intelligence for positive and ethical purposes, including fostering inclusion. Furthermore, we recognize the importance of <strong>environmental consciousness</strong> in our adoption of AI, striving for frugality and efficiency in its deployment.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/0*odftmtTbzzIsONWI" /></figure><p>To navigate these ethical considerations effectively, we are constantly monitoring and considering:</p><ul><li><strong>Legal Compliance and Data Privacy:</strong> Rigorously adhering to regulations like the AI Act (with its risk-based approach) and GDPR principles, ensuring the lawful and privacy-respecting use of AI. This includes carefully reviewing partner terms, offering opt-outs for internal data training, and updating our own terms and contracts to reflect AI usage and protect user information and intellectual property.</li><li><strong>Transparency and User Rights:</strong> Providing clear information to users when AI is employed, especially in high-risk applications. This includes explaining the logic behind automated decisions, ensuring the ability for users to challenge these decisions and request human interactions, and facilitating the exercise of data subject rights.</li><li><strong>Fairness and Mitigation of Bias:</strong> Actively working to identify and mitigate biases in AI algorithms and training data. This involves incorporating diverse perspectives in AI development and rigorously testing for discriminatory outcomes, particularly in sensitive areas like education access and career services. We also recognize the potential of AI to <em>promote</em> inclusion by personalizing learning and supporting students with diverse needs.</li><li><strong>Education and Awareness:</strong> Empowering our students with the knowledge to understand the ethical implications of AI, encouraging critical thinking about its development and use, and preparing them for a future where ethical considerations in AI are paramount.</li><li><strong>Responsible Innovation and Environmental Awareness:</strong> Encouraging a mindful approach to AI adoption, prioritizing frugality and efficiency in its application, and considering the broader impact of our technological choices on human progress and the environment.</li></ul><p><strong>Towards a Responsible “AI First” Culture at OpenClassrooms</strong></p><p>Building an “AI First” culture at OpenClassrooms, therefore, is not solely about technological adoption; it is intrinsically linked to fostering a deep understanding and commitment to the ethical principles outlined above. This means:</p><ul><li><strong>Continuous Learning and Ethical Skill Development:</strong> Empowering our teams with AI fluency <em>and</em> a strong ethical compass through ongoing training, workshops, and knowledge-sharing initiatives that emphasize responsible AI development and deployment.</li><li><strong>Experimentation, Iteration, and Ethical Prototyping:</strong> Fostering a culture that encourages innovation in AI while embedding ethical considerations into every stage of the development process, from initial ideation to rapid prototyping and testing for potential biases and unintended consequences.</li><li><strong>Data-Driven and Ethically Informed Decision-Making Across All Departments:</strong> Embedding data analytics and AI-driven insights into our processes while simultaneously establishing clear ethical guidelines and review mechanisms to ensure responsible and fair application.</li><li><strong>Adopting a Future-Oriented and Ethically Conscious Mindset:</strong> Proactively exploring and integrating emerging AI technologies with a critical eye towards their ethical implications and potential impact on individuals and society. We must strive to be at the forefront of innovation while remaining deeply committed to building AI systems that are transparent, responsible, equitable, and environmentally conscious.</li></ul><p>As we embark on this transformative journey, our commitment to an “AI First” strategy, guided by a strong ethical framework, will undoubtedly propel OpenClassrooms to new heights. This evolution will not only solidify our position as a leader in the online education landscape but also ensure that we create significant added value for our community of students and professionals in a manner that is both innovative and responsible.</p><p><strong>Conclusion: Shaping the Future of Education Ethically, Intelligently, and Sustainably</strong></p><p>The transition to an “AI First” strategy at OpenClassrooms is more than just a technological imperative; it is a strategic opportunity to redefine the future of education with intelligence, integrity, and a deep sense of responsibility. In a world where AI is rapidly transforming every aspect of our lives, OpenClassrooms is committed to a holistic and ambitious approach, infusing AI into the core of our product to deliver unique, deeply personalized, and adaptive learning experiences for every student and employer, all while adhering to the highest ethical standards. By embracing AI-driven innovation with a strong ethical foundation, OpenClassrooms can empower students, enhance accessibility, promote fairness, and solidify its position as a leader in the global education landscape, shaping a future where technology serves humanity in a responsible and sustainable manner.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6e245695b7bc" width="1" height="1" alt=""><hr><p><a href="https://medium.com/openclassrooms-product-design-and-engineering/entering-the-age-of-artificial-intelligence-6e245695b7bc">Entering the Age of Artificial Intelligence</a> was originally published in <a href="https://medium.com/openclassrooms-product-design-and-engineering">Product, Experience &amp; Technology @ OpenClassrooms</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How we deepfaked our CEO and received praise for it]]></title>
            <link>https://medium.com/openclassrooms-product-design-and-engineering/how-we-deepfaked-our-ceo-and-received-praise-for-it-0df617a60eba?source=rss----d8de2fb3d85d---4</link>
            <guid isPermaLink="false">https://medium.com/p/0df617a60eba</guid>
            <category><![CDATA[edtech]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[deepfakes]]></category>
            <category><![CDATA[security]]></category>
            <dc:creator><![CDATA[CyberSec Team @OC]]></dc:creator>
            <pubDate>Wed, 12 Mar 2025 09:07:44 GMT</pubDate>
            <atom:updated>2025-03-12T09:07:44.499Z</atom:updated>
            <content:encoded><![CDATA[<p>Artificial intelligence is now becoming omnipresent, especially within our professional environments. Generative AI offers diverse applications, including content creation, video production, and audio synthesis. However, alongside the increased accessibility of these tools comes an elevated risk for businesses. Attackers too have access to these same technologies, making certain types of attacks, which were previously improbable due to their complexity, now more accessible and easier to execute. Examples include deepfakes, vishing, and automated, contextually tailored attacks. It is imperative for companies to protect themselves against these emerging threats. Consequently, it is essential for security teams to address these issues clearly and effectively, ensuring that the right messages are communicated and understood throughout the organization.</p><p>The purpose of this article is to share the initiative we have led in OpenClassrooms with security professionals.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hGyNkYSUzXrDFBZpu1P2Hw.png" /></figure><h3>Having a favorable context</h3><p>2024 was the year of AI for most companies. At OpenClassrooms, we were working on integrating AI into our Product and Internal practices. As part of our activities, course creation involved the use of AI to streamline content creation, from writing to video and audio.</p><p>We explored a huge number of AI tools to help us in content creation. From a security perspective, our objectives were twofold: make sure we are using secure and securely configured AI tools, but also make sure we are using AI in an ethical and secure manner.</p><p>But what about a malicious threat actor using the same tools to perform an attack on the company? How easily can it be done?</p><p>With 90% of OpenClassrooms’ workforce working on AI-related topics, it was clear that we had to show how AI impacted Security threats. And what better way to illustrate that than by performing a fake AI-generated attack?</p><h3>A full AI-generated attack</h3><p>For this exercise we wanted to have the attack fully AI-generated. Few constraints we have defined, however:</p><ul><li>Phishing attack, targeting all OpenClassrooms’ employees. Indeed, like most of the Security team, we are performing regular fake phishing campaigns, and we wanted to “spice things up”</li><li>Embed a convincing AI-generated video in the fake phishing email</li><li>Use only publicly available information, to simulate a targeted external attack with no insider information</li></ul><p>After brainstorming, the project was shaping: impersonate our CEO, as his digital footprint is large enough &amp; we are frequently targeted by phishing attempts impersonating him.</p><p>And before doing anything, we asked for our CEO’s consent. It sounds dumb but without his permission, we would not have done the project. In addition it was a good way to involve him and raise awareness among the C-Team.</p><p>We followed the steps we believe an attacker could follow:</p><p><strong>RECONNAISSANCE</strong></p><ol><li>Using Google with “OpenClassrooms”, we can easily find our co-founder and CEO.</li><li>On <a href="https://jobs.openclassrooms.com">https://jobs.openclassrooms.com</a> we can find that OpenClassrooms provides Swile cards to employees. In addition we can find the company’s values (for ex. CARE)</li></ol><p><strong>GATHER PUBLIC MATERIALS FROM OUR CEO</strong></p><ol><li>Find our CEO on YouTube.</li><li>Download CEO’s YouTube videos.</li><li>Download text transcripts of CEO’s videos from YouTube.</li></ol><p><strong>GENERATE THE ATTACK VIDEO</strong></p><ol><li>Train AI voice model using audio from videos.</li><li>Train AI video avatar model from video.</li><li>Use AI LLM (GPT) to write attack script.</li><li>Give transcripts to AI LLM to mimic CEO’s style.</li><li>Use AI voice model to make “fake CEO” read the script and get an audio file.</li><li>Use AI video avatar model to create a “fake CEO” video lip-synced to the audio file.</li></ol><p><strong>HOST THE VIDEO ON YOUTUBE</strong></p><ol><li>Create a new Google account for free, impersonating OpenClassrooms</li><li>Upload video using this account</li></ol><p><strong>LAUNCH THE ATTACK</strong></p><ol><li>Create a phishing email &amp; landing page suited to the theme.</li><li>Include “fake CEO”’s video in the email.</li><li>… wait for the alerts to Security team 💪 or the clicks 😱</li></ol><p>We only used legitimate and internal tools that have some safeguards, especially HeyGen (video avatar) and ElevenLabs (voice model), that attackers couldn’t have used as easily as us. For ex., to create an avatar in HeyGen, the “victim” needs to say a randomly generated sentence while looking at the camera.</p><p>However we believe that attackers have their own tools, just as convincing, without safeguards.</p><p>As OpenClassrooms’ security team, we were quite happy with the results</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/799/1*lRPsmD1FpztMCWzX3X_S5w.png" /><figcaption>Fake phishing email, with the deepfake embedded</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/843/1*czLONUUev9w31Y0rG-Xyeg.png" /><figcaption>Fake landing page</figcaption></figure><h3>Coupling with a digital footprint masterclass</h3><p>In addition to AI, this attack is also based on publicly available information about OpenClassrooms, our C-Levels and all employees.</p><p>Therefore we wanted not only to raise awareness about AI, Deepfakes and so on, but also about what remains in everyone’s control: our Digital Footprint</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UmfzvBaPea4uUKt06vE6yQ.png" /><figcaption>Breaking down someone’s digital footprints</figcaption></figure><p>We completed the fake phishing campaign with a Digital footprint masterclass, where we demonstrated that, with publicly available information and some attacking methods, an attacker can use everyone’s digital footprint for malicious purposes. A few examples we demonstrated:</p><ul><li>Wrongly configured social network profiles that can leak personal information</li><li>Fake friend request to gain access to personal information</li><li>Using personal information to guess a weak password</li><li>Risks of sharing too much information on social networks (date of birth, ID card, photo, etc.)</li><li>Targeted spear-phishing using personal information to increase credibility</li><li>Risks of having the same password everywhere, with no MFA</li></ul><p>Finally, we gave key &amp; actionable recommendations that everyone can apply:</p><p><strong>LIMIT YOUR EXPOSURE</strong></p><ul><li>Perform a regular <strong>auto-check</strong> <em>Google search with your name, etc.</em></li><li><strong>Limit what and how you share</strong> on social media <em>Who can see my activities? Can it be used against me?</em></li><li><strong>Review your confidentiality parameters</strong> on social media <em>Who sees what from your profile, posts, etc.</em></li></ul><p><strong>APPLY SECURITY GOOD PRACTICES</strong></p><ul><li>Ensure the <strong>MFA</strong> (multi-factor authentication) is <strong>activated</strong> on all your social media</li><li>Respect <strong>password good practices</strong> <em>Length &amp; complexity, different for all your accounts, etc.</em></li><li>Think about the <strong>“need-to-know” principle</strong> when sharing data with people or services <em>Don’t hesitate to enter fake information / create a fake identity</em></li></ul><p><strong>CHOOSE WITH WHAT / WHOM YOU SHARE</strong></p><ul><li><strong>Limit the tracking</strong> <em>Refuse cookies, use a VPN, etc.</em></li><li><strong>Avoid using free services</strong> with your personal data <em>No guarantees in terms of security &amp; privacy</em></li><li>Regularly <strong>remove / uninstall tools</strong> that you don’t use</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1023/1*plOyMP8vwNkE1zfTmeF4SA.png" /><figcaption>Our recommendations (in a TL;DR version)</figcaption></figure><h3>Key takeaways</h3><p>The outputs and feedbacks we got were great:</p><p><strong>C-LEVEL FEEDBACKS</strong></p><ul><li>C-Level involvement was key to gathering consent but mainly to raising awareness of how easily an attacker can perform a realistic attack. Our CEO’s feedback on a specific sentence generated by the AI was “this is not realistic as this is something I would say internally but never externally, so an external attacker would not be as realistic as that”. Then we showed him with the prompt we used, and the publicly available data we gave as input. It was an eye-opener for him.</li></ul><p><strong>COMPANY’S FEEDBACKS</strong></p><ul><li>When we sent the fake phishing email, it was a bit disappointing as some people quickly identified that it was phishing. And because we have put good phishing alerts foundations in place, the information was quickly spread across the company. But at the same time, we were not trying to do something hard to spot, we were trying to illustrate a new kind of attack, that can happen now based on AI accessible technologies. A new kind of attack.</li><li>But people were intrigued: “How did you do that?” “Wow, this is realistic, and if others hadn’t warn me about it, I would have fallen for it” “I noticed this is a phishing exercise, but can we still click on the video?”. Explaining the making of the deepfake a day after sending it to all mailboxes was definitely a great idea: we explained our methodology, and it felt like this is now accessible to any malicious actor with no specific skills</li></ul><p><strong>COMPLETING WITH DIGITAL FOOTPRINT REDUCTION</strong></p><ul><li>Completing the deepfake with a Digital Footprint masterclass was definitely a great idea. While the deepfake was impersonating our CEO, the pitfall would have been to think “I am not the CEO, no one will deepfake me or use publicly available information on me”. But really? Are you sure of that? Let us demonstrate what an attacker can do with all the information that is available about you. Controlling your Digital Footprint is key to avoiding fraud, account takeover, cyberbullying, etc. Demonstrating how someone’s Digital Footprint can be used against them made the topic more accessible to everyone.</li></ul><p>In the end, we had a very good level of engagement to participate in the masterclass, and people were asking us a lot of questions. In addition, some people decided to take radical actions and drastically reduce their digital footprint (using GDPR requests to be forgotten and de-indexing from search engines).</p><h3>Conclusion</h3><p>When shaping the project, it felt like a crazy thing to do. When we started working on the project, we wondered “is it too ambitious?”. But when building concretely the attack and the digital footprint masterclass materials, it felt smooth and almost too easy to do. And when we delivered the attack and the masterclass, we had this “wow” effect.</p><p>At the end, it felt so impactful as everyone realized that “this is the world we are living in”, so let’s probably take appropriate actions now. It was an eye-opener for most of the employees. And we are proud to have triggered that.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0df617a60eba" width="1" height="1" alt=""><hr><p><a href="https://medium.com/openclassrooms-product-design-and-engineering/how-we-deepfaked-our-ceo-and-received-praise-for-it-0df617a60eba">How we deepfaked our CEO and received praise for it</a> was originally published in <a href="https://medium.com/openclassrooms-product-design-and-engineering">Product, Experience &amp; Technology @ OpenClassrooms</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Sick of Passwords?]]></title>
            <link>https://medium.com/openclassrooms-product-design-and-engineering/sick-of-passwords-72a487ffe812?source=rss----d8de2fb3d85d---4</link>
            <guid isPermaLink="false">https://medium.com/p/72a487ffe812</guid>
            <category><![CDATA[authentication]]></category>
            <category><![CDATA[mfa]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[passwords]]></category>
            <category><![CDATA[okta]]></category>
            <dc:creator><![CDATA[CyberSec Team @OC]]></dc:creator>
            <pubDate>Mon, 20 Jan 2025 08:34:22 GMT</pubDate>
            <atom:updated>2025-01-20T08:34:22.080Z</atom:updated>
            <content:encoded><![CDATA[<h3>Sick of Passwords? How we shifted from a traditional Password + TOTP MFA to a robust Passwordless MFA</h3><p>Hi, OpenClassrooms IT &amp; Security team here 👋. Today we want to present a key project we have done in 2024: <strong>Passwordless implementation.</strong></p><p>We believe that traditional Multi-Factor Authentication (MFA) methods like passwords and Time based One Time Password (TOTP) are becoming increasingly inadequate against evolving security threats (MFA fatigue, no device security controls, etc.). The shift towards passwordless authentication, leveraging Device Trust and biometrics such as Touch ID on Mac, offers a more secure and user-friendly solution.</p><p>In this article, we will present our review of the internal multifactor authentication mechanisms to increase <strong>Security</strong>, simplify <strong>User Experience</strong> and better manage <strong>Enterprise hidden costs</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/1*1dM4ZETCkbXBTklSyVHbkg.gif" /><figcaption>This is how fast our authentication is thanks to this project</figcaption></figure><h3>A bit of context</h3><p>OpenClassrooms is a “Remote First” company, and it has a “Cloud Only” Information System. This is key for flexibility and modern efficiency.</p><p>To fit with this context, our Information System is composed of:</p><ul><li><strong>A consistent device technology</strong> — Mac</li><li><strong>An Identity Provider</strong> — Okta, offering secure single sign-on capabilities to support our distributed workforce &amp; applications</li><li><strong>A Device Management system</strong> — Jamf, ensuring all Macs are consistently updated, hardened and secured</li></ul><p>Our MFA was relying on the following factors:</p><ul><li>Login &amp; password</li><li>TOTP or push notification on personal phone</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/670/1*onanVK_X_BOupwCQ6fOzew.png" /><figcaption>Our previous MFA model</figcaption></figure><h3>Why is it not the most efficient MFA model?</h3><p>This MFA model is clearly not the most efficient one in terms of Security and User Experience:</p><p><strong>1 — Security</strong></p><ul><li>Factors are not robust: password can be weak, stolen or guessable, and employees’ personal phones cannot be considered as secure and trustable</li><li>These MFA are weak: Push notification is vulnerable to MFA fatigue, while TOTP is vulnerable to phishing</li><li>We are not blocking employees or contractors to work on insecure devices (personal ones for ex.)</li></ul><p><strong>2 — User experience</strong></p><ul><li>Password management is a pain point for users (expiration, complexity, etc.)</li><li>When requiring personal device to authenticate, it means that you are blocked if your mobile is stolen or broken, and it requires users to have permanently their company device and personal device with them. And to accept the push notification, you need a password to unlock your mobile</li><li>From a user point of view, division between professional &amp; personal usage is unclear</li></ul><p>From user experience, sometimes MFA feel like this: <a href="https://www.facebook.com/FallonTonight/videos/jimmy-tries-to-log-in-to-his-microsoft-account/331284788788842/">https://www.facebook.com/FallonTonight/videos/jimmy-tries-to-log-in-to-his-microsoft-account/331284788788842/</a></p><p>However it is widely used in companies. According to a short survey we have done when presenting our project to SecAtScale, a group of French Startup Security team, half of the companies have this MFA model, and the others benefit either from professional mobiles or hardware security keys.</p><p>We were not willing to deploy hardware security keys or professional phones, because that includes extra cost &amp; effort to manage the additional factors and it was not solving all the above issues. Therefore we explored the implementation of a Passwordless solution, shifting from 2 “weak” factors (something you know &amp; something you “possess”) to 2 more robust ones: something you possess (OpenClassrooms laptop) &amp; something you are (Biometry)</p><h3>Ok, so what have we put in place?</h3><p>We have deployed Okta Fastpass to all Employees’ laptop.</p><p>It consisted in:</p><ul><li>Deploying Okta Verify Desktop (OVD) to all our Mac</li><li>Coupling Okta &amp; Jamf together, ensuring that Jamf is delivering the Device trust part, including the configuration of OVD, an SSO extension and a SCEP certificate configuration</li><li>Enrolling all our devices to Okta Fastpass</li></ul><p>In addition, we have deployed conformity checks on the device, for better security. Conformity checks include indication if the device has been jailbroken or not and OS version</p><p>Finally, we have implemented 3 types of Authentification policies, summarized by the below illustration:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Lq8B6MzwJGEhh2_L_Rr4IQ.png" /><figcaption>Our app-based authentication policy</figcaption></figure><h3>What are the benefits?</h3><p>This project is really a “must be done” project in our context, as it checks all the objectives of an IT department.</p><p>The benefits are summarized in this chart</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/458/1*LUQdPpMjA5E8uqTsMfWk6g.png" /><figcaption>A “must be done” project</figcaption></figure><p><strong>1 — Improve Security</strong></p><ul><li>Both factors are managed by the Company</li><li>We enforce usage of Company’s laptops, on which we control the level of security</li><li>We check the device compliance (OS version, etc.)</li></ul><p>If you read Okta’s documentation, here is the scale of factor assurance, from lowest to highest level of assurance</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7wgWHwBvXoyvdL17YGvWXA.png" /><figcaption>Factor assurance, from least secure to most secure (source: Okta)</figcaption></figure><p><strong>2 — Better UX</strong></p><ul><li>Moving from 30 secs on 2 devices, to 5 sec on 1 device</li><li>Clear instruction on pro/perso usage</li></ul><p><strong>3 — Cost Optimisation</strong></p><p>This is probably the less obvious criteria. It includes the cost of password expiry, the cost of ensuring continuous synchronisation between Okta and Jamf, the cost of people forgetting their password after vacation, the cost of dealing with a personal mobile stolen, etc. We had a certain amount of support requests linked to password management. <strong>And all the workload associated to these support requests has a cost for the Company.</strong></p><h3>Key success factors, from our point of view</h3><p>We would not recommend this project for all companies context. However in OpenClassrooms’ context it made sense.</p><p>In our opinion, few key success factors must be present:</p><ul><li><strong>Readiness of your tech stack:</strong> IdP &amp; MDM supporting this technology (Okta &amp; Jamf in our case). Single technology of laptops helped as well (Mac)</li><li><strong>Have a strategy for applications in pro/perso grey zone</strong>: what about the application allowing you to book a seat in a coworking space? Probably something where accessibility need is greater than security need, and therefore device trust might be an overkilling measure</li><li><strong>Have a strategy for contractors / temporary workers</strong>: indeed, as you are enforcing device trust to access the Information system, you need to provide a trusted device to your temporary workers. So do you really need to ship a Mac for a contractor working only for a week? The solution we found here is to rely on virtual desktop that are trusted, as a proxy to access our Information System from an unmanaged device. It is quite flexible &amp; cost efficient, and user experience is acceptable</li></ul><h3>Conclusion</h3><p>OpenClassrooms’ shift to passwordless authentication has significantly improved our security and streamlined the user experience, while also reducing operational costs. By deploying Okta’s Fastpass alongside Jamf, we’ve eliminated the shortcomings of traditional MFA, enhancing both security and usability.</p><p><strong>And after one year of having it in place, we can confirm that the above benefits are real, and we are quite happy with it.</strong></p><h3>Related articles</h3><ul><li><a href="https://iamse.blog/2024/03/12/okta-device-access-with-jamf-a-step-by-step-guide/">Okta Device Access with Jamf a step-by step guide</a></li><li><a href="https://help.okta.com/oie/en-us/content/topics/identity-engine/devices/fp/fp-main.htm">Okta FastPass</a></li><li><a href="https://help.okta.com/oie/en-us/content/topics/identity-engine/devices/managed-main.htm">Managed devices</a></li><li><a href="https://help.okta.com/oie/en-us/content/topics/identity-engine/devices/okta-ca-static-scep-macos-jamf.htm">Configure Okta as a CA with static SCEP challenge for macOS using Jamf Pro</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=72a487ffe812" width="1" height="1" alt=""><hr><p><a href="https://medium.com/openclassrooms-product-design-and-engineering/sick-of-passwords-72a487ffe812">Sick of Passwords?</a> was originally published in <a href="https://medium.com/openclassrooms-product-design-and-engineering">Product, Experience &amp; Technology @ OpenClassrooms</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Leveraging OpenAPI (Part 2) — Testing and automating your API]]></title>
            <link>https://medium.com/openclassrooms-product-design-and-engineering/leveraging-openapi-part-2-testing-and-automating-your-api-5f4f1bc4e052?source=rss----d8de2fb3d85d---4</link>
            <guid isPermaLink="false">https://medium.com/p/5f4f1bc4e052</guid>
            <category><![CDATA[api-design]]></category>
            <category><![CDATA[open-api]]></category>
            <category><![CDATA[api-development]]></category>
            <category><![CDATA[api-testing]]></category>
            <category><![CDATA[php]]></category>
            <dc:creator><![CDATA[Frédéric Jaume]]></dc:creator>
            <pubDate>Tue, 14 May 2024 08:47:07 GMT</pubDate>
            <atom:updated>2024-05-14T08:47:07.897Z</atom:updated>
            <content:encoded><![CDATA[<h3>Leveraging OpenAPI (Part 2) — Testing and automating your API</h3><p>In the previous article of this series, we shared our experience of using the OpenAPI specifications to document a REST API, and the issues we encountered (fast growing number of endpoints, and unmaintainable schema) and the solutions we found (leveraging the specifications to split our schema in small and manageable files).</p><p>In the second article of this series, I will explain what other uses of OpenAPI we investigated and implemented.</p><h3>Automate, you will</h3><p>Our backend engineers thought we could get more out of our OpenAPI definition. There’s always been a concern in our codebase about the complexity and number of files generated by our clean-architecture based approach. Why not use the OpenAPI schema to <strong>generate controllers on the fly</strong>, to perform <strong>request validation</strong> and <strong>build responses</strong> without adding unnecessary code files every time (especially these <a href="https://dev.to/fuadardiono/plain-old-php-object-usability-and-benefits-in-modern-php-programming-32oc">POPOs/DTOs</a>) ? That’s what’s been quickly prototyped and it was a game changer.</p><p>The way this works is two-fold: we added a hook in the Symfony compiler pass, we use <a href="https://github.com/thephpleague/openapi-psr7-validator">openapi-psr7-validator</a>, to cache some request validators and routes. Then we created a generic OpenApiController class that allows to map all routes in the schema to a use-case class, using a <a href="https://swagger.io/specification/#specification-extensions">specification extension property</a>, which we called “x-usecase” and contains the <a href="https://fr.wikipedia.org/wiki/Fully_qualified_domain_name">FQDN</a> of the matching PHP use-case class, that’s for each route operation definition. We still have some legacy routes that exist and are not covered by OpenAPI, so we have a bit of plumbing to detect those.</p><p>Now, not only can we document our API, but this schema can be used at runtime too, and saves us from writing boilerplate code !</p><h3>Beyond documentation: API Tester</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*TI4AA8iZPGWhU4cS" /><figcaption>Photo by <a href="https://unsplash.com/@possessedphotography?utm_source=medium&amp;utm_medium=referral">Possessed Photography</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>At one point, we thought we could still get more from the API documentation. Why not auto-generate some tests from the OpenAPI schema to add a massive test suite to our already existing unit and integration tests ? Once again, a core team quickly prototyped what became <strong>Api Tester</strong>.</p><p>This PHP-based tool loads up our OpenAPI schema, and generates <strong>thousands</strong> of tests automatically to hit our API with nominal cases (based on the examples in the documentation) and random tests to foolproof our API behavior and check all validators and security. A game changer once again.</p><figure><img alt="Overview of some automated tests generated by Api Tester" src="https://cdn-images-1.medium.com/max/1024/1*O64ZL3R_sLzqI2EhJIo5uA.png" /><figcaption>A sample run of the ApiTester test suite. These tests are auto-generated by ApiTester from the OpenAPI definition, for all API routes</figcaption></figure><blockquote>Hopefully we’ll open-source API Tester in the future, if you want to know more, some of our team members <a href="https://event.afup.org/afupday2023-interview-olivier-mairet/">presented a talk about this</a> at the AFUP Day Lille 2023, a french PHP event, and we also participated in the <strong>Product Crew webcast </strong>for <a href="https://www.youtube.com/watch?v=5ji-czoOXu0">an episode dedicated to clean APIs and testing</a> (in French).</blockquote><h3>Toolchain</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*yixS75ZfeQTN9A0q" /><figcaption>Photo by <a href="https://unsplash.com/@dancristianpaduret?utm_source=medium&amp;utm_medium=referral">Dan Cristian Pădureț</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Our toolchain goes like this:</p><ul><li><a href="https://github.com/cebe/php-openapi">php-openapi</a> (which we might replace with an <a href="https://github.com/DEVizzent/cebe-php-openapi">OpenAPI 3.1 supporting fork</a> in a near future), we use it to lint and also at runtime</li><li><a href="https://github.com/stoplightio/spectral">spectral</a>, a CLI utility we use for linting with an added custom ruleset</li><li><a href="https://redocly.com/docs/redoc/deployment/cli/">redocly</a> to generate HTML documentation</li><li><a href="https://github.com/APIDevTools/swagger-cli">swagger-cli</a> which we use both for a first linting pass, then to bundle our doc back to a monolith before passing it to Spectral, which does not handle references across files too good, but would like to do other things good too (bonus point if you get the ref).</li><li><a href="https://github.com/thephpleague/openapi-psr7-validator">openapi-psr7-validator</a> another great package by <a href="https://thephpleague.com/">thephpleague</a></li></ul><p>We recently found that the brilliant people at <a href="https://jolicode.com/">JoliCode</a> have released a PHP library that can help leverage your OpenAPI schema to scaffold an API for you: check out <a href="https://github.com/janephp/janephp">Janephp</a>.</p><h3>Thoughts</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*195dWr_0ac698nZq" /><figcaption>Photo by <a href="https://unsplash.com/@benwhitephotography?utm_source=medium&amp;utm_medium=referral">Ben White</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Along the way, we encountered many issues, but we often found out that we were not alone. Browsing endless GitHub threads we ended up having the impression that the OpenAPI specs were great, with a cool community open to requests, but the ecosystem was lagging a bit, especially with PHP. Three years after the release of OpenAPI 3.1 in April 2021, which brings a lot of cool features, <a href="https://openapi.tools/">third party tools supporting this version are not the majority</a>. You will encounter the same engineer names across many different discussions (kudos to them), and it seems the development of several widely used repositories is stalled, with no maintenance, forks ending up being created. But it’s open-source, so you can contribute. Anyway, <a href="https://openapi.tools/">https://openapi.tools/</a> is a great place to find tools and check which specs version they support.</p><h3>The road ahead : API-First design</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Vdd1hAIY1g8MJUP4" /><figcaption>Photo by <a href="https://unsplash.com/@sortino?utm_source=medium&amp;utm_medium=referral">Joshua Sortino</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>This OpenAPI schema overhaul was worth the work, we can now have validation on API endpoint creation, component sharing, easier git history on component creation, mocking, frontend uses also… Future plans include more custom linting rules, and further CI steps regarding validation and detection of breaking changes in the API. We still work on our API Tester too.</p><p>Some updates may be required to simplify the folder architecture though, as some developers think that we went a bit too far, there’s a trade-off to be made between reusability and ease of use (browsing the schema without a dedicated plugin in your IDE can be a pain, adding multiple files for an endpoint may seem overkill to some).</p><p>Managing versioning may also be on the horizon, but it’s a tricky subject.</p><p>But the major change is adopting an <a href="https://blog.developer.adobe.com/three-principles-of-api-first-design-fa6666d9f694">API-First Design approach</a>, which we kind of partially do already, but this needs to be formalized into standardized processes; which might be the subject of a future post.</p><h3>TL;DR;</h3><p>The <a href="https://swagger.io/specification/">OpenAPI specification</a> and the libraries that support it can be leveraged at runtime to generate controllers, validators and view models on the fly. We also developed a custom tool, Api-Tester, to automatically generate tests from the documentation.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5f4f1bc4e052" width="1" height="1" alt=""><hr><p><a href="https://medium.com/openclassrooms-product-design-and-engineering/leveraging-openapi-part-2-testing-and-automating-your-api-5f4f1bc4e052">Leveraging OpenAPI (Part 2) — Testing and automating your API</a> was originally published in <a href="https://medium.com/openclassrooms-product-design-and-engineering">Product, Experience &amp; Technology @ OpenClassrooms</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Leveraging OpenAPI (Part 1) — Creating and maintaining your API documentation]]></title>
            <link>https://medium.com/openclassrooms-product-design-and-engineering/leveraging-openapi-part-1-creating-and-maintaining-your-api-documentation-3f4b4535634a?source=rss----d8de2fb3d85d---4</link>
            <guid isPermaLink="false">https://medium.com/p/3f4b4535634a</guid>
            <category><![CDATA[rest-api]]></category>
            <category><![CDATA[api-design]]></category>
            <category><![CDATA[php]]></category>
            <category><![CDATA[api-development]]></category>
            <category><![CDATA[open-api]]></category>
            <dc:creator><![CDATA[Frédéric Jaume]]></dc:creator>
            <pubDate>Fri, 26 Apr 2024 14:25:03 GMT</pubDate>
            <atom:updated>2024-04-26T14:25:03.141Z</atom:updated>
            <content:encoded><![CDATA[<h3>Leveraging OpenAPI (Part 1) — Creating and maintaining your API documentation</h3><h3>Where we come from</h3><p>First, a bit of context. The OpenClassrooms’ platform is built on a React stack in the frontend, and a Symfony PHP stack in the backend. Frontend uses the API that the backend exposes. The backend project also performs other tasks, but its main use is to expose the API.</p><p>We’re using the API internally, but we also have business customers who use our API to integrate our catalog into their platform, so the need for clean documentation is vital.</p><p>Also, we are adept of the “code documents itself” approach, and we enforce <strong>clean coding</strong> practices, and give a lot of importance to the readability of code and its reusability.</p><p>But at one point it became necessary for this 2012-started project to have some sort of API documentation. So a Swagger documentation was created. It was manually maintained and regularly out of sync. Some developers didn’t even know it existed and we had no real process around it.</p><p>Back in 2020, we decided to go for the OpenAPI specification instead and planned to build a schema for our API, which was already large with over a hundred endpoints. Manually creating the schema was out of the question. One of our senior engineers took the task to code a utility command (in PHP), to extract an OpenAPI schema from the code base. This was no mean feat, but once this was done, it unlocked many new possibilities.</p><h3>Building a monolith</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*9G4MQjzvl8LwSQOV" /><figcaption>Photo by <a href="https://unsplash.com/@karthik_sreenivas?utm_source=medium&amp;utm_medium=referral">Karthik Sreenivas</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>So, there we were with a 7k lines OpenAPI file, mostly auto-generated. It was not without issues. Auto-generation meant some fine tuning would be required to fix some readability issues, but still, it was solid enough.</p><p>We had a documentation now that could be used by our frontend engineers to refer to when we released new API endpoints, it could also be easily shared to quality engineers, managers, stakeholders, and to our business clients.</p><p>A couple of years passed, the company scaled-up, and here we were with 40+ engineers, multiple squads and teams, and new features on the platform arriving at a high pace, and by the end of 2022 we had about <strong>240 endpoint definitions</strong> in our OpenAPI schema (and each endpoint often had several operations defined, as most CRUD endpoints do). It also contained <strong>410 schemas</strong> and in the end it materialized as a single file of <strong>32k lines</strong>, weighing 928 Kb, a YAML monstrosity. Once again, it became a pain to maintain, a pain to add endpoints, a pain to do code reviews on, a pain to refactor, a pain to just open in some editors which started to have trouble parsing it quickly. But we kept going.</p><figure><img alt="Overview of our initial OpenAPI definition with over 32k lines" src="https://cdn-images-1.medium.com/max/974/1*oSu0i4sn22TzCND4BNKEDA.png" /><figcaption>Our initial OpenAPI definition, with over 32000 lines of YML, and mostly inline schemas</figcaption></figure><h3>Splitting the monolith</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*O5hzhUHd8OmPcn3K" /><figcaption>Photo by <a href="https://unsplash.com/@trintaycinco?utm_source=medium&amp;utm_medium=referral">Nathalia Segato</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>So, our OpenAPI schema became the brain of our API (more on that in the next part of this series). But it had become unmaintainable. Some errors and inconsistencies started appearing in the documentation. Engineers were copy-pasting components, it became messy.</p><p>We actually had a very basic knowledge of the <a href="https://swagger.io/specification/">OpenAPI specification</a> at first. After a core team was dedicated to OpenAPI matters, focusing on learning more and more about the specs, we could finally see all that was wrong with our initial schema. We barely leveraged reusable models, we even didn’t use the <em>requestBodies</em> or <em>responses</em> components. Everything was schemas and paths. The external reference mechanism was barely used.</p><figure><img alt="The reference system in OpenAPI" src="https://cdn-images-1.medium.com/max/1024/1*BYt-j3inK-r68F-ISmQ_vQ.png" /><figcaption>Using references to files in the root OpenAPI definition</figcaption></figure><p>We had seen some nifty looking OpenAPI schemas, and we wanted to do something similar: have a main root file, and leverage the reference-to-file mechanism to split our massive file into hundreds of smaller, manageable definitions. This would open the path to better reusability. This would make code reviews much easier too. The tools were available to reassemble to a monolith if needed. And we were definitely not alone with APIs that large, APIs like those at <a href="https://github.com/digitalocean/openapi">Digital Ocean</a>, or <a href="https://github.com/box/box-openapi">Box.com</a> were a good source of inspiration.</p><p>Now, how could we split the monolith ? Refactoring manually was out of the question. Of course, we had done it before, we coded a tool to automate that !</p><h3>Trials and tribulations</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*YKM6aa6yO-Ctu76f" /><figcaption>Photo by <a href="https://unsplash.com/@tjump?utm_source=medium&amp;utm_medium=referral">Nik Shuliahin 💛💙</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>The initial proof of concept materialized quickly. Splitting into components based on the existing file was relatively easy. But we had a goal to not only split, but leverage the OpenAPI specification the best we could. This meant converting all the <em>schemas</em> to <em>requests</em> and <em>responses</em> based on heuristics, processing <em>paths</em> to extract url, header and query <em>parameters</em>… After a few weeks we were getting close, but our splitting command had itself outgrown the initial scope and it became much more complex. We had to refactor it. Cleaning the project allowed us to add new features much faster to our OpenAPI splitter, including detecting duplicate components, so that we could merge them into a single one. We could also detect unused models and remove them.</p><figure><img alt="An overview of the new structure" src="https://cdn-images-1.medium.com/max/516/1*1TrdCf-THp9h-W9oktzvmA.png" /><figcaption>Our new OpenAPI definition and its folder structure</figcaption></figure><p>Early on we wanted to be sure that the documentation we generated was valid OpenAPI 3.0, so we went searching for a <strong>linter</strong>. The PHP library we use (<a href="https://github.com/cebe/php-openapi">cebe/php-openapi</a>) includes a CLI validation command, so we tried that first. It worked to some extent, but it was very limited, and we soon found out that it did not pick up some errors, and would also pop up errors that were valid OpenAPI 3.0 declarations! We probably tested all OpenAPI linters then… and every single one of them we had an issue with. They would not even pop up the same errors on the schema.</p><p>As we already used Stoplight, we settled for <a href="https://stoplight.io/open-source/spectral">Spectral</a> as a linter, it was not perfect either, but we could start defining our own custom ruleset, and hope that the issues would be fixed in future releases. And… we had a bad surprise. Some valid OpenAPI definitions again wouldn’t work with Spectral, which was probably related to our heavy use of references and definitions across multiple files. Browsing dozens of threads on GitHub we found we basically all encountered the same issues, and found ways around the limitations, forcing us to add extra steps in our build and linting processes. In our case it was simple. We bundle back the files into a monolith before passing it to third-party tools, and it works better.</p><p>As things stabilized we had to tackle another big task we never thought would take so much time. <strong>Naming conventions</strong> (hey, <a href="https://martinfowler.com/bliki/TwoHardThings.html">Phil Karlton was right</a>!):</p><blockquote><em>There are only two hard things in Computer Science: cache invalidation and naming things.</em></blockquote><blockquote><em>— Phil Karlton</em></blockquote><p>As we were generating a completely new directory structure, with new files, for components that did not exist before, how should we name these so that it would be clean and meaningful to our engineers ?</p><h3>Settling down</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*YOGuXtns8LUgk3Hd" /><figcaption>Photo by <a href="https://unsplash.com/@kat_vagary?utm_source=medium&amp;utm_medium=referral">Katerina May</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Well it took us quite a while, but we ended up writing lengthy <strong>guidelines</strong> describing naming conventions, and basically it ended up being a documentation on… how to write the API documentation. This file, as we do for all our <strong>ADRs,</strong> was committed to the project’s main repo.</p><p>Here we were, with a multi-files OpenAPI documentation. It was clean, not too much work was needed to make it work with other tools.</p><figure><img alt="An overview of our new OpenAPI definition’s structure, only a couple of thousands lines long" src="https://cdn-images-1.medium.com/max/888/1*mlDtGn0fpH99CvMqyvkikw.png" /><figcaption>Our new root OpenAPI definition structure, only a couple of thousands lines, and massive use of references to external files</figcaption></figure><p>We had a branch with our new documentation, now was the time to merge it. The biggest challenges here were communication and planning. It took some preparation to not cause too many conflicts in our colleagues’ branches. We had to coach them on how to use the new documentation format and make sure our guidelines were known and adopted. We also ended up writing a small generator CLI command for engineers to quickly create all template files needed to define a new endpoint.</p><p>The process went well, of course we had to support the engineers for a few sprints through pair sessions, tutorial videos, and documentation, but it mostly went well with no performance impact.</p><p>We now happily work with an OpenAPI Schema which defines, at the time of writing:</p><ul><li>324 paths</li><li>199 reusable schemas</li><li>173 request definitions</li><li>419 response definitions</li><li>212 parameters</li><li>105 tags</li></ul><p>and it’s all built from 1338 files in a clear directory hierarchy. Hurray ! 👍</p><p>In the next part of this series about OpenAPI, we will talk about how we leveraged our OpenAPI schema to test our API and generate code dynamically.</p><h3>TL;DR;</h3><p>Our OpenAPI story began with the need for API documentation, leading to the creation of a Swagger documentation manually. In 2020, we moved to the <a href="https://swagger.io/specification/">OpenAPI specification</a> with the help of a custom utility command which generated the schema from our PHP code base. However, over time, our initial 7k lines OpenAPI file became unmaintainable reaching up to 32k lines and 240 endpoint definitions, leading us to split our monolith, leveraging OpenAPI specification’s reference mechanism, which drastically improved reusability and eased code reviews. Although we faced many challenges during this process, including finding the best naming conventions and also the lack of support from the <a href="https://openapi.tools/">ecosystem</a>, or the lag behind the latest official specs, we have found the end result invaluable for API-first design and validation. We definitely recommend splitting your OpenAPI schema to multiple files before the number of endpoints you have becomes too important.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3f4b4535634a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/openclassrooms-product-design-and-engineering/leveraging-openapi-part-1-creating-and-maintaining-your-api-documentation-3f4b4535634a">Leveraging OpenAPI (Part 1) — Creating and maintaining your API documentation</a> was originally published in <a href="https://medium.com/openclassrooms-product-design-and-engineering">Product, Experience &amp; Technology @ OpenClassrooms</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>