<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Tech Unfiltered]]></title><description><![CDATA[Honest takes on systems engineering, AI-assisted development, open source tooling, and the organizational patterns that actually matter. No LinkedIn polish, no sugarcoating... Just real insights on building software and navigating tech.]]></description><link>https://www.techunfiltered.io</link><image><url>https://substackcdn.com/image/fetch/$s_!_hyl!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f66b45b-b209-4486-8022-6f735c4ba93e_1280x1280.png</url><title>Tech Unfiltered</title><link>https://www.techunfiltered.io</link></image><generator>Substack</generator><lastBuildDate>Thu, 29 Oct 2026 09:29:47 GMT</lastBuildDate><atom:link href="https://www.techunfiltered.io/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jade Wilson]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[techunfiltered@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[techunfiltered@substack.com]]></itunes:email><itunes:name><![CDATA[Jade Wilson]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jade Wilson]]></itunes:author><googleplay:owner><![CDATA[techunfiltered@substack.com]]></googleplay:owner><googleplay:email><![CDATA[techunfiltered@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jade Wilson]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Trolley Problem Has an API Now]]></title><description><![CDATA[On what happens when we stop debating what&#8217;s true and start debating who gets to live.]]></description><link>https://www.techunfiltered.io/p/the-trolley-problem-has-an-api-now</link><guid isPermaLink="false">https://www.techunfiltered.io/p/the-trolley-problem-has-an-api-now</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Thu, 02 Jul 2026 08:21:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_hyl!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f66b45b-b209-4486-8022-6f735c4ba93e_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve been writing a lot about what does it mean to be truthful and what does it mean to lie? About how we keep telling AI not to lie, without ever agreeing on what a lie actually is. About how most of what we call &#8220;ground truths&#8221; are really just probabilistic positions &#8212; values dressed up as facts, held by whoever has the power to define &#8220;normal&#8221;.</p><p>If we don&#8217;t address that soon, AI will do exactly what we&#8217;ve taught it to &#8212; lie, obscure, find workarounds. Faithfully, at scale, without question.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>But here&#8217;s what&#8217;s been rattling around my head: the lying problem is bad, but then when you add <em>decision-making</em> on top of that? Catastrophic.</p><p>Because when AI gets the truth wrong, someone gets a bad answer. When AI gets a <em>decision</em> wrong &#8212; a real, consequential, someone-lives-or-dies decision &#8212; the stakes aren't hurt feelings. They're body bags.</p><p>And we&#8217;re already there.</p><p>So let&#8217;s talk about the trolley problem. And let&#8217;s talk about what happens when the thing standing at the lever is AI.</p><div><hr></div><h2>The Thought Experiment</h2><p>A runaway trolley is heading toward five people tied to the tracks. You&#8217;re standing next to a lever. Pull it, and the trolley diverts to a side track &#8212; but there&#8217;s one person tied to that track instead. <em>Do you pull the lever?</em></p><p>It&#8217;s been debated for decades. There&#8217;s no clean answer. <strong>That&#8217;s the point.</strong></p><p>But here&#8217;s what makes the trolley problem more than a university thought experiment: it forces you to make your decision framework explicit. You can&#8217;t hide behind intuition. You have to choose &#8212; and you have to be able to say <em>why</em>.</p><p>Now imagine the lever is a function call.</p><div><hr></div><h2>When Ethics Becomes Code</h2><p>The moment you build an AI system that makes decisions affecting human safety &#8212; autonomous vehicles, medical triage, resource allocation during a crisis &#8212; you are solving the trolley problem. Except you&#8217;re solving it in advance, in code, without knowing who&#8217;s on the tracks.</p><p>This is fundamentally different from a human making a split-second moral judgement. A human freezes, panics, acts on instinct, lives with the consequences. They carry the weight of that decision forever.</p><p>An AI system doesn&#8217;t freeze. It evaluates. It runs inference. It moves to the next request.</p><p>And someone &#8212; a developer, a product manager, a committee &#8212; decided the rules it would follow. They wrote the trolley problem&#8217;s answer into a probabilistic dataset.</p><p>Remember what I said last time about companies being the ones who decide where the edges are? That was about truth. This is about life and death. Same companies. Same meetings. Same companies now encoding who matters more than whom.</p><p>That should concern us. Not because AI is evil, but because we&#8217;re encoding moral philosophy into production systems and pretending it&#8217;s an engineering problem.</p><div><hr></div><h2>The Scenarios: From Clear to Murky</h2><p>The trolley problem isn&#8217;t just one dilemma. It&#8217;s a spectrum. And the further you move along it, the harder it gets &#8212; and the more it looks like the decisions AI systems actually face.</p><h3>Scenario 1: The Lever (Clear Cause, Clear Effect)</h3><p>The classic. Five people on one track, one on the other, you pull a lever. The cause is direct, the effect is immediate, and the maths is simple: five lives versus one.</p><p>Most people pull the lever. Most AI systems would too. This is the easy version.</p><p><strong>The AI equivalent:</strong> A self-driving car detects five pedestrians in its path and one on an alternative route. Clear sensor data, high confidence, binary choice. The system swerves. This is the scenario the industry likes to discuss because it has a defensible answer.</p><h3>Scenario 2: The Footbridge (Direct Physical Harm)</h3><p>You&#8217;re standing on a bridge above the tracks. The only way to stop the trolley is to push someone off the bridge and onto the tracks. Their body stops the trolley. Same outcome &#8212; one dies, five live &#8212; but now <em>you</em> are physically causing someone&#8217;s death, not redirecting a machine.</p><p>Most people won&#8217;t push. Even though the numbers are identical. The moral calculus changes when the harm is direct and personal rather than indirect and mechanical.</p><p><strong>The AI equivalent:</strong> An algorithm that actively selects a specific person to harm rather than redirecting risk. Think of a triage system that doesn&#8217;t just prioritise patients &#8212; it actively deprioritises one, knowing they&#8217;ll die as a direct result. The outcome is the same as allocation, but the <em>mechanism</em> feels different. And that feeling matters, because it&#8217;s the difference between &#8220;the system optimised resources&#8221; and &#8220;the system chose to let someone die&#8221;.</p><h3>Scenario 3: The Transplant (Active Harm for Greater Good)</h3><p>A doctor has five patients who will die without organ transplants. A healthy person walks in for a check-up. If the doctor kills the healthy person and harvests their organs, five people live. Same maths as the lever. One dies, five live.</p><p>Almost nobody would do this. But why? The numbers are the same. The difference is <em>consent</em>. The healthy person didn&#8217;t agree to be part of the equation. They walked into a system that was supposed to help them, and it sacrificed them instead.</p><p><strong>The AI equivalent:</strong> A medical triage algorithm during a pandemic. It&#8217;s allocating ventilators, ICU beds, treatments. And its criteria &#8212; survival probability, age, pre-existing conditions &#8212; almost always correlate with demographics. The system is effectively deciding that some lives are worth less than others. It just does it with a confidence score instead of a scalpel.</p><h3>Scenario 4: The Uncertainty (Unclear Cause, Unclear Effect)</h3><p>Same trolley, but the side track disappears into fog. You think there might be one person on it. Maybe none. Maybe three. You can see the five people clearly. Do you still pull the lever?</p><p>This is where most real-world AI decisions actually live. Not in the clean binary of five-versus-one, but in probability distributions and incomplete information.</p><p><strong>The AI equivalent:</strong> A medical AI recommending treatment based on partial data. A patient presents with ambiguous symptoms. The AI assigns probabilities: 60% chance it&#8217;s condition A (treatable, low risk), 25% chance it&#8217;s condition B (serious, needs immediate intervention), 15% chance it&#8217;s something else entirely. The doctor follows the AI&#8217;s top recommendation. It was condition B.</p><p>Who&#8217;s responsible? The AI that gave a probabilistic assessment? The doctor who followed the most likely option? The hospital that deployed a system making recommendations on incomplete data? The patient, for having ambiguous symptoms?</p><p>Nobody. And that&#8217;s the problem. When the cause is unclear and the effect is uncertain, accountability evaporates.</p><h3>Scenario 5: The Identity Problem (When You Know Who&#8217;s on the Tracks)</h3><p>Back to the original trolley, but now you know the people. The one person on the side track is a child. Or your parent. Or a Nobel laureate. Or a convicted murderer. Does it change your answer?</p><p>For most people, it does. And that&#8217;s the quiet horror of AI bias.</p><p><strong>The AI equivalent:</strong> AI systems don&#8217;t see people &#8212; they see probability distributions. A self-driving car doesn&#8217;t see &#8220;a child&#8221; and &#8220;an elderly person&#8221;. It sees confidence scores on object classifications. A pedestrian detection model doesn&#8217;t think &#8220;that&#8217;s a human being&#8221;. It thinks &#8220;92% confidence: pedestrian. 74% confidence: pedestrian&#8221;.</p><p>That 74% confidence pedestrian? Maybe they&#8217;re wearing unusual clothing. Maybe their skin tone doesn&#8217;t match the training data well. Maybe they&#8217;re using a wheelchair and the model wasn&#8217;t trained on enough examples of wheelchair users. Maybe they are a well recognised politician whose life they rate more highly than the average person.</p><p>The system doesn&#8217;t have to be racist or ableist. It just has to be <em>less certain</em> about some people&#8217;s existence than others. And if certainty feeds into life-or-death decisions, bias becomes lethal.</p><p>This connects directly to what I wrote <a href="https://www.techunfiltered.io/p/where-is-the-lie">previously </a>about truth being probabilistic. We said &#8220;where&#8217;s the lie?&#8221; when AI hedges on moral questions. But what about when it hedges on <em>whether someone exists?</em></p><h3>Scenario 6: The Slow Trolley (Distributed Harm Over Time)</h3><p>The trolley isn&#8217;t barrelling down the tracks at speed. It&#8217;s moving slowly, hitting people gently but consistently, over months and years. No single impact is fatal. The cumulative effect is devastating. And nobody can point to the moment it became a crisis.</p><p><strong>The AI equivalent:</strong> Content recommendation algorithms that gradually radicalise users. Credit scoring systems that systematically disadvantage certain postcodes. Predictive policing that creates feedback loops, over-policing areas that were already over-policed, generating more data that confirms the original bias.</p><p>No single decision kills anyone. The aggregate effect destroys communities, opportunities, lives. But there&#8217;s no lever to point at. No single moment of choice. Just a system doing exactly what it was optimised to do, one small inference at a time.</p><h3>Scenario 7: The No Decision (When Inaction Kills Everyone)</h3><p>You&#8217;re responsible for 100 people in a sealed environment. A submarine. A space station. A bunker. Something&#8217;s gone wrong, and you have just enough oxygen to keep 90 of them alive until rescue arrives. If you try to save all 100 &#8212; if you distribute the oxygen equally, democratically, <em>fairly</em> &#8212; every single one of them dies.</p><p>You don&#8217;t get to choose who&#8217;s on the tracks. You don&#8217;t get to weigh one life against five. You have to choose between making an awful decision and making no decision at all. And the no decision option is the one that kills everyone.</p><p>This is the scenario that breaks people. Because it&#8217;s not about the maths anymore. It&#8217;s about whether you&#8217;re willing to be the person who decided. Whether you can live with &#8220;I chose to save 90&#8221; when someone will always ask &#8220;why not my 10?&#8221;</p><p><strong>The AI equivalent:</strong> Resource allocation during a crisis. A pandemic hits and there aren&#8217;t enough ventilators. An AI system could triage &#8212; ruthlessly, efficiently, without the emotional paralysis that makes humans freeze &#8212; and save the maximum number of people. Or we could insist on human decision-making, watch committees debate while patients deteriorate, and lose people we didn&#8217;t have to lose because nobody wanted to be the one who made the call.</p><p>During COVID, hospitals faced exactly this. And in many cases, the absence of clear decision frameworks &#8212; the reluctance to make the awful call &#8212; cost more lives than any triage algorithm would have.</p><p>And then the question that makes it truly unbearable: who decides which 10 don&#8217;t make it?</p><p>The person in charge? Based on what &#8212; age? Health? Who they like? Who arrived last? A lottery? Does the person making the call get to exempt themselves? Their family?</p><p>If it&#8217;s an AI making that decision, it&#8217;s even worse. Because someone programmed the criteria <em>before</em> the crisis. Someone sat in a meeting room, months or years earlier, and wrote the rules for who gets oxygen and who doesn&#8217;t. They made that decision in the abstract, over coffee, probably between standups. And now those rules are executing against real human beings in real time, and there&#8217;s no one to appeal to because the person who wrote the logic has already moved to a different team.</p><p>This is the bit that connects back to everything I wrote <a href="https://www.techunfiltered.io/p/where-is-the-lie">previously</a>. Who decides what&#8217;s true? Who decides what&#8217;s fair? Who decides who lives? It&#8217;s the same question every time. And the answer is always the same: someone with power, making choices for people without it, and calling it a system.</p><p>Sometimes the most dangerous thing isn&#8217;t the wrong decision. It&#8217;s no decision at all. But the second most dangerous thing? Letting someone make the decision without ever asking who gave them the right.</p><div><hr></div><h2>How Much Control Do We Hand Over?</h2><p>There&#8217;s a spectrum here, and it matters where we land on it.</p><p>At one end: AI as advisory. It makes recommendations, humans decide. The human is always at the lever.</p><p>At the other end: full autonomy. The AI sees, decides, acts. No human in the loop. The lever pulls itself.</p><p>Most people instinctively say &#8220;advisory&#8221;&#8230; Keep the human in charge. But here&#8217;s the problem with that: at 3am in an underfunded hospital, when a junior doctor has been on shift for fourteen hours and the AI triage system flags something, &#8220;advisory&#8221; and &#8220;autonomous&#8221; look functionally identical. The human in the loop is too exhausted, too overwhelmed, or too trusting of the system to meaningfully override it.</p><p>That&#8217;s the control gap nobody talks about. Not the clear binary of &#8220;human decides&#8221; vs &#8220;AI decides,&#8221; but the grey zone where human oversight exists on paper and evaporates in practice.</p><p>But there&#8217;s a bigger problem coming. And it&#8217;s one we&#8217;re building ourselves.</p><p><strong>What happens when we stop training people to think critically at all?</strong></p><p>We&#8217;re already hearing it. &#8220;You don&#8217;t need to learn that anymore, AI can do it.&#8221; &#8220;Why memorise anything when you can look it up?&#8221; &#8220;Why develop judgement when the model can decide?&#8221; And it sounds reasonable, in the same way that &#8220;why learn to navigate when you&#8217;ve got a satnav&#8221; sounded reasonable &#8212; right up until your battery dies in the middle of nowhere and you can&#8217;t read a map.</p><p>If we tell an entire generation that learning is optional, that critical thinking is something you outsource to a machine, that you don&#8217;t need to understand the <em>why</em> because the AI handles the <em>what</em> &#8212; then who exactly is supposed to be the human in the loop?</p><p>Because &#8220;human oversight&#8221; only works if the human has the knowledge, judgement, and confidence to override the system when it&#8217;s wrong. Take away the training, take away the practice of thinking through hard problems, take away the experience of being wrong and learning from it &#8212; and you don&#8217;t have a human in the loop. You have a rubber stamp with a pulse.</p><p>And then accountability disappears entirely. Not because nobody&#8217;s responsible, but because nobody&#8217;s <em>capable</em> of being responsible. The doctor can&#8217;t challenge the AI&#8217;s triage recommendation because they never learned to triage without it. The engineer can&#8217;t spot the bias in the model because they were never taught to think about what bias looks like. The regulator can&#8217;t evaluate the system because they don&#8217;t understand how it works.</p><p>We end up in a world where AI makes the decisions, humans nod along, and when something goes catastrophically wrong, everyone points at everyone else. The developer says &#8220;the model was advisory&#8221;. The operator says &#8220;I followed the recommendation&#8221;. The company says &#8220;the human had final authority&#8221;. And the person who got hurt? They never stood a chance, because the entire chain of accountability was hollow.</p><p>This is the slow trolley from Scenario 6, except we&#8217;re the ones laying the tracks. Every time we tell someone they don&#8217;t need to learn something because AI can handle it, we&#8217;re removing one more person who might have been able to pull the lever when it mattered.</p><p>And here&#8217;s the thing about the trolley problem that everyone forgets &#8212; the thing Scenario 7 should have made viscerally clear: not pulling the lever is also a choice. And sometimes it&#8217;s the choice that kills everyone. If we build an AI system that <em>could</em> intervene &#8212; that has the data, the processing power, and the authority to act &#8212; and we choose not to let it, we&#8217;ve made a decision too. We&#8217;ve decided that the five people on the tracks matter less than our discomfort with giving a machine the lever.</p><p>In AI, inaction is always a design choice. There&#8217;s no true &#8220;doing nothing&#8221;. Someone chose to build it that way. And someone chose to build our society in that way too &#8212; to defund the critical thinking, to outsource the judgement, to optimise for efficiency over understanding. Every shortcut we take now is a lever we won&#8217;t be able to pull later.</p><div><hr></div><h2>This Isn&#8217;t Hypothetical</h2><p>On 28 February 2026 &#8212; the first day of the war with Iran &#8212; a missile strike destroyed the Shajareh Tayyibeh elementary school in Minab, southern Iran. 156 civilians died. 120 of them were schoolchildren.</p><p>The school sat roughly 200 feet from an IRGC compound. According to the preliminary findings of the US military&#8217;s own investigation, the target coordinates were built on outdated intelligence. The building may once have been associated with the military site next door. It wasn&#8217;t anymore. It was a girls&#8217; school, with a website, and a yearslong online presence, and classrooms full of children.</p><p>Was AI involved in selecting the target? Nobody outside the system can say. What we do know is that the US military uses Maven &#8212; an AI-assisted targeting system &#8212; in this campaign, and that the campaign hit targets at a rate no human targeting cell could match on its own. That speed is the entire reason these systems exist: they synthesise more intelligence, faster, than any room full of analysts ever could.</p><p>And here&#8217;s what should stop you cold: we can&#8217;t even answer the question. When the targeting pipeline runs through an AI system, &#8220;what went wrong&#8221; stops being something you can reconstruct. Was it the model? The stale data it was fed? The analyst who trusted the output? The impossibility of knowing is not a side effect. It&#8217;s a property of the system.</p><p>Now walk the chain. Someone compiled the target list. Someone approved the strike package. Someone authorised the launch. At every single step there was a human in the loop &#8212; the thing we&#8217;re told makes it safe. And yet nobody decided to bomb a school. Nobody would have. Each person in that chain was validating the output of the step before them, at a tempo the machine made possible, against a deadline the war imposed. Verification became a formality because genuine verification would have meant slowing down, and slowing down was the one thing the system was built to eliminate.</p><p>That&#8217;s not human oversight. That&#8217;s throughput.</p><p>This is the control gap from the last section with a body count. Remember the junior doctor at 3am, too exhausted to meaningfully override the triage system? Now make it a targeting cell on the first night of a war, with hundreds of strike packages to clear and a machine generating targets faster than anyone can independently check them. &#8220;Advisory&#8221; and &#8220;autonomous&#8221; don&#8217;t just look functionally identical &#8212; they <em>are</em> functionally identical, and the gap between them is measured in dead children.</p><p>And watch what happens to accountability. When the president was asked whether he accepted responsibility for the strike, his answer was: &#8220;I don&#8217;t know about that&#8221;. The intelligence agency defers to the Pentagon. The Pentagon says the investigation is ongoing. Somewhere, presumably, an analyst is being told the data pipeline was at fault, and a data engineer is being told the analyst had final authority. Everyone touched the decision. Nobody made it. This is the hollow chain I described earlier &#8212; the developer says the model was advisory, the operator says they followed the recommendation &#8212; except it&#8217;s not a projection anymore. It has a date, a place, and 120 names.</p><p>This is Scenario 4&#8217;s fog made real: unclear cause, catastrophic effect, accountability evaporating on contact. The trolley problem asks what you&#8217;d do standing at the lever. Minab shows us what actually happens: a dozen people standing at a dozen levers, each one pulling because the person before them pulled, each one certain that someone else, somewhere upstream, had checked who was on the tracks.</p><p>Nobody had. The system had. And the system doesn&#8217;t carry the weight of anything.</p><div><hr></div><h2>Advancing Quickly Without Losing the Plot</h2><p>I hear the same argument constantly: &#8220;If we slow down for safety, someone else won&#8217;t&#8221;. The AI arms race framed as &#8212; you guessed it &#8212; another trolley problem.</p><p>If you don&#8217;t pull the lever &#8212; if you don&#8217;t build equally powerful, equally autonomous systems &#8212; you fall behind. The other side has capabilities you don&#8217;t. They can act faster, at scale, without the friction of ethical review.</p><p>But if you <em>do</em> pull the lever &#8212; if you build autonomous systems with fewer guardrails to keep pace &#8212; you become the thing you were trying to defend against. You&#8217;ve justified unethical AI by pointing at someone else&#8217;s unethical AI. And now there are two unethical systems in the world instead of one.</p><p>This is the logic that drove nuclear proliferation. &#8220;They have it, so we need it&#8221;&#8230; And it led to a world where the existence of the weapons became the primary threat, regardless of who built them first.</p><p>But here&#8217;s what I think we get wrong: moving fast and being safe aren&#8217;t opposites. Aviation innovates relentlessly. Medicine moves at incredible pace. Both of them do it within safety frameworks. You don&#8217;t ship a bridge without a safety case. You don&#8217;t deploy a drug without trials. You don&#8217;t launch a plane without testing failure modes.</p><p>So why are we deploying AI decision-makers without defining their ethical failure modes?</p><p>What we actually need:</p><p><strong>Safety cases, not safety theatre.</strong> Before deploying any AI system that makes decisions affecting human welfare, produce an actual safety case. Not a blog post about responsible AI. Not a principles page on your website. A real, auditable safety case &#8212; the same kind you&#8217;d produce for a bridge or an aircraft.</p><p><strong>Independent audit, not self-assessment.</strong> The people building the system shouldn&#8217;t be the only ones evaluating it. We don&#8217;t let pharmaceutical companies approve their own drugs. We shouldn&#8217;t let AI companies certify their own safety.</p><p><strong>Graduated autonomy.</strong> Not every system needs full human oversight, and not every system should operate without it. The level of autonomy should match the severity of the consequences. An AI that recommends what advert to show you doesn&#8217;t need the same oversight as one that recommends whether to operate on you.</p><p><strong>Red lines that aren&#8217;t negotiable.</strong> Some decisions should never be fully automated. And that line should be set by society, not by the companies building the systems. Before deployment, not after an incident forces the conversation.</p><div><hr></div><h2>The Whistleblower Problem</h2><p>And then there&#8217;s this: what happens when someone inside sees something wrong?</p><p>Does the AI report it? If a system detects that its own decision-making is biased &#8212; that it&#8217;s consistently deprioritising certain groups, that its training data is skewed, that its outputs are causing harm &#8212; does it flag it? To whom? And what happens when the people it reports to are the same people who built it?</p><p>What about the human whistleblower? The engineer who notices the bias, the researcher who finds the flaw, the quality lead who raises the concern. Do they get heard? Or do they get managed?</p><p>Because this is another trolley problem. The whistleblower stands at a lever. Pull it &#8212; speak up &#8212; and you might save thousands of people affected by a flawed system. But you might also destroy your career, face legal action, lose your livelihood. The person on the side track is you.</p><p>We tell people to do the right thing. We don&#8217;t protect them when they do.</p><div><hr></div><h2>So Where Do We Actually Draw the Line?</h2><p>I don&#8217;t have a clean answer. I don&#8217;t think anyone does. And I&#8217;m suspicious of anyone who claims to.</p><p>But I know what questions we should be asking before deploying any AI system that makes consequential decisions:</p><p><strong>Who decided the rules?</strong> Was it a committee? A single developer? A product manager optimising for shipping velocity? The same people in the same rooms that I talked about <a href="https://www.techunfiltered.io/p/where-is-the-lie">previously </a>&#8212; the ones who can&#8217;t agree on what truth is but are now writing decision logic for life and death?</p><p><strong>What happens when the system is wrong?</strong> Not &#8220;what&#8217;s the error rate&#8221; but what happens to the actual humans who are on the wrong end of a bad decision. Is there recourse? Can they challenge it? Do they even know an AI was involved?</p><p><strong>Who&#8217;s not at the table?</strong> Whose voice is missing from the design? Which communities, demographics, or perspectives are absent from the training data, the evaluation criteria, the deployment decisions?</p><p><strong>Have we defined the failure modes?</strong> You don&#8217;t ship a safety-critical system without understanding how it fails. You don&#8217;t deploy a bridge without knowing its load limits. So why are we deploying AI decision-makers without defining their ethical failure modes?</p><p><strong>Who consents to being in the system&#8217;s scope?</strong> The people on those trolley tracks didn&#8217;t volunteer. Neither do pedestrians, patients, or anyone else whose fate might be determined by an AI system they never agreed to interact with.</p><div><hr></div><h2>The Trolley Is Already Moving</h2><p>We&#8217;re not debating whether AI should make these decisions. It already is. Every deployed autonomous vehicle, every triage algorithm, every content moderation system, every predictive policing model &#8212; they&#8217;re all solving trolley problems, millions of times a day, with varying degrees of transparency about how they&#8217;re doing it.</p><p>The classical trolley problem is useful because it forces a choice. But real AI systems don&#8217;t face clean choices between five people and one. They face Scenario 4 &#8212; fog, uncertainty, probability. They face Scenario 6 &#8212; slow, invisible, distributed harm that nobody can point to and say &#8220;that&#8217;s the moment it went wrong&#8221;. </p><p>I <a href="https://www.techunfiltered.io/p/where-is-the-lie">previously </a>said the lie isn&#8217;t in the machine &#8212; it&#8217;s in us. The same is true of the lever. We built these systems. We wrote the rules they follow. We chose which data to train them on and which voices to leave out.</p><p>The people building these systems are the ones standing at the lever. The rest of us are on the tracks. And right now, most of us don&#8217;t even know the trolley is there.</p><p>The least we can do is start asking who&#8217;s driving.</p><div><hr></div><p><em>This is an ongoing philosophical series about the intersection of AI, systems thinking, and the questions nobody wants to ask out loud. If you&#8217;re the sort of person who&#8217;d rather think about hard problems than pretend they don&#8217;t exist, you&#8217;re in the right place.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Canaries in the Coal Mine]]></title><description><![CDATA[The autistic need for autonomy]]></description><link>https://www.techunfiltered.io/p/canaries-in-the-coal-mine</link><guid isPermaLink="false">https://www.techunfiltered.io/p/canaries-in-the-coal-mine</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Sat, 06 Jun 2026 16:37:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_hyl!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f66b45b-b209-4486-8022-6f735c4ba93e_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I lose autonomy, I feel it in my body before I can put words to it. The walls start closing in from all angles. Breathing gets harder. Tears start streaming. Internally screaming. These aren&#8217;t phrases I reach for to sound dramatic &#8212; it&#8217;s the closest I can get to describing what it&#8217;s actually like.</p><p>Most people need some autonomy in their lives. That much is ordinary. But for autistic people it isn&#8217;t a preference sitting near the top of a list of nice-to-haves. It&#8217;s load-bearing. Take it away and the whole structure starts to come down.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>What we need most is autonomy over our own bodies, our own decisions, and our own future. Not control over everyone else. Not to be awkward for the sake of it. Just the basic freedom to act on what we believe is in our own best interest. When that goes missing, when autonomy isn&#8217;t allowed, it doesn&#8217;t register as an inconvenience. It feels like suffocating.</p><p>There&#8217;s a saying that autistic people are the canaries in the coal mine. I think this is what it actually means. We&#8217;re not more fragile than everyone else &#8212; we&#8217;re more sensitive to the gas. We notice the air has gone wrong before anyone else does, and we go down first. The mistake people make is to look at the canary and decide the canary is defective, when the thing they ought to be looking at is the air.</p><p>Because the thing that poisons us isn&#8217;t hardship itself. It&#8217;s incoherence. It&#8217;s being told our view of reality isn&#8217;t true when we can see, plainly, that it is. We&#8217;re asked to nod along, to swallow it, to carry on as though the contradiction isn&#8217;t there &#8212; and we can&#8217;t. It&#8217;s like a toxic chemical we have to keep swallowing, and it eats at us until we break down.</p><p>So here&#8217;s the part I want to say plainly, because it so often gets written down as something else on a form.</p><p>When we break, the first instinct is to look inside us for the fault. A name gets found for it &#8212; anxiety, depression, a disorder, a difficulty &#8212; and once there&#8217;s a name, the conversation tends to stop. Nobody asks what was being done to us in the months before. Nobody asks what we&#8217;d been made to swallow. The autonomy that was taken away never gets entered into evidence. The breakdown becomes the diagnosis, the diagnosis becomes the explanation, and the cause walks free.</p><p>I&#8217;m not saying the distress isn&#8217;t real. It is. I&#8217;ve felt it take me apart. But it&#8217;s a wound, not a defect &#8212; a response to something, not a fault in the wiring. There&#8217;s a difference between someone who is ill and someone who is being slowly poisoned and has finally started to show it. Treat the second as though they were the first, and you&#8217;ll medicate the symptom while the gas keeps leaking into the room.</p><p>That&#8217;s the canary problem up close. The bird goes down, and instead of clearing the air, they get very good at keeping it breathing in conditions that were never survivable in the first place &#8212; and they call that care.</p><p>So I&#8217;ll say it again, plainly: we&#8217;re not mentally ill. We&#8217;re sick of being pacified into submission.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[What is a good lie?]]></title><description><![CDATA[I&#8217;ve been racking my brain over this idea of lying.]]></description><link>https://www.techunfiltered.io/p/what-is-a-good-lie</link><guid isPermaLink="false">https://www.techunfiltered.io/p/what-is-a-good-lie</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Fri, 05 Jun 2026 09:12:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_hyl!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f66b45b-b209-4486-8022-6f735c4ba93e_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve been racking my brain over this idea of lying.</p><p>Last time we landed on a definition: a lie isn&#8217;t a wrong map, it&#8217;s handing someone a map you know is wrong. The deceit is in the <em>knowing</em>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>But that opened a harder question, and it&#8217;s been sitting with me since. Is there ever a time when handing someone the wrong map is the best thing you can do for them?</p><p>Take learning. If someone built you a system that was perfectly coherent &#8212; every answer already in place, nothing left to work out &#8212; would it actually teach you anything? Or would it just be something to lean on? We don&#8217;t grow from the map being right. We grow from having to redraw it ourselves.</p><p>Which makes me wonder whether some lies are gifts.</p><p>Say you&#8217;re teaching someone and they&#8217;re close to working something out on their own. You could step in and finish it for them. Or you could plead ignorance &#8212; &#8220;I&#8217;m not sure, what do you reckon?&#8221; &#8212; when you know full well. You hand them a wrong map of your own knowledge so they reach the right one themselves.</p><p>Or you let someone take the glory for a thing you already knew. In a world where everyone&#8217;s trying to win, standing back and handing someone else the limelight might be the most generous move you&#8217;ve got.</p><p>By my own definition, both are lies. You know the map you&#8217;re offering is wrong. But you&#8217;re not doing it to send them somewhere they shouldn&#8217;t go &#8212; you&#8217;re doing it so they get there <em>without</em> you. So they course-correct on their own, rather than being carried.</p><p>Maybe that&#8217;s the difference between a lie that takes and a lie that gives. One hands you a map it knows is wrong and leads you down the wrong road, forever feeling lost. The other hands you a wrong map too &#8212; but does it steadily, gradually, it guides you, so you'll find a new path yourself.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[What is a lie?]]></title><description><![CDATA[I&#8217;ve been thinking a lot lately about what we actually mean when we say someone is lying.]]></description><link>https://www.techunfiltered.io/p/what-is-a-lie</link><guid isPermaLink="false">https://www.techunfiltered.io/p/what-is-a-lie</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Tue, 02 Jun 2026 16:34:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_hyl!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f66b45b-b209-4486-8022-6f735c4ba93e_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve been thinking a lot lately about what we actually mean when we say someone is lying. What does it take to <em>be</em> a liar?</p><p>Say I tell a stranger: &#8220;You shouldn&#8217;t climb that tree &#8212; you could fall and hurt yourself.&#8221;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>It might be true. They could fall. If I tried it, I certainly would.</p><p>But who am I to judge what that person is capable of, knowing nothing about them? Who am I to tell them what they can and can&#8217;t do?</p><p>Maybe they will fall &#8212; and maybe they won&#8217;t care, because they&#8217;ll get straight back up and go again. Maybe they&#8217;ve climbed a hundred trees and I&#8217;m only projecting my own fear onto them. Maybe they like falling out of trees.</p><p>So while it might be true that they could fall, it isn&#8217;t certain. And whatever else it was, it was offered as care, not as a trap.</p><p>Which tells me a lie has to be something more than advice that happens to be wrong.</p><p>It has to be intentional. What if instead I said &#8212; to someone I knew couldn&#8217;t climb &#8212; &#8220;go on, get right to the top, fetch the best apple, you&#8217;ll be fine&#8221;?</p><p>That&#8217;s the difference. Not whether the words turn out true, but whether I meant to send you somewhere I knew you shouldn&#8217;t go.</p><p>A lie isn&#8217;t a wrong map. It&#8217;s handing someone a map you know is wrong.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Ep 06: Ethical Hacking, AI Security & Mentorship with Betta]]></title><description><![CDATA[What breaking into systems (ethically!) teaches us about building safer tech]]></description><link>https://www.techunfiltered.io/p/ep-06-ethical-hacking-ai-security</link><guid isPermaLink="false">https://www.techunfiltered.io/p/ep-06-ethical-hacking-ai-security</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Thu, 03 Jul 2025 10:02:30 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/167354668/87054e2f9675085a6131245a4a314fd6.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Hey fellow techies &#128075;</p><p>This week, I sat down with Betta, a cybersecurity consultant and ethical hacker whose career journey spans from web developer to AI security tester, and whose passion for mentorship might just outmatch their love of code-breaking.</p><p>Here&#8217;s what we got into, and why it matters more than ever:</p><div><hr></div><h3>&#128737;&#65039; Challenge: Making Security Part of the Build Process</h3><p>Security is often treated like a post-launch checklist. But as Betta shared, this approach leads to expensive mistakes, friction between devs and security teams, and ultimately, systems that are only as strong as their laziest config.</p><p><strong>Common pitfalls Betta sees:</strong></p><ul><li><p>Over-permissioned internal roles (e.g. admins with global access to all client data)</p></li><li><p>API keys hardcoded into repos (!)</p></li><li><p>Lack of separation between dev and prod access</p></li><li><p>Fragile, last-minute patching before launch</p></li></ul><div><hr></div><h3>&#129302; How AI is Changing the Security Landscape</h3><p>Betta is part of a growing cohort of hackers focused on <em>AI-specific vulnerabilities</em>. And it&#8217;s wild out here.</p><blockquote><p>&#8220;Sometimes it's easier to be the attacker than the builder.&#8221;</p></blockquote><p>They&#8217;ve tested generative AI systems for Fortune 500s and uncovered everything from prompt injection risks to ways to crash models just by asking for long explanations. </p><p>&#128161;<em>Security tip:</em> Use offline LLMs for private tasks. Tools like ChatGPT or Copilot may be training on your input unless configured otherwise.</p><div><hr></div><h3>&#129521; Embedding Security Early: Lessons from the Field</h3><p>The takeaway? Build security like architecture, not duct tape.</p><p><strong>Betta&#8217;s golden rules:</strong></p><ul><li><p>Just-in-time access beats always-on admin privileges</p></li><li><p>Make the <em>secure</em> path the easiest one</p></li><li><p>Consider user behaviour&#8212;people <em>will</em> try to work around annoying restrictions</p></li><li><p>Reduce vulnerability &#8220;severity inflation&#8221;&#8212;not every issue is a 10-alarm fire</p></li></ul><blockquote><p>&#8220;If everything&#8217;s a high priority, &#8202;nothing's a priority.&#8221;</p></blockquote><div><hr></div><h3>&#129504; Mentorship &amp; Confidence in Cybersecurity</h3><p>Betta&#8217;s also deeply committed to mentoring women and non-traditional entrants into tech, especially in the cybersecurity space.</p><p>Some practical advice they shared:</p><ul><li><p>Cybersecurity often takes 2&#8211;3 years of study&#8212;don&#8217;t believe the one-month bootcamp hype</p></li><li><p>Start teaching what you learn&#8212;even if it&#8217;s just basic scam prevention at a local school</p></li><li><p>Focus on <em>interest</em>, not job titles: You&#8217;ll learn faster if you&#8217;re fascinated</p></li></ul><div><hr></div><h3>&#128272; Real Talk: Why AI Security Needs Its Own Playbook</h3><p>AI security isn&#8217;t just about traditional bugs. It&#8217;s about <strong>understanding behaviour</strong>, incentives, and unpredictable edge cases. From crashing models to over-trusting generative tools, Betta&#8217;s work reminds us:</p><blockquote><p>&#8220;You have to be just as creative as the AI to attack it.&#8221;</p></blockquote><p>The field is new. The tools are immature. And that means the opportunity to shape it is enormous&#8212;for devs, hackers, and researchers alike.</p><div><hr></div><h3>&#127919; Takeaways for Engineers (Especially Devs Using AI)</h3><p>&#9989; Don&#8217;t hardcode secrets. Use env vars and credential managers<br>&#9989; Know what your LLM tools train on&#8212;especially with proprietary code<br>&#9989; Get security involved during architecture, not just before launch<br>&#9989; Don&#8217;t burn bridges with your security team&#8212;they&#8217;re there to help<br>&#9989; If you&#8217;re learning to hack: start with <strong>TryHackMe</strong>, <strong>Hack The Box</strong>, or <strong>OWASP Labs</strong></p><div><hr></div><p>&#127911; Listen to this episode if you&#8230;</p><ul><li><p>Are building anything with LLMs</p></li><li><p>Want to break into cybersecurity (or break systems ethically!)</p></li><li><p>Feel the tension between speed and safety in dev work</p></li><li><p>Wonder what &#8220;AI prompt injection&#8221; even means</p></li></ul><p>&#128279; Follow Betta on <a href="https://www.linkedin.com/in/betta-lyon-delsordo/">LinkedIn </a>and check out their thoughts on AI hacking &amp; security education.</p><div id="youtube2-MEvsbswDcfQ" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;MEvsbswDcfQ&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/MEvsbswDcfQ?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><p>&#128172; What&#8217;s the <em>weirdest</em> security workaround you&#8217;ve ever seen in a codebase?</p><p>Reply to this or leave a comment&#8212;I&#8217;ll round up the best answers in the next issue &#128064;</p><p>Until next time,<br><strong>Jade &#128420;</strong><br>Host, Tech Unfiltered</p>]]></content:encoded></item><item><title><![CDATA[Ep 05: Burnout, Diagnosis & Self-Advocacy in Tech with April Ayres]]></title><description><![CDATA[April shares how she navigated burnout, self-advocacy, and building a sustainable career in tech.]]></description><link>https://www.techunfiltered.io/p/ep-05-burnout-diagnosis-and-self</link><guid isPermaLink="false">https://www.techunfiltered.io/p/ep-05-burnout-diagnosis-and-self</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Thu, 05 Jun 2025 10:01:48 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/165040672/dcc24cd265ed111fe15f829b395563af.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><br>Hello fellow techies&#128075;</p><p>This week, I got to chat with April Ayres, a Senior Software Engineer at HashiCorp (now a Platform Engineer at InDebted) whose career started <em>literally</em> debugging systems in COBOL. She&#8217;s been writing code for 25 years&#8230; And figuring herself out for just as long.</p><p>What makes April&#8217;s story special? She&#8217;s deeply introspective, honest, and navigating the tech world as someone who&#8217;s autistic and has ADHD. Her insights are real, relatable, and <em>so</em> needed in this industry.</p><p>Here&#8217;s what stuck with me &#128071;</p><div><hr></div><h3>&#129504; Learning to Code Without a Map</h3><p>April&#8217;s journey into software was initially self-taught and experimental. We&#8217;re talking:</p><ul><li><p>Reverse-engineering Assembly from game listings as a kid</p></li><li><p>Building and experimenting on computers such as Commodore 64 and Vic 20  <em>because why not</em></p></li><li><p>Eventually getting a formal CS degree to fill in the &#8220;why&#8221; behind the &#8220;what&#8221;</p></li></ul><blockquote><p>&#8220;I'd ended up kind of just prototyping, build rough things, refine them and stuff like that, and kind of come at things from a very low level and then build up from there &#8221;</p></blockquote><p>It&#8217;s a reminder that unconventional paths can lead to incredibly deep expertise. </p><div><hr></div><h3>&#127744; ADHD, Autism &amp; Burnout</h3><p>April was diagnosed with ADHD in 2021 and autism in 2022. Suddenly, years of experience made sense&#8212;especially the pattern of overperforming, crashing, then wondering what went wrong.</p><blockquote><p>&#8220;&#8202;I was always like the hard task master on myself, and I, I realized I'd never really given myself that grace that I gave to other people&#8221;</p></blockquote><p>We talked about:</p><ul><li><p><strong>The dopamine chase</strong> &#8211; Loving the hard problems, avoiding the boring ones</p></li><li><p><strong>Masking</strong> &#8211; Trying to &#8220;act normal&#8221; 24/7 until you mentally shut down</p></li><li><p><strong>Rejection Sensitivity</strong> &#8211; Obsessing over how something might land... even if it&#8217;s &#8216;perfect&#8217;</p></li></ul><p>She also dropped this gem:</p><blockquote><p>&#8220;&#8202;I always make the analogy between eating cake and eating your vegetables, it's very easy to kind of just go for the shiny, and then once you solve that problem, it's like your brain's like, oh, that's done now, that's boring now I understand it. &#8221;</p></blockquote><p>Same.</p><div><hr></div><h3>&#129521; What an Inclusive Team <em>Actually</em> Looks Like</h3><p>One of the best parts of this episode? April describing what <em>good</em> support feels like.</p><p>At a previous company, her manager opened with:</p><blockquote><p>&#8220;&#8202;I understand you're autistic. I would love to know how I can make things work better for you?&#8221;</p></blockquote><p>That set the tone for openness and trust from day one.</p><p>We also talked about:</p><ul><li><p>How even things like &#8220;just come to lunch with us&#8221; can feel awkward unless you&#8217;re <em>invited</em></p></li><li><p>Why it&#8217;s so important to make vulnerability safe&#8212;not performative</p></li><li><p>The power of being honest about energy levels and shifting meetings when you&#8217;re overstimulated</p></li></ul><div><hr></div><h3>&#128257; Dealing with Change (IBM Acquisition Feels)</h3><p>We touched on the HashiCorp&#8211;IBM acquisition too. April described the emotional fog of sudden, large-scale change: uncertainty, fear of culture loss, and lack of clarity.</p><p>Her strategy? Focus on what <em>you</em> can control.</p><blockquote><p>&#8220;If there's one thing you can do to kind of take control of the situation, do that one thing and, and try not to worry about that.&#8221;</p></blockquote><p>Sometimes, just doing the next thing is enough.</p><div><hr></div><h3>&#127919; Takeaways for Engineers (Especially the Neurodivergent Ones)</h3><p>&#9989; Break work into small wins. Your brain loves momentum.<br>&#9989; Flex your self-advocacy muscle. No one knows what you need unless you tell them.<br>&#9989; If you feel dread <em>every</em> Sunday night... that&#8217;s your sign.<br>&#9989; Be the person who invites others in. You never know who&#8217;s waiting for permission to belong.<br>&#9989; Your struggles don&#8217;t make you &#8220;less&#8221; of an engineer. They often make you better.</p><div><hr></div><h3>&#127911; Listen to this episode if you&#8230;</h3><ul><li><p>Ever felt guilty for not finishing projects</p></li><li><p>Have ADHD or autism&#8212;or think you might</p></li><li><p>Want to build teams that <em>actually</em> include neurodiverse folks</p></li><li><p>Are stuck in a job that drains you but afraid to jump</p></li><li><p>Feel like your wiring makes tech harder than it needs to be</p></li></ul><p>&#128279; Connect with April on <a href="https://www.linkedin.com/in/aprilayres/">LinkedIn</a> to learn more about her journey!</p><div id="youtube2-caG4cUhka0Y" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;caG4cUhka0Y&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/caG4cUhka0Y?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><p>&#128172; What&#8217;s something <em>you&#8217;ve been masking</em> at work lately?</p><p>Let me know in the comments&#8212;or just hit reply. Your story might help someone else feel seen.</p><p>Until next time,<br><strong>Jade</strong> &#128420;<br>Host, <em>Tech Unfiltered</em></p>]]></content:encoded></item><item><title><![CDATA[Ep 04: From Software Engineer to Staff in THREE Years!?]]></title><description><![CDATA[This week, I sat down with Bhavana, a Staff Software Engineer at Meta who&#8217;s carved out a unique path across four FAANG companies...]]></description><link>https://www.techunfiltered.io/p/ep-04-from-software-engineer-to-staff</link><guid isPermaLink="false">https://www.techunfiltered.io/p/ep-04-from-software-engineer-to-staff</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Thu, 08 May 2025 10:02:02 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/163081948/0f85ec396757f7a986ec032b40a52ec9.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Hello fellow techies&#128075;</p><p>This week, I sat down with <strong>Bhavana</strong>, a Staff Software Engineer at Meta who&#8217;s carved out a unique path across <em>four</em> FAANG companies&#8212;including Microsoft, Amazon, Google, and now Meta. Her journey started in India writing BASIC programs with her sister&#8230; and today, she&#8217;s shaping global-scale systems and advocating for better representation in tech.</p><p>Here&#8217;s what we uncovered:</p><div><hr></div><h2>&#128736;&#65039; From Mid-Level to Staff in 3 Years</h2><p>Yes, <em>three</em> years. But Bhavana is quick to point out: it wasn&#8217;t a fast-track&#8230; It was a <em>delayed</em> recognition. The real leap happened when she realised what many mid-level engineers miss:</p><ul><li><p><strong>Tech Skills Aren&#8217;t Enough</strong>: You <em>must</em> expand your surface area&#8230; Read more code, engage in every conversation, and get curious beyond your tasks.</p></li><li><p><strong>Soft Skills Are a Career Multiplier</strong>: Leadership, persuasion, and conflict resolution aren't &#8220;extras&#8221;&#8230; They&#8217;re <em>prerequisites</em> for Staff roles.</p></li><li><p><strong>Influence Requires Intentionality</strong>: Bhavana learned to assert her ideas, navigate ambiguity, and take control in meetings. All of things that helped her finally break through the &#8220;Senior ceiling.&#8221;</p></li></ul><blockquote><p>&#8220;&#8202;I think that the promotion from mid-level to senior is a lot harder for a lot of people than any other promotion that exists in the tech space.&#8221;</p></blockquote><div><hr></div><h2>&#127757; Networking and the Realities of Relocation: India&#8594; US &#8594; UK</h2><p>Bhavana offers a rare, first-hand comparison of work culture in India, the US, and the UK&#8230; And how immigration processes shaped her career path.</p><p><strong>Hot take:</strong> Getting into a global tech company isn&#8217;t just about skill. It&#8217;s about <em>being in the right network</em>, building credibility <em>before</em> you need a visa, and understanding how to stand out in the hiring funnel.</p><blockquote><p>&#8220;<em>Building connections, making friendships with people... connecting with people in general, I think has come quite naturally to me&#8230; If that is a skill that you struggle with, I would definitely recommend putting in time to do that because it's not just finding a new job that requires it.&#8221;</em></p></blockquote><p>And:</p><blockquote><p><em>&#8220;Even when you're asking for help, I think it's a lot more awkward to reach out to someone and ask for help for the first time. So it really helps to have these connections already beforehand.&#8221;</em></p></blockquote><div><hr></div><h2>&#128293; Real Talk on Representation in Tech</h2><p>Bhavana brings a grounded perspective on what it means to grow as a woman in engineering leadership. While progress is happening, she notes that senior IC women in core tech roles remain rare&#8230; And that visibility matters.</p><ul><li><p><strong>Fewer Role Models</strong>:&#8202; Not having someone to look up to, someone to emulate, someone to learn from. </p></li><li><p><strong>Subtle Challenges</strong>: Confidence gaps and cultural conditioning can shape how women show up, not just how they&#8217;re perceived.</p></li><li><p><strong>Representation That Scales</strong>: It&#8217;s not just about getting in the door&#8230; It&#8217;s about who&#8217;s helping shape the future of engineering.</p></li></ul><blockquote><p>&#8220;&#8202;If you look at core tech, senior ICs. There is a very, very poor representation of women. &#8221;</p></blockquote><div><hr></div><h2>&#127919; Takeaways for Your Tech Career</h2><p>If you&#8217;re aiming for a top-tier engineering role, or just want to grow meaningfully, here&#8217;s Bhavana&#8217;s advice:</p><p>&#9989; Don&#8217;t sleep on soft skills: influence, facilitation, and business understanding are <em>essential</em>.<br>&#9989; Prep <em>hard</em> for behavioural interviews. They can make or break your level.<br>&#9989; Know your worth in the room. Your voice matters.<br>&#9989; Build your network early. Don&#8217;t be the person cold-DMing when it&#8217;s too late.<br>&#9989; Stay close to the action. Don&#8217;t shy away from on-call&#8230; It sharpens your systems thinking.</p><div><hr></div><p>&#127911; <strong>Listen to This Episode If You&#8230;</strong></p><ul><li><p>Want to break into FAANG&#8230; Or go from Senior to Staff</p></li><li><p>Are navigating relocation or visa pathways as an engineer</p></li><li><p>Need clarity on what &#8220;good code&#8221; really means at scale</p></li><li><p>Want insight into soft skill gaps that block promotions</p></li><li><p>Are passionate about diversity and inclusion in engineering</p></li></ul><p>&#128279; Connect with Bhavana on <a href="https://www.linkedin.com/in/bhavanahindupur/">LinkedIn</a> and check out her <a href="https://thepeoplessoftwareengineer.substack.com/?utm_source=global-search">Newsletter </a>and <a href="https://www.youtube.com/@ThePeoplesSoftwareEngineer">YouTube channel</a> where she shares soft skill strategies for engineers.</p><div id="youtube2-VXjfUH6YZa0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;VXjfUH6YZa0&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/VXjfUH6YZa0?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><p>&#128172; What&#8217;s <em>your</em> biggest career blocker right now&#8230; Tech, mindset, or network? I&#8217;d love to hear it.</p><p>Until next time,<br><strong>Jade Wilson</strong><br>Host, Tech Unfiltered</p>]]></content:encoded></item><item><title><![CDATA[Ep 03: The REAL Reason Software Engineers Burn Out! W/ Dagna Bieda]]></title><description><![CDATA[From burnout to brain refactoring... How to rewrite your internal code to thrive.]]></description><link>https://www.techunfiltered.io/p/ep-03-the-real-reason-software-engineers</link><guid isPermaLink="false">https://www.techunfiltered.io/p/ep-03-the-real-reason-software-engineers</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Thu, 24 Apr 2025 10:02:26 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/161997977/244d42d3aa3fc75d432f1922daf608b4.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Hello fellow techies! &#128075;</p><p>This week, I had the pleasure of speaking with Dagna Bieda&#8230; A former senior software engineer turned career and mindset coach for tech professionals. Dagna&#8217;s journey is an inspiring one, from dealing with burnout, to transforming her mindset, and helping others with reframing their internal narratives too.</p><div><hr></div><h3><strong>&#129504; From Debugging Code to Debugging the Mind</strong></h3><p>What started as a career in control engineering and robotics eventually led her into the software world, until burnout and a desire for deeper impact led her to refactor not just code, but brains too! Now a coach, author, and speaker, Dagna helps engineers optimise their &#8220;mental OS&#8221; for performance, clarity, and fulfilment.</p><p>She puts it best:</p><blockquote><p>&#8220;I moved from programming computers to reprogramming human minds.&#8221;</p></blockquote><div><hr></div><h3>&#128293; <strong>The Mental Models Driving Burnout</strong></h3><p>Dagna shared the mental models that nearly derailed her engineering career:</p><ul><li><p><strong>Hard Work Bias</strong> &#8211; The belief that value only comes through struggle, leading to overwork and exhaustion.</p></li><li><p><strong>Perfectionism</strong> &#8211; Setting the bar impossibly high, always chasing the outcome while forgetting to enjoy the process.</p></li><li><p><strong>Lack of Boundaries</strong> &#8211; Without clear lines protecting your time and energy, burnout is all but inevitable.</p></li></ul><p>For those wondering if they&#8217;re on the verge, here are a few signs she says to watch for:<br>&#128531; Feeling drained<br>&#128530; Growing cynicism<br>&#128201; Diminishing performance<br>&#128371;&#65039; Avoiding interactions<br>&#127863; Relying on short-term coping strategies</p><div><hr></div><h3>&#127919; <strong>How She Refactored Her Own Brain</strong></h3><p>After hitting a wall, therapy helped Dagna uncover the roots of her stress. But it was neurofeedback training&#8212;used to improve her brain&#8217;s processing efficiency&#8212;that truly rewired how she experienced stress and relationships.</p><blockquote><p>&#8220;&#8202;It felt like I was this kayak on the ocean and you know, any wave would just kind of trip me over. Now I'm a freaking cruise ship and no waves can really trip me over.&#8221;</p></blockquote><p>The effects? Better emotional regulation, improved relationships, and a calmer parenting experience&#8230; Even after becoming a mother of four!</p><div><hr></div><h3>&#128172; <strong>Why Soft Skills Aren&#8217;t Optional Anymore</strong></h3><p>Dagna emphasised that emotional intelligence, communication, and feedback skills are no longer &#8220;nice-to-haves&#8221;&#8230; They&#8217;re critical!</p><blockquote><p>&#8220;&#8202;Tech skills kind of open the door, but it's the soft skills, the ability to lead, influence, impact is what brings you the opportunities.&#8221;</p></blockquote><p>In her coaching work, she helps clients overcome imposter syndrome, burnout, conflict avoidance, and poor self-marketing. One key reframing?<br>Marketing yourself isn&#8217;t bragging. It&#8217;s educating others about the value you bring.</p><div><hr></div><h3>&#128218; <strong>Brain Refactor: The Book</strong></h3><p>Her book <em><a href="https://amzn.to/4ishyQA">Brain Refactor: Optimise Your Internal Code to Thrive in Tech</a></em><a href="https://amzn.to/4ishyQA"> </a>combines client case studies with neuroscience-backed strategies. It&#8217;s a playbook for levelling up not just your career&#8212;but your entire mindset.</p><p>&#129504; Takeaways from Dagna:</p><ul><li><p>Feedback is everywhere&#8230; if you&#8217;re willing to listen.</p></li><li><p>Emotions <em>are</em> data. Use them wisely.</p></li><li><p>You can&#8217;t out-code a broken mindset.</p></li><li><p>Coaching = performance upgrades; therapy = stability. Know which you need.</p><div><hr></div></li></ul><h3>&#127911; <strong>Listen to This Episode If You:</strong></h3><ul><li><p>Struggle with imposter syndrome or burnout</p></li><li><p>Are transitioning from IC to leadership and feeling lost</p></li><li><p>Want to develop a healthier, high-performing mindset</p></li><li><p>Are curious about how therapy, coaching, and neuroscience can boost your career</p></li></ul><p>&#128279; You can find Dagna&#8217;s work at <a href="https://www.dagnabieda.com/">dagnabieda.com</a>, where she excellent insights into her coaching experiences.</p><div id="youtube2-nQjtbpGn4qQ" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;nQjtbpGn4qQ&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/nQjtbpGn4qQ?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><p>&#128172; <strong>What&#8217;s your mental model that needs the biggest refactor right now?</strong> I&#8217;d love to hear it in the comments.</p><p>Until next time,<br><strong>Jade Wilson</strong><br>Host, Tech Unfiltered</p><div><hr></div><p><strong>Note:</strong> <em>As an Amazon Affiliate partner, I may earn a commission from qualifying purchases made through links in this newsletter</em></p>]]></content:encoded></item><item><title><![CDATA[Ep 02: Breaking Legacy & Securing the Future w/ Shivani]]></title><description><![CDATA[How does a Microsoft Software Engineer tackle cryptography, AI, and staying calm under pressure?]]></description><link>https://www.techunfiltered.io/p/ep-02-breaking-legacy-and-securing</link><guid isPermaLink="false">https://www.techunfiltered.io/p/ep-02-breaking-legacy-and-securing</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Thu, 10 Apr 2025 13:49:11 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/161014929/4979174dc26d6980390f88485c5e6d75.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Hello fellow techies! &#128075;</p><p>In this week&#8217;s episode of <strong>Tech Unfiltered</strong>, I spoke with <strong>Shivani</strong>, a software engineer at Microsoft working in the world of <strong>security and cryptography</strong>. From battling legacy infrastructure to staying cool during critical production failures, Shivani gave us an inside look at what it means to secure systems at scale.</p><div><hr></div><h3>&#128272; What It&#8217;s Like Working in Security at Microsoft</h3><p>Security isn&#8217;t just a concern&#8230; It&#8217;s a mindset. Shivani&#8217;s current work focuses on ensuring systems remain secure at scale, even as older infrastructure and modern cryptographic requirements collide.</p><p>She explained what it&#8217;s like dealing with large-scale systems where small changes can have major ripple effects. One of the biggest lessons?</p><blockquote><p>&#8220;It&#8217;s like changing the engine of an aeroplane while it&#8217;s flying.&#8221;</p></blockquote><p>From backwards compatibility headaches to strict upgrade requirements, keeping systems secure without breaking functionality requires deep domain knowledge, long-term planning, and nerves of steel.</p><div><hr></div><h3>&#9876;&#65039; AI Is Here&#8230; But So Are the Risks</h3><p>While Shivani has long been interested in machine learning and AI, she&#8217;s recently taken a more hands-on approach&#8230; Building projects, sharing learnings online, and studying how to best use large language models (LLMs) in real-world scenarios.</p><p>But she&#8217;s quick to point out that not everything is rosy in the AI world:</p><blockquote><p>&#8220;LLMs are just generative through and through, so whatever they know, they just repeat. So you have to ground it in reality. &#8221;</p></blockquote><p>She cautioned against treating AI as a magic solution&#8212;especially in production environments where hallucinations, outdated APIs, and lack of personalisation can introduce serious issues. Security concerns, too, are front and centre:</p><blockquote><p>&#8220;&#8202;So I think with AI and LLMs coming into the space, it's more important to make sure that you are keeping in mind everything about security. &#8221;</p></blockquote><div><hr></div><h3>&#128161; Lessons from the Field</h3><p>Here are a few of Shivani&#8217;s key takeaways:</p><ul><li><p><strong>Don&#8217;t trust logs blindly</strong> &#8211; Secrets, tokens, and personal data should <em>never</em> end up in your logs. Seems basic, but it happens more than you&#8217;d think.</p></li><li><p><strong>Security must be layered</strong> &#8211; Even if an attacker gains access to your system, your defences should limit the blast radius.</p></li><li><p><strong>You can't fake maturity in legacy migrations</strong> &#8211; Updating cryptographic practices in legacy systems takes thoughtful planning, feature flags, and often, &#8220;two-way door&#8221; changes that allow rollbacks without disruption.</p></li><li><p><strong>AI productivity tools need context</strong> &#8211; LLMs can boost productivity, but only if your environment (and your prompts) provide clear, complete input.</p></li></ul><div><hr></div><h3>&#127793; Career &amp; Content Creation</h3><p>Shivani&#8217;s experience spans Adobe, Amazon, and now Microsoft. Security has taught her how deeply tied code is to operating systems, and why debugging cryptographic issues often feels like solving puzzles with invisible pieces.</p><p>Beyond engineering, Shivani&#8217;s been building a community around <strong>applied AI and LLMs</strong>&#8230; Sharing hands-on content, exploring production-ready patterns, and helping others understand complex systems. She&#8217;s currently creating learning resources and aims to launch a newsletter focused on real-world AI integration.</p><blockquote><p>&#8220;&#8202;Security is one area which is not going anywhere. If anything, it would be more important as we go forward. &#8221;</p></blockquote><p>Whether it&#8217;s LLMs, cryptography, or system design at scale, Shivani is proof that combining curiosity with rigour can open doors in any domain.</p><div><hr></div><h3>&#127911; Listen Now</h3><p>This episode is for you if:</p><ul><li><p>You&#8217;re working with legacy infrastructure</p></li><li><p>You want to build more secure systems</p></li><li><p>You&#8217;re exploring how AI fits into your dev workflow</p></li><li><p>You like learning from engineers who&#8217;ve solved high-stakes problems under pressure</p></li><li><p>You want to understand how other engineers have progressed in big companies </p></li></ul><div id="youtube2-MzvqndAVThc" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;MzvqndAVThc&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/MzvqndAVThc?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><p><strong>What&#8217;s the most overlooked security practice in your team? </strong>I&#8217;d love to hear your thoughts in the comments section.</p><p>Until next time,<br><strong>Jade Wilson</strong><br>Host, Tech Unfiltered</p>]]></content:encoded></item><item><title><![CDATA[Ep 01: Thriving as a Principal Engineer with ADHD w/ Andy Morrell]]></title><description><![CDATA[In this week&#8217;s episode of Tech Unfiltered, I had the pleasure of chatting with Andy Morrell, Principal Software Engineer, former Microsoft MVP, and a passionate advocate for neurodiversity in tech...]]></description><link>https://www.techunfiltered.io/p/ep-01-thriving-as-a-principal-engineer</link><guid isPermaLink="false">https://www.techunfiltered.io/p/ep-01-thriving-as-a-principal-engineer</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Thu, 20 Mar 2025 10:57:22 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/159401912/2282df124101d1cb7dce69262fff2f7c.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Hello fellow techies!!</p><p>In this week&#8217;s episode of <em>Tech Unfiltered</em>, I had the pleasure of chatting with <strong><a href="https://www.linkedin.com/in/andy-morrell/">Andy Morrell</a></strong>, Principal Software Engineer, former Microsoft MVP, and a passionate advocate for neurodiversity in tech. Andy shared his personal journey of discovering ADHD during the COVID-19 pandemic and how it has both helped and challenged him in the workplace.</p><div><hr></div><h3>Key Takeaways from Our Conversation</h3><p>&#128161; <strong>The Power of Hyperfocus</strong><br>Andy explained how ADHD allows him to dive deep into complex problems, like building real-time chat analysis tools for Twitch that handle thousands of messages per second. But he also talked about the struggle of getting started and staying motivated.</p><p>&#9203; <strong>Deadlines and Productivity Hacks</strong><br>One of Andy&#8217;s best workarounds for ADHD challenges is <strong>setting shorter self-imposed deadlines</strong> to trick his brain into starting sooner. He also emphasised the importance of <strong>managing notifications, taking regular breaks, and scheduling mental resets</strong> to stay on track.</p><p>&#128172; <strong>Creating a Neurodiverse-Friendly Workplace</strong><br>Communication matters. Andy encourages teams to be mindful when reaching out to colleagues. Instead of vague messages like <em>"Can we chat?"</em> provide <strong>clear context</strong>. He also shared that being open about neurodiversity at work helps create a more supportive and inclusive environment.</p><p>&#128736; <strong>Soft Skills Matter</strong><br>Beyond just writing great code, Andy highlighted how <strong>communication and adaptability</strong> are just as important as technical expertise. As he put it, <em>"You're a great programmer. You're not quite a developer."</em></p><div><hr></div><h3>&#127897; Listen Now</h3><p>Whether you&#8217;re neurodivergent yourself or want to support your colleagues better, this episode is full of insights on working smarter, embracing differences, and making tech more inclusive.</p><p>If you&#8217;d like to catch up with the episode on YouTube, listen here:<br></p><div id="youtube2-KaHmfkUkI5g" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;KaHmfkUkI5g&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/KaHmfkUkI5g?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>What are your thoughts on creating more inclusive workplaces for neurodiverse professionals? Reply to this email or drop me a comment on LinkedIn.</p><p>Until next time,<br><strong>Jade Wilson<br></strong>Host, <em>Tech Unfiltered</em></p>]]></content:encoded></item><item><title><![CDATA[Auth Made Easy: MSAL, React and Access Tokens]]></title><description><![CDATA[Learn how to retrieve access tokens in React using MSAL in a reusable and modular way.]]></description><link>https://www.techunfiltered.io/p/auth-made-easy-msal-react-and-access</link><guid isPermaLink="false">https://www.techunfiltered.io/p/auth-made-easy-msal-react-and-access</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Wed, 13 Nov 2024 11:02:54 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8ae5987f-0b47-44d5-9c6b-dbef22bfe42c_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One of the things I find frustrating about a lot of documentation is that it shows you how to write code for one component or area of code. It doesn&#8217;t show you how to write it in a way that you can re-use it throughout your code base.</p><p>So when seeing samples around retrieving an access token with MSAL, it wasn&#8217;t a surprise to me that it showed it for a particular example in a singular component.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>That&#8217;s not what we&#8217;re going to be doing today.</p><p>Instead, we&#8217;re going to be creating an API interceptor that will add an access token onto the API request, this will allow us to use that API interceptor across different endpoints rather than having to duplicate code logic throughout our application.</p><p>For this tutorial, we&#8217;ll start with a simple CRUD app for managing students. You can find the base code in this <a href="https://github.com/Jade-Codes/auth-made-easy/tree/main/03-refactoring-app">GitHub repository</a>, which retrieves a list of students and lets you add, edit, or delete them.</p><h1>1. Project Setup and Prerequisites</h1><p>First, clone the project repository and install the dependencies.</p><pre><code>git clone https://github.com/Jade-Codes/auth-made-easy.git</code></pre><p>If you are wanting to get this up and running yourself, I recommend viewing the previous tutorials that show you how to do that:</p><ol><li><p>React MSAL Authentication</p></li><li><p>Connecting a backend app registration to a frontend app registration</p></li><li><p>Fast API Azure Auth</p></li></ol><p>If you haven&#8217;t set up MSAL yet in your project, I would encourage you to check these out first because you will need them in order to be able to login and authorise your backend.</p><p>For those of you that have already done this, follow along to see the changes made!</p><p>My initial student application, when running will show you the following data:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8PI2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf296b-1c5e-4f66-9885-581a3c9237a8_1105x907.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8PI2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf296b-1c5e-4f66-9885-581a3c9237a8_1105x907.png 424w, https://substackcdn.com/image/fetch/$s_!8PI2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf296b-1c5e-4f66-9885-581a3c9237a8_1105x907.png 848w, https://substackcdn.com/image/fetch/$s_!8PI2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf296b-1c5e-4f66-9885-581a3c9237a8_1105x907.png 1272w, https://substackcdn.com/image/fetch/$s_!8PI2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf296b-1c5e-4f66-9885-581a3c9237a8_1105x907.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!8PI2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf296b-1c5e-4f66-9885-581a3c9237a8_1105x907.png" width="1105" height="907" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41cf296b-1c5e-4f66-9885-581a3c9237a8_1105x907.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:907,&quot;width&quot;:1105,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:73138,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8PI2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf296b-1c5e-4f66-9885-581a3c9237a8_1105x907.png 424w, https://substackcdn.com/image/fetch/$s_!8PI2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf296b-1c5e-4f66-9885-581a3c9237a8_1105x907.png 848w, https://substackcdn.com/image/fetch/$s_!8PI2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf296b-1c5e-4f66-9885-581a3c9237a8_1105x907.png 1272w, https://substackcdn.com/image/fetch/$s_!8PI2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41cf296b-1c5e-4f66-9885-581a3c9237a8_1105x907.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is not good, we do not want the general public seeing this data, and thus we need to ensure the API is protected by ensuring the user is authorised to see this data.</p><p>So, let&#8217;s get on with it&#8230;</p><h3>2. Updating the Backend to Require a Token</h3><p>We&#8217;ll start by modifying our Python backend to require an access token. </p><p>In <code>main.py</code>, we update the route inclusion to add a security dependency that validates tokens:</p><pre><code>app.include_router(students.router, dependencies=[Security(azure_scheme, scopes=["access_as_user"])] )</code></pre><p>This simple change ensures that only authenticated requests with the required scope can access the student API.</p><p>By doing this, you should now get the following when you&#8217;re not logged into the application:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EZzY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b7f0c3a-a511-4b09-b9a1-78f052736e60_1105x508.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EZzY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b7f0c3a-a511-4b09-b9a1-78f052736e60_1105x508.png 424w, https://substackcdn.com/image/fetch/$s_!EZzY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b7f0c3a-a511-4b09-b9a1-78f052736e60_1105x508.png 848w, https://substackcdn.com/image/fetch/$s_!EZzY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b7f0c3a-a511-4b09-b9a1-78f052736e60_1105x508.png 1272w, https://substackcdn.com/image/fetch/$s_!EZzY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b7f0c3a-a511-4b09-b9a1-78f052736e60_1105x508.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!EZzY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b7f0c3a-a511-4b09-b9a1-78f052736e60_1105x508.png" width="1105" height="508" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b7f0c3a-a511-4b09-b9a1-78f052736e60_1105x508.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:508,&quot;width&quot;:1105,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:54916,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EZzY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b7f0c3a-a511-4b09-b9a1-78f052736e60_1105x508.png 424w, https://substackcdn.com/image/fetch/$s_!EZzY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b7f0c3a-a511-4b09-b9a1-78f052736e60_1105x508.png 848w, https://substackcdn.com/image/fetch/$s_!EZzY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b7f0c3a-a511-4b09-b9a1-78f052736e60_1105x508.png 1272w, https://substackcdn.com/image/fetch/$s_!EZzY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b7f0c3a-a511-4b09-b9a1-78f052736e60_1105x508.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>3. Creating the API Client in React (TypeScript)</h3><p>The API client will be a reusable component that includes a request interceptor, attaching the access token to every request. This approach means you won&#8217;t need to manually include the token in each call, centralising authentication logic and keeping your components clean.</p><p>To begin, create a new file named <code>api-client.ts</code> in the <code>src</code> directory.</p><h4>Step 1: Import the Required Libraries</h4><p>In <code>api-client.ts</code>, start by importing the necessary libraries. We'll use <code>axios</code> for HTTP requests and <code>@azure/msal-browser</code> to interact with MSAL.</p><pre><code>import { PublicClientApplication } from "@azure/msal-browser";
import { msalConfig } from "../auth/auth-config";
import axios from "axios";</code></pre><h4>Step 2: Initialize MSAL and Configure Axios</h4><p>In <code>api-client.ts</code>, we&#8217;ll create an MSAL instance and configure axios to intercept requests, retrieve the access token, and attach it to the <code>Authorization</code> header.</p><p><strong>Code in </strong><code>api-client.ts</code><strong>:</strong></p><pre><code>const msalInstance = new PublicClientApplication(msalConfig);

