[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"verticals":3,"search-suggestions":44,"article-saying-no-when-the-team-shrinks":92,"path-membership-saying-no-when-the-team-shrinks":261,"related-saying-no-when-the-team-shrinks":262,"comments-01a17bfb-2cb7-755f-863f-6a307a5c596a":378},[4,20,32],{"id":5,"slug":6,"name":7,"tagline":8,"description":9,"accentFrom":10,"accentTo":11,"icon":12,"defaultLocale":13,"locales":14,"features":16,"position":19},"019fe637-3d33-714b-b57f-23e163ffca0c","dev","Web Development","Read it. Run it. Prove it.","A post a day on modern web development — most with an editable playground and a quiz that explains every answer. Free, no account needed.","violet-500","cyan-400","◇","en",[13,15],"fa",{"courses":17,"paths":17,"articles":17,"exams":18,"flashcards":18,"packages":17,"community":17,"certificates":17,"teams":17,"commerce":17},true,false,0,{"id":21,"slug":22,"name":23,"tagline":24,"description":25,"accentFrom":26,"accentTo":10,"icon":27,"defaultLocale":13,"locales":28,"features":30,"position":31},"019fe637-3dc2-754c-8657-0f175bfee7c6","lang","Languages","Learn a language the way you learn a codebase.","Grammar explained the way good documentation explains an API — one idea at a time, each with a quiz.","amber-400","⌘",[13,15,29],"es",{"courses":18,"paths":18,"articles":17,"exams":18,"flashcards":17,"packages":18,"community":17,"certificates":17,"teams":18,"commerce":18},2,{"id":33,"slug":34,"name":35,"tagline":36,"description":37,"accentFrom":38,"accentTo":39,"icon":40,"defaultLocale":13,"locales":41,"features":42,"position":43},"7b3c16f2-931d-410e-802e-e1fa4edab7de","soft","Soft Skills","The half of the job nobody wrote documentation for.","Weekly, on the parts of working life that decide more than your code does — first weeks, meetings, interviews, promotions, and the people around you. Written from what actually happens, and recorded as a podcast you can listen to on the walk.","emerald-400","teal-300","◉",[13],{"courses":18,"paths":18,"articles":17,"exams":18,"flashcards":18,"packages":18,"community":17,"certificates":18,"teams":18,"commerce":18},3,[45,49,53,57,61,65,69,73,77,81,84,88],{"slug":46,"name":47,"articles":48},"webdev","Webdev",157,{"slug":50,"name":51,"articles":52},"javascript","Javascript",129,{"slug":54,"name":55,"articles":56},"frontend","Frontend",89,{"slug":58,"name":59,"articles":60},"tutorial","Tutorial",61,{"slug":62,"name":63,"articles":64},"css","Css",46,{"slug":66,"name":67,"articles":68},"performance","Performance",26,{"slug":70,"name":71,"articles":72},"typescript","Typescript",22,{"slug":74,"name":75,"articles":76},"react","React",19,{"slug":78,"name":79,"articles":80},"programming","Programming",15,{"slug":82,"name":83,"articles":80},"browser","Browser",{"slug":85,"name":86,"articles":87},"node","Node",13,{"slug":89,"name":90,"articles":91},"html","Html",11,{"id":93,"slug":94,"title":95,"subtitle":96,"excerpt":97,"coverUrl":98,"locale":13,"readingMinutes":99,"publishedAt":100,"viewCount":101,"likeCount":19,"commentCount":19,"author":102,"vertical":107,"topic":108,"tags":111,"_count":124,"playground":96,"body":125,"bodyMd":221,"seo":222,"translationGroupId":225,"series":226,"podcastUrl":96,"verticalId":33,"thread":256,"assessments":258,"translations":259,"quiz":96},"01a17bfb-2cb7-755f-863f-6a307a5c596a","saying-no-when-the-team-shrinks","When saying no feels like volunteering to be next",null,"Your team is smaller than it was a year ago and the backlog isn't. Saying no to one more thing now reads as a risk, not a boundary. Here's how to turn a no into a trade-off the other person can actually say yes to, and when that move doesn't work at all.","\u002Fmedia\u002Fcovers\u002Fsaying-no-when-the-team-shrinks.png",6,"2026-10-28T06:10:57.714Z",17,{"id":103,"name":104,"username":105,"avatarUrl":96,"headline":106},"019fe637-3c25-7088-9034-39c9f15dc3c8","Parsa Jiravand","parsa","Frontend engineer · building bestpractic",{"slug":34,"name":35,"accentFrom":38,"accentTo":39},{"slug":109,"name":110},"people","The people around you",[112,115,118,121],{"slug":113,"name":114,"color":96},"career","Career",{"slug":116,"name":117,"color":96},"discuss","Discuss",{"slug":119,"name":120,"color":96},"productivity","Productivity",{"slug":122,"name":123,"color":96},"beginners","Beginners",{"assessments":19},{"blocks":126,"version":220},[127,131,135,138,142,145,148,152,155,158,161,164,167,170,173,176,179,182,186,189,192,195,198,201,204,207,214,217],{"id":128,"html":129,"type":130},"b1","\u003C!-- hello:start -->","paragraph",{"id":132,"html":133,"type":134},"b2","\u003Cp>👋 \u003Cstrong>I&#39;m Parsa Jiravand — I work in IT, and this is Best Practice.\u003C\u002Fstrong> One article every day, one soft-skills episode every week. It all lives at \u003Cstrong>\u003Ca href=\"https:\u002F\u002Fbestpractic.org\u002F\">bestpractic.org\u003C\u002Fa>\u003C\u002Fstrong> — come join us.\u003C\u002Fp>\n","quote",{"id":136,"html":137,"type":130},"b3","\u003C!-- hello:end -->",{"id":139,"html":140,"text":140,"type":141,"level":31},"b4","The moment","heading",{"id":143,"html":144,"type":130},"b5","\u003Cp>Someone pings you with one more thing. It&#39;s not large on its own — cover a ticket for the person who isn&#39;t on the team anymore, take a review that used to go to someone who got moved to a different project, sit in on a meeting that lost its usual attendee. You say yes before you&#39;ve actually checked whether you have room for it, and the question you just answered wasn&#39;t &quot;can I do this.&quot; It was &quot;do I want my name to be the one that comes up if anyone&#39;s ever listing who said no.&quot;\u003C\u002Fp>",{"id":146,"html":147,"type":130},"b6","\u003Cp>That&#39;s not paranoia. It&#39;s a pretty reasonable read of a year where a lot of teams got smaller and the backlog didn&#39;t shrink to match.\u003C\u002Fp>",{"id":149,"html":150,"text":151,"type":141,"level":31},"b7","What&#39;s actually happening","What's actually happening",{"id":153,"html":154,"type":130},"b8","\u003Cp>A round of cuts removes names from a roster. It doesn&#39;t remove the tickets, the on-call rotation, the thing that used to be someone else&#39;s job. So the work that three people did now gets done by two, and the two who are left are also the two who just watched colleagues leave, which means they&#39;re doing more with a live, recent reminder that headcount decisions happen and they are not always about performance. Saying no into that environment doesn&#39;t feel like setting a boundary. It feels like handing someone a data point.\u003C\u002Fp>",{"id":156,"html":157,"type":130},"b9","\u003Cp>The actual risk calculation most people run, without saying it out loud, is something like: a yes costs me time I don&#39;t have, but a no costs me a story someone might tell about me later, and the second cost is harder to see and feels bigger. So you optimize against the thing you can&#39;t measure and let the thing you can measure — your actual hours, your actual output on what you already owed — quietly get worse. The problem isn&#39;t that you&#39;re bad at saying no. It&#39;s that you&#39;ve correctly noticed the no has a cost right now that it didn&#39;t have a year ago, and you haven&#39;t found a version of it that doesn&#39;t pay that cost.\u003C\u002Fp>",{"id":159,"html":160,"text":160,"type":141,"level":31},"b10","What works",{"id":162,"html":163,"type":130},"b11","\u003Cp>The flat no — &quot;I can&#39;t take that on&quot; — is honest, but it reads as capacity you don&#39;t have, full stop, and in a squeezed team that gets filed under can&#39;t-handle-the-job even when it&#39;s completely accurate. The move that tends to land instead is answering with a trade-off instead of a refusal: &quot;I can get you the migration fix by Friday, or the dashboard thing by Wednesday — not both this week. Which one do you actually need first?&quot;\u003C\u002Fp>",{"id":165,"html":166,"type":130},"b12","\u003Cp>Notice what that sentence does. It doesn&#39;t say no to the work. It says no to doing all of it at the same time, and it hands the other person the one thing they actually wanted, which is a decision, not a yes. Most people asking for the extra thing don&#39;t need you specifically to do it right this second — they need the thing handled, or they need to be able to tell someone above them it&#39;s handled. Give them a real choice between two real outcomes and most of them will pick one, because picking one is easier than arguing with you about whether you should have capacity.\u003C\u002Fp>",{"id":168,"html":169,"type":130},"b13","\u003Cp>A second phrase worth having ready is for when someone&#39;s already decided for you — &quot;can you just also take this&quot; — and you say: &quot;I want to get this right, so tell me what I should drop to make room for it.&quot; That&#39;s not a no either. It&#39;s forcing the other person to do the prioritizing they skipped when they handed you the extra thing, instead of you quietly absorbing a decision nobody actually made.\u003C\u002Fp>",{"id":171,"html":172,"type":130},"b14","\u003Cp>And when you catch yourself about to say &quot;sure, I&#39;ll just squeeze it in&quot; — that fast, reflexive yes that exists to end the conversation rather than because you checked anything — that&#39;s worth noticing in the moment, because it isn&#39;t a no you avoided. It&#39;s a no you moved to ten o&#39;clock on a weeknight, and it&#39;ll collect there with three others just like it.\u003C\u002Fp>",{"id":174,"html":175,"text":175,"type":141,"level":31},"b15","Where it backfires",{"id":177,"html":178,"type":130},"b16","\u003Cp>The trade-off move assumes the person asking has room to actually choose. If your manager is just as squeezed as you are — passing along pressure from somewhere above them, with no real slack to decide which of your two things matters more — handing them a choice doesn&#39;t help them, it just gives them a second decision they don&#39;t have bandwidth for either, and you&#39;ll often get &quot;just do both&quot; back, because that&#39;s easier for them to say than to actually prioritize. In that situation the trade-off framing doesn&#39;t fail because you did it wrong. It fails because the thing it assumes — someone on the other end with enough slack to weigh two options — isn&#39;t there.\u003C\u002Fp>",{"id":180,"html":181,"type":130},"b17","\u003Cp>It also doesn&#39;t work if you&#39;re new, or if you&#39;re already the person a team quietly suspects might be first on a future list. In that specific spot, a trade-off can read as negotiating from a position you don&#39;t currently have, and the honest version of this advice is that it works best for someone whose work is already visible and already trusted — someone with enough of a track record that &quot;I can&#39;t do both&quot; is heard as a scheduling fact, not as a signal they&#39;re looking for an exit. If that&#39;s not you yet, the move that actually helps is smaller and quieter: get specific, in writing, about what you&#39;re already carrying, so when the extra thing shows up there&#39;s already a visible list for someone else to look at and prioritize against.\u003C\u002Fp>",{"id":183,"html":184,"text":185,"type":141,"level":31},"b18","The part that&#39;s uncomfortable","The part that's uncomfortable",{"id":187,"html":188,"type":130},"b19","\u003Cp>None of this works if the environment around you has already decided that anyone who says no, in any form, is making a mistake. Some managers genuinely want a trade-off and will use it to prioritize honestly. Some managers will hear any version of &quot;not both&quot; as the beginning of the list they keep of people who don&#39;t step up, no matter how reasonably you phrase it. You can&#39;t always tell which one you have from a single interaction, and a lot of what decides whether this move works is something you don&#39;t control — how much slack your specific manager actually has, how much trust you&#39;d already banked before this year got harder, whether the team around you is the kind that notices when one person is quietly doing three people&#39;s work or the kind that just keeps adding to the pile as long as it keeps getting absorbed.\u003C\u002Fp>",{"id":190,"html":191,"type":130},"b20","\u003Cp>If you&#39;re in the second kind of team, better phrasing doesn&#39;t fix it. That&#39;s not a failure of technique. It&#39;s a real description of where you are, and it&#39;s worth being honest with yourself about which situation you&#39;re actually in before you spend more energy trying to word your way out of it.\u003C\u002Fp>",{"id":193,"html":194,"text":194,"type":141,"level":31},"b21","Monday",{"id":196,"html":197,"type":130},"b22","\u003Cp>Pick one thing you&#39;re already carrying that nobody&#39;s actually looked at in a while — the thing you took on three months ago that quietly became permanent — and name it out loud this week, not as a complaint, as a fact: &quot;here&#39;s what&#39;s currently on my plate, and here&#39;s roughly how full it is.&quot; Say it before the next extra thing shows up, not in response to it. A no that arrives with a visible list behind it reads completely differently than a no that shows up alone, and most people have never actually said the list out loud, which means the person deciding whether to add to it has been guessing the whole time.\u003C\u002Fp>",{"id":199,"type":200},"b23","divider",{"id":202,"html":203,"type":130},"b24","\u003Cp>🚀 \u003Cstrong>Want more like this?\u003C\u002Fstrong> Every guide, playground, and quiz lives on \u003Cstrong>\u003Ca href=\"https:\u002F\u002Fbestpractic.org\u002F\">bestpractic.org\u003C\u002Fa>\u003C\u002Fstrong> — open it and \u003Cstrong>\u003Ca href=\"https:\u002F\u002Fbestpractic.org\u002F\">sign up free\u003C\u002Fa>\u003C\u002Fstrong> so the next one finds you.\u003C\u002Fp>",{"id":205,"html":206,"type":130},"b25","\u003Cp>\u003Cem>Thanks for reading! Let&#39;s stay connected:\u003C\u002Fem>\u003C\u002Fp>",{"id":208,"type":209,"items":210,"ordered":18},"b26","list",[211,212,213],"⭐ \u003Cstrong>GitHub\u003C\u002Fstrong> — follow me and star the projects: \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fparsajiravand\">github.com\u002Fparsajiravand\u003C\u002Fa>","💬 \u003Cstrong>Discord\u003C\u002Fstrong> — join the frontend best-practices community: \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002Fd9KRhuAwQ\">discord.gg\u002Fd9KRhuAwQ\u003C\u002Fa>","📸 \u003Cstrong>Instagram\u003C\u002Fstrong> — frontend best practices, daily: \u003Ca href=\"https:\u002F\u002Fwww.instagram.com\u002Fbestpractice___\u002F\">@bestpractice___\u003C\u002Fa>",{"id":215,"html":216,"type":130},"b27","\u003Cp>🤝 \u003Cstrong>Want to make something with us?\u003C\u002Fstrong> Write a piece, come on the podcast, or bring an idea that should exist — \u003Cstrong>\u003Ca href=\"https:\u002F\u002Fbestpractic.org\u002Fcollaborate\">bestpractic.org\u002Fcollaborate\u003C\u002Fa>\u003C\u002Fstrong>.\u003C\u002Fp>",{"id":218,"html":219,"type":130},"b28","\u003Cp>\u003Cem>And if this one helped, send it to the person you know who needs it this week. That&#39;s what keeps these coming.\u003C\u002Fem>\u003C\u002Fp>",1,"\u003C!-- hello:start -->\n\n> 👋 **I'm Parsa Jiravand — I work in IT, and this is Best Practice.** One article every day, one soft-skills episode every week. It all lives at **[bestpractic.org](https:\u002F\u002Fbestpractic.org\u002F)** — come join us.\n\n\u003C!-- hello:end -->\n\n## The moment\n\nSomeone pings you with one more thing. It's not large on its own — cover a ticket for the person who isn't on the team anymore, take a review that used to go to someone who got moved to a different project, sit in on a meeting that lost its usual attendee. You say yes before you've actually checked whether you have room for it, and the question you just answered wasn't \"can I do this.\" It was \"do I want my name to be the one that comes up if anyone's ever listing who said no.\"\n\nThat's not paranoia. It's a pretty reasonable read of a year where a lot of teams got smaller and the backlog didn't shrink to match.\n\n## What's actually happening\n\nA round of cuts removes names from a roster. It doesn't remove the tickets, the on-call rotation, the thing that used to be someone else's job. So the work that three people did now gets done by two, and the two who are left are also the two who just watched colleagues leave, which means they're doing more with a live, recent reminder that headcount decisions happen and they are not always about performance. Saying no into that environment doesn't feel like setting a boundary. It feels like handing someone a data point.\n\nThe actual risk calculation most people run, without saying it out loud, is something like: a yes costs me time I don't have, but a no costs me a story someone might tell about me later, and the second cost is harder to see and feels bigger. So you optimize against the thing you can't measure and let the thing you can measure — your actual hours, your actual output on what you already owed — quietly get worse. The problem isn't that you're bad at saying no. It's that you've correctly noticed the no has a cost right now that it didn't have a year ago, and you haven't found a version of it that doesn't pay that cost.\n\n## What works\n\nThe flat no — \"I can't take that on\" — is honest, but it reads as capacity you don't have, full stop, and in a squeezed team that gets filed under can't-handle-the-job even when it's completely accurate. The move that tends to land instead is answering with a trade-off instead of a refusal: \"I can get you the migration fix by Friday, or the dashboard thing by Wednesday — not both this week. Which one do you actually need first?\"\n\nNotice what that sentence does. It doesn't say no to the work. It says no to doing all of it at the same time, and it hands the other person the one thing they actually wanted, which is a decision, not a yes. Most people asking for the extra thing don't need you specifically to do it right this second — they need the thing handled, or they need to be able to tell someone above them it's handled. Give them a real choice between two real outcomes and most of them will pick one, because picking one is easier than arguing with you about whether you should have capacity.\n\nA second phrase worth having ready is for when someone's already decided for you — \"can you just also take this\" — and you say: \"I want to get this right, so tell me what I should drop to make room for it.\" That's not a no either. It's forcing the other person to do the prioritizing they skipped when they handed you the extra thing, instead of you quietly absorbing a decision nobody actually made.\n\nAnd when you catch yourself about to say \"sure, I'll just squeeze it in\" — that fast, reflexive yes that exists to end the conversation rather than because you checked anything — that's worth noticing in the moment, because it isn't a no you avoided. It's a no you moved to ten o'clock on a weeknight, and it'll collect there with three others just like it.\n\n## Where it backfires\n\nThe trade-off move assumes the person asking has room to actually choose. If your manager is just as squeezed as you are — passing along pressure from somewhere above them, with no real slack to decide which of your two things matters more — handing them a choice doesn't help them, it just gives them a second decision they don't have bandwidth for either, and you'll often get \"just do both\" back, because that's easier for them to say than to actually prioritize. In that situation the trade-off framing doesn't fail because you did it wrong. It fails because the thing it assumes — someone on the other end with enough slack to weigh two options — isn't there.\n\nIt also doesn't work if you're new, or if you're already the person a team quietly suspects might be first on a future list. In that specific spot, a trade-off can read as negotiating from a position you don't currently have, and the honest version of this advice is that it works best for someone whose work is already visible and already trusted — someone with enough of a track record that \"I can't do both\" is heard as a scheduling fact, not as a signal they're looking for an exit. If that's not you yet, the move that actually helps is smaller and quieter: get specific, in writing, about what you're already carrying, so when the extra thing shows up there's already a visible list for someone else to look at and prioritize against.\n\n## The part that's uncomfortable\n\nNone of this works if the environment around you has already decided that anyone who says no, in any form, is making a mistake. Some managers genuinely want a trade-off and will use it to prioritize honestly. Some managers will hear any version of \"not both\" as the beginning of the list they keep of people who don't step up, no matter how reasonably you phrase it. You can't always tell which one you have from a single interaction, and a lot of what decides whether this move works is something you don't control — how much slack your specific manager actually has, how much trust you'd already banked before this year got harder, whether the team around you is the kind that notices when one person is quietly doing three people's work or the kind that just keeps adding to the pile as long as it keeps getting absorbed.\n\nIf you're in the second kind of team, better phrasing doesn't fix it. That's not a failure of technique. It's a real description of where you are, and it's worth being honest with yourself about which situation you're actually in before you spend more energy trying to word your way out of it.\n\n## Monday\n\nPick one thing you're already carrying that nobody's actually looked at in a while — the thing you took on three months ago that quietly became permanent — and name it out loud this week, not as a complaint, as a fact: \"here's what's currently on my plate, and here's roughly how full it is.\" Say it before the next extra thing shows up, not in response to it. A no that arrives with a visible list behind it reads completely differently than a no that shows up alone, and most people have never actually said the list out loud, which means the person deciding whether to add to it has been guessing the whole time.\n\n---\n\n🚀 **Want more like this?** Every guide, playground, and quiz lives on **[bestpractic.org](https:\u002F\u002Fbestpractic.org\u002F)** — open it and **[sign up free](https:\u002F\u002Fbestpractic.org\u002F)** so the next one finds you.\n\n*Thanks for reading! Let's stay connected:*\n\n- ⭐ **GitHub** — follow me and star the projects: [github.com\u002Fparsajiravand](https:\u002F\u002Fgithub.com\u002Fparsajiravand)\n- 💬 **Discord** — join the frontend best-practices community: [discord.gg\u002Fd9KRhuAwQ](https:\u002F\u002Fdiscord.gg\u002Fd9KRhuAwQ)\n- 📸 **Instagram** — frontend best practices, daily: [@bestpractice___](https:\u002F\u002Fwww.instagram.com\u002Fbestpractice___\u002F)\n\n🤝 **Want to make something with us?** Write a piece, come on the podcast, or bring an idea that should exist — **[bestpractic.org\u002Fcollaborate](https:\u002F\u002Fbestpractic.org\u002Fcollaborate)**.\n\n*And if this one helped, send it to the person you know who needs it this week. That's what keeps these coming.*",{"title":95,"canonical":223,"description":224},"https:\u002F\u002Fbestpractic.org\u002Fblog\u002Fsaying-no-when-the-team-shrinks","Your team is smaller than it was a year ago and the backlog isn't. Saying no to one more thing now reads as a risk, not a boundary. Here's how to turn a no into a trade-off the oth","01a17bfb-2cb7-755f-863f-6c9b239ccb54",{"name":35,"part":227,"total":227,"items":228},7,[229,233,238,243,247,251,255],{"slug":230,"title":231,"publishedAt":232,"readingMinutes":227},"first-week-at-a-new-job","Nobody tells you the question window is closing","2026-08-25T08:53:57.723Z",{"slug":234,"title":235,"publishedAt":236,"readingMinutes":237},"speaking-up-in-meetings","You're not quiet in meetings, you're editing","2026-09-02T10:58:23.112Z",9,{"slug":239,"title":240,"publishedAt":241,"readingMinutes":242},"code-review-comments","Why your code review comments sound harsher than you meant","2026-09-30T06:11:19.028Z",8,{"slug":244,"title":245,"publishedAt":246,"readingMinutes":99},"junior-interview-expectations","Junior interviews don't test what they used to, and nobody updated you","2026-10-07T06:10:51.193Z",{"slug":248,"title":249,"publishedAt":250,"readingMinutes":227},"remote-visibility-promotion","Remote work means someone else is telling your story for you","2026-10-14T06:10:59.448Z",{"slug":252,"title":253,"publishedAt":254,"readingMinutes":99},"the-promotion-went-to-someone-else","Someone else got the promotion, and you're being told to wait","2026-10-21T06:11:04.243Z",{"slug":94,"title":95,"publishedAt":100,"readingMinutes":99},{"id":257,"locked":18},"01a17bfb-2cf2-705b-8947-f47a186265d7",[],[260],{"locale":13,"slug":94},[],{"items":263,"meta":377},[264,275,291,311,329,345,361],{"id":93,"slug":94,"title":95,"subtitle":96,"excerpt":97,"coverUrl":98,"locale":13,"readingMinutes":99,"publishedAt":100,"viewCount":265,"likeCount":19,"commentCount":19,"author":266,"vertical":267,"topic":268,"tags":269,"_count":274,"playground":96,"hasQuiz":18,"hasPlayground":18},18,{"id":103,"name":104,"username":105,"avatarUrl":96,"headline":106},{"slug":34,"name":35,"accentFrom":38,"accentTo":39},{"slug":109,"name":110},[270,271,272,273],{"slug":113,"name":114,"color":96},{"slug":116,"name":117,"color":96},{"slug":119,"name":120,"color":96},{"slug":122,"name":123,"color":96},{"assessments":19},{"id":276,"slug":252,"title":253,"subtitle":96,"excerpt":277,"coverUrl":278,"locale":13,"readingMinutes":99,"publishedAt":254,"viewCount":279,"likeCount":19,"commentCount":19,"author":280,"vertical":281,"topic":282,"tags":285,"_count":290,"playground":96,"hasQuiz":18,"hasPlayground":18},"01a157ee-9a22-7143-9a21-27dfb89f1eb9","The decision didn't happen in the conversation where you heard about it — it happened weeks earlier, in a room you weren't in, with a budget you didn't see. Here's what to actually ask, and what the honest answer sounds like.","\u002Fmedia\u002Fcovers\u002Fthe-promotion-went-to-someone-else.png",120,{"id":103,"name":104,"username":105,"avatarUrl":96,"headline":106},{"slug":34,"name":35,"accentFrom":38,"accentTo":39},{"slug":283,"name":284},"leading","Leading",[286,287,288,289],{"slug":113,"name":114,"color":96},{"slug":116,"name":117,"color":96},{"slug":119,"name":120,"color":96},{"slug":122,"name":123,"color":96},{"assessments":19},{"id":292,"slug":293,"title":294,"subtitle":96,"excerpt":295,"coverUrl":296,"locale":13,"readingMinutes":265,"publishedAt":297,"viewCount":298,"likeCount":19,"commentCount":19,"author":299,"vertical":300,"topic":301,"tags":303,"_count":310,"playground":96,"hasQuiz":18,"hasPlayground":18},"01a13bf6-f5c5-73fa-b352-749b8f0f4068","frontend-roadmap-you-have-to-pass","I Turned 44 Blog Posts Into a Frontend Roadmap You Have to Pass","A free frontend roadmap where every level is an article and a quiz you have to pass. Skip what you already know, no sign-up to start, cheat sheet inside.","\u002Fmedia\u002Fcovers\u002Ffrontend-roadmap-you-have-to-pass.png","2026-10-14T19:49:01.265Z",183,{"id":103,"name":104,"username":105,"avatarUrl":96,"headline":106},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":50,"name":302},"JavaScript",[304,305,306,307],{"slug":46,"name":47,"color":96},{"slug":54,"name":55,"color":96},{"slug":113,"name":114,"color":96},{"slug":308,"name":309,"color":96},"showdev","Showdev",{"assessments":19},{"id":312,"slug":248,"title":249,"subtitle":96,"excerpt":313,"coverUrl":314,"locale":13,"readingMinutes":227,"publishedAt":250,"viewCount":315,"likeCount":19,"commentCount":19,"author":316,"vertical":317,"topic":318,"tags":321,"_count":328,"playground":96,"hasQuiz":18,"hasPlayground":18},"01a1309c-2cb6-74ab-bc8a-0e9009fda37b","When you're not in the room where advancement gets decided, your manager becomes the only account of your work that reaches it. Here's what that changes, and what to actually say before the next one happens.","\u002Fmedia\u002Fcovers\u002Fremote-visibility-promotion.png",208,{"id":103,"name":104,"username":105,"avatarUrl":96,"headline":106},{"slug":34,"name":35,"accentFrom":38,"accentTo":39},{"slug":319,"name":320},"company","Company shapes",[322,323,324,327],{"slug":113,"name":114,"color":96},{"slug":116,"name":117,"color":96},{"slug":325,"name":326,"color":96},"watercooler","Watercooler",{"slug":119,"name":120,"color":96},{"assessments":19},{"id":330,"slug":244,"title":245,"subtitle":96,"excerpt":331,"coverUrl":332,"locale":13,"readingMinutes":99,"publishedAt":246,"viewCount":333,"likeCount":19,"commentCount":19,"author":334,"vertical":335,"topic":336,"tags":339,"_count":344,"playground":96,"hasQuiz":18,"hasPlayground":18},"01a10c63-59c5-778b-9dad-342d71a1b8bd","You prepped for an entry-level loop and got asked to defend tradeoffs like a senior hire. That's not the interviewer overreaching — the job underneath the title actually changed. Here's what they're listening for now, and the words that show it.","\u002Fmedia\u002Fcovers\u002Fjunior-interview-expectations.png",247,{"id":103,"name":104,"username":105,"avatarUrl":96,"headline":106},{"slug":34,"name":35,"accentFrom":38,"accentTo":39},{"slug":337,"name":338},"interviews","Getting hired",[340,341,342,343],{"slug":113,"name":114,"color":96},{"slug":116,"name":117,"color":96},{"slug":122,"name":123,"color":96},{"slug":119,"name":120,"color":96},{"assessments":19},{"id":346,"slug":239,"title":240,"subtitle":96,"excerpt":347,"coverUrl":348,"locale":13,"readingMinutes":242,"publishedAt":241,"viewCount":349,"likeCount":19,"commentCount":19,"author":350,"vertical":351,"topic":352,"tags":353,"_count":360,"playground":96,"hasQuiz":18,"hasPlayground":18},"01a0ec73-1496-7457-92a3-031fc4cd640c","A review comment loses your tone on the way, and the author fills it back in — usually with a worse one, at the exact moment they're most attached to the work. Here's how to put the weight back into what you write, the words to use, and when to stop typing.","\u002Fmedia\u002Fcovers\u002Fcode-review-comments.png",238,{"id":103,"name":104,"username":105,"avatarUrl":96,"headline":106},{"slug":34,"name":35,"accentFrom":38,"accentTo":39},{"slug":109,"name":110},[354,355,358,359],{"slug":113,"name":114,"color":96},{"slug":356,"name":357,"color":96},"codereview","Codereview",{"slug":122,"name":123,"color":96},{"slug":116,"name":117,"color":96},{"assessments":19},{"id":362,"slug":234,"title":235,"subtitle":96,"excerpt":363,"coverUrl":364,"locale":13,"readingMinutes":237,"publishedAt":236,"viewCount":365,"likeCount":19,"commentCount":19,"author":366,"vertical":367,"topic":368,"tags":371,"_count":376,"playground":96,"hasQuiz":18,"hasPlayground":18},"01a05274-fd83-71ed-9890-3cc8c1004104","The reason you don't speak up isn't confidence. Everyone else is thinking out loud while you wait for your thought to be finished — and a good point at minute thirty is worth less than a rough one at minute twelve. Here's how to land it on time.","\u002Fmedia\u002Fcovers\u002Fspeaking-up-in-meetings.png",332,{"id":103,"name":104,"username":105,"avatarUrl":96,"headline":106},{"slug":34,"name":35,"accentFrom":38,"accentTo":39},{"slug":369,"name":370},"meetings","Meetings and rooms",[372,373,374,375],{"slug":113,"name":114,"color":96},{"slug":116,"name":117,"color":96},{"slug":119,"name":120,"color":96},{"slug":122,"name":123,"color":96},{"assessments":19},{"page":220,"perPage":227,"total":242,"totalPages":31},{"locked":18,"total":19,"comments":379},[]]