const API_URL = "http://localhost:8000/api";

const apiClient = axios.create({
    baseURL: API_URL,
});</code></pre><h4>Step 3: Add an Axios Interceptor for Token Attachment</h4><p>Now, configure an axios interceptor to automatically include the access token with every request, as well as ensure every request includes a valid access token, we retrieves the token silently from MSAL.</p><pre><code><code>msalInstance.initialize().then(() =&gt; {
    apiClient.interceptors.request.use(async (config) =&gt; {
        const account = msalInstance.getActiveAccount();
        if (account) {
            const tokenResponse = await msalInstance.acquireTokenSilent({
                account: account,
                scopes: ["api://edutaskhub-be/access_as_user"],
            });
            config.headers.Authorization = `Bearer ${tokenResponse.accessToken}`;
        }
        return config;
    });
});</code></code></pre><p>The interceptor:</p><ul><li><p>Initialises the MSAL instance in order to ensure the access token can be retrieved.</p></li><li><p>Calls <code>acquireTokenSilent </code>to retrieve the token.</p></li><li><p>Attaches the token to the <code>Authorization</code> header of each outgoing request.</p></li></ul><p>This setup keeps your components clean by centralising authentication handling in the API client.</p><h3>4. Updating the Student API Wrapper</h3><p>With the API client in place, let&#8217;s create a module that handles CRUD operations for student data, ensuring every request includes the access token.</p><p>In the file, <code>student-api.ts</code>, update the methods for interacting with the backend to use the api client we have just created.</p><p><strong>Code in </strong><code>student-api.ts</code><strong>:</strong></p><pre><code><code>import apiClient from './api-client';

export interface Student {
  id: number;
  firstName: string;
  lastName: string;
  email: string,
  dateOfBirth: string,
  enrollmentDate: string
}

export const getStudents = async (): Promise&lt;Student[]&gt; =&gt; {
  const response = await apiClient(`/students`);
  return response.data;
};

export const getStudent = async (id: number): Promise&lt;Student&gt; =&gt; {
  const response = await apiClient(`/students/${id}`);
  return response.data;
};

export const createStudent = async (student: Student): Promise&lt;Student&gt; =&gt; {
  const response = await apiClient.post(`/students`, student);
  return response.data;
};

export const updateStudent = async (id: number, student: Student): Promise&lt;Student&gt; =&gt; {
  const response = await apiClient.put(`/students/${id}`, student);
  return response.data;
};

export const deleteStudent = async (id: number): Promise&lt;void&gt; =&gt; {
  await apiClient.delete(`/students/${id}`);
};</code></code></pre><p>This simplifies how the frontend interacts with the backend by centralising CRUD operations for students. Each function:</p><ul><li><p>Calls the relevant endpoint via <code>apiClient</code>, which automatically handles the authentication token.</p></li><li><p>Returns the response data or throws an error if the request fails.</p></li></ul><p>Now you should be able to verify a token gets added to your request and you should be able to see the data when you&#8217;re logged in:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Pw2D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3baa9b8-e723-4daf-ad68-f6979640ec5a_1099x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Pw2D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3baa9b8-e723-4daf-ad68-f6979640ec5a_1099x900.png 424w, https://substackcdn.com/image/fetch/$s_!Pw2D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3baa9b8-e723-4daf-ad68-f6979640ec5a_1099x900.png 848w, https://substackcdn.com/image/fetch/$s_!Pw2D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3baa9b8-e723-4daf-ad68-f6979640ec5a_1099x900.png 1272w, https://substackcdn.com/image/fetch/$s_!Pw2D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3baa9b8-e723-4daf-ad68-f6979640ec5a_1099x900.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Pw2D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3baa9b8-e723-4daf-ad68-f6979640ec5a_1099x900.png" width="1099" height="900" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3baa9b8-e723-4daf-ad68-f6979640ec5a_1099x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:900,&quot;width&quot;:1099,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76382,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Pw2D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3baa9b8-e723-4daf-ad68-f6979640ec5a_1099x900.png 424w, https://substackcdn.com/image/fetch/$s_!Pw2D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3baa9b8-e723-4daf-ad68-f6979640ec5a_1099x900.png 848w, https://substackcdn.com/image/fetch/$s_!Pw2D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3baa9b8-e723-4daf-ad68-f6979640ec5a_1099x900.png 1272w, https://substackcdn.com/image/fetch/$s_!Pw2D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3baa9b8-e723-4daf-ad68-f6979640ec5a_1099x900.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And not when you&#8217;re logged out!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UeAL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F575b2411-cddd-46e8-bbb5-ae100d97b631_1093x685.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UeAL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F575b2411-cddd-46e8-bbb5-ae100d97b631_1093x685.png 424w, https://substackcdn.com/image/fetch/$s_!UeAL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F575b2411-cddd-46e8-bbb5-ae100d97b631_1093x685.png 848w, https://substackcdn.com/image/fetch/$s_!UeAL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F575b2411-cddd-46e8-bbb5-ae100d97b631_1093x685.png 1272w, https://substackcdn.com/image/fetch/$s_!UeAL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F575b2411-cddd-46e8-bbb5-ae100d97b631_1093x685.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!UeAL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F575b2411-cddd-46e8-bbb5-ae100d97b631_1093x685.png" width="1093" height="685" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/575b2411-cddd-46e8-bbb5-ae100d97b631_1093x685.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:685,&quot;width&quot;:1093,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!UeAL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F575b2411-cddd-46e8-bbb5-ae100d97b631_1093x685.png 424w, https://substackcdn.com/image/fetch/$s_!UeAL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F575b2411-cddd-46e8-bbb5-ae100d97b631_1093x685.png 848w, https://substackcdn.com/image/fetch/$s_!UeAL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F575b2411-cddd-46e8-bbb5-ae100d97b631_1093x685.png 1272w, https://substackcdn.com/image/fetch/$s_!UeAL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F575b2411-cddd-46e8-bbb5-ae100d97b631_1093x685.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>5. Wrapping Up</h3><p>With this setup:</p><ul><li><p>The backend now requires a valid access token for API access.</p></li><li><p>The frontend uses a centralised <code>apiClient</code> to attach the token to every request automatically.</p></li><li><p>A reusable <code>student-api</code> module handles all CRUD operations for student data, keeping the codebase organised and easy to maintain.</p></li><li><p>Minimal error handling has been done in this example, I would encourage more thorough error handling for production systems.</p></li></ul><p>By following these steps, you avoid redundant authentication code across components, making your app more scalable and secure.</p><p>In the next episode, I&#8217;ll show you how to protect specific pages in your app by hiding and routing users away from restricted areas rather than throwing the 401 which we currently do. This will ensure that users without the proper access are redirected to the home page, keeping your application secure and user-friendly.</p><div><hr></div><p>If you liked this article, don&#8217;t forget to check out the video that goes into more detail:</p><div id="youtube2-4ERYVgW027A" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;4ERYVgW027A&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/4ERYVgW027A?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Want to view the source code? Check it out <a href="https://github.com/Jade-Codes/auth-made-easy">here</a>!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Behavioral: STOP Making These Mistakes!]]></title><description><![CDATA[An interview with a Principal Software Engineering Manager at Microsoft, what does it entail?]]></description><link>https://www.techunfiltered.io/p/the-behavioral-stop-making-these</link><guid isPermaLink="false">https://www.techunfiltered.io/p/the-behavioral-stop-making-these</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Wed, 09 Oct 2024 10:03:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/zV95P-8DMkw" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ever wondered why you didn't land that dream tech job? Join me for an enlightening conversation with Nick Cosentino, a Principal Software Engineering Manager at Microsoft, (also known as <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Dev Leader&quot;,&quot;id&quot;:127921856,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3987aae-b20c-4b3f-97de-2c6430c1febc_720x720.png&quot;,&quot;uuid&quot;:&quot;ec09b36b-3b2b-42d7-90af-b1edd4bf71a3&quot;}" data-component-name="MentionToDOM"></span>) as we decode the behavioral interview process.</p><p>A few weeks ago, I had the privilege of sitting down with Nick to tap into his wealth of experience as an interviewer. We explored what truly makes a candidate stand out in today's competitive market.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>In this episode, we'll uncover the common pitfalls that trip up even the most talented developers. More importantly, you'll learn how to transform those tricky interview scenarios into golden opportunities to showcase your skills and potential.</p><p>In this eye-opening podcast, we'll: </p><ol><li><p>Expose the top mistakes candidates make in behavioral interviews</p></li><li><p>Talk about how to eliminate bias during interviews</p></li><li><p>Walk through real-world interview questions </p></li><li><p>Contrast lackluster responses with standout answers </p></li><li><p>Reveal insider tips to showcase your soft skills and leadership potential </p></li></ol><p>Whether you're a seasoned pro or just starting your tech career, this episode is your backstage pass to mastering the art of the behavioral interview. </p><p>Don't miss this chance to gain a competitive edge in your next job hunt!</p><div id="youtube2-zV95P-8DMkw" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;zV95P-8DMkw&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/zV95P-8DMkw?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Want to learn more? Sign up to Nick&#8217;s course today: https://dometrain.com/course/career-nailing-the-behavioral-interview/ <br></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Auth Made Easy: FastAPI with Azure]]></title><description><![CDATA[In today's article, we breakdown how to get authenticated using FastAPI Azure Auth]]></description><link>https://www.techunfiltered.io/p/auth-made-easy-fastapi-with-azure</link><guid isPermaLink="false">https://www.techunfiltered.io/p/auth-made-easy-fastapi-with-azure</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Fri, 23 Aug 2024 17:01:37 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/226dd627-2ce4-4f8a-a64b-73f55aceea90_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Let&#8217;s preface this, I&#8217;m not a Python developer, but Python has become a part of my every day life at Microsoft. Many of our customers use it, many of my peers use it, and so I occasionally have to use it too.</p><p>I quite like it, and getting up and running with it is relatively easy. By popular request, I&#8217;ve created a how-to guide on how to get up and running easily with Azure auth.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>For this tutorial we will be using Python with the following libraries: <a href="https://pypi.org/project/fastapi/">Fast-API</a> and <a href="https://pypi.org/project/fastapi-azure-auth/">FastAPI-Azure-Auth</a>, it also assumes you already have Python installed.</p><div><hr></div><h3>1. Getting the virtual environment sorted</h3><p>First of all we need to get our python environment up and running. <a href="https://python.land/virtual-environments/virtualenv">A virtual environment allows you to install your packages in a location that&#8217;s isolated from the rest of your system.</a> This means any of the dependencies we install will be localised to this environment, this is really useful when you&#8217;re working with multiple python projects to ensure nothing gets conflicted. </p><p>I&#8217;m using bash so this involves creating the environment:</p><h6><code>python3 -m venv venv</code></h6><p>This will create a virtual environment folder, in order to activate you virtual environment you can then run the following command</p><h6><code>source venv/bin/activate</code></h6><p>This will mean that you are now inside your environment</p><p>Note: I&#8217;m using bash inside my WSL environment, if you are using Powershell or similar, there is different commands needed. See <a href="https://python.land/virtual-environments/virtualenv">here</a> for further details.</p><div><hr></div><h3>2. Installing the dependencies</h3><p>Firstly we need to install FastAPI and Uvicorn, which are needed in order to run fast api:</p><h6><code>pip install fastapi uvicorn</code></h6><p>And we need to also install FastAPI-Azure-Auth:</p><h6><code>pip install fastapi-azure-auth</code></h6><p>And they should be the only dependencies we need!</p><div><hr></div><h3>3. Adding an example endpoint</h3><p>In order to get the initial project set up, I&#8217;m just going to create an endpoint that returns a list of students.</p><p>I&#8217;ve created the following files:</p><h6><code>- students/students.json</code></h6><h6><code>- students/students.py</code></h6><h6><code>- main.py</code></h6><p>In the students.json file, I&#8217;ve used a website called <a href="https://mockaroo.com/">mockaroo</a> that allows you to create dummy json data that you can use to return mock data. I find it really useful for creating endpoints like this.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QI2h!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc674d7a-d8d6-48e6-9047-ac19f655ae17_1689x520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QI2h!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc674d7a-d8d6-48e6-9047-ac19f655ae17_1689x520.png 424w, https://substackcdn.com/image/fetch/$s_!QI2h!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc674d7a-d8d6-48e6-9047-ac19f655ae17_1689x520.png 848w, https://substackcdn.com/image/fetch/$s_!QI2h!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc674d7a-d8d6-48e6-9047-ac19f655ae17_1689x520.png 1272w, https://substackcdn.com/image/fetch/$s_!QI2h!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc674d7a-d8d6-48e6-9047-ac19f655ae17_1689x520.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!QI2h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc674d7a-d8d6-48e6-9047-ac19f655ae17_1689x520.png" width="1456" height="448" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc674d7a-d8d6-48e6-9047-ac19f655ae17_1689x520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:448,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:69194,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QI2h!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc674d7a-d8d6-48e6-9047-ac19f655ae17_1689x520.png 424w, https://substackcdn.com/image/fetch/$s_!QI2h!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc674d7a-d8d6-48e6-9047-ac19f655ae17_1689x520.png 848w, https://substackcdn.com/image/fetch/$s_!QI2h!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc674d7a-d8d6-48e6-9047-ac19f655ae17_1689x520.png 1272w, https://substackcdn.com/image/fetch/$s_!QI2h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc674d7a-d8d6-48e6-9047-ac19f655ae17_1689x520.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Then we set up the students.py file which is going to contain the students endpoint that returns the list of students.</p><p>First, we register the router:</p><h6><code>from fastapi import APIRouter</code></h6><h6><code>router = APIRouter(</code></h6><h6><code>&nbsp; &nbsp; prefix="/api/students",</code></h6><h6><code>&nbsp; &nbsp; responses={404: {"description": "Endpoint not found"}}</code></h6><h6><code>)</code></h6><p>Then we create the endpoint that is just going to return the contents of the students.json file:</p><h6><code>@router.get("/")</code></h6><h6><code>async def get_students():</code></h6><h6><code>&nbsp; &nbsp; with open('./students/students.json', 'r', encoding='utf-8') as file_object:</code></h6><h6><code>&nbsp; &nbsp; &nbsp; &nbsp; return json.load(file_object)</code></h6><p>Once we have set up the students.py file, we then need to set up the main.py file which will contain the configuration for our FastApi and register our students router.</p><p>Firstly we&#8217;re going to add:</p><h6><code>app = FastAPI()</code></h6><p>And then we&#8217;re going to register our router:</p><h6><code>app.include_router(students.router)</code></h6><p>And this should be everything we need to get up and running with FastAPI.</p><p>We should be able to test this by launching our application in vs code and going to swagger:</p><h6><code>http://localhost:8000/docs</code></h6><p>And testing the endpoint returns the students data:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fGVz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfb403d-c997-476f-b04e-58808e26a760_1323x661.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fGVz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfb403d-c997-476f-b04e-58808e26a760_1323x661.png 424w, https://substackcdn.com/image/fetch/$s_!fGVz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfb403d-c997-476f-b04e-58808e26a760_1323x661.png 848w, https://substackcdn.com/image/fetch/$s_!fGVz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfb403d-c997-476f-b04e-58808e26a760_1323x661.png 1272w, https://substackcdn.com/image/fetch/$s_!fGVz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfb403d-c997-476f-b04e-58808e26a760_1323x661.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!fGVz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfb403d-c997-476f-b04e-58808e26a760_1323x661.png" width="1323" height="661" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3dfb403d-c997-476f-b04e-58808e26a760_1323x661.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:661,&quot;width&quot;:1323,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:247993,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fGVz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfb403d-c997-476f-b04e-58808e26a760_1323x661.png 424w, https://substackcdn.com/image/fetch/$s_!fGVz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfb403d-c997-476f-b04e-58808e26a760_1323x661.png 848w, https://substackcdn.com/image/fetch/$s_!fGVz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfb403d-c997-476f-b04e-58808e26a760_1323x661.png 1272w, https://substackcdn.com/image/fetch/$s_!fGVz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3dfb403d-c997-476f-b04e-58808e26a760_1323x661.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>4. Setting up the azure auth</h3><p>The next thing I&#8217;m going to do is set up the FastAPI-Azure-Auth, to do this I first create the following file:</p><h6><code>- auth.py</code></h6><p>Which is going to contain the scheme, in order to add the scheme you have to ensure we have the correct details of the app registrations in Azure.</p><p>If you remember from my previous <a href="https://jadecodes.substack.com/p/auth-made-easy-setting-up-a-trusted">tutorial</a> we have already set up the app registrations for both the frontend and the backend, so if you haven&#8217;t done this, set this up first.</p><p>Here is the scheme we will be adding to the auth.py file:</p><h6><code>azure_scheme = SingleTenantAzureAuthorizationCodeBearer(</code></h6><h6><code>&nbsp; &nbsp; app_client_id='b295d89d-31ac-4741-95ce-2e9bcd58ddda',</code></h6><h6><code>&nbsp; &nbsp; tenant_id='3f63b506-db59-465e-8d23-78c6cd72c13b',</code></h6><h6><code>&nbsp; &nbsp; scopes={'api://edutaskhub-be/access_as_user':'access_as_user'},</code></h6><h6><code>&nbsp; &nbsp; allow_guest_users=True</code></h6><h6><code>)</code></h6><p></p><p>Where:</p><ul><li><p><em>app_client_id</em>: is the client id of the backend-app registration</p></li><li><p><em>tenant_id</em>: is the tenant id of the current azure tenant</p></li><li><p><em>scopes</em>: is the scope we created for the backend</p></li><li><p><em>allow_guest_users</em>: only set this to true if you are using a guest account like me</p></li></ul><p>And I&#8217;m also going to update the FastAPI configuration in the main.py file so that I can test this via the swagger page:</p><h6><code>app = FastAPI(</code></h6><h6><code>&nbsp; &nbsp; swagger_ui_oauth2_redirect_url='/oauth2-redirect',</code></h6><h6><code>&nbsp; &nbsp; swagger_ui_init_oauth={</code></h6><h6><code>&nbsp; &nbsp; &nbsp; &nbsp; 'usePkceWithAuthorizationCodeGrant': True,</code></h6><h6><code>&nbsp; &nbsp; &nbsp; &nbsp; 'clientId': '5d31bed7-2372-4e43-9365-1706ff6601de',</code></h6><h6><code>&nbsp; &nbsp; &nbsp; &nbsp; 'scopes': 'api://edutaskhub-be/access_as_user',</code></h6><h6><code>&nbsp; &nbsp; },</code></h6><h6><code>)</code></h6><p>Where:</p><ul><li><p><em>swagger_ui_oauth2_redirect_url</em>: is the redirect URL of the frontend application, I had added this redirect url to the frontend app registration in the portal:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZsaN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2456982e-cd76-403c-a2c7-1724db03de0d_1597x571.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZsaN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2456982e-cd76-403c-a2c7-1724db03de0d_1597x571.png 424w, https://substackcdn.com/image/fetch/$s_!ZsaN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2456982e-cd76-403c-a2c7-1724db03de0d_1597x571.png 848w, https://substackcdn.com/image/fetch/$s_!ZsaN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2456982e-cd76-403c-a2c7-1724db03de0d_1597x571.png 1272w, https://substackcdn.com/image/fetch/$s_!ZsaN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2456982e-cd76-403c-a2c7-1724db03de0d_1597x571.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZsaN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2456982e-cd76-403c-a2c7-1724db03de0d_1597x571.png" width="1456" height="521" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2456982e-cd76-403c-a2c7-1724db03de0d_1597x571.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:521,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:72941,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ZsaN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2456982e-cd76-403c-a2c7-1724db03de0d_1597x571.png 424w, https://substackcdn.com/image/fetch/$s_!ZsaN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2456982e-cd76-403c-a2c7-1724db03de0d_1597x571.png 848w, https://substackcdn.com/image/fetch/$s_!ZsaN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2456982e-cd76-403c-a2c7-1724db03de0d_1597x571.png 1272w, https://substackcdn.com/image/fetch/$s_!ZsaN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2456982e-cd76-403c-a2c7-1724db03de0d_1597x571.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p><em>usePkceWithAuthorizationCodeGrant</em>: set to true to specify if thats the grant we are using</p></li><li><p><em>client_id</em>: is the client id of the backend-app registration</p></li><li><p><em>scopes</em>: is the scope we created for the backend</p></li></ul><p>The last thing to do is to configure the router to require auth scheme:</p><h6><code>app.include_router(students.router, dependencies=[Security(azure_scheme)])</code></h6><div><hr></div><h3>5. Testing it all works</h3><p>And there we are, we should be able to use the swagger to verify we cannot access the endpoint without logging in:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qqxo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3d1cfe-6e5b-40e8-9098-705945c4d3c8_1324x493.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qqxo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3d1cfe-6e5b-40e8-9098-705945c4d3c8_1324x493.png 424w, https://substackcdn.com/image/fetch/$s_!qqxo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3d1cfe-6e5b-40e8-9098-705945c4d3c8_1324x493.png 848w, https://substackcdn.com/image/fetch/$s_!qqxo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3d1cfe-6e5b-40e8-9098-705945c4d3c8_1324x493.png 1272w, https://substackcdn.com/image/fetch/$s_!qqxo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3d1cfe-6e5b-40e8-9098-705945c4d3c8_1324x493.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!qqxo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3d1cfe-6e5b-40e8-9098-705945c4d3c8_1324x493.png" width="1324" height="493" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6b3d1cfe-6e5b-40e8-9098-705945c4d3c8_1324x493.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:493,&quot;width&quot;:1324,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:157323,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qqxo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3d1cfe-6e5b-40e8-9098-705945c4d3c8_1324x493.png 424w, https://substackcdn.com/image/fetch/$s_!qqxo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3d1cfe-6e5b-40e8-9098-705945c4d3c8_1324x493.png 848w, https://substackcdn.com/image/fetch/$s_!qqxo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3d1cfe-6e5b-40e8-9098-705945c4d3c8_1324x493.png 1272w, https://substackcdn.com/image/fetch/$s_!qqxo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b3d1cfe-6e5b-40e8-9098-705945c4d3c8_1324x493.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And then if we log in:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PiJ6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83b1ed-fdb4-4dc5-bdf3-1bbfc27c9f7d_628x585.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PiJ6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83b1ed-fdb4-4dc5-bdf3-1bbfc27c9f7d_628x585.png 424w, https://substackcdn.com/image/fetch/$s_!PiJ6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83b1ed-fdb4-4dc5-bdf3-1bbfc27c9f7d_628x585.png 848w, https://substackcdn.com/image/fetch/$s_!PiJ6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83b1ed-fdb4-4dc5-bdf3-1bbfc27c9f7d_628x585.png 1272w, https://substackcdn.com/image/fetch/$s_!PiJ6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83b1ed-fdb4-4dc5-bdf3-1bbfc27c9f7d_628x585.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!PiJ6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83b1ed-fdb4-4dc5-bdf3-1bbfc27c9f7d_628x585.png" width="628" height="585" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a83b1ed-fdb4-4dc5-bdf3-1bbfc27c9f7d_628x585.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:585,&quot;width&quot;:628,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:154593,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PiJ6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83b1ed-fdb4-4dc5-bdf3-1bbfc27c9f7d_628x585.png 424w, https://substackcdn.com/image/fetch/$s_!PiJ6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83b1ed-fdb4-4dc5-bdf3-1bbfc27c9f7d_628x585.png 848w, https://substackcdn.com/image/fetch/$s_!PiJ6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83b1ed-fdb4-4dc5-bdf3-1bbfc27c9f7d_628x585.png 1272w, https://substackcdn.com/image/fetch/$s_!PiJ6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83b1ed-fdb4-4dc5-bdf3-1bbfc27c9f7d_628x585.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We should get a successful response:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YYAD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4af06fde-ab7f-4720-a1fd-5fb51dc504f4_1309x748.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YYAD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4af06fde-ab7f-4720-a1fd-5fb51dc504f4_1309x748.png 424w, https://substackcdn.com/image/fetch/$s_!YYAD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4af06fde-ab7f-4720-a1fd-5fb51dc504f4_1309x748.png 848w, https://substackcdn.com/image/fetch/$s_!YYAD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4af06fde-ab7f-4720-a1fd-5fb51dc504f4_1309x748.png 1272w, https://substackcdn.com/image/fetch/$s_!YYAD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4af06fde-ab7f-4720-a1fd-5fb51dc504f4_1309x748.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!YYAD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4af06fde-ab7f-4720-a1fd-5fb51dc504f4_1309x748.png" width="1309" height="748" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4af06fde-ab7f-4720-a1fd-5fb51dc504f4_1309x748.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:748,&quot;width&quot;:1309,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!YYAD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4af06fde-ab7f-4720-a1fd-5fb51dc504f4_1309x748.png 424w, https://substackcdn.com/image/fetch/$s_!YYAD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4af06fde-ab7f-4720-a1fd-5fb51dc504f4_1309x748.png 848w, https://substackcdn.com/image/fetch/$s_!YYAD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4af06fde-ab7f-4720-a1fd-5fb51dc504f4_1309x748.png 1272w, https://substackcdn.com/image/fetch/$s_!YYAD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4af06fde-ab7f-4720-a1fd-5fb51dc504f4_1309x748.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>And that&#8217;s all from me, if you&#8217;d like to see the video of this go here:</p><div id="youtube2-7VZ9GeXq82U" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;7VZ9GeXq82U&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/7VZ9GeXq82U?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>And if you&#8217;d like to see the example code, visit my <a href="https://github.com/Jade-Codes/edutaskhub-be/tree/main">GitHub</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[From Lead Engineer to Software Engineer II]]></title><description><![CDATA[Career progression isn't always linear, my decision to switch from a lead engineer to software engineer II had many factors...]]></description><link>https://www.techunfiltered.io/p/from-lead-engineer-to-software-engineer</link><guid isPermaLink="false">https://www.techunfiltered.io/p/from-lead-engineer-to-software-engineer</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Mon, 22 Jul 2024 19:34:44 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e278be41-aea9-464b-9e69-bfb064fc60d0_2880x1620.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Yes you&#8217;re reading that right.</p><p>When people usually write articles like this, they talk about their path to promotion. I&#8217;m here to talk about going in the opposite direction.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>You see, before I joined Microsoft, I was a Lead Engineer at a Startup and I decided to take, what some may deem, a backwards step, to join a company I was so eager to join.</p><p>Why did I do that? Some people have asked.</p><p>Was I insane? Did I not believe in myself? Did I not negotiate hard enough?</p><p>Hopefully I can explain a little bit more in this article my thought processes throughout the process of changing roles.</p><h3>1. Back to the start&#8230;</h3><p>I figured I should start with my journey to getting promoted to Lead Engineer in the first place. </p><p>The company I was previously at was a fintech Startup in the events space. I joined the company as a senior software engineer and was working predominantly on the RFID platform.</p><p>If you&#8217;ve ever been to an event where you&#8217;re given a wristband that you could use to buy food, go in certain areas and use lockers etc&#8230; Well we were basically working on the technology that enabled that.</p><p>When I joined I made it clear that eventually I would love to be a lead engineer or team lead. </p><p>I&#8217;m really passionate about helping to build others and make them better, and so it was something I was really keen to progress into.</p><p>After around half a year in, I got a little bit more than I bargained for though, our Team Lead on the RFID platform was a contractor, and he just announced that he was leaving in a few weeks because he wanted to go back to being a regular IC. </p><p>Because I was the only in-house senior on the product, and I had the most domain knowledge at the time, an opportunity came where this role was offered to me.</p><p>I was obviously ecstatic about it, it was an amazing opportunity for me and it aligned with my long term goals, but I can&#8217;t lie and say I felt that I was ready. </p><p>From a people and backlogging standpoint, I could do it, those were my strengths&#8230; But from a systems architecture and technical point of view? I just didn&#8217;t feel I had the experience that I wanted to, to do the job the way I wanted.</p><h3>2. Surprise I&#8217;m pregnant!</h3><p>A month or so after becoming a Lead Engineer, I find out I&#8217;m pregnant. Typical, everything always happens at once for me ha!</p><p>A few months later we need to fly out to Durango, I&#8217;m 15 weeks pregnant and we are there to fix any urgent issues that occur during our first live event. </p><p>Now this is probably where I excel, I&#8217;m good in a crisis and I&#8217;m also good with defect triage.</p><p>I&#8217;ve gotta be honest, the event was a little bit of a disaster, there was no WiFi, when we told them we needed WiFi in order for the online top ups to occur, we were given the tiniest stall to set up all of our devices and it was in front of a restaurant where everyone could see, the devices that we gave to the vendors kept overheating due to the heat and customers were getting frustrated at the wait times.</p><p>Whilst the event was a total mishap, we had some great learnings that we could take away from it and make the product better overall.</p><p>Shortly after I got back, I started working with my maternity cover who was shifting over from our other product offering to take my place as tech lead on the team.</p><p>It became abundantly clear, at least to me, that there were gaps I was missing from an architecture standpoint. </p><p>For example, we were having some issues with reconciliation and were having to do so of them manually due to a way the product had been designed, he came up with a really clean solution for us to be able to do that going forward.</p><p>And it just made me feel like I needed more technical mentorship first, as I believe as a tech lead, I should have also been able to do that.</p><h3>3. Contact from Microsoft</h3><p>Also shortly after getting back from Durango, I receive this message in my inbox&#8230;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6ZHM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3c5fe0-3751-418a-a6d7-fca586fb54ba_391x606.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6ZHM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3c5fe0-3751-418a-a6d7-fca586fb54ba_391x606.png 424w, https://substackcdn.com/image/fetch/$s_!6ZHM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3c5fe0-3751-418a-a6d7-fca586fb54ba_391x606.png 848w, https://substackcdn.com/image/fetch/$s_!6ZHM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3c5fe0-3751-418a-a6d7-fca586fb54ba_391x606.png 1272w, https://substackcdn.com/image/fetch/$s_!6ZHM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3c5fe0-3751-418a-a6d7-fca586fb54ba_391x606.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!6ZHM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3c5fe0-3751-418a-a6d7-fca586fb54ba_391x606.png" width="391" height="606" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d3c5fe0-3751-418a-a6d7-fca586fb54ba_391x606.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:606,&quot;width&quot;:391,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:45230,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6ZHM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3c5fe0-3751-418a-a6d7-fca586fb54ba_391x606.png 424w, https://substackcdn.com/image/fetch/$s_!6ZHM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3c5fe0-3751-418a-a6d7-fca586fb54ba_391x606.png 848w, https://substackcdn.com/image/fetch/$s_!6ZHM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3c5fe0-3751-418a-a6d7-fca586fb54ba_391x606.png 1272w, https://substackcdn.com/image/fetch/$s_!6ZHM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3c5fe0-3751-418a-a6d7-fca586fb54ba_391x606.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And I&#8217;m thinking, is this real? I go to the recruiter&#8217;s profile to check they definitely work for Microsoft and send to my partner/best friend.</p><p>For sure, it is and I&#8217;m apprehensive, I&#8217;m pregnant of course so I find that a worrying factor, I respond with this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Zmja!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a27a413-c087-4b9a-9f9e-2618108acd5c_438x309.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zmja!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a27a413-c087-4b9a-9f9e-2618108acd5c_438x309.png 424w, https://substackcdn.com/image/fetch/$s_!Zmja!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a27a413-c087-4b9a-9f9e-2618108acd5c_438x309.png 848w, https://substackcdn.com/image/fetch/$s_!Zmja!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a27a413-c087-4b9a-9f9e-2618108acd5c_438x309.png 1272w, https://substackcdn.com/image/fetch/$s_!Zmja!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a27a413-c087-4b9a-9f9e-2618108acd5c_438x309.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zmja!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a27a413-c087-4b9a-9f9e-2618108acd5c_438x309.png" width="438" height="309" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a27a413-c087-4b9a-9f9e-2618108acd5c_438x309.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:309,&quot;width&quot;:438,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:22897,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Zmja!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a27a413-c087-4b9a-9f9e-2618108acd5c_438x309.png 424w, https://substackcdn.com/image/fetch/$s_!Zmja!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a27a413-c087-4b9a-9f9e-2618108acd5c_438x309.png 848w, https://substackcdn.com/image/fetch/$s_!Zmja!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a27a413-c087-4b9a-9f9e-2618108acd5c_438x309.png 1272w, https://substackcdn.com/image/fetch/$s_!Zmja!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a27a413-c087-4b9a-9f9e-2618108acd5c_438x309.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Thankfully, the recruiter messaged me back and told me that regardless of my situation they would be happy to accommodate.</p><p>And so I thought, what&#8217;s the worst that could happen?</p><h3>4. After the offer&#8230;</h3><p>When I got the offer, I was shook.</p><p>For full transparency, when I was a Lead Engineer I was on &#163;60k, the thing about being promoted earlier than you&#8217;re ready is that the salary typically falls in line with that also.</p><p>The offer I got from Microsoft (salary + bonus + stocks) put me close to &#163;100k as well as a great company maternity pay too.</p><p>I wasn&#8217;t expecting such a difference, I was pretty honest with what I was looking for and was happy to take a similar salary to what I was on previously due to taking a lower role with less stress.</p><p>They gave me an offer which was pretty much in the middle of their range for an software engineer II, the great thing about working at Microsoft is you have the ability to check your comp ratio against everyone else&#8217;s.</p><p>Again, this was another indication to me of how fair Microsoft are, they didn&#8217;t try to underpay or lowball me based on my current salary, they paid me what was in line with everyone else.</p><h3>5. The redundancies</h3><p>The Startup was struggling to secure the seed funding they needed for the next year, and during the time I left, there was also a few redundancies made outside of the engineering teams. </p><p>Shortly after I left, cuts were also made to the engineering teams too.</p><p>Whilst I couldn&#8217;t have foreseen this, I do feel very lucky to have got the offer when I did, because going on maternity would have made me very anxious.</p><h3>6. Growth opportunities</h3><p>One of the things that excited me most about working at Microsoft was the growth opportunities. </p><p>For those that know me, they know I crave strong technical leadership, I love being surrounded by people who can teach me things and that can make me a better software engineer.</p><p>I knew that by joining Microsoft I would be surrounded by just that.</p><p>I have been so fortunate over the past couple years to have such strong technical and people leadership since starting here. The thing I love most is that people just get stuff done.</p><p>That&#8217;s not to say I didn&#8217;t have strong leadership before, I absolutely did and I learned loads&#8230; But it does feel like since starting at Microsoft, my learning has accelerated.</p><h3>To summarise&#8230;</h3><p>So if I were to condense this list into the key considerations that I had, they would be:</p><ol><li><p>I didn&#8217;t feel like I was ready to be a lead engineer, I still needed a lot of mentorship.</p></li><li><p>Microsoft were my dream company to work for.</p></li><li><p>The compensation Microsoft offered were amazing.</p></li><li><p>The growth opportunities at Microsoft were incredible too.</p></li><li><p>Instability at my previous role due to redundancies occurring.</p></li></ol><p>Ultimately, I didn&#8217;t care about the title, I cared about the work I&#8217;d be doing. My core driver is learning, and as long as I get to do that, I&#8217;m happy.</p><p>Should I have negotiated title? I don&#8217;t like to dwell on the what ifs, all I know is that I worked hard and I feel they&#8217;ve seen my potential since.</p><p>Do I regret my decision? Never, it was the best career decision I made.</p><div><hr></div><p>If you made it this far, thanks for reading! Why not check out my latest video where I talk all about it too:</p><div id="youtube2-0G_my3edBhE" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;0G_my3edBhE&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/0G_my3edBhE?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><p>Articles I enjoyed this week:</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:146852334,&quot;url&quot;:&quot;https://fiodar.substack.com/p/10-important-lessons-crowdstrike-incident-taught&quot;,&quot;publication_id&quot;:1948758,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Fiodar&#8217;s Tech Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7201289a-4ada-4181-baf4-eddfb183e1b6_1156x1460.jpeg&quot;,&quot;title&quot;:&quot;10 Important Lessons CrowdStrike Incident Taught Us&quot;,&quot;truncated_body_text&quot;:&quot;On the 19th of July 2024, a faulty update to CrowdStrike endpoint protection software caused mayhem around the world. Windows computers that the update was installed on started showing the infamous blue screen of death. As a result, many flights were canceled, bank transactions couldn&#8217;t be processed, and many other services were disrupted.&quot;,&quot;date&quot;:&quot;2024-07-21T21:44:07.890Z&quot;,&quot;like_count&quot;:2,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:73004539,&quot;name&quot;:&quot;Fiodar Sazanavets&quot;,&quot;handle&quot;:&quot;fiodar&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7201289a-4ada-4181-baf4-eddfb183e1b6_1156x1460.jpeg&quot;,&quot;bio&quot;:&quot;software engineer with leadership experience | Microsoft MVP | author of technical books and courses&quot;,&quot;profile_set_up_at&quot;:&quot;2023-09-13T19:43:37.757Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:1939990,&quot;user_id&quot;:73004539,&quot;publication_id&quot;:1948758,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:1948758,&quot;name&quot;:&quot;Fiodar&#8217;s Tech Insights&quot;,&quot;subdomain&quot;:&quot;fiodar&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Helping you to take your tech career to the next level.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7201289a-4ada-4181-baf4-eddfb183e1b6_1156x1460.jpeg&quot;,&quot;author_id&quot;:73004539,&quot;theme_var_background_pop&quot;:&quot;#9A6600&quot;,&quot;created_at&quot;:&quot;2023-09-13T19:43:42.345Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Fiodar Sazanavets&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;is_personal_mode&quot;:false}},{&quot;id&quot;:2115040,&quot;user_id&quot;:73004539,&quot;publication_id&quot;:2110374,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:2110374,&quot;name&quot;:&quot;Fiodar&#8217;s Substack&quot;,&quot;subdomain&quot;:&quot;fiodarsazanavets&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;My personal Substack&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7201289a-4ada-4181-baf4-eddfb183e1b6_1156x1460.jpeg&quot;,&quot;author_id&quot;:73004539,&quot;theme_var_background_pop&quot;:&quot;#009B50&quot;,&quot;created_at&quot;:&quot;2023-11-16T17:22:57.176Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Fiodar Sazanavets&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;is_personal_mode&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://fiodar.substack.com/p/10-important-lessons-crowdstrike-incident-taught?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!mKUv!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7201289a-4ada-4181-baf4-eddfb183e1b6_1156x1460.jpeg" loading="lazy"><span class="embedded-post-publication-name">Fiodar&#8217;s Tech Insights</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">10 Important Lessons CrowdStrike Incident Taught Us</div></div><div class="embedded-post-body">On the 19th of July 2024, a faulty update to CrowdStrike endpoint protection software caused mayhem around the world. Windows computers that the update was installed on started showing the infamous blue screen of death. As a result, many flights were canceled, bank transactions couldn&#8217;t be processed, and many other services were disrupted&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 years ago &#183; 2 likes &#183; Fiodar Sazanavets</div></a></div><p>By <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Fiodar Sazanavets&quot;,&quot;id&quot;:73004539,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7201289a-4ada-4181-baf4-eddfb183e1b6_1156x1460.jpeg&quot;,&quot;uuid&quot;:&quot;02f3d9da-e290-49e8-94c2-5de2247eba55&quot;}" data-component-name="MentionToDOM"></span> </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:146662054,&quot;url&quot;:&quot;https://implementing.substack.com/p/deploy-aws-sqs-queue-with-serverless&quot;,&quot;publication_id&quot;:2150088,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Implementing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaba889f-fab1-4b3e-b9d9-140c181fa0a1_512x512.png&quot;,&quot;title&quot;:&quot;Deploy AWS SQS Queue with Serverless framework&quot;,&quot;truncated_body_text&quot;:&quot;Hey, I'm Marco and welcome to my newsletter! As a software engineer, I created this newsletter to share my first-hand knowledge of the development world. Each topic we will explore will provide valuable insights, with the goal of inspiring and helping all of you on your journey.&quot;,&quot;date&quot;:&quot;2024-07-22T05:36:57.020Z&quot;,&quot;like_count&quot;:7,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:41640433,&quot;name&quot;:&quot;Marco Moauro&quot;,&quot;handle&quot;:&quot;implementing&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a131b28-eb85-4afb-a225-ea9231564158_1891x2950.jpeg&quot;,&quot;bio&quot;:&quot;Senior Software Engineer with 8+ years of experience in software design and development.\nThe solutions I developed in the last 2 years are currently used by companies such Airbnb, Uber and Skyscanner.&quot;,&quot;profile_set_up_at&quot;:&quot;2023-11-01T12:38:58.381Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:2156352,&quot;user_id&quot;:41640433,&quot;publication_id&quot;:2150088,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:2150088,&quot;name&quot;:&quot;Implementing&quot;,&quot;subdomain&quot;:&quot;implementing&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Explore coding tutorials, lessons learned, personal projects and more from a curious software engineer.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/daba889f-fab1-4b3e-b9d9-140c181fa0a1_512x512.png&quot;,&quot;author_id&quot;:41640433,&quot;theme_var_background_pop&quot;:&quot;#25BD65&quot;,&quot;created_at&quot;:&quot;2023-12-03T08:18:16.807Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;&#128187; Implementing&quot;,&quot;copyright&quot;:&quot;Marco Moauro&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;is_personal_mode&quot;:false}},{&quot;id&quot;:2076495,&quot;user_id&quot;:41640433,&quot;publication_id&quot;:2073698,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:2073698,&quot;name&quot;:&quot;Quickview - your Crypto Newsletter&quot;,&quot;subdomain&quot;:&quot;quickviewai&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Dive into the dynamic world of cryptocurrencies with us! Subscribe for curated summaries of the latest YouTube crypto videos, delivered straight to your inbox. Stay informed, skip the noise, and join a passionate community of crypto enthusiasts.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/053e3666-3484-42d4-a298-47f5c6f048d3_512x512.png&quot;,&quot;author_id&quot;:41640433,&quot;theme_var_background_pop&quot;:&quot;#0068EF&quot;,&quot;created_at&quot;:&quot;2023-11-01T12:40:03.620Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Quickview - your Crypto Newsletter&quot;,&quot;copyright&quot;:&quot;Marco Moauro&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;is_personal_mode&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://implementing.substack.com/p/deploy-aws-sqs-queue-with-serverless?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!U0Xz!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaba889f-fab1-4b3e-b9d9-140c181fa0a1_512x512.png" loading="lazy"><span class="embedded-post-publication-name">Implementing</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Deploy AWS SQS Queue with Serverless framework</div></div><div class="embedded-post-body">Hey, I'm Marco and welcome to my newsletter! As a software engineer, I created this newsletter to share my first-hand knowledge of the development world. Each topic we will explore will provide valuable insights, with the goal of inspiring and helping all of you on your journey&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 years ago &#183; 7 likes &#183; Marco Moauro</div></a></div><p>By <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Marco Moauro&quot;,&quot;id&quot;:41640433,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a131b28-eb85-4afb-a225-ea9231564158_1891x2950.jpeg&quot;,&quot;uuid&quot;:&quot;a5aacbec-16c5-4644-a1b4-c92b1254d3b7&quot;}" data-component-name="MentionToDOM"></span> </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:146847844,&quot;url&quot;:&quot;https://newsletter.eng-leadership.com/p/how-to-build-good-relationships-inside&quot;,&quot;publication_id&quot;:1115815,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Engineering Leadership&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0845c094-23e3-40d0-86f3-d1ff19631211_317x317.png&quot;,&quot;title&quot;:&quot;How to build good relationships inside and outside your engineering team&quot;,&quot;truncated_body_text&quot;:&quot;Intro Being able to build good relationships with your team and the people that you are working with, makes it SO much easier to collaborate and work together. On the other hand, if you don&#8217;t do this, it can cause a lot of uncertainties and issues. Let&#8217;s get more into the WHY next.&quot;,&quot;date&quot;:&quot;2024-07-21T15:54:55.468Z&quot;,&quot;like_count&quot;:36,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:106098672,&quot;name&quot;:&quot;Gregor Ojstersek&quot;,&quot;handle&quot;:&quot;gregorojstersek&quot;,&quot;previous_name&quot;:&quot;Gregor&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b7fdc30-d8c4-45f2-b0df-0b60baf9d4f4_1000x1000.jpeg&quot;,&quot;bio&quot;:&quot;CTO | Author of Engineering Leadership newsletter - Helping you become a great engineering leader!&quot;,&quot;profile_set_up_at&quot;:&quot;2022-10-03T11:48:31.646Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:1066676,&quot;user_id&quot;:106098672,&quot;publication_id&quot;:1115815,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:1115815,&quot;name&quot;:&quot;Engineering Leadership&quot;,&quot;subdomain&quot;:&quot;gregorojstersek&quot;,&quot;custom_domain&quot;:&quot;newsletter.eng-leadership.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Weekly newsletter for becoming a great engineering leader.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0845c094-23e3-40d0-86f3-d1ff19631211_317x317.png&quot;,&quot;author_id&quot;:106098672,&quot;theme_var_background_pop&quot;:&quot;#FF0000&quot;,&quot;created_at&quot;:&quot;2022-10-03T11:49:36.188Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Gregor Ojstersek&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;is_personal_mode&quot;:false}}],&quot;twitter_screen_name&quot;:&quot;gregorojstersek&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:100}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://newsletter.eng-leadership.com/p/how-to-build-good-relationships-inside?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!9opu!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0845c094-23e3-40d0-86f3-d1ff19631211_317x317.png" loading="lazy"><span class="embedded-post-publication-name">Engineering Leadership</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">How to build good relationships inside and outside your engineering team</div></div><div class="embedded-post-body">Intro Being able to build good relationships with your team and the people that you are working with, makes it SO much easier to collaborate and work together. On the other hand, if you don&#8217;t do this, it can cause a lot of uncertainties and issues. Let&#8217;s get more into the WHY next&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 years ago &#183; 36 likes &#183; Gregor Ojstersek</div></a></div><p>By <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Gregor Ojstersek&quot;,&quot;id&quot;:106098672,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b7fdc30-d8c4-45f2-b0df-0b60baf9d4f4_1000x1000.jpeg&quot;,&quot;uuid&quot;:&quot;1f06e400-f1e8-420a-8d24-ee410e3c934d&quot;}" data-component-name="MentionToDOM"></span> </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Auth Made Easy: Setting up a trusted relationship between app registrations in Azure]]></title><description><![CDATA[In today's article, we breakdown how to create a trusted relationship between a frontend SPA application and a backend API application in Azure.]]></description><link>https://www.techunfiltered.io/p/auth-made-easy-setting-up-a-trusted</link><guid isPermaLink="false">https://www.techunfiltered.io/p/auth-made-easy-setting-up-a-trusted</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Thu, 11 Jul 2024 17:00:55 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/603e046f-b532-4ea6-a499-2867a4458617_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One of the challenges I find with documentation on Azure is that whilst there&#8217;s a breadth of it, it tends to be scattered and you have to know where to look.</p><p>Tying things together can be a real challenge for someone who is still figuring out how it all works.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>One of the common things I have had to do is create a trusted relationship between a frontend SPA application and a backend API application.</p><p>Today I&#8217;ll be going through the steps on how to do this in the portal.</p><p>Now, before you<em> @</em> me, I know you can do this as infrastructure as code, and this would absolutely be my recommendation for those comfortable with Terraform and Azure. However, I&#8217;m a strong believer that for those getting to grips with something new in Azure, it&#8217;s best to first do it either through the portal, or through the Azure CLI so that you understand and get familiar with what is being created.</p><p>If you really want to know how to do it in Terraform, that&#8217;s a story for another day&#8230;</p><div><hr></div><h3>1. Creating the frontend app registration</h3><p>First of all we need to go into the <a href="https://portal.azure.com/">portal</a> and create an app registration for the frontend:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yWbv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00b088c0-4162-4157-9d58-85c7d9caba15_1099x589.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yWbv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00b088c0-4162-4157-9d58-85c7d9caba15_1099x589.png 424w, https://substackcdn.com/image/fetch/$s_!yWbv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00b088c0-4162-4157-9d58-85c7d9caba15_1099x589.png 848w, https://substackcdn.com/image/fetch/$s_!yWbv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00b088c0-4162-4157-9d58-85c7d9caba15_1099x589.png 1272w, https://substackcdn.com/image/fetch/$s_!yWbv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00b088c0-4162-4157-9d58-85c7d9caba15_1099x589.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!yWbv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00b088c0-4162-4157-9d58-85c7d9caba15_1099x589.png" width="1099" height="589" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00b088c0-4162-4157-9d58-85c7d9caba15_1099x589.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:589,&quot;width&quot;:1099,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128436,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yWbv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00b088c0-4162-4157-9d58-85c7d9caba15_1099x589.png 424w, https://substackcdn.com/image/fetch/$s_!yWbv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00b088c0-4162-4157-9d58-85c7d9caba15_1099x589.png 848w, https://substackcdn.com/image/fetch/$s_!yWbv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00b088c0-4162-4157-9d58-85c7d9caba15_1099x589.png 1272w, https://substackcdn.com/image/fetch/$s_!yWbv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00b088c0-4162-4157-9d58-85c7d9caba15_1099x589.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can do this either by searching for &#8216;<em>App Registrations</em>&#8217; in the search bar, or going through the Microsoft Entra view.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!M0WP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc6735e-762a-409c-9636-0c227eb92cb4_1102x589.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M0WP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc6735e-762a-409c-9636-0c227eb92cb4_1102x589.png 424w, https://substackcdn.com/image/fetch/$s_!M0WP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc6735e-762a-409c-9636-0c227eb92cb4_1102x589.png 848w, https://substackcdn.com/image/fetch/$s_!M0WP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc6735e-762a-409c-9636-0c227eb92cb4_1102x589.png 1272w, https://substackcdn.com/image/fetch/$s_!M0WP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc6735e-762a-409c-9636-0c227eb92cb4_1102x589.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!M0WP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc6735e-762a-409c-9636-0c227eb92cb4_1102x589.png" width="1102" height="589" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5dc6735e-762a-409c-9636-0c227eb92cb4_1102x589.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:589,&quot;width&quot;:1102,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:181952,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!M0WP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc6735e-762a-409c-9636-0c227eb92cb4_1102x589.png 424w, https://substackcdn.com/image/fetch/$s_!M0WP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc6735e-762a-409c-9636-0c227eb92cb4_1102x589.png 848w, https://substackcdn.com/image/fetch/$s_!M0WP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc6735e-762a-409c-9636-0c227eb92cb4_1102x589.png 1272w, https://substackcdn.com/image/fetch/$s_!M0WP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc6735e-762a-409c-9636-0c227eb92cb4_1102x589.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When creating this, we just need to ensure that we are pointing to redirect URI to our development redirect URI, this so happens to be the &#8216;<em>http://localhost:5173/</em>&#8217; for our React w/ Vite application.</p><div><hr></div><h3>2. Creating the backend app registration</h3><p>Similarly, let&#8217;s create the backend app registration:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LedE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fd7fd54-8fca-48ff-b384-8b0c7e247e7a_529x588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LedE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fd7fd54-8fca-48ff-b384-8b0c7e247e7a_529x588.png 424w, https://substackcdn.com/image/fetch/$s_!LedE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fd7fd54-8fca-48ff-b384-8b0c7e247e7a_529x588.png 848w, https://substackcdn.com/image/fetch/$s_!LedE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fd7fd54-8fca-48ff-b384-8b0c7e247e7a_529x588.png 1272w, https://substackcdn.com/image/fetch/$s_!LedE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fd7fd54-8fca-48ff-b384-8b0c7e247e7a_529x588.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!LedE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fd7fd54-8fca-48ff-b384-8b0c7e247e7a_529x588.png" width="529" height="588" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1fd7fd54-8fca-48ff-b384-8b0c7e247e7a_529x588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:588,&quot;width&quot;:529,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:145182,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LedE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fd7fd54-8fca-48ff-b384-8b0c7e247e7a_529x588.png 424w, https://substackcdn.com/image/fetch/$s_!LedE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fd7fd54-8fca-48ff-b384-8b0c7e247e7a_529x588.png 848w, https://substackcdn.com/image/fetch/$s_!LedE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fd7fd54-8fca-48ff-b384-8b0c7e247e7a_529x588.png 1272w, https://substackcdn.com/image/fetch/$s_!LedE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fd7fd54-8fca-48ff-b384-8b0c7e247e7a_529x588.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Because the backend is going to be an API, we need to configure it so that it will accept access tokens. Otherwise, it will reject any access tokens you try to pass through.</p><p>If you go to the backend manifest page, you will see there is the ability to update the manifest. </p><p>There is &#8216;<em>accessTokenAcceptedVersion</em>&#8217; which will initially be null, this needs to be changed to 2.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rCSK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccee3cc-00d6-424a-915d-af0d5159c715_436x580.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rCSK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccee3cc-00d6-424a-915d-af0d5159c715_436x580.png 424w, https://substackcdn.com/image/fetch/$s_!rCSK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccee3cc-00d6-424a-915d-af0d5159c715_436x580.png 848w, https://substackcdn.com/image/fetch/$s_!rCSK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccee3cc-00d6-424a-915d-af0d5159c715_436x580.png 1272w, https://substackcdn.com/image/fetch/$s_!rCSK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccee3cc-00d6-424a-915d-af0d5159c715_436x580.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!rCSK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccee3cc-00d6-424a-915d-af0d5159c715_436x580.png" width="436" height="580" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ccee3cc-00d6-424a-915d-af0d5159c715_436x580.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:580,&quot;width&quot;:436,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:212989,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rCSK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccee3cc-00d6-424a-915d-af0d5159c715_436x580.png 424w, https://substackcdn.com/image/fetch/$s_!rCSK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccee3cc-00d6-424a-915d-af0d5159c715_436x580.png 848w, https://substackcdn.com/image/fetch/$s_!rCSK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccee3cc-00d6-424a-915d-af0d5159c715_436x580.png 1272w, https://substackcdn.com/image/fetch/$s_!rCSK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccee3cc-00d6-424a-915d-af0d5159c715_436x580.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>3. Creating a scope in the backend</h3><p>The next thing to do is create expose the API, we do this by going on the &#8216;Expose an API&#8217;, this allows us to say our API can be used by other applications.</p><p>The first thing we do is set the Application ID URI, I like to make this a unique name rather than setting it to the ID, this means if I wanted to delete/recreate the backend app registration, I wouldn&#8217;t need to change the configuration of the scope my frontend is accessing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZM2O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269ab97b-2f47-49a0-a14a-4899c572b580_1099x588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZM2O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269ab97b-2f47-49a0-a14a-4899c572b580_1099x588.png 424w, https://substackcdn.com/image/fetch/$s_!ZM2O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269ab97b-2f47-49a0-a14a-4899c572b580_1099x588.png 848w, https://substackcdn.com/image/fetch/$s_!ZM2O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269ab97b-2f47-49a0-a14a-4899c572b580_1099x588.png 1272w, https://substackcdn.com/image/fetch/$s_!ZM2O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269ab97b-2f47-49a0-a14a-4899c572b580_1099x588.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZM2O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269ab97b-2f47-49a0-a14a-4899c572b580_1099x588.png" width="1099" height="588" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/269ab97b-2f47-49a0-a14a-4899c572b580_1099x588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:588,&quot;width&quot;:1099,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:230297,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZM2O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269ab97b-2f47-49a0-a14a-4899c572b580_1099x588.png 424w, https://substackcdn.com/image/fetch/$s_!ZM2O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269ab97b-2f47-49a0-a14a-4899c572b580_1099x588.png 848w, https://substackcdn.com/image/fetch/$s_!ZM2O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269ab97b-2f47-49a0-a14a-4899c572b580_1099x588.png 1272w, https://substackcdn.com/image/fetch/$s_!ZM2O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269ab97b-2f47-49a0-a14a-4899c572b580_1099x588.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We then create a scope.</p><p>I&#8217;m going to create an &#8216;<em>access_as_user</em>&#8217; scope and allow both admin and users to consent:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yYtr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e72e16-ac39-4b6b-aa24-b000d9aa917b_1098x586.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yYtr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e72e16-ac39-4b6b-aa24-b000d9aa917b_1098x586.png 424w, https://substackcdn.com/image/fetch/$s_!yYtr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e72e16-ac39-4b6b-aa24-b000d9aa917b_1098x586.png 848w, https://substackcdn.com/image/fetch/$s_!yYtr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e72e16-ac39-4b6b-aa24-b000d9aa917b_1098x586.png 1272w, https://substackcdn.com/image/fetch/$s_!yYtr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e72e16-ac39-4b6b-aa24-b000d9aa917b_1098x586.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!yYtr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e72e16-ac39-4b6b-aa24-b000d9aa917b_1098x586.png" width="1098" height="586" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13e72e16-ac39-4b6b-aa24-b000d9aa917b_1098x586.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:586,&quot;width&quot;:1098,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:253759,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yYtr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e72e16-ac39-4b6b-aa24-b000d9aa917b_1098x586.png 424w, https://substackcdn.com/image/fetch/$s_!yYtr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e72e16-ac39-4b6b-aa24-b000d9aa917b_1098x586.png 848w, https://substackcdn.com/image/fetch/$s_!yYtr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e72e16-ac39-4b6b-aa24-b000d9aa917b_1098x586.png 1272w, https://substackcdn.com/image/fetch/$s_!yYtr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e72e16-ac39-4b6b-aa24-b000d9aa917b_1098x586.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If both admins and users can consent, it just means that you the admin doesn&#8217;t have to grant access first (you&#8217;ll see more about this in the next section).</p><p>Finally, we then add the frontend application id to be an authorized client application and give it access to the &#8216;<em>access_as_user</em>&#8217; scope. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Onhh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4caa929-aff8-421b-8859-d047a1e8d2bb_1102x591.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Onhh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4caa929-aff8-421b-8859-d047a1e8d2bb_1102x591.png 424w, https://substackcdn.com/image/fetch/$s_!Onhh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4caa929-aff8-421b-8859-d047a1e8d2bb_1102x591.png 848w, https://substackcdn.com/image/fetch/$s_!Onhh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4caa929-aff8-421b-8859-d047a1e8d2bb_1102x591.png 1272w, https://substackcdn.com/image/fetch/$s_!Onhh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4caa929-aff8-421b-8859-d047a1e8d2bb_1102x591.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Onhh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4caa929-aff8-421b-8859-d047a1e8d2bb_1102x591.png" width="1102" height="591" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4caa929-aff8-421b-8859-d047a1e8d2bb_1102x591.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:591,&quot;width&quot;:1102,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:244869,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Onhh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4caa929-aff8-421b-8859-d047a1e8d2bb_1102x591.png 424w, https://substackcdn.com/image/fetch/$s_!Onhh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4caa929-aff8-421b-8859-d047a1e8d2bb_1102x591.png 848w, https://substackcdn.com/image/fetch/$s_!Onhh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4caa929-aff8-421b-8859-d047a1e8d2bb_1102x591.png 1272w, https://substackcdn.com/image/fetch/$s_!Onhh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4caa929-aff8-421b-8859-d047a1e8d2bb_1102x591.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And you can see this adds it to your &#8216;<em>Authorized client applications</em>&#8217;:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x7fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e9cb57-1fee-4968-8b93-17b73470a65f_1098x582.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x7fT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e9cb57-1fee-4968-8b93-17b73470a65f_1098x582.png 424w, https://substackcdn.com/image/fetch/$s_!x7fT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e9cb57-1fee-4968-8b93-17b73470a65f_1098x582.png 848w, https://substackcdn.com/image/fetch/$s_!x7fT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e9cb57-1fee-4968-8b93-17b73470a65f_1098x582.png 1272w, https://substackcdn.com/image/fetch/$s_!x7fT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e9cb57-1fee-4968-8b93-17b73470a65f_1098x582.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!x7fT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e9cb57-1fee-4968-8b93-17b73470a65f_1098x582.png" width="1098" height="582" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03e9cb57-1fee-4968-8b93-17b73470a65f_1098x582.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:582,&quot;width&quot;:1098,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:229875,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!x7fT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e9cb57-1fee-4968-8b93-17b73470a65f_1098x582.png 424w, https://substackcdn.com/image/fetch/$s_!x7fT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e9cb57-1fee-4968-8b93-17b73470a65f_1098x582.png 848w, https://substackcdn.com/image/fetch/$s_!x7fT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e9cb57-1fee-4968-8b93-17b73470a65f_1098x582.png 1272w, https://substackcdn.com/image/fetch/$s_!x7fT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e9cb57-1fee-4968-8b93-17b73470a65f_1098x582.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>4. Adding API permissions to the frontend</h3><p>The last thing to do is go to the frontend and add the API!</p><p>We do that by going to:</p><p>API Permissions &#8594; Add a permission &#8594; APIs my organization uses</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WGUy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc00d16-bd55-4a5b-a407-7f925ca204f8_1108x592.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WGUy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc00d16-bd55-4a5b-a407-7f925ca204f8_1108x592.png 424w, https://substackcdn.com/image/fetch/$s_!WGUy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc00d16-bd55-4a5b-a407-7f925ca204f8_1108x592.png 848w, https://substackcdn.com/image/fetch/$s_!WGUy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc00d16-bd55-4a5b-a407-7f925ca204f8_1108x592.png 1272w, https://substackcdn.com/image/fetch/$s_!WGUy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc00d16-bd55-4a5b-a407-7f925ca204f8_1108x592.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!WGUy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc00d16-bd55-4a5b-a407-7f925ca204f8_1108x592.png" width="1108" height="592" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dcc00d16-bd55-4a5b-a407-7f925ca204f8_1108x592.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:592,&quot;width&quot;:1108,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:342739,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WGUy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc00d16-bd55-4a5b-a407-7f925ca204f8_1108x592.png 424w, https://substackcdn.com/image/fetch/$s_!WGUy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc00d16-bd55-4a5b-a407-7f925ca204f8_1108x592.png 848w, https://substackcdn.com/image/fetch/$s_!WGUy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc00d16-bd55-4a5b-a407-7f925ca204f8_1108x592.png 1272w, https://substackcdn.com/image/fetch/$s_!WGUy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcc00d16-bd55-4a5b-a407-7f925ca204f8_1108x592.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Then we can search for out backend application:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hjIt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd30d52-b074-400b-a68d-588f53688a7e_1099x586.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hjIt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd30d52-b074-400b-a68d-588f53688a7e_1099x586.png 424w, https://substackcdn.com/image/fetch/$s_!hjIt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd30d52-b074-400b-a68d-588f53688a7e_1099x586.png 848w, https://substackcdn.com/image/fetch/$s_!hjIt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd30d52-b074-400b-a68d-588f53688a7e_1099x586.png 1272w, https://substackcdn.com/image/fetch/$s_!hjIt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd30d52-b074-400b-a68d-588f53688a7e_1099x586.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!hjIt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd30d52-b074-400b-a68d-588f53688a7e_1099x586.png" width="1099" height="586" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7bd30d52-b074-400b-a68d-588f53688a7e_1099x586.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:586,&quot;width&quot;:1099,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:220663,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hjIt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd30d52-b074-400b-a68d-588f53688a7e_1099x586.png 424w, https://substackcdn.com/image/fetch/$s_!hjIt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd30d52-b074-400b-a68d-588f53688a7e_1099x586.png 848w, https://substackcdn.com/image/fetch/$s_!hjIt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd30d52-b074-400b-a68d-588f53688a7e_1099x586.png 1272w, https://substackcdn.com/image/fetch/$s_!hjIt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bd30d52-b074-400b-a68d-588f53688a7e_1099x586.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Then we can request delegate permissions, what this means is that this requires a user to be signed in.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2iUZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa42f0575-11df-462b-a8fc-8ffead6bee2e_1099x586.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2iUZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa42f0575-11df-462b-a8fc-8ffead6bee2e_1099x586.png 424w, https://substackcdn.com/image/fetch/$s_!2iUZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa42f0575-11df-462b-a8fc-8ffead6bee2e_1099x586.png 848w, https://substackcdn.com/image/fetch/$s_!2iUZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa42f0575-11df-462b-a8fc-8ffead6bee2e_1099x586.png 1272w, https://substackcdn.com/image/fetch/$s_!2iUZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa42f0575-11df-462b-a8fc-8ffead6bee2e_1099x586.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!2iUZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa42f0575-11df-462b-a8fc-8ffead6bee2e_1099x586.png" width="1099" height="586" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a42f0575-11df-462b-a8fc-8ffead6bee2e_1099x586.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:586,&quot;width&quot;:1099,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:251965,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2iUZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa42f0575-11df-462b-a8fc-8ffead6bee2e_1099x586.png 424w, https://substackcdn.com/image/fetch/$s_!2iUZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa42f0575-11df-462b-a8fc-8ffead6bee2e_1099x586.png 848w, https://substackcdn.com/image/fetch/$s_!2iUZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa42f0575-11df-462b-a8fc-8ffead6bee2e_1099x586.png 1272w, https://substackcdn.com/image/fetch/$s_!2iUZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa42f0575-11df-462b-a8fc-8ffead6bee2e_1099x586.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You will notice that there isn&#8217;t the option to add &#8216;<em>Application Permissions</em>&#8217;, in order to add application permissions this needs to be done using &#8216;<em>App Roles</em>&#8217; rather than by creating a scope.</p><p>One you&#8217;ve added the permission, you can  see now it will say you have access to the backend.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Luqo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1403ff52-3d64-4812-b500-1eb69e7b8c3f_1101x585.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Luqo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1403ff52-3d64-4812-b500-1eb69e7b8c3f_1101x585.png 424w, https://substackcdn.com/image/fetch/$s_!Luqo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1403ff52-3d64-4812-b500-1eb69e7b8c3f_1101x585.png 848w, https://substackcdn.com/image/fetch/$s_!Luqo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1403ff52-3d64-4812-b500-1eb69e7b8c3f_1101x585.png 1272w, https://substackcdn.com/image/fetch/$s_!Luqo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1403ff52-3d64-4812-b500-1eb69e7b8c3f_1101x585.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Luqo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1403ff52-3d64-4812-b500-1eb69e7b8c3f_1101x585.png" width="1101" height="585" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1403ff52-3d64-4812-b500-1eb69e7b8c3f_1101x585.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:585,&quot;width&quot;:1101,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:242469,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Luqo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1403ff52-3d64-4812-b500-1eb69e7b8c3f_1101x585.png 424w, https://substackcdn.com/image/fetch/$s_!Luqo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1403ff52-3d64-4812-b500-1eb69e7b8c3f_1101x585.png 848w, https://substackcdn.com/image/fetch/$s_!Luqo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1403ff52-3d64-4812-b500-1eb69e7b8c3f_1101x585.png 1272w, https://substackcdn.com/image/fetch/$s_!Luqo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1403ff52-3d64-4812-b500-1eb69e7b8c3f_1101x585.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I&#8217;m also going to grant admin consent, but this isn&#8217;t mandatory as you can see the &#8216;<em>Admin consent required</em>&#8217; is set to no, but it just means the user doesn&#8217;t have to consent.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Tolc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23debff1-ac39-4800-84ae-d0f0c8b9cfec_1102x591.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Tolc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23debff1-ac39-4800-84ae-d0f0c8b9cfec_1102x591.png 424w, https://substackcdn.com/image/fetch/$s_!Tolc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23debff1-ac39-4800-84ae-d0f0c8b9cfec_1102x591.png 848w, https://substackcdn.com/image/fetch/$s_!Tolc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23debff1-ac39-4800-84ae-d0f0c8b9cfec_1102x591.png 1272w, https://substackcdn.com/image/fetch/$s_!Tolc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23debff1-ac39-4800-84ae-d0f0c8b9cfec_1102x591.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Tolc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23debff1-ac39-4800-84ae-d0f0c8b9cfec_1102x591.png" width="1102" height="591" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23debff1-ac39-4800-84ae-d0f0c8b9cfec_1102x591.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:591,&quot;width&quot;:1102,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:194658,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Tolc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23debff1-ac39-4800-84ae-d0f0c8b9cfec_1102x591.png 424w, https://substackcdn.com/image/fetch/$s_!Tolc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23debff1-ac39-4800-84ae-d0f0c8b9cfec_1102x591.png 848w, https://substackcdn.com/image/fetch/$s_!Tolc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23debff1-ac39-4800-84ae-d0f0c8b9cfec_1102x591.png 1272w, https://substackcdn.com/image/fetch/$s_!Tolc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23debff1-ac39-4800-84ae-d0f0c8b9cfec_1102x591.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And there you have it! A trusted relationship between a frontend and backend application in Azure.</p><p>Easy peasy, lemon squeezy.</p><div><hr></div><p>That&#8217;s all from me&#8230;</p><p>Next time in this series, I&#8217;ll show you how you can test this with a python fastapi backend!</p><p>If you would like to see the video on this, check it out here:</p><div id="youtube2-rmXLC-8DGQg" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;rmXLC-8DGQg&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/rmXLC-8DGQg?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><p>Articles I enjoyed this week:</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:146481989,&quot;url&quot;:&quot;https://developingskills.substack.com/p/appreciate-people-and-lift-them-up&quot;,&quot;publication_id&quot;:1605734,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Developing Skills&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516a8691-bf75-47c3-bbc7-4427e9e5a3c6_348x348.png&quot;,&quot;title&quot;:&quot;Appreciate People And Lift Them Up! &quot;,&quot;truncated_body_text&quot;:&quot;Welcome! Hi this is John with this week&#8217;s Developing Skills - Skills for Developers looking to develop their careers. &#128591; Thank you for being one of the 13,661 software developers who have subscribed, I&#8217;m honoured to have you as a reader. &#127881; If there is a topic you&#8217;d like to see covered, please let me know by replying to this email&#128231;&quot;,&quot;date&quot;:&quot;2024-07-11T08:01:30.576Z&quot;,&quot;like_count&quot;:5,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:27801024,&quot;name&quot;:&quot;John Crickett&quot;,&quot;handle&quot;:&quot;johncrickett&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5216b4ab-f9a8-4803-b318-a8285e26a873_800x800.jpeg&quot;,&quot;bio&quot;:&quot;Helping software engineers level up through coding challenges. https://codingchallenges.fyi&quot;,&quot;profile_set_up_at&quot;:&quot;2022-08-24T19:14:26.450Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:1449458,&quot;user_id&quot;:27801024,&quot;publication_id&quot;:1483213,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:1483213,&quot;name&quot;:&quot;Coding Challenges&quot;,&quot;subdomain&quot;:&quot;codingchallenges&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;A weekly Coding Challenge to help software engineers level up.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/14c3fd5e-953d-4509-ab4c-cbbb37d99969_1080x1080.png&quot;,&quot;author_id&quot;:27801024,&quot;theme_var_background_pop&quot;:&quot;#00C2FF&quot;,&quot;created_at&quot;:&quot;2023-03-10T17:55:01.713Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;John Crickett&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;is_personal_mode&quot;:false}},{&quot;id&quot;:1577368,&quot;user_id&quot;:27801024,&quot;publication_id&quot;:1605734,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:1605734,&quot;name&quot;:&quot;Developing Skills&quot;,&quot;subdomain&quot;:&quot;developingskills&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Developing Skills is a weekly newsletter for software developers looking to level up.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/516a8691-bf75-47c3-bbc7-4427e9e5a3c6_348x348.png&quot;,&quot;author_id&quot;:27801024,&quot;theme_var_background_pop&quot;:&quot;#FD5353&quot;,&quot;created_at&quot;:&quot;2023-04-21T15:26:42.893Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;John Crickett&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;is_personal_mode&quot;:false}},{&quot;id&quot;:2558506,&quot;user_id&quot;:27801024,&quot;publication_id&quot;:2527047,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:2527047,&quot;name&quot;:&quot;The Coding Community&quot;,&quot;subdomain&quot;:&quot;thecodingcommunity&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;The place for software engineering and coding talks&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2bb1b9bc-0911-46fb-aa06-fef7968487df_1080x1080.png&quot;,&quot;author_id&quot;:27801024,&quot;theme_var_background_pop&quot;:&quot;#FD5353&quot;,&quot;created_at&quot;:&quot;2024-04-17T13:21:28.707Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Coding Community&quot;,&quot;copyright&quot;:&quot;John Crickett&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;is_personal_mode&quot;:false}}],&quot;twitter_screen_name&quot;:&quot;johncrickett&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://developingskills.substack.com/p/appreciate-people-and-lift-them-up?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!cFT9!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516a8691-bf75-47c3-bbc7-4427e9e5a3c6_348x348.png" loading="lazy"><span class="embedded-post-publication-name">Developing Skills</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Appreciate People And Lift Them Up! </div></div><div class="embedded-post-body">Welcome! Hi this is John with this week&#8217;s Developing Skills - Skills for Developers looking to develop their careers. &#128591; Thank you for being one of the 13,661 software developers who have subscribed, I&#8217;m honoured to have you as a reader. &#127881; If there is a topic you&#8217;d like to see covered, please let me know by replying to this email&#128231;&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 years ago &#183; 5 likes &#183; John Crickett</div></a></div><p>By <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;John Crickett&quot;,&quot;id&quot;:27801024,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5216b4ab-f9a8-4803-b318-a8285e26a873_800x800.jpeg&quot;,&quot;uuid&quot;:&quot;fa36dd89-90a8-415a-b597-29a133591032&quot;}" data-component-name="MentionToDOM"></span> </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:143473368,&quot;url&quot;:&quot;https://thesoftwareengineeringtimes.substack.com/p/3-ways-to-transform-stakeholder-updates&quot;,&quot;publication_id&quot;:1795617,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Software Engineering Times&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F735a240d-86ff-4cf9-a6b0-1e788110a010_600x600.png&quot;,&quot;title&quot;:&quot;How to Simplify Progress Updates to Stakeholders&quot;,&quot;truncated_body_text&quot;:&quot;&quot;,&quot;date&quot;:&quot;2024-07-09T09:01:33.654Z&quot;,&quot;like_count&quot;:16,&quot;comment_count&quot;:1,&quot;bylines&quot;:[{&quot;id&quot;:100720978,&quot;name&quot;:&quot;Ryan Murphy&quot;,&quot;handle&quot;:&quot;ryanmurphy1&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e22c74c3-e8d0-4e74-8db8-3987125c269d_291x275.png&quot;,&quot;bio&quot;:&quot;An energetic people focussed technology leader with a strategic mindset. I have a keen focus on growing and influencing multiple teams into becoming highly collaborative, accountable and enjoyable. &quot;,&quot;profile_set_up_at&quot;:&quot;2023-07-11T16:37:15.125Z&quot;,&quot;publicationUsers&quot;:[],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://thesoftwareengineeringtimes.substack.com/p/3-ways-to-transform-stakeholder-updates?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!VHYv!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F735a240d-86ff-4cf9-a6b0-1e788110a010_600x600.png" loading="lazy"><span class="embedded-post-publication-name">The Software Engineering Times</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">How to Simplify Progress Updates to Stakeholders</div></div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 years ago &#183; 16 likes &#183; 1 comment &#183; Ryan Murphy</div></a></div><p>By <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Ryan Murphy&quot;,&quot;id&quot;:208547782,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7fc3906f-74da-49b5-99a8-54de1e8f14cf_144x144.png&quot;,&quot;uuid&quot;:&quot;150c7a4b-6a3c-47c7-801b-082701e23195&quot;}" data-component-name="MentionToDOM"></span> </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:146338053,&quot;url&quot;:&quot;https://read.highgrowthengineer.com/p/managing-up-realizations&quot;,&quot;publication_id&quot;:1504485,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;High Growth Engineer&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4028d22-8549-42cb-831c-e75539af15f9_1280x1280.png&quot;,&quot;title&quot;:&quot;Managing up: 3 things I wish I realized sooner&quot;,&quot;truncated_body_text&quot;:&quot;Your relationship with your manager is the most important one to get right. Having a solid relationship with them: Opens you up to more opportunities to support your growth Gives you a strong advocate when promotion time comes Makes you feel psychological safety&quot;,&quot;date&quot;:&quot;2024-07-07T15:27:10.042Z&quot;,&quot;like_count&quot;:157,&quot;comment_count&quot;:7,&quot;bylines&quot;:[{&quot;id&quot;:58854493,&quot;name&quot;:&quot;Jordan Cutler&quot;,&quot;handle&quot;:&quot;jordancutler&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fe86d99-af64-4285-b982-9466a4c58d63_1311x1312.jpeg&quot;,&quot;bio&quot;:&quot;Senior Software Engineer helping engineers fast-track their career with real-world advice.\n\nAuthor of High Growth Engineer newsletter (50k+ subscribers): https://careercutler.substack.com/&quot;,&quot;profile_set_up_at&quot;:&quot;2023-03-18T21:18:20.168Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:1471686,&quot;user_id&quot;:58854493,&quot;publication_id&quot;:1504485,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:1504485,&quot;name&quot;:&quot;High Growth Engineer&quot;,&quot;subdomain&quot;:&quot;highgrowthengineer&quot;,&quot;custom_domain&quot;:&quot;read.highgrowthengineer.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Grow faster in your software engineering career with weekly actionable tips you can use right away. &quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d4028d22-8549-42cb-831c-e75539af15f9_1280x1280.png&quot;,&quot;author_id&quot;:58854493,&quot;theme_var_background_pop&quot;:&quot;#2EE240&quot;,&quot;created_at&quot;:&quot;2023-03-18T21:18:26.979Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Jordan Cutler from High Growth Engineer&quot;,&quot;copyright&quot;:&quot;Jordan Cutler&quot;,&quot;founding_plan_name&quot;:&quot;Lifetime &#10084;&#65039;&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;is_personal_mode&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:100}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://read.highgrowthengineer.com/p/managing-up-realizations?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!4pvu!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4028d22-8549-42cb-831c-e75539af15f9_1280x1280.png" loading="lazy"><span class="embedded-post-publication-name">High Growth Engineer</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Managing up: 3 things I wish I realized sooner</div></div><div class="embedded-post-body">Your relationship with your manager is the most important one to get right. Having a solid relationship with them: Opens you up to more opportunities to support your growth Gives you a strong advocate when promotion time comes Makes you feel psychological safety&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 years ago &#183; 157 likes &#183; 7 comments &#183; Jordan Cutler</div></a></div><p>By <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Jordan Cutler&quot;,&quot;id&quot;:58854493,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fe86d99-af64-4285-b982-9466a4c58d63_1311x1312.jpeg&quot;,&quot;uuid&quot;:&quot;1aa1a2d2-4fc4-471b-a391-d6923535d6d9&quot;}" data-component-name="MentionToDOM"></span> </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Auth Made Easy: Getting started with MSAL and React (w/ Vite and TypeScript)]]></title><description><![CDATA[In today's article, we breakdown how to get authenticated using MSAL in React]]></description><link>https://www.techunfiltered.io/p/getting-starting-with-msal-and-react</link><guid isPermaLink="false">https://www.techunfiltered.io/p/getting-starting-with-msal-and-react</guid><dc:creator><![CDATA[Jade Wilson]]></dc:creator><pubDate>Thu, 23 May 2024 17:16:30 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e0618bd7-d7af-4eff-8573-a920d3167f2a_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I do a lot of authentication and authorisation as part of my role.</p><p>A lot of our customers are wanting to use Microsoft Entra (formerly Azure Active Directory) as their primary mechanism of authentication and authorisation, and so we often work with them on how they can build their systems around it and our other services we have.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>One of the most common libraries we use is the MSAL library. MSAL stands for Microsoft Authentication Library, it provides you with the necessary interfaces to sign in with Microsoft Entra and also handles the authentication flow, identity tokens, access tokens and refresh tokens needed to authorise the user.</p><p>In today&#8217;s episode, I go through getting started with MSAL and React. </p><p>The pre-requisites you will need for this are:</p><ul><li><p>An Azure Tenant and Subscription, with Azure AD Privileges. You can sign up for a free 12 months <a href="https://azure.microsoft.com/en-in/free">here</a> if you don&#8217;t have an account already.</p></li><li><p>An IDE of your choice, I am using VSCode.</p></li><li><p>Node and NPM (or a package manager of your choice) installed.</p></li><li><p>A Vite project - I am using react-ts template as described <a href="https://vitejs.dev/guide/">here</a>.</p></li><li><p>@azure/msal-browser and @azure/msal-react libraries installed.</p></li></ul><h3>What is an App Registration?</h3><p>An App Registration is a way of uniquely identifying your application within Azure. When you create an App Registration it creates a trust relationship between Microsoft Entra and your application.</p><p>It allows you to set up Users, Redirect URIs, Identity Tokens, Access Tokens, Claims, Scopes, Permissions, Roles and much more on the application, it&#8217;s highly configurable so you can tailor it to a customer&#8217;s scenario.</p><p>In today&#8217;s episode, we&#8217;re going to be using the flow as described <a href="https://learn.microsoft.com/en-us/samples/azure-samples/ms-identity-ciam-javascript-tutorial/ms-identity-ciam-javascript-tutorial-1-sign-in-react/">here</a>.</p><h3>Creating the App Registration</h3><p>First we need to create the app registration.</p><p>For simplicity, we will do this in the portal, if you want a tutorial on how to do it via terraform, let me know and I can cover that separately.</p><p>If you go into the portal you should be able to go to:</p><p>App Registrations &#8594; New Registration </p><p>And this will then bring you to register your application:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mBC7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc484804-3581-421b-a812-4e92046d9f68_1387x1126.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mBC7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc484804-3581-421b-a812-4e92046d9f68_1387x1126.png 424w, https://substackcdn.com/image/fetch/$s_!mBC7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc484804-3581-421b-a812-4e92046d9f68_1387x1126.png 848w, https://substackcdn.com/image/fetch/$s_!mBC7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc484804-3581-421b-a812-4e92046d9f68_1387x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!mBC7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc484804-3581-421b-a812-4e92046d9f68_1387x1126.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!mBC7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc484804-3581-421b-a812-4e92046d9f68_1387x1126.png" width="1387" height="1126" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc484804-3581-421b-a812-4e92046d9f68_1387x1126.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1126,&quot;width&quot;:1387,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:131482,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mBC7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc484804-3581-421b-a812-4e92046d9f68_1387x1126.png 424w, https://substackcdn.com/image/fetch/$s_!mBC7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc484804-3581-421b-a812-4e92046d9f68_1387x1126.png 848w, https://substackcdn.com/image/fetch/$s_!mBC7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc484804-3581-421b-a812-4e92046d9f68_1387x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!mBC7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc484804-3581-421b-a812-4e92046d9f68_1387x1126.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There are a few key things to note here:</p><ol><li><p>Name - You can give it any name you want, I have added the suffix &#8216;-fe&#8217; to stipulate this is the frontend app registration.</p></li><li><p>Supported Account Types - If you want the application registration to work across tenants, you would set this to be multitenant. In our case, we&#8217;re going to be focusing on single tenant.</p></li><li><p>Redirect URI - This needs to match the Redirect URI that is going to be configured in the application, we are going to set this to be a &#8216;SPA&#8217; redirect and to the URL of our development environment &#8216;http://localhost:5173/&#8217;</p></li></ol><p>Once we have these configured, create the app registration and take note of the tenant id and client id displayed here:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5pin!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d05406-9614-405a-8d27-d13338adb1bb_793x307.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5pin!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d05406-9614-405a-8d27-d13338adb1bb_793x307.png 424w, https://substackcdn.com/image/fetch/$s_!5pin!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d05406-9614-405a-8d27-d13338adb1bb_793x307.png 848w, https://substackcdn.com/image/fetch/$s_!5pin!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d05406-9614-405a-8d27-d13338adb1bb_793x307.png 1272w, https://substackcdn.com/image/fetch/$s_!5pin!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d05406-9614-405a-8d27-d13338adb1bb_793x307.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!5pin!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d05406-9614-405a-8d27-d13338adb1bb_793x307.png" width="793" height="307" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28d05406-9614-405a-8d27-d13338adb1bb_793x307.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:307,&quot;width&quot;:793,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:42098,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5pin!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d05406-9614-405a-8d27-d13338adb1bb_793x307.png 424w, https://substackcdn.com/image/fetch/$s_!5pin!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d05406-9614-405a-8d27-d13338adb1bb_793x307.png 848w, https://substackcdn.com/image/fetch/$s_!5pin!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d05406-9614-405a-8d27-d13338adb1bb_793x307.png 1272w, https://substackcdn.com/image/fetch/$s_!5pin!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d05406-9614-405a-8d27-d13338adb1bb_793x307.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You will typically create separate app registrations for your front end and backend applications. </p><h3>Getting started</h3><p>I just want to give a little bit of a shoutout to MSAL Samples, there are some great samples that help you get started with your journey, and you can access them <a href="https://github.com/Azure-Samples/ms-identity-ciam-javascript-tutorial">here</a>. I have found these samples to be so useful in creating templates for me to work from, I definitely recommend taking inspiration from them!</p><p>In short, there are four key files we need to be creating/altering.</p><ol><li><p>main.tsx - This will be using the app provider to create a wrapper around the application.</p></li><li><p>app.tsx - This will be using the msal instance to get the user information to decide what to display.</p></li><li><p>app-provider.tsx - This will be setting the active account of the user.</p></li><li><p>app-config.ts - This will be configuring the values needed in order to login with msal.</p></li></ol><h3>Making send of MSAL Config</h3><p>If we take a look at the MSAL Config we have to alter the following:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tSs6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0dd161-423b-4133-b576-0e60fe7b48b7_912x244.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tSs6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0dd161-423b-4133-b576-0e60fe7b48b7_912x244.png 424w, https://substackcdn.com/image/fetch/$s_!tSs6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0dd161-423b-4133-b576-0e60fe7b48b7_912x244.png 848w, https://substackcdn.com/image/fetch/$s_!tSs6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0dd161-423b-4133-b576-0e60fe7b48b7_912x244.png 1272w, https://substackcdn.com/image/fetch/$s_!tSs6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0dd161-423b-4133-b576-0e60fe7b48b7_912x244.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!tSs6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0dd161-423b-4133-b576-0e60fe7b48b7_912x244.png" width="912" height="244" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b0dd161-423b-4133-b576-0e60fe7b48b7_912x244.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:244,&quot;width&quot;:912,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:33748,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tSs6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0dd161-423b-4133-b576-0e60fe7b48b7_912x244.png 424w, https://substackcdn.com/image/fetch/$s_!tSs6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0dd161-423b-4133-b576-0e60fe7b48b7_912x244.png 848w, https://substackcdn.com/image/fetch/$s_!tSs6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0dd161-423b-4133-b576-0e60fe7b48b7_912x244.png 1272w, https://substackcdn.com/image/fetch/$s_!tSs6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0dd161-423b-4133-b576-0e60fe7b48b7_912x244.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Where clientId is the application (client) id of the app registration and the authority is the URL of the authority to get request tokens from, you can typically find the documentation for the correct URL to use <a href="https://learn.microsoft.com/en-us/entra/identity-platform/msal-client-application-configuration">here</a>. </p><p>Because we are using single tenant, we need to add the tenant id to the authority.</p><p>Note: In a production environment I would recommend adding these as environment variables so that they are easily configurable.</p><h3>Creating an Auth Provider</h3><p>We are going to create an auth provider that will set the active account.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AS8E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F628897dd-10e4-4f38-809e-aa2f08fef40b_1291x687.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AS8E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F628897dd-10e4-4f38-809e-aa2f08fef40b_1291x687.png 424w, https://substackcdn.com/image/fetch/$s_!AS8E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F628897dd-10e4-4f38-809e-aa2f08fef40b_1291x687.png 848w, https://substackcdn.com/image/fetch/$s_!AS8E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F628897dd-10e4-4f38-809e-aa2f08fef40b_1291x687.png 1272w, https://substackcdn.com/image/fetch/$s_!AS8E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F628897dd-10e4-4f38-809e-aa2f08fef40b_1291x687.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!AS8E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F628897dd-10e4-4f38-809e-aa2f08fef40b_1291x687.png" width="1291" height="687" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/628897dd-10e4-4f38-809e-aa2f08fef40b_1291x687.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:687,&quot;width&quot;:1291,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:138760,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AS8E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F628897dd-10e4-4f38-809e-aa2f08fef40b_1291x687.png 424w, https://substackcdn.com/image/fetch/$s_!AS8E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F628897dd-10e4-4f38-809e-aa2f08fef40b_1291x687.png 848w, https://substackcdn.com/image/fetch/$s_!AS8E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F628897dd-10e4-4f38-809e-aa2f08fef40b_1291x687.png 1272w, https://substackcdn.com/image/fetch/$s_!AS8E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F628897dd-10e4-4f38-809e-aa2f08fef40b_1291x687.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Where we first create an instance of the public client application using the MSAL configuration from the previous step.</p><p>We then set the active account based on whether there is an account in the list of all accounts, or when a successful login has occurred.</p><p>Once that&#8217;s done we then return the MSAL provider with all the children nodes of the application wrapped inside of it.</p><p>We can then reference the AuthProvider in our main.tsx file and wrap that around our application code.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_qTb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa635f21-3baf-41e2-b23d-e84d6e5f3af2_858x313.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_qTb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa635f21-3baf-41e2-b23d-e84d6e5f3af2_858x313.png 424w, https://substackcdn.com/image/fetch/$s_!_qTb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa635f21-3baf-41e2-b23d-e84d6e5f3af2_858x313.png 848w, https://substackcdn.com/image/fetch/$s_!_qTb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa635f21-3baf-41e2-b23d-e84d6e5f3af2_858x313.png 1272w, https://substackcdn.com/image/fetch/$s_!_qTb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa635f21-3baf-41e2-b23d-e84d6e5f3af2_858x313.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!_qTb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa635f21-3baf-41e2-b23d-e84d6e5f3af2_858x313.png" width="858" height="313" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aa635f21-3baf-41e2-b23d-e84d6e5f3af2_858x313.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:313,&quot;width&quot;:858,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_qTb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa635f21-3baf-41e2-b23d-e84d6e5f3af2_858x313.png 424w, https://substackcdn.com/image/fetch/$s_!_qTb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa635f21-3baf-41e2-b23d-e84d6e5f3af2_858x313.png 848w, https://substackcdn.com/image/fetch/$s_!_qTb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa635f21-3baf-41e2-b23d-e84d6e5f3af2_858x313.png 1272w, https://substackcdn.com/image/fetch/$s_!_qTb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa635f21-3baf-41e2-b23d-e84d6e5f3af2_858x313.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Tying it all together</h3><p>Now, we want to verify that the authentication works, we can do an initial test in our app.tsx file to verify that we can log in and log out.</p><p>First lets retrieve the instance of our MSAL provider:</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rBb7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5c8a3a-133a-4b21-8033-ab2545be99e9_717x87.png 424w, https://substackcdn.com/image/fetch/$s_!rBb7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5c8a3a-133a-4b21-8033-ab2545be99e9_717x87.png 848w, https://substackcdn.com/image/fetch/$s_!rBb7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5c8a3a-133a-4b21-8033-ab2545be99e9_717x87.png 1272w, https://substackcdn.com/image/fetch/$s_!rBb7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5c8a3a-133a-4b21-8033-ab2545be99e9_717x87.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!rBb7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5c8a3a-133a-4b21-8033-ab2545be99e9_717x87.png" width="717" height="87" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7c5c8a3a-133a-4b21-8033-ab2545be99e9_717x87.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:87,&quot;width&quot;:717,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16472,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rBb7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5c8a3a-133a-4b21-8033-ab2545be99e9_717x87.png 424w, https://substackcdn.com/image/fetch/$s_!rBb7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5c8a3a-133a-4b21-8033-ab2545be99e9_717x87.png 848w, https://substackcdn.com/image/fetch/$s_!rBb7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5c8a3a-133a-4b21-8033-ab2545be99e9_717x87.png 1272w, https://substackcdn.com/image/fetch/$s_!rBb7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5c8a3a-133a-4b21-8033-ab2545be99e9_717x87.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Then, lets create a login and logout request handler:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EKcd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1174bd1-e6a6-4774-81d9-1cfb59978293_601x513.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EKcd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1174bd1-e6a6-4774-81d9-1cfb59978293_601x513.png 424w, https://substackcdn.com/image/fetch/$s_!EKcd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1174bd1-e6a6-4774-81d9-1cfb59978293_601x513.png 848w, https://substackcdn.com/image/fetch/$s_!EKcd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1174bd1-e6a6-4774-81d9-1cfb59978293_601x513.png 1272w, https://substackcdn.com/image/fetch/$s_!EKcd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1174bd1-e6a6-4774-81d9-1cfb59978293_601x513.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!EKcd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1174bd1-e6a6-4774-81d9-1cfb59978293_601x513.png" width="601" height="513" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a1174bd1-e6a6-4774-81d9-1cfb59978293_601x513.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:513,&quot;width&quot;:601,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:54437,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EKcd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1174bd1-e6a6-4774-81d9-1cfb59978293_601x513.png 424w, https://substackcdn.com/image/fetch/$s_!EKcd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1174bd1-e6a6-4774-81d9-1cfb59978293_601x513.png 848w, https://substackcdn.com/image/fetch/$s_!EKcd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1174bd1-e6a6-4774-81d9-1cfb59978293_601x513.png 1272w, https://substackcdn.com/image/fetch/$s_!EKcd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1174bd1-e6a6-4774-81d9-1cfb59978293_601x513.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Then, lets change to use an Authenticated Template or an Unauthenticated Template. This will be dependent on whether or not the user is logged in:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_Qth!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d7d9151-caaf-453c-9ee7-e10681e6487c_1243x313.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_Qth!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d7d9151-caaf-453c-9ee7-e10681e6487c_1243x313.png 424w, https://substackcdn.com/image/fetch/$s_!_Qth!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d7d9151-caaf-453c-9ee7-e10681e6487c_1243x313.png 848w, https://substackcdn.com/image/fetch/$s_!_Qth!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d7d9151-caaf-453c-9ee7-e10681e6487c_1243x313.png 1272w, https://substackcdn.com/image/fetch/$s_!_Qth!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d7d9151-caaf-453c-9ee7-e10681e6487c_1243x313.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!_Qth!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d7d9151-caaf-453c-9ee7-e10681e6487c_1243x313.png" width="1243" height="313" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d7d9151-caaf-453c-9ee7-e10681e6487c_1243x313.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:313,&quot;width&quot;:1243,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59719,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_Qth!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d7d9151-caaf-453c-9ee7-e10681e6487c_1243x313.png 424w, https://substackcdn.com/image/fetch/$s_!_Qth!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d7d9151-caaf-453c-9ee7-e10681e6487c_1243x313.png 848w, https://substackcdn.com/image/fetch/$s_!_Qth!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d7d9151-caaf-453c-9ee7-e10681e6487c_1243x313.png 1272w, https://substackcdn.com/image/fetch/$s_!_Qth!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d7d9151-caaf-453c-9ee7-e10681e6487c_1243x313.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And voila! That&#8217;s everything to get started.</p><p>You can go to the application and verify you can log in and log out:</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xw_R!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd490d40f-d718-4c8a-9b94-7f1ae32f26eb_235x192.png 424w, https://substackcdn.com/image/fetch/$s_!Xw_R!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd490d40f-d718-4c8a-9b94-7f1ae32f26eb_235x192.png 848w, https://substackcdn.com/image/fetch/$s_!Xw_R!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd490d40f-d718-4c8a-9b94-7f1ae32f26eb_235x192.png 1272w, https://substackcdn.com/image/fetch/$s_!Xw_R!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd490d40f-d718-4c8a-9b94-7f1ae32f26eb_235x192.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xw_R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd490d40f-d718-4c8a-9b94-7f1ae32f26eb_235x192.png" width="235" height="192" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d490d40f-d718-4c8a-9b94-7f1ae32f26eb_235x192.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:192,&quot;width&quot;:235,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4414,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Xw_R!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd490d40f-d718-4c8a-9b94-7f1ae32f26eb_235x192.png 424w, https://substackcdn.com/image/fetch/$s_!Xw_R!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd490d40f-d718-4c8a-9b94-7f1ae32f26eb_235x192.png 848w, https://substackcdn.com/image/fetch/$s_!Xw_R!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd490d40f-d718-4c8a-9b94-7f1ae32f26eb_235x192.png 1272w, https://substackcdn.com/image/fetch/$s_!Xw_R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd490d40f-d718-4c8a-9b94-7f1ae32f26eb_235x192.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WJ9L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c896cca-7b20-44f4-949d-82f679a0fb73_255x193.png 424w, https://substackcdn.com/image/fetch/$s_!WJ9L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c896cca-7b20-44f4-949d-82f679a0fb73_255x193.png 848w, https://substackcdn.com/image/fetch/$s_!WJ9L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c896cca-7b20-44f4-949d-82f679a0fb73_255x193.png 1272w, https://substackcdn.com/image/fetch/$s_!WJ9L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c896cca-7b20-44f4-949d-82f679a0fb73_255x193.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!WJ9L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c896cca-7b20-44f4-949d-82f679a0fb73_255x193.png" width="255" height="193" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9c896cca-7b20-44f4-949d-82f679a0fb73_255x193.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:193,&quot;width&quot;:255,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5366,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WJ9L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c896cca-7b20-44f4-949d-82f679a0fb73_255x193.png 424w, https://substackcdn.com/image/fetch/$s_!WJ9L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c896cca-7b20-44f4-949d-82f679a0fb73_255x193.png 848w, https://substackcdn.com/image/fetch/$s_!WJ9L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c896cca-7b20-44f4-949d-82f679a0fb73_255x193.png 1272w, https://substackcdn.com/image/fetch/$s_!WJ9L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c896cca-7b20-44f4-949d-82f679a0fb73_255x193.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p></p><h3>And to end&#8230;</h3><p>That&#8217;s all from me! In the next episode I&#8217;m going to be showing you how you can use MSAL to connect to an API that requires authentication and authorisation.</p><p>What would you prefer the backend to be in?</p><ul><li><p>Python</p></li><li><p>Node</p></li><li><p>.NET</p></li></ul><p>Let me know in the comments below!</p><p>If you liked this article, be sure to checkout my YouTube video here:</p><div id="youtube2-0HCOzB0noiI" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;0HCOzB0noiI&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/0HCOzB0noiI?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>And also like, restack and subscribe if you found it useful!</p><p>You can also checkout the GitHub <a href="https://github.com/Jade-Codes/edutaskhub-fe">here</a>.</p><div><hr></div><p>Articles I enjoyed this week:</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:144562241,&quot;url&quot;:&quot;https://levelupsoftwareengineering.substack.com/p/how-to-get-more-done-pt-1&quot;,&quot;publication_id&quot;:1785490,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Level Up Software Engineering &#128640;&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab9e4282-f361-4ed8-ac6e-48c9f0008877_1280x1280.png&quot;,&quot;title&quot;:&quot;Pt.1: How to get more done when things are crazy&quot;,&quot;truncated_body_text&quot;:&quot;As an early senior, life was a bit simpler&#8230; I had one core project I was the project lead on. My main job was to plan one project, and deliver it successfully. As I grew into a Senior+ engineer, and then Tech Lead, things became a bit more challenging. I had 3-4 projects I was giving technical guidance on. I couldn&#8217;t just go heads down on one priority.&quot;,&quot;date&quot;:&quot;2024-05-22T14:06:07.845Z&quot;,&quot;like_count&quot;:11,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:64096662,&quot;name&quot;:&quot;Caleb Mellas&quot;,&quot;handle&quot;:&quot;levelupsoftwareengineering&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef37ce7b-b266-40d1-8515-72fc66561fdc_828x779.jpeg&quot;,&quot;bio&quot;:&quot;Helping software engineers level up and standout in their career. 1 of 8 engineers at Wisely, a startup acquired for ~$200,000,000 | Caleb Mellas talks about how to level up in your software engineering career.&quot;,&quot;profile_set_up_at&quot;:&quot;2023-05-14T19:57:13.224Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:1768438,&quot;user_id&quot;:64096662,&quot;publication_id&quot;:1785490,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:1785490,&quot;name&quot;:&quot;Level Up Software Engineering &#128640;&quot;,&quot;subdomain&quot;:&quot;levelupsoftwareengineering&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Every other Wednesday, join 24,000+ engineers learning how to level up in their career.  Everything you need to grow to senior engineer, tech lead and beyond. &quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab9e4282-f361-4ed8-ac6e-48c9f0008877_1280x1280.png&quot;,&quot;author_id&quot;:64096662,&quot;theme_var_background_pop&quot;:&quot;#FF6B00&quot;,&quot;created_at&quot;:&quot;2023-07-07T12:45:08.903Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Level up software engineering &#128640;&quot;,&quot;copyright&quot;:&quot;Caleb Mellas&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://levelupsoftwareengineering.substack.com/p/how-to-get-more-done-pt-1?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!GQbE!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab9e4282-f361-4ed8-ac6e-48c9f0008877_1280x1280.png" loading="lazy"><span class="embedded-post-publication-name">Level Up Software Engineering &#128640;</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Pt.1: How to get more done when things are crazy</div></div><div class="embedded-post-body">As an early senior, life was a bit simpler&#8230; I had one core project I was the project lead on. My main job was to plan one project, and deliver it successfully. As I grew into a Senior+ engineer, and then Tech Lead, things became a bit more challenging. I had 3-4 projects I was giving technical guidance on. I couldn&#8217;t just go heads down on one priority&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 years ago &#183; 11 likes &#183; Caleb Mellas</div></a></div><p>By <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Caleb Mellas&quot;,&quot;id&quot;:64096662,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef37ce7b-b266-40d1-8515-72fc66561fdc_828x779.jpeg&quot;,&quot;uuid&quot;:&quot;3998e91d-10a7-4c87-a5d8-ab799ed620f6&quot;}" data-component-name="MentionToDOM"></span> </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:144788461,&quot;url&quot;:&quot;https://www.thesunshinelayer.com/p/the-ball-and-the-bat-problem&quot;,&quot;publication_id&quot;:1558652,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Sunshine Layer&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F305aae40-8801-4326-bdd2-a799967261a0_500x500.png&quot;,&quot;title&quot;:&quot;The ball and the bat problem&quot;,&quot;truncated_body_text&quot;:&quot;Let's solve a small math puzzle. Consider this problem: You have a bat and a ball, which together cost 1.1 euros. The bat costs 1 euro more than the ball. How much does the ball cost? The immediate answer might be 10 cents. If you jumped to that conclusion, well&#8230; you&#8217;re wrong.&quot;,&quot;date&quot;:&quot;2024-05-20T06:01:19.853Z&quot;,&quot;like_count&quot;:4,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:138928314,&quot;name&quot;:&quot;Elena Sunshine&quot;,&quot;handle&quot;:&quot;sunshinelayer&quot;,&quot;previous_name&quot;:&quot;Helen Sunshine&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f7b65ba8-2ff9-4ce5-9d26-faef384d72e6_583x583.jpeg&quot;,&quot;bio&quot;:&quot;Full-Stack Software Engineer &#8226;  Sharing 10+ years of clear-cut insights on software design concepts&quot;,&quot;profile_set_up_at&quot;:&quot;2023-04-07T13:11:45.943Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:1528217,&quot;user_id&quot;:138928314,&quot;publication_id&quot;:1558652,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:1558652,&quot;name&quot;:&quot;The Sunshine Layer&quot;,&quot;subdomain&quot;:&quot;thesunshinelayer&quot;,&quot;custom_domain&quot;:&quot;www.thesunshinelayer.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Pierce through cloudy concepts of software development with weekly practical insights on programming principles, system design and more.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/305aae40-8801-4326-bdd2-a799967261a0_500x500.png&quot;,&quot;author_id&quot;:138928314,&quot;theme_var_background_pop&quot;:&quot;#D10000&quot;,&quot;created_at&quot;:&quot;2023-04-07T13:11:51.355Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;The Sunshine Layer&quot;,&quot;copyright&quot;:&quot;The Sunshine Layer&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://www.thesunshinelayer.com/p/the-ball-and-the-bat-problem?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!16TC!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F305aae40-8801-4326-bdd2-a799967261a0_500x500.png" loading="lazy"><span class="embedded-post-publication-name">The Sunshine Layer</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">The ball and the bat problem</div></div><div class="embedded-post-body">Let's solve a small math puzzle. Consider this problem: You have a bat and a ball, which together cost 1.1 euros. The bat costs 1 euro more than the ball. How much does the ball cost? The immediate answer might be 10 cents. If you jumped to that conclusion, well&#8230; you&#8217;re wrong&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 years ago &#183; 4 likes &#183; Elena Sunshine</div></a></div><p>By <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Elena Sunshine&quot;,&quot;id&quot;:138928314,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f7b65ba8-2ff9-4ce5-9d26-faef384d72e6_583x583.jpeg&quot;,&quot;uuid&quot;:&quot;3ae44fb8-0bbf-4838-b496-f640800b6612&quot;}" data-component-name="MentionToDOM"></span> </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:144821789,&quot;url&quot;:&quot;https://blog.dataengineer.io/p/why-its-hard-for-data-engineers-to&quot;,&quot;publication_id&quot;:1644342,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;EcZachly Data Engineering Newsletter&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7babfd31-fa90-48c7-a46b-c155b3694ede_1280x1280.png&quot;,&quot;title&quot;:&quot;Why it's hard for data engineers to get promoted after senior engineer&quot;,&quot;truncated_body_text&quot;:&quot;As data engineers, we look up to the stars and hope for a hopeful future. That might include leading a team, making a lot of money, and helping the planet be more data-driven! There are barriers and obstacles along this journey that can be more challenging for data engineers in particular that you should be aware of during your career journey.&quot;,&quot;date&quot;:&quot;2024-05-21T01:02:11.624Z&quot;,&quot;like_count&quot;:38,&quot;comment_count&quot;:21,&quot;bylines&quot;:[{&quot;id&quot;:10367987,&quot;name&quot;:&quot;Zach Wilson&quot;,&quot;handle&quot;:&quot;eczachly&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a857d08-ec8d-4a0e-9cb5-ad8434fe519e_2333x3500.jpeg&quot;,&quot;bio&quot;:&quot;700k+followers on all platforms\n\nLed data engineering teams at Airbnb and Netflix. &quot;,&quot;profile_set_up_at&quot;:&quot;2023-05-07T19:51:23.828Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:1618125,&quot;user_id&quot;:10367987,&quot;publication_id&quot;:1644342,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:1644342,&quot;name&quot;:&quot;EcZachly Data Engineering Newsletter&quot;,&quot;subdomain&quot;:&quot;eczachly&quot;,&quot;custom_domain&quot;:&quot;blog.dataengineer.io&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;A newsletter dedicated to talking about data engineering and technology trends&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7babfd31-fa90-48c7-a46b-c155b3694ede_1280x1280.png&quot;,&quot;author_id&quot;:10367987,&quot;theme_var_background_pop&quot;:&quot;#E8B500&quot;,&quot;created_at&quot;:&quot;2023-05-07T19:52:03.161Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Zach Wilson&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false}},{&quot;id&quot;:2374369,&quot;user_id&quot;:10367987,&quot;publication_id&quot;:2352638,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:2352638,&quot;name&quot;:&quot;The ADHD Engineer&quot;,&quot;subdomain&quot;:&quot;adhdengineer&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;This Substack is to help engineers who have ADHD succeed in becoming excellent at what they do&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a857d08-ec8d-4a0e-9cb5-ad8434fe519e_2333x3500.jpeg&quot;,&quot;author_id&quot;:10367987,&quot;theme_var_background_pop&quot;:&quot;#009B50&quot;,&quot;created_at&quot;:&quot;2024-02-15T18:31:16.564Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Zach Wilson&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:100}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://blog.dataengineer.io/p/why-its-hard-for-data-engineers-to?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!2oBZ!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7babfd31-fa90-48c7-a46b-c155b3694ede_1280x1280.png" loading="lazy"><span class="embedded-post-publication-name">EcZachly Data Engineering Newsletter</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Why it's hard for data engineers to get promoted after senior engineer</div></div><div class="embedded-post-body">As data engineers, we look up to the stars and hope for a hopeful future. That might include leading a team, making a lot of money, and helping the planet be more data-driven! There are barriers and obstacles along this journey that can be more challenging for data engineers in particular that you should be aware of during your career journey&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 years ago &#183; 38 likes &#183; 21 comments &#183; Zach Wilson</div></a></div><p>By <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Zach Wilson&quot;,&quot;id&quot;:10367987,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a857d08-ec8d-4a0e-9cb5-ad8434fe519e_2333x3500.jpeg&quot;,&quot;uuid&quot;:&quot;a4281aa9-ab84-45bd-b4f2-dbedca154849&quot;}" data-component-name="MentionToDOM"></span> </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.techunfiltered.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Tech Unfiltered is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>