<?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"><channel><title><![CDATA[Kevin Blanco]]></title><description><![CDATA[Kevin Blanco is a DevRel Leader, Keynote Speaker, and Developer Advocate with 60+ global keynotes. 2x Google Expert, Google for Startups Mentor, and Filmmaker specializing in PLG and Enterprise GTM strategies.]]></description><link>https://blog.kevinblanco.dev</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Apr 2026 19:58:31 GMT</lastBuildDate><atom:link href="https://blog.kevinblanco.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Signals: The Skill of Elite Developer Advocates]]></title><description><![CDATA[The best developer experiences aren't designed in a vacuum. They're shaped by hundreds of conversations with real people hitting real walls. Every friction log I run starts the same way: shut up and w]]></description><link>https://blog.kevinblanco.dev/signals-the-skill-of-elite-developer-advocates</link><guid isPermaLink="true">https://blog.kevinblanco.dev/signals-the-skill-of-elite-developer-advocates</guid><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Wed, 01 Apr 2026 17:35:03 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/650fc24587973c25fd1f31da/52e3296a-d6d0-40d7-9983-d081230937cd.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The best developer experiences aren't designed in a vacuum. They're shaped by hundreds of conversations with real people hitting real walls. Every friction log I run starts the same way: <strong>shut up and watch.</strong></p>
<p>If you want to be a Developer Advocate/DevEx who actually moves the needle—not just one who creates pretty content—you need to develop the skill of <strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">detecting signals and eliminating friction</mark></strong>. This skill makes you invaluable to any company that wants to grow.</p>
<h3>What Are Signals?</h3>
<p>Signals are behavioral indicators that tell you what developers actually experience—not what they say they experience, <strong>not what you think they experience</strong>. Signals come in many forms:</p>
<p><strong>Direct signals (explicit):</strong></p>
<p>A developer tells you "this is confusing". A support ticket asking something that should be in the docs. A forum comment requesting clarification. Negative feedback in a survey.</p>
<div>
<div>💡</div>
<div>To start, ask you self: Do I have visibility of direct signals? Am I measuring them? Can I easily track these? <strong>If the answer is no, then that should be your first step.</strong></div>
</div>

<p><strong>Indirect signals (implicit):</strong></p>
<ul>
<li><p>A developer opening Google or asking AI while following your tutorial.</p>
</li>
<li><p>A long pause before clicking on something.</p>
</li>
<li><p>Repeated scrolling between two documentation sections.</p>
</li>
<li><p>Drop-off at a specific onboarding step.</p>
</li>
<li><p>Unusually long time on a page that should be quick.</p>
</li>
</ul>
<blockquote>
<p><strong>Indirect signals are more valuable because they're honest. People don't always tell you what they really think, but their behavior doesn't lie.</strong></p>
</blockquote>
<p>These ones are probably the hardest to measure and keep track off, but is not impossible. There are many ways and tools to make this happen and we'll cover them here.</p>
<h3><strong>What Is Friction?</strong></h3>
<p><strong>Friction is anything that slows down, frustrates, or stops a developer on their path to success with your product</strong>. It can be obvious:</p>
<ul>
<li><p>Incomplete or outdated documentation.</p>
</li>
<li><p>Confusing errors with no context</p>
</li>
<li><p>Registration process asking for too much information</p>
</li>
<li><p>SDK that requires 15 steps for a "Hello World"</p>
</li>
</ul>
<p>Or it can be subtle:</p>
<ul>
<li><p>Inconsistent terminology between docs and product</p>
</li>
<li><p>Code examples that work but don't explain the "why"</p>
</li>
<li><p>Absence of information the developer assumes should be there</p>
</li>
</ul>
<p><strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">Subtle friction is more dangerous because it's invisible to those who built the product</mark></strong>. They're too close. They've seen the code a thousand times. They can no longer see what a newcomer doesn't understand.</p>
<h3>Why This Makes You Invaluable</h3>
<p>Here's the business reality: every friction point is a point where you potentially lose users. If 1,000 developers visit your "Getting Started" page and only 300 complete the first tutorial, you have a friction problem.</p>
<p>Those 700 developers who dropped off could have been customers.</p>
<p>A Developer Advocate who knows how to identify where friction exists and how to eliminate it <strong>is directly impacting:</strong></p>
<ul>
<li><p><strong>Conversion</strong>: More developers who try → more who adopt → more who pay.</p>
</li>
<li><p><strong>Retention</strong>: Less frustration → less churn → higher lifetime value.</p>
</li>
<li><p><strong>Support</strong>: Less friction → fewer tickets → lower operational cost.</p>
</li>
<li><p><strong>Reputation</strong>: Better experience → better reviews → more organic referrals.</p>
</li>
</ul>
<blockquote>
<p><strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">When you can connect your work to these business metrics, you stop being "the person who makes blogs" and become someone who directly contributes to revenue.</mark></strong></p>
</blockquote>
<h3>The Art of Friction Logging</h3>
<p>Friction logging is the process of walking through the developer journey as if you were a new user, documenting every moment of confusion, doubt, or frustration.</p>
<p>It's not simply "testing the product." It's a deliberate practice of <strong>observation</strong> and <strong>documentation</strong>.</p>
<p><strong>How to run an effective friction log:</strong></p>
<p><strong>1. Forget everything you know</strong></p>
<p>This is the hardest step. You have to think like someone who's never seen your product. If you've been working with it for months, consider asking someone external to do it while you observe.</p>
<p><strong>2. Define the scenario</strong></p>
<p>What is this developer trying to accomplish? "I want to integrate the payments API into my e-commerce app." That's the context. Everything you do should be evaluated against that goal.</p>
<p><strong>3. Start from zero</strong></p>
<p>Not from your Developer Hub. From Google. What would someone who doesn't know your product search for? What do they find? Is the first impression clear?</p>
<p><strong>4. Document EVERYTHING</strong></p>
<p>Every click, every doubt, every moment where you think "hmm." Use categories:</p>
<ul>
<li><p><strong>Blocker:</strong> I can't continue without solving this</p>
</li>
<li><p><strong>High friction:</strong> I can continue but I'm frustrated</p>
</li>
<li><p><strong>Minor friction:</strong> Small annoyance, doesn't stop progress</p>
</li>
<li><p><strong>Positive:</strong> Something that worked better than expected</p>
</li>
</ul>
<p><strong>5. Capture the emotional context</strong></p>
<p>Not just "the documentation doesn't explain X." Instead: "<em>At this point I felt lost—I expected to find Y but only saw Z, which made me wonder if I was even in the right place.</em>"</p>
<p><strong>6. Include timestamps</strong></p>
<p>How long did each step take? "Time to Hello World" is a critical metric. If your competitor gets a developer to something working in 5 minutes and you take 45, you have a problem.</p>
<hr />
<h2>Where to Look for Signals</h2>
<p>Signals are everywhere if you know where to look:</p>
<h3>Quantitative sources (data):</h3>
<p><strong>Developer Hub analytics:</strong></p>
<ul>
<li><p>Where do users drop off?</p>
</li>
<li><p>Which pages have high bounce rates?</p>
</li>
<li><p>What's the actual flow vs. the expected flow?</p>
</li>
<li><p>What are they searching for internally that they can't find?</p>
</li>
</ul>
<p><strong>Product metrics:</strong></p>
<ul>
<li><p>Time to first API call</p>
</li>
<li><p>Onboarding completion rate</p>
</li>
<li><p>Drop-off by step in the integration flow</p>
</li>
<li><p>Most common errors in the first 7 days</p>
</li>
</ul>
<p><strong>Support data:</strong></p>
<ul>
<li><p>Most frequent tickets</p>
</li>
<li><p>Repeated questions</p>
</li>
<li><p>Resolution time by category</p>
</li>
</ul>
<h3>Qualitative sources (human):</h3>
<p><strong>Community:</strong></p>
<ul>
<li><p>Questions in Discord/Slack</p>
</li>
<li><p>Forum posts</p>
</li>
<li><p>Stack Overflow mentions</p>
</li>
<li><p>GitHub Issues discussions</p>
</li>
</ul>
<p><strong>Direct conversations:</strong></p>
<ul>
<li><p>Office hours</p>
</li>
<li><p>Calls with developers</p>
</li>
<li><p>Feedback at events</p>
</li>
<li><p>User interviews</p>
</li>
</ul>
<p><strong>Observation:</strong></p>
<ul>
<li><p>User testing sessions</p>
</li>
<li><p>Pair programming with new users</p>
</li>
<li><p>Hackathons (observe, don't just judge)</p>
</li>
</ul>
<hr />
<h2>My Process: From Signal to Solution</h2>
<p>After years of doing this, I've developed a process that works:</p>
<h3>Step 1: Collect signals systematically</h3>
<p>I don't wait for signals to come to me. I have systems:</p>
<ul>
<li><p>I review our metrics platforms where we have defined systematic KPIs/SLOs</p>
</li>
<li><p>I review support tickets weekly looking for patterns</p>
</li>
<li><p>I monitor the #help channel in our community daily</p>
</li>
<li><p>I run monthly friction logs of the onboarding flow</p>
</li>
<li><p>I run social listening on platforms like Reddit or similar</p>
</li>
<li><p>I have regular calls with the Customer Support team</p>
</li>
</ul>
<h3>Step 2: Categorize by impact</h3>
<p>Not all friction is equal. I categorize by:</p>
<ul>
<li><p><strong>Volume:</strong> How many developers does it affect?</p>
</li>
<li><p><strong>Severity:</strong> Is it a blocker or just an annoyance?</p>
</li>
<li><p><strong>Position in the journey:</strong> Is it at the beginning (high conversion impact) or the end (lower impact)?</p>
</li>
</ul>
<h3>Step 3: Identify the root cause</h3>
<p><strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">The signal is the symptom, not the disease.</mark></strong> If many developers ask "how do I authenticate?", the problem could be:</p>
<ul>
<li><p>The auth documentation is poorly written</p>
</li>
<li><p>The documentation is fine but hard to find</p>
</li>
<li><p>The auth flow is inherently confusing</p>
</li>
<li><p>The error message when it fails isn't useful</p>
</li>
</ul>
<p><strong>Each root cause requires a different solution.</strong></p>
<h3>Step 4: Propose prioritized solutions</h3>
<p>I present options to the team (example):</p>
<ul>
<li><p><strong>Quick win:</strong> Update messages for clear comms.</p>
</li>
<li><p><strong>Medium-term:</strong> Rewrite the auth section in docs, create a visual guide.</p>
</li>
<li><p><strong>Long-term:</strong> Redesign the auth flow in the product</p>
</li>
</ul>
<h3>Step 5: Measure the impact</h3>
<p><strong>After implementing, I measure again:</strong></p>
<ul>
<li><p>Did tickets on this topic decrease?</p>
</li>
<li><p>Did the completion rate for that step improve?</p>
</li>
<li><p>Did qualitative feedback change?</p>
</li>
</ul>
<p><strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">Without measurement, you don't know if you actually solved anything.</mark></strong></p>
<hr />
<h2>The Connection to Sales and Conversion</h2>
<p>This is where many DevRels fail to connect the dots:</p>
<blockquote>
<p><mark class="bg-yellow-200 dark:bg-yellow-500/30">Friction in the developer journey directly impacts revenue.</mark></p>
</blockquote>
<p>Think about the funnel:</p>
<p><strong>1,000 developers</strong> visit your landing page ↓ (20% continue) <strong>200 developers</strong> reach signup ↓ (50% complete registration) <strong>100 developers</strong> create an account ↓ (30% complete onboarding) <strong>30 developers</strong> reach "Hello World" ↓ (20% continue to real usage) <strong>6 developers</strong> become active users ↓ (30% convert to paid) <strong>2 developers</strong> become customers</p>
<p>From 1,000 to 2. Every friction point along that path is an improvement opportunity.</p>
<p>If you improve onboarding from 30% to 50% completion, you go from 30 to 50 developers at "Hello World," which potentially doubles your final customers.</p>
<p>A Developer Relations/Advocate/Ex who understands this and can identify where the most expensive friction lies is a DevRel <strong>who speaks the language of business.</strong></p>
<hr />
<h2>How to Communicate This to Stakeholders</h2>
<p>When I present friction findings, I don't say "the documentation is confusing." I say:</p>
<p>"We identified that 40% of developers drop off at step 3 of onboarding. Through friction logging and support ticket analysis, we found that the error message at that step doesn't provide enough context to resolve the problem. I'm proposing three solutions with different effort levels, and I estimate that fixing this could improve completion rate by 10-15%, which would represent approximately X new active users per month."</p>
<p><strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">That's different. That's strategic. That positions you as someone who understands the business.</mark></strong></p>
<hr />
<h2>Useful Tools and Frameworks</h2>
<p><strong>For analytics:</strong></p>
<ul>
<li><p>Google Analytics / Mixpanel / Amplitude (web behavior)</p>
</li>
<li><p>PostHog / Heap (product analytics)</p>
</li>
<li><p>FullStory / Hotjar (session recordings, heatmaps) <strong>or my favorite</strong> <a href="https://builtfor.dev">Built for Dev</a>, a tool built by the amazing <a href="https://www.linkedin.com/in/tessak22/"><strong>Tessa Kriesel</strong></a>.</p>
</li>
</ul>
<p><strong>For feedback:</strong></p>
<ul>
<li><p>Typeform / SurveyMonkey (surveys)</p>
</li>
<li><p>Intercom / Zendesk (support tickets)</p>
</li>
<li><p>Discord / Slack (community)</p>
</li>
</ul>
<p><strong>For documentation:</strong></p>
<ul>
<li><p><a href="https://readme.com">ReadMe</a> (it has great friction and sentiment analytics)</p>
</li>
<li><p>Loom (recording friction logging sessions)</p>
</li>
<li><p>Miro / FigJam (visually mapping the journey)</p>
</li>
</ul>
<p><strong>Key metrics to track:</strong></p>
<ul>
<li><p>Time to Hello World</p>
</li>
<li><p>Completion rate by onboarding step</p>
</li>
<li><p>Ticket volume by category</p>
</li>
<li><p>Developer experience NPS</p>
</li>
</ul>
<hr />
<h2>Final Reflection</h2>
<blockquote>
<p><mark class="bg-yellow-200 dark:bg-yellow-500/30">Anyone can create content. Anyone can give a talk. Anyone can answer questions in a forum.</mark></p>
</blockquote>
<p><strong>But few can systematically spot the invisible walls that frustrate developers</strong>, diagnose root causes, propose prioritized solutions, and measure impact on metrics that actually matter.</p>
<p>That skill—detecting signals, eliminating friction, connecting to business impact—is what separates good DevRels from exceptional ones.</p>
<p><strong>The next time a developer sighs while using your product, pay attention. There's an opportunity to create real value.</strong></p>
<hr />
<p><em>Have you implemented friction logging in your work? What signals have you discovered? Connect with me on</em> <a href="https://www.linkedin.com/in/kevinblanco/"><em>LinkedIn</em></a> <em>or visit</em> <a href="https://kevinblanco.dev"><em>kevinblanco.dev</em></a> <em>to share your experience.</em></p>
]]></content:encoded></item><item><title><![CDATA[Why Understanding Product-Market Fit Makes You a More Valuable DevRel]]></title><description><![CDATA[If you want to stand out as a Developer Relations professional, there's one concept most people overlook—one that separates tactical and strategic DevRels from just content creators or evangelists: Pr]]></description><link>https://blog.kevinblanco.dev/why-understanding-product-market-fit-makes-you-a-more-valuable-devrel</link><guid isPermaLink="true">https://blog.kevinblanco.dev/why-understanding-product-market-fit-makes-you-a-more-valuable-devrel</guid><category><![CDATA[developer relations]]></category><category><![CDATA[DevRel]]></category><category><![CDATA[product market fit]]></category><category><![CDATA[Product Design]]></category><category><![CDATA[Developer Advocate]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Mon, 23 Mar 2026 22:47:09 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/650fc24587973c25fd1f31da/5359ebce-5ca6-4976-b087-cf6ec785daca.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you want to stand out as a Developer Relations professional, there's one concept most people overlook—one that separates tactical and strategic DevRels from just content creators or evangelists: <strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">Product-Market Fit.</mark></strong></p>
<p>Most people who want to break into DevRel think about skills like writing, public speaking, creating videos, or building community. All of these are important. But if you don't understand the <strong>business context in which you operate</strong>, you'll end up executing tactics without knowing if they're actually moving the needle.</p>
<p>Understanding Product-Market Fit gives you an advantage that few have: <strong>the ability to think like a strategist, not just an executor.</strong></p>
<hr />
<h2>What Is Product-Market Fit?</h2>
<p>Product-Market Fit (PMF) is the point where your product satisfies a real market demand. It's when users don't just try your product, but adopt it, recommend it, and get frustrated when something doesn't work because they already depend on it.</p>
<p>Marc Andreessen, co-founder of Andreessen Horowitz, described it this way: "Product-Market Fit means being in a good market with a product that can satisfy that market."</p>
<p>It sounds like something that should only matter to founders and product managers. But for DevRel, <strong>understanding PMF completely changes how you approach your work.</strong></p>
<hr />
<h2>Why PMF Matters for Your DevRel Career</h2>
<p>When you understand what stage of PMF a company is in, you can:</p>
<p><strong>1. Make better choices about where to work</strong></p>
<p><strong>Not all DevRel opportunities are equal.</strong> A pre-seed startup looking for their first DevRel has completely different needs than a Series C company scaling their community. If you can't distinguish between them, you could end up in a role where conditions don't allow you to succeed, regardless of your talent.</p>
<p><strong>2. Adapt your approach based on context</strong></p>
<p>In a company still searching for PMF, <strong>your role is closer to product</strong>—gathering feedback, talking to the few active users, iterating alongside the engineering team. In a company with validated PMF, <strong>you can focus on scaling:</strong> more content, more events, more reach.</p>
<p><strong>3. Set realistic expectations</strong></p>
<p>When you understand the company's stage, you can propose metrics and objectives that make sense. You won't promise 10,000 new users when the product is still pivoting. This protects you and makes you look more professional to stakeholders.</p>
<p><strong>4. Have strategic conversations</strong></p>
<p>Instead of just receiving instructions ("we need more blogs," "make a video about X"), you can participate in discussions about <strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">priorities, timing, and how DevRel connects to business objectives</mark></strong>. This positions you as a strategic partner, not just a content creator.</p>
<p><strong>5. Demonstrate ROI in ways that matter</strong></p>
<p>Because you know which metrics are relevant at each stage, you can align your work with what actually matters to the company. This makes you invaluable when it's time to justify budget or headcount.</p>
<hr />
<h2>The Stages of PMF and How the DevRel Role Changes</h2>
<p>To apply this knowledge, you need to understand what each stage looks like and what type of DevRel work has the most impact in each one.</p>
<h3>Pre-PMF (Usually Pre-seed / Seed companies)</h3>
<p><strong>Context:</strong> The product is in active development. The team is experimenting, iterating, looking for the first users who truly find value. The product may change significantly every few weeks.</p>
<p><strong>What type of DevRel has impact here:</strong></p>
<ul>
<li><p>1:1 conversations with the few active users</p>
</li>
<li><p>Direct feedback loops with product</p>
</li>
<li><p>Basic documentation that evolves with the product</p>
</li>
<li><p>Participation in existing communities (not creating your own yet)</p>
</li>
</ul>
<p><strong>Mindset:</strong> <strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">Closer to product than marketing. The goal is to learn, not to scale.</mark></strong></p>
<h3>Initial PMF (Usually Series A)</h3>
<p><strong>Context:</strong> There are clear signals that something is working. Users who come back, who recommend, who depend on the product. The team can articulate who the product is for and what problem it solves.</p>
<p><strong>What type of DevRel has impact here:</strong></p>
<ul>
<li><p>Establishing systems and frameworks (docs structure, content templates)</p>
</li>
<li><p>Creating the first high-quality educational resources</p>
</li>
<li><p>Starting to build community with intention</p>
</li>
<li><p>Formalized feedback loops between community and product</p>
</li>
</ul>
<p><strong>Mindset:</strong> <strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">Building the foundation to scale. Quality over quantity.</mark></strong></p>
<h3>Validated PMF (Usually Series B/C)</h3>
<p><strong>Context:</strong> The product has real traction. Clear and repeatable use cases. <strong>Growth is predictable. It's time to scale</strong>.</p>
<p><strong>What type of DevRel has impact here:</strong></p>
<ul>
<li><p>Content at scale (videos, tutorials, blogs, webinars)</p>
</li>
<li><p>Presence at events and conferences</p>
</li>
<li><p>Community champions or ambassador programs</p>
</li>
<li><p>Integrations and partnerships with other tools</p>
</li>
</ul>
<p><strong>Mindset:</strong> <strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">Amplify what works. Scale awareness and adoption.</mark></strong></p>
<h3>Post-PMF (Series D+ / IPO / Enterprise)</h3>
<p><strong>Context:</strong> Established product, millions of users, enterprise use cases. Stability allows for long-term planning.</p>
<p><strong>What type of DevRel has impact here:</strong></p>
<ul>
<li><p>Certification programs</p>
</li>
<li><p>Integration and partnership ecosystem</p>
</li>
<li><p>Owned events (user conferences)</p>
</li>
<li><p>Enterprise and Fortune 500 work</p>
</li>
<li><p>Specialized teams (education, community, advocacy)</p>
</li>
</ul>
<p><strong>Mindset:</strong> <strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">Sophistication and depth. Building ecosystem.</mark></strong></p>
<hr />
<h2>My Experience at Different Stages</h2>
<p>I've been fortunate to work at different points on the spectrum, and the difference in how I approach the work is striking.</p>
<p><strong>At Appsmith (Series B):</strong></p>
<p>When I joined, Appsmith had already found its PMF. They knew exactly what problem they solved (building internal applications quickly), for whom (developers at companies who need internal tools), and they had an active community of over 3,000 members.</p>
<p>My job was clear: scale what was already working. We grew the community from 3,000 to over 20,000 members. I produced over 500 videos. I could plan content with confidence because the product had a stable identity.</p>
<p>I knew that every video I created would still be relevant in 6 months. That certainty allowed me to invest in quality and build a resource library that generated compound value over time.</p>
<p><strong>At Kite AI (Pre-PMF):</strong></p>
<p>I also had the chance to contribute to Kite AI, a new product from the same Appsmith founders—but this time from scratch, before any product-market fit existed.</p>
<p>The work was completely different. I wasn't scaling anything. I was helping build the foundation. I conducted user interviews to validate our ICP assumptions. I dug into competitor gaps to help shape our key differentiator. I worked directly with the product team on feature prioritization and collaborated with marketing to craft the initial messaging.</p>
<p>There was no playbook. I wore multiple hats daily—researcher, strategist, copywriter, user advocate. We iterated extremely fast, pivoting based on what we learned each week.</p>
<p>This experience crystallized something important: the same person can thrive at both stages, but the work is fundamentally different. At Appsmith, I amplified. At Kite AI, I discovered. Both require DevRel skills, but applied in completely different ways.</p>
<p><strong>At Asana (post-IPO):</strong></p>
<p>The context is entirely different. Asana has PMF validated by years of operation, millions of users, and proven enterprise use cases.</p>
<p>My focus isn't validating whether the product works—it's building education programs, solid documentation, and working close to partners to understand their usecases. Both the scale and sophistication are worlds apart from startup life.</p>
<p>The stability allows the team to strategize with longer time horizons. I can build deep relationships with the community and plan initiatives that can take months to mature.</p>
<blockquote>
<p><strong>The lesson:</strong> <strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">My skillset is the same in these cases. What changes is how I apply it based on context. Understanding PMF allows me to adapt my approach to maximize impact.</mark></strong></p>
</blockquote>
<hr />
<h2>How to Evaluate a Company's PMF?</h2>
<p>Whether you're evaluating a role or want to better understand your current company, these signals help you identify where they are:</p>
<p><strong>Signs that PMF EXISTS:</strong></p>
<p>→ Users come back without anyone reminding them. Retention is organic.</p>
<p>→ Growth comes primarily from word-of-mouth, not paid ads.</p>
<p>→ Users get frustrated when something doesn't work. They care because they depend on the product.</p>
<p>→ There are clear and repeatable use cases. Not every user uses the product in a completely different way.</p>
<p>→ The team can clearly articulate who the product is for and what problem it solves.</p>
<p>→ The value proposition doesn't change every month.</p>
<p><strong>Signs they're still SEARCHING for PMF:</strong></p>
<p>→ The product changes significantly every few weeks.</p>
<p>→ Every user seems to have a different use case.</p>
<p>→ Retention is low and no one knows exactly why.</p>
<p>→ The product pitch changes depending on who's presenting it.</p>
<p>→ Founders are still "discovering" who the ideal user is.</p>
<p>→ Lots of experimentation, little repeatability.</p>
<p>Neither situation is inherently bad—they're natural stages of company growth. The key is knowing which one you're in so you can adapt your work accordingly.</p>
<hr />
<h2>The Common Mistake (And How to Avoid It)</h2>
<p>It's worth mentioning a pattern that repeats itself: <strong>companies that hire DevRel before having PMF, expecting DevRel to help find it.</strong></p>
<p><strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">This puts the DevRel professional in an almost impossible position</mark></strong>: they're asked to build community and generate awareness for a product that hasn't yet proven value in the market.</p>
<p>If you find yourself evaluating a role like this, you don't necessarily need to reject it—but you need to enter with clear expectations. <strong>Your work will be closer to product than marketing. You'll need to be flexible and comfortable with ambiguity. And you'll need to establish metrics appropriate for the stage.</strong></p>
<p>The key is that you understand the context, even if the company doesn't articulate it clearly. That lets you negotiate realistic expectations and protect your own success.</p>
<hr />
<h2>Questions to Evaluate a DevRel Opportunity</h2>
<p>When you're in an interview or evaluating a role, these questions help you understand the context:</p>
<ol>
<li><p>How many active users do you currently have? What's the retention?</p>
</li>
<li><p>Where do most of your users come from? Organic or paid?</p>
</li>
<li><p>Can you describe your ideal user without hesitation?</p>
</li>
<li><p>Has the product pivoted significantly in the last 6-12 months?</p>
</li>
<li><p>What do you expect DevRel to achieve in the first 6 months?</p>
</li>
<li><p>Is there a product team I would work directly with?</p>
</li>
<li><p>What's the current funding stage?</p>
</li>
</ol>
<p>The answers will allow you to place the company on the PMF spectrum and decide if the role is right for you and your working style.</p>
<hr />
<h2>This Differentiates You from 90% of Candidates</h2>
<p>The reality is that most people who want to break into DevRel only think in terms of tactics. "I can write blogs." "I can give talks." "I have Twitter followers."</p>
<p>All of those skills are valuable. But when you can walk into a conversation and talk about PMF, company stages, and how to adapt DevRel strategy based on context... you're playing in a different league.</p>
<p>Hiring managers notice the difference. Founders notice the difference. <strong>You position yourself not as someone who executes tasks, but as someone who understands the business and can contribute strategically.</strong></p>
<p>And once you're inside, that knowledge lets you navigate the organization, align your work with what matters, and demonstrate value in ways others can't.</p>
<hr />
<h2>Final Reflection</h2>
<p>Product-Market Fit isn't just a concept for founders and VCs. It's a framework that makes you a better DevRel professional.</p>
<p>It helps you choose where to work, adapt your approach to context, set realistic expectations, have strategic conversations, and demonstrate ROI that actually matters.</p>
<p>The next time you evaluate a DevRel opportunity or want to better understand your current role, ask yourself: What stage of PMF is this company in? The answer will tell you a lot about what type of work will have real impact.</p>
<p><strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">That knowledge is what separates DevRels who execute from DevRels who lead.</mark></strong></p>
<hr />
<p><em>Have experiences about PMF and DevRel you'd like to share? Connect with me on</em> <a href="https://www.linkedin.com/in/kevinblanco/"><em>LinkedIn</em></a> <em>or visit</em> <a href="https://kevinblanco.dev"><em>kevinblanco.dev</em></a> <em>for more resources.</em></p>
]]></content:encoded></item><item><title><![CDATA[Done > Perfect & Tools That Remove DevRel Video Creation Barriers | DevReel #14]]></title><description><![CDATA[Welcome to Week #14! Been sick for two weeks. But I'm back! Missed you all. Let's dive in.
📺 Video of the Week
I had the chance to see all Blackmagic's announcement at NAB in Las Vegas and I'm really eager to show you what's new. The latest DaVinci ...]]></description><link>https://blog.kevinblanco.dev/done-perfect-and-tools-that-remove-devrel-video-creation-barriers-devreel-14</link><guid isPermaLink="true">https://blog.kevinblanco.dev/done-perfect-and-tools-that-remove-devrel-video-creation-barriers-devreel-14</guid><category><![CDATA[DevRel]]></category><category><![CDATA[developer relations]]></category><category><![CDATA[video]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Mon, 28 Apr 2025 15:17:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1745853335967/3b124f26-14e1-41b6-ae4b-6e7aee897124.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Welcome to Week #14!</strong> Been sick for two weeks. But I'm back! Missed you all. Let's dive in.</p>
<h2 id="heading-video-of-the-week">📺 Video of the Week</h2>
<p><strong>I had the chance to see all Blackmagic's announcement at NAB in Las Vegas and I'm really eager to show you what's new.</strong> The latest DaVinci Resolve beta is packed with AI tools that will <em>actually</em> transform how you create content:</p>
<ul>
<li><p><strong>AI Music Editor</strong> - Sound mixing with music and your voice that sounds professional.</p>
</li>
<li><p><strong>IntelliScript</strong> - Import your footage, give Davinci your script and it makes all the cut for you.</p>
</li>
<li><p><strong>Magic Mask 2</strong> - Select objects with 1 click</p>
</li>
<li><p><strong>Audio Assistant</strong> - Professional sound without audio engineering skills</p>
</li>
<li><p><strong>Voice Convert</strong> - If you hate your voice, this fixes it.</p>
</li>
<li><p><strong>Animated Subtitles</strong> - Captions that grab attention</p>
</li>
<li><p><strong>IntelliCut</strong> - Automatic editing</p>
</li>
</ul>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=hP-4Lec554Q">https://www.youtube.com/watch?v=hP-4Lec554Q</a></div>
<p> </p>
<p><strong>Why this matters for you:</strong> These tools eliminate the tedious parts of video production. More time for storytelling and content.</p>
<p><strong>I'm particularly excited about the audio features.</strong> Good audio mixing typically requires years of expertise. Now it's accessible to everyone and I already tried them and are really good results.</p>
<p><a target="_blank" href="https://www.blackmagicdesign.com/products/davinciresolve"><strong>You can download it for free here</strong></a></p>
<hr />
<h2 id="heading-tip-of-the-week-just-press-record">🎯 Tip of the Week: Just Press Record</h2>
<p><strong>The best video gear in the world means nothing if you don't use it.</strong></p>
<p>Stop waiting for perfect conditions. Stop overthinking your script. Stop worrying about your appearance.</p>
<p><strong>Just press record.</strong></p>
<p>My first videos were terrible. My current videos will probably look amateur in 2-3 years. But I keep creating. Done is better than perfect.</p>
<p><strong>Your audience doesn't need perfection. They need your knowledge.</strong></p>
<hr />
<h2 id="heading-personal-milestone-im-now-a-certified-davinci-resolve-trainer">🛠️ Personal Milestone: I'm Now a Certified DaVinci Resolve Trainer!</h2>
<p>After <strong>years</strong> of preparation, I've officially become a Blackmagic Design certified trainer for DaVinci Resolve. This certification opens new doors for bringing professional video training to developer advocates.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1745853363335/a542ddce-7fc7-4934-9d97-65128678f7cb.jpeg" alt class="image--center mx-auto" /></p>
<p>I'll be developing specialized training programs for developer relations and PLG teams. Stay tuned for official courses that will transform how you create technical content, as usual, <strong>ALL MY CONTENT IS FOR FREE.</strong></p>
<hr />
<p><em>3 things before you go:</em></p>
<p><strong>1. Pick up your phone today and record a 60-second video about something you know well.</strong></p>
<p><strong>2. Forward this to someone who's been "waiting for the right time" to start creating.</strong></p>
<p><strong>3. Reply and tell me which AI feature you're most excited about.</strong></p>
<p><strong>Thank you,</strong> <strong>Kevin</strong></p>
]]></content:encoded></item><item><title><![CDATA[The Little Things that Makes the Difference when doing Video for Developers | DevReel Weekly #11]]></title><description><![CDATA[Welcome to Week #11! I'm writing this one from Durham, NC, because I'm presenting at the All Things Open AI Conference!

Let's focus on quality that doesn't break your budget.

📺 Video of the Week: Story First, Everything Else Second
I hate regular ...]]></description><link>https://blog.kevinblanco.dev/the-little-things-that-makes-the-difference-when-doing-video-for-developers-devreel-weekly-11</link><guid isPermaLink="true">https://blog.kevinblanco.dev/the-little-things-that-makes-the-difference-when-doing-video-for-developers-devreel-weekly-11</guid><category><![CDATA[DevRel]]></category><category><![CDATA[Developer Advocate]]></category><category><![CDATA[video]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Mon, 17 Mar 2025 14:00:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1742219942638/1c2dc629-4395-4ede-9aca-65af78225ea9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Welcome to Week #11!</strong> I'm writing this one from Durham, NC, because I'm presenting at the <strong>All Things Open AI</strong> Conference!</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4E12AQF-0qKiq_3kdA/article-inline_image-shrink_1500_2232/B4EZWkXUOdHgAU-/0/1742219330944?e=1747872000&amp;v=beta&amp;t=_-0zrhrl1KbkoWQqj8Ra-QKlys-Inkrvn84yRzzCSQQ" alt /></p>
<p>Let's focus on quality that doesn't break your budget.</p>
<hr />
<h2 id="heading-video-of-the-week-story-first-everything-else-second">📺 Video of the Week: Story First, Everything Else Second</h2>
<p>I hate regular marketing videos. <strong>You know the type:</strong> forced animations, disconnected visuals, pointless motion graphics. All sizzle, zero substance.</p>
<p>Great video content flips this approach. <strong>Every element supports the story, not the other way around.</strong></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=C25g53PC5QQ">https://www.youtube.com/watch?v=C25g53PC5QQ</a></div>
<p> </p>
<p>This video demonstrates the perfect balance:</p>
<ul>
<li><p>Nothing feels forced or gratuitous</p>
</li>
<li><p>Information flows naturally</p>
</li>
<li><p>Visuals amplify the message instead of distracting from it</p>
</li>
<li><p>Digestible pace that respects viewer intelligence</p>
</li>
</ul>
<p>If you're creating content about your product, platform, or SDK, study how this video makes complex information feel accessible. <strong>The visuals aren't just decorative—they're functional.</strong></p>
<p>No matter your production budget, this principle remains the same: <strong>Every element must earn its place by supporting your core message.</strong></p>
<hr />
<h2 id="heading-tip-of-the-week-blackmagic-camera-app">🎯 Tip of the Week: Blackmagic Camera App</h2>
<p><strong>Pro cinema quality in your pocket. For free.</strong></p>
<p><img src="https://media.licdn.com/dms/image/v2/D4E12AQGmptLNHLAWXg/article-inline_image-shrink_1500_2232/B4EZWiRYzjGYAU-/0/1742184222647?e=1747872000&amp;v=beta&amp;t=BHMbNxtwmXkNCGzqsr9Qugk03U9xmykxNLdD5jg3Gd0" alt /></p>
<p><a target="_blank" href="https://www.linkedin.com/company/blackmagic-design/">Blackmagic Design</a> (the company behind the cinema cameras I use for high-end work) created a free iPhone and Android camera app that crushes the default camera app:</p>
<ul>
<li><p><strong>Pro-level control:</strong> Manual focus, exposure, white balance</p>
</li>
<li><p><strong>Cinema-grade formats:</strong> Records in ProRes 422 HQ (the real deal)</p>
</li>
<li><p><strong>LOG color space:</strong> Captures more dynamic range for better editing flexibility</p>
</li>
<li><p><strong>Professional monitoring:</strong> Zebras, focus peaking, histogram</p>
</li>
</ul>
<p><img src="https://media.licdn.com/dms/image/v2/D4E12AQF3VZ9RCkfzrA/article-inline_image-shrink_1500_2232/B4EZWiR1I3H0AY-/0/1742184338703?e=1747872000&amp;v=beta&amp;t=E8UZeN_SRl-uvObo0_74IrpcCX7aWyKnLJSLR9DCYf8" alt /></p>
<p>I'm constantly on the road speaking at events, and this app lets me capture high-quality footage without lugging my URSA or Pocket 6K Pro everywhere.</p>
<p><strong>The quality difference is immediately obvious.</strong> Colors are richer, highlights don't blow out, and shadows retain detail.</p>
<p>The video I showed last week, it was completely shot with the Blackmagic iPhone Camera app.</p>
<p>Best part? <strong>It costs absolutely nothing.</strong> This is literally the same company that makes $6,000+ cinema cameras giving away professional recording capabilities for free.</p>
<p><a target="_blank" href="https://www.blackmagicdesign.com/products/blackmagiccamera"><strong>DOWNLOAD BLACKMAGIC CAMERA</strong></a></p>
<hr />
<h2 id="heading-resource-of-the-week-spectacleis">🛠️ Resource of the Week: Spectacle.is</h2>
<p><strong>You know I always share where I get inspiration from, here's another one that is gold.</strong></p>
<p><a target="_blank" href="http://spectacle.is/">Spectacle.is</a> Is a curated collection of exceptional brand videos across categories:</p>
<ul>
<li><p>Product demos that don't feel like demos</p>
</li>
<li><p>Customer stories with actual substance</p>
</li>
<li><p>Creative social media approaches</p>
</li>
<li><p>Technical explainers that engage</p>
</li>
</ul>
<p>What makes this resource valuable is the <strong>focus on storytelling over production value.</strong> You'll find examples from both massive companies and clever startups doing more with less.</p>
<p>And yes, it's completely free. <strong>Bookmark it now.</strong></p>
<p><strong>VISIT</strong> <a target="_blank" href="http://spectacle.is/">SPECTACLE.IS</a></p>
<hr />
<p><em>2 things before you go:</em></p>
<p><strong>1. Forward this to someone who creates video content on a budget.</strong></p>
<p><strong>2. Which video style would you like me to break down in a future issue?</strong></p>
<p><strong>Thank you, Kevin</strong></p>
]]></content:encoded></item><item><title><![CDATA[5 Oscar-Worthy Storytelling Lessons for DevRel 🎬 | DevReel Weekly #9]]></title><description><![CDATA[Welcome to Week #9! Last night, I watched The Oscars. As a person who loves cinematography and filmmaking in general, I try to incorporate great film techniques into my DevRel videos. As Developer Advocates, we're storytellers first, technologists se...]]></description><link>https://blog.kevinblanco.dev/5-oscar-worthy-storytelling-lessons-for-devrel-devreel-weekly-9</link><guid isPermaLink="true">https://blog.kevinblanco.dev/5-oscar-worthy-storytelling-lessons-for-devrel-devreel-weekly-9</guid><category><![CDATA[DevRel]]></category><category><![CDATA[developer marketing]]></category><category><![CDATA[developer relations]]></category><category><![CDATA[video]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Mon, 03 Mar 2025 14:00:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1740968806092/70ff52ec-0f39-425d-af15-ef28acf1ac09.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Welcome to Week #9!</strong> Last night, I watched The Oscars. As a person who loves cinematography and filmmaking in general, I try to incorporate great film techniques into my DevRel videos. As Developer Advocates<strong>, we're storytellers first, technologists second</strong>.</p>
<p>This year's Oscar nominees offer a masterclass in engagement, and I want to go over it.</p>
<h2 id="heading-video-of-the-week">📺 Video of the Week:</h2>
<p>I want to bring a short film I did for a Launch event to go over the <strong>5 Storytelling Techniques from Oscar Nominees You Can Use Today</strong>, that I THINK I was able to include in this short:</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=1-C1SgCmJ0E">https://www.youtube.com/watch?v=1-C1SgCmJ0E</a></div>
<p> </p>
<p><strong>1. Start with tension (like "The Brutalist")</strong></p>
<ul>
<li>Don't ease in. Drop viewers into conflict</li>
</ul>
<p><strong>2. Strategic camera angles (like "The Substance")</strong></p>
<ul>
<li>Camera position shapes perception completely, low-angle shots are powerful, POV is involving, and eye-level shots build trust.</li>
</ul>
<p><strong>3. Create a clear protagonist (like "A Complete Unknown")</strong></p>
<ul>
<li>Not your product. What builds stronger connections is the protagonists' journeys.</li>
</ul>
<p><strong>4. Build struggle (like "Nickle Boys")</strong></p>
<ul>
<li>Your obstacles create empathy before your solution creates value.</li>
</ul>
<p><strong>5. End with emotional payoff (like "Anora")</strong></p>
<ul>
<li><p>Technical videos need emotional hooks too.</p>
</li>
<li><p>What does success feel like? Time saved? Problems solved?</p>
</li>
</ul>
<hr />
<h2 id="heading-tip-of-the-week-cut-editing-time-by-70">🎯 Tip of the Week: Cut Editing Time by 70%</h2>
<p>Just released my new tutorial: <strong>"How I Cut My Editing Time By 70%: Multicam + Speed Editor Davinci Resolve"</strong></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=zizwxnS5pcA">https://www.youtube.com/watch?v=zizwxnS5pcA</a></div>
<p> </p>
<p>This workflow transformed my production output:</p>
<ul>
<li><p><strong>Proper multicam setup</strong> = No more toggling between angles</p>
</li>
<li><p><strong>Speed Editor keyboard</strong> = Physical controls, not menu hunting</p>
</li>
<li><p><strong>Real-time editing</strong> = Make decisions at playback speed</p>
</li>
</ul>
<p>I show exactly how to:</p>
<ul>
<li><p>Import and organize footage properly</p>
</li>
<li><p>Sync cameras (audio, timecode, manual)</p>
</li>
<li><p>Create multicam clips in the media pool</p>
</li>
<li><p>Use Speed Editor for maximum efficiency</p>
</li>
<li><p>Edit in real-time with multicam techniques</p>
</li>
</ul>
<p><strong>This is how I edit podcasts, interviews, and tutorials in 1/3 the time. WATCH IT, LEARN IT!</strong></p>
<hr />
<h2 id="heading-resource-of-the-week">🛠️ Resource of the Week</h2>
<p><strong>Forget multiple monitors.</strong> My AOC AGON 49" curved monitor transformed my workflow.</p>
<p><img src="https://m.media-amazon.com/images/I/81mHq7o84OL._AC_SL1500_.jpg" alt /></p>
<p>For video editing, this thing is a game-changer:</p>
<ul>
<li><p><strong>Massive timeline view</strong> = See more of your edit at once</p>
</li>
<li><p><strong>Side-by-side work</strong> = Source footage and timeline visible together</p>
</li>
<li><p><strong>Single continuous space</strong> = No bezels breaking your view</p>
</li>
</ul>
<p>The curved display keeps everything in your peripheral vision without head turning. <strong>For coding, I can have documentation, terminal, and IDE all open without tab switching.</strong></p>
<p>👉 <a target="_blank" href="https://amzn.to/41CmFbA">GET THE MONITOR HERE</a></p>
<hr />
<p><em>3 things before you go:</em></p>
<p><strong>1. Who inspires you? Reply and tell me.</strong></p>
<p><strong>2. Forward this to a DevRe who needs to level up their storytelling.</strong></p>
<p><strong>3. What technical tutorial would help you most? I'm planning next month's content.</strong></p>
<p><strong>Thank you, with love to you: Kevin Blanco</strong></p>
]]></content:encoded></item><item><title><![CDATA[Stop Being Normal, Embrace Weirdness! 🎬 | DevReel Weekly #8]]></title><description><![CDATA[I can't believe 580 people are interested in what I have to say! Welcome to Week #8 to all of you, today is a very personal issue.
📺 Video of the Week
Seven years ago, this video transformed how I saw myself. I was that "successful" software enginee...]]></description><link>https://blog.kevinblanco.dev/stop-being-normal-embrace-weirdness-devreel-weekly-8</link><guid isPermaLink="true">https://blog.kevinblanco.dev/stop-being-normal-embrace-weirdness-devreel-weekly-8</guid><category><![CDATA[DevRel]]></category><category><![CDATA[developer relations]]></category><category><![CDATA[video]]></category><category><![CDATA[video production]]></category><category><![CDATA[developer marketing]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Mon, 24 Feb 2025 14:00:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1740376124568/c90638b3-f40a-4d8f-85d7-266961d04ed5.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I can't believe 580 people are interested in what I have to say! <strong>Welcome to Week #8 to all of you, today is a very personal issue.</strong></p>
<h3 id="heading-video-of-the-week">📺 Video of the Week</h3>
<p>Seven years ago, this video transformed how I saw myself. I was that "successful" software engineer everyone expected me to be. <strong>The logical one. The smart one.</strong> Yet inside, I was hiding something that felt wrong to share.</p>
<p>I could name every actor's name and camera setup gear from my favorite films. Tell you which lenses Deakins used in Blade Runner 2049. List entire production crews from memory. <strong>But ask me about my family's birthdays? Total blank.</strong></p>
<p><em>"Stay in your lane,"</em> they said. <em>"You have a good tech job." "Creative careers are risky."</em> <strong>Normal was safe. Normal was smart.</strong></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=79zra755WgA">https://www.youtube.com/watch?v=79zra755WgA</a></div>
<p> </p>
<p>This talk hit different. <strong>It showed me that my weirdness wasn't a bug – it was a feature.</strong></p>
<p>7 years ago after watching this video I decided to join Film School, I decided to embrace my weirdness. That blend of technical background and creative vision? <strong>It became my signature. My edge.</strong></p>
<p><strong>People will put you in a box: “You are a left brainer (logical, analytical) - you are NOT a right brainer (creative, spatial, visual)” though I spent most of my time thinking as a “movie”, all my thoughts are extremely visual.</strong></p>
<p><strong>Today, that "weird" mix is exactly what makes my content connect.</strong> Being openly obsessed with both code and storytelling makes me real. Relatable. Someone audiences trust me because I'm not trying to fit a mold, this is me, and just a very open raw guy.</p>
<hr />
<h3 id="heading-tip-of-the-week-create-relatable-characters-and-narratives">🎯 Tip of the Week: Create Relatable Characters and Narratives</h3>
<p><strong>Want your videos to truly connect? Start with the story, not the product.</strong></p>
<p>A strong character's story makes your storytelling feel personal and real. <strong>I learned this firsthand by embracing my own weirdness as my brand.</strong></p>
<ul>
<li><p><strong>Make them authentic:</strong> Drop the corporate polish. Share real struggles. Developers spot fake from miles away.</p>
</li>
<li><p><strong>Reflect your audience:</strong> Show characters who mirror their challenges. My audience? Tech people secretly dreaming of creative careers and telling theirs story thorough video. <strong>Sound familiar?</strong></p>
</li>
<li><p><strong>Keep the story simple:</strong> One clear message hits harder than ten polished ones. Mine? "Your weirdness is your superpower."</p>
</li>
</ul>
<hr />
<h3 id="heading-resource-of-the-week-speed-editor">🛠️ Resource of the Week: Speed Editor</h3>
<p>Storyboards is one the main ways to get alignment with your boss and team, so they understand your vision. <strong>but if you like me, are really bad drawing</strong>, this can really help you out.</p>
<p><a class="user-mention" href="https://hashnode.com/@https://www.linkedin.com/company/wonderunit/">Wonder Unit</a>'s <strong>Storyboarder</strong> makes it easy to visualize a story <strong>as fast you can draw stick figures</strong> <strong>and giving a prompt</strong>, it can create a storyboards out of nowhere easily without having to draw!</p>
<p>I've been using this software lately to create my video's storyboard fast and easy, give it a shot!</p>
<p>👉 <a target="_blank" href="https://wonderunit.com/storyboarder">DOWNLOAD IT HERE!!</a></p>
<hr />
<p><em>3 things before you go:</em></p>
<p><strong>1. If you're hiding your "weird" creative side, this is your sign to let it out.</strong></p>
<p><strong>2. Forward this to someone who needs permission to be different.</strong></p>
<p><strong>3. Reply and tell me: What's your weird blend of skills?</strong></p>
<p><strong>Thank you, Kevin</strong></p>
]]></content:encoded></item><item><title><![CDATA[AI Won't Replace You... For Now(But Bad Storytelling Will) - FIX IT 🎬 | DevReel Weekly #7]]></title><description><![CDATA[Welcome to Week #7! - Let's jump right in because I hate boilerplate.
📺 Video of the Week
Let’s be clear: AI is here to stay, but it has been marketed poorly so far.
The major issue with AI adoption is the passive mindset of focusing on cutting cost...]]></description><link>https://blog.kevinblanco.dev/ai-wont-replace-you-for-nowbut-bad-storytelling-will-fix-it-devreel-weekly-7</link><guid isPermaLink="true">https://blog.kevinblanco.dev/ai-wont-replace-you-for-nowbut-bad-storytelling-will-fix-it-devreel-weekly-7</guid><category><![CDATA[DevRel]]></category><category><![CDATA[developer relations]]></category><category><![CDATA[video]]></category><category><![CDATA[developer marketing]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Mon, 17 Feb 2025 12:00:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1739769922226/d0754767-e1ab-4187-a8cb-1f54d10a28b5.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Welcome to Week #7!</strong> - Let's jump right in because I hate boilerplate.</p>
<h3 id="heading-video-of-the-week">📺 Video of the Week</h3>
<p>Let’s be clear: <strong>AI is here to stay, but it has been marketed poorly so far</strong>.</p>
<p>The major issue with AI adoption is the passive mindset of focusing on cutting costs, the biggest one being salaries rather than boosting productivity among existing talent.</p>
<p>As Developer Advocates trying to push our AI message across, we need to portray it using stories and the impact on our audience's life; the video of the week really hits it.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=-7e6g11BJc0">https://www.youtube.com/watch?v=-7e6g11BJc0</a></div>
<p> </p>
<p>No hype. No fear-mongering. Just AI applied to reality. <strong>This is what a Developer Advocate must do: Show how the product they advocate impacts lives.</strong></p>
<p>This is probably the best portrayal of AI yet:</p>
<ul>
<li><p>Puts humans at the center</p>
</li>
<li><p>Shows AI as a tool, not a threat</p>
</li>
<li><p>Tells a story that matters</p>
</li>
<li><p>Makes tech feel human</p>
</li>
</ul>
<hr />
<h3 id="heading-tip-of-the-week-create-curiosity-gaps">🎯 Tip of the Week: Create Curiosity Gaps</h3>
<p>Want to create better videos? <strong>Stop explaining everything upfront.</strong></p>
<p><strong>It kills engagement.</strong></p>
<p>Instead:</p>
<p>1. Show something impressive</p>
<p>2. Create a gap ("How? Let me show you")</p>
<p>3. Fill it step by step</p>
<p><strong>Example:</strong></p>
<p><em>"This API call takes 0.1 seconds to process tons of data.</em></p>
<p><em>It used to take 3 seconds!</em></p>
<p><em>But before I show how I fixed it, let's see why it was slow (that your queries probably also have it wrong).</em></p>
<p><strong>Developers stay to solve the puzzle.</strong></p>
<hr />
<h3 id="heading-resource-of-the-week-speed-editor">🛠️ Resource of the Week: Speed Editor</h3>
<p>Last week, I got the DaVinci Resolve Speed Editor. Not just another keyboard. A video editing-specific tool.</p>
<p><strong>I'm cutting 30-minute edits in 15</strong>, especially multicam shots! Not because I'm better, but because the tool is.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739770129479/296a3130-3d25-4c5d-be2a-67d948c0eff5.png" alt class="image--center mx-auto" /></p>
<p>The real kicker? <strong>It includes DaVinci Resolve Studio license. Do the math:</strong></p>
<ul>
<li><p>Studio license alone: $295</p>
</li>
<li><p>Speed Editor with license: $380</p>
</li>
</ul>
<p>That's a $85 keyboard that transforms your editing workflow—a no-brainer! Next week, I'll bring a tutorial on how to get the most out of this keyboard, so in the meantime, you should get it!</p>
<p>👉 <a target="_blank" href="https://amzn.to/3CVixu0">BUY THE SPEED EDITOR HERE!</a></p>
<hr />
<p><em>3 things before you go:</em></p>
<p><strong>1. If you enjoy the newsletter, forward it to a friend and ask them to subscribe.</strong></p>
<p><strong>2. If you find it useful please send me a message, I always love reading those.</strong></p>
<p><strong>3. If you want to learn about something I haven’t talked about yet, let me know.</strong></p>
<p><strong>Thank you. Kevin</strong></p>
]]></content:encoded></item><item><title><![CDATA[Stop Ruining Your Vertical Videos & Light is the Story  🎬 | DevReel Weekly #5]]></title><description><![CDATA[January is gone! Time is flying, and so I am to San Francisco 🇺🇸 to produce videos for the company I work for (Appsmith) 🎬 and I'm bring all my equipment!
My eyes are tired. I watch hundreds of videos weekly for inspiration. But this one stopped m...]]></description><link>https://blog.kevinblanco.dev/stop-ruining-your-vertical-videos-light-is-the-story-devreel-weekly-5</link><guid isPermaLink="true">https://blog.kevinblanco.dev/stop-ruining-your-vertical-videos-light-is-the-story-devreel-weekly-5</guid><category><![CDATA[DevRel]]></category><category><![CDATA[developer relations]]></category><category><![CDATA[video]]></category><category><![CDATA[videos]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Mon, 03 Feb 2025 13:00:52 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1738371179163/613b10c4-42a9-4d8f-8053-d9d2fccd69e0.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>January is gone!</strong> Time is flying, and so I am to San Francisco 🇺🇸 to produce videos for the company I work for (Appsmith) 🎬 and I'm bring all my equipment!</p>
<p>My eyes are tired. I watch hundreds of videos weekly for inspiration. <strong>But this one stopped my scrolling.</strong></p>
<h3 id="heading-video-of-the-week">📺 Video of the Week</h3>
<p>Most cinematic tutorials <strong>lie.</strong><br />Buy this camera -&gt; Get that lens: Wrong focus.<br /><strong>Light is the story.</strong> Not your gear. Not your transitions. <strong>Just. Light.</strong></p>
<p>This video proves it. I truly enjoyed this video and I want you to learn a thing or two about light.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=bEWu-PhfBHQ">https://www.youtube.com/watch?v=bEWu-PhfBHQ</a></div>
<p> </p>
<hr />
<h3 id="heading-tip-of-the-week-youre-doing-vertical-video-wrong-fix-it">🎯 Tip of the Week: You're Doing Vertical Video Wrong, Fix it</h3>
<p><strong>Stop using AI to convert horizontal to vertical.</strong> It kills me all these vertical videos with no composition, no story.</p>
<p>It's lazy. It looks terrible. <strong>Your developers deserve better.</strong></p>
<p>Here's why:</p>
<ul>
<li><p>Safe zones matter</p>
</li>
<li><p>Platform UI covers your content</p>
</li>
<li><p>Composition gets murdered</p>
</li>
</ul>
<p>If you’re planning to repurpose your videos across multiple platforms, make sure your <strong>on-screen text and graphics remain visible</strong>. Don’t let aspect ratios, in-platform icons, or descriptions cut off important elements.</p>
<p>Here's my resource to you: Download this image, Drop it in your editor. Set opacity to 50%. <strong>Never lose content to platform UI again.</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1738370733033/1b926474-9867-49f6-af53-f21e672927b3.png" alt class="image--center mx-auto" /></p>
<p>Personal branding videos and talking to the camera are constantly on the rise. Most creators, when talking on camera, face forward and center. Example below:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1738370761208/e69dff71-e0ff-440d-bbba-7ebbaf15451c.png" alt class="image--center mx-auto" /></p>
<p>But to make them more interesting, <strong>you should get inspired by master artists like Leonardo da Vinci</strong>, and turn your bodies slightly while keeping our eyes centered, like:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1738370769919/01d87796-c27e-4a55-b189-9a9987bb4460.jpeg" alt class="image--center mx-auto" /></p>
<p>It gives <strong>great depth due to your shoulder position</strong> and, depending on your lighting setup, can <strong>create some very nice shadows</strong>, making your image <strong>more visually unique</strong>.</p>
<hr />
<h3 id="heading-resource-of-the-week-hollyland-lark-m2">🛠️ Resource of the Week: Hollyland Lark M2</h3>
<p>My favorite wireless microphones on budget and with impressive quality and low-compression.</p>
<ul>
<li><p>Tiny (like, really tiny) so it disappears in videos</p>
</li>
<li><p>30-hour battery life (tested it, it's real)</p>
</li>
<li><p>Auto-sync!</p>
</li>
<li><p>24-bit audio</p>
</li>
<li><p>Built-in noise cancelling.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1738370784606/2ca43c7f-7c49-4442-b4ed-5c6b13052680.jpeg" alt class="image--center mx-auto" /></p>
<p>Best part? Set it. Forget it. Focus on your content. This isn't sponsored. I just really love this thing.</p>
<p>👉 <a target="_blank" href="https://amzn.to/4gmc74z">BUY THE MIC HERE!</a></p>
<hr />
<p><strong>And that's a wrap!</strong> See you in next week!</p>
<p><strong>Have a creative week, and keep producing!</strong></p>
]]></content:encoded></item><item><title><![CDATA[Stop Making Videos That Look Amateur 🎬 | DevReel Weekly #4]]></title><description><![CDATA[January's almost gone. Four newsletters in. Time flies when you're obsessing over video for Developer Relations.
📺 Video of the Week
Shameless self-promotion alert
Most talking head videos look amateur.
Flat. Lifeless.
It KILLS me because is really ...]]></description><link>https://blog.kevinblanco.dev/stop-making-videos-that-look-amateur-devreel-weekly-4</link><guid isPermaLink="true">https://blog.kevinblanco.dev/stop-making-videos-that-look-amateur-devreel-weekly-4</guid><category><![CDATA[DevRel]]></category><category><![CDATA[video]]></category><category><![CDATA[developer relations]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Mon, 27 Jan 2025 14:00:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1737473106338/1caba21f-d030-4979-9c4d-5692387a1d71.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>January's almost gone</strong>. Four newsletters in. Time flies when you're obsessing over video for Developer Relations.</p>
<h3 id="heading-video-of-the-week">📺 Video of the Week</h3>
<p><em>Shameless self-promotion alert</em></p>
<p><strong>Most talking head videos look amateur.</strong></p>
<p>Flat. Lifeless.</p>
<p><strong>It KILLS me</strong> because is really simple and cheap to achieve a great light scheme for your videos that doesn't look bad. So I decided to share the <strong>simplest, easiest, cheapest light scheme for your talking videos.</strong></p>
<p><img src="https://media.licdn.com/dms/image/v2/D4E12AQH5VERWq4H5Ow/article-inline_image-shrink_1000_1488/article-inline_image-shrink_1000_1488/0/1735928606951?e=1743033600&amp;v=beta&amp;t=uLBVJWW2erYT-NXg5GUNLylDyGaWxrGfx20w3oEDE1o" alt /></p>
<p><strong>Three lights, Under $200, 15-minute setup. Pro-level results.</strong></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/Q_Ui3nCVxbM?si=gFJS2cNd33Nj2-pE">https://youtu.be/Q_Ui3nCVxbM?si=gFJS2cNd33Nj2-pE</a></div>
<p> </p>
<hr />
<h2 id="heading-tip-of-the-week-where-i-get-ideas-for-my-videos">🎯 Tip of the Week: Where I get ideas for my videos</h2>
<p>I get this question very often. Truth is?</p>
<p><strong>I steal</strong>. <strong>Professionally.</strong></p>
<p>Every creator hits creative blocks. Staring at the screen. Hoping for inspiration. It never comes.</p>
<p><strong>Stop waiting for creativity. Start collecting it.</strong></p>
<p>Here are my go-to places:</p>
<ol>
<li><p><a target="_blank" href="http://shotdeck.com/">Shotdeck.com</a> Not just another "inspiration" site. This is Hollywood's visual playbook. Every frame. Every mood. Every lighting setup. All categorized. All searchable.</p>
</li>
<li><p><a target="_blank" href="http://eyecandy.com/">Eyecandy.com</a> My daily visual caffeine. Fresh production stills. Real setups. Achievable looks. I have my collection of references ready when I need to get inspired</p>
</li>
</ol>
<p>But here's the real trick: <strong>Don't just browse. Build your vault.</strong> Screenshot everything that makes you stop scrolling, and then go out and try to make it yourself. Here's a sample of one of last year's videos I did and the references I collected during my creative scouting.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4E12AQGrKLAs5Y566g/article-inline_image-shrink_1000_1488/article-inline_image-shrink_1000_1488/0/1735668769288?e=1743033600&amp;v=beta&amp;t=_bE1Yso0c8m_nCvTG0VLNBjq79ZiyK1QNVVnJNhhacE" alt /></p>
<p>When inspiration doesn't strike? <strong>Open your vault. Pick a reference. Execute.</strong></p>
<hr />
<h2 id="heading-resource-of-the-week-my-lights-for-under-200-budget">🛠️ Resource of the Week: My Lights for under $200 budget</h2>
<p>When you were watching the Video of The Week, you probably wondered which lights I used, here they are (<em>not sponsored as usual, I wish as usual haha</em>)</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4E12AQEcVeLQNlKv0A/article-inline_image-shrink_1000_1488/article-inline_image-shrink_1000_1488/0/1735669098357?e=1743033600&amp;v=beta&amp;t=_Js2Ea22iy0mRPGPEuBUge2gc7Mjj4nq5p72deyB-oA" alt /></p>
<p>When I shoot bigger films, I use bigger lights like Nanlite or Aputure, but this one—the <a target="_blank" href="https://amzn.to/41XKUBW">Newer CB60</a> and then the <a target="_blank" href="https://amzn.to/4gB4ZT0">Newer LED bars</a> — has proven to me that it can achieve amazing results on a budget.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4E12AQG-_Q3Zc1uA1w/article-inline_image-shrink_1000_1488/article-inline_image-shrink_1000_1488/0/1735669566115?e=1743033600&amp;v=beta&amp;t=cUwAlEER00oumYLkO8o84A5wbjFfRZ2C44c5OVp5v3c" alt /></p>
<p>Best part? <strong>App control. Color temperature adjustment. No getting up from your chair</strong>, <strong>and great color rendering index (CRI</strong>).</p>
<p>👉 <a target="_blank" href="https://amzn.to/41XKUBW">GET THE NEWER CB60 HERE</a></p>
<p>👉 <a target="_blank" href="https://amzn.to/4fEgU16">GET THE NEWER LED BARS HERE</a></p>
<hr />
<p><strong>And that's a wrap!</strong> See you in February with more curated Video for DevRel resources.</p>
<p><strong>Have a creative week, and keep producing!</strong></p>
]]></content:encoded></item><item><title><![CDATA[Your First 30 Seconds Are Killing Your Videos + Considering Vlogging? 🎬 | DevReel Weekly #3]]></title><description><![CDATA[Hey video creators! Back for #3 with more video production goodies.
Let's dive into more good stuff.
📺 Video of the Week
I freaking enjoy content that makes me think, "This feels like hanging out with a friend" (and this is a proven way to engage in...]]></description><link>https://blog.kevinblanco.dev/your-first-30-seconds-are-killing-your-videos-considering-vlogging-devreel-weekly-3</link><guid isPermaLink="true">https://blog.kevinblanco.dev/your-first-30-seconds-are-killing-your-videos-considering-vlogging-devreel-weekly-3</guid><category><![CDATA[DevRel]]></category><category><![CDATA[developer relations]]></category><category><![CDATA[video]]></category><category><![CDATA[Script]]></category><category><![CDATA[developer marketing]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Mon, 20 Jan 2025 14:00:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1737049039592/7b800832-c70b-4d40-a8f9-db9eca8b82d8.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey video creators! <strong>Back for #3 with more video production goodies.</strong></p>
<p>Let's dive into more good stuff.</p>
<h3 id="heading-video-of-the-week">📺 Video of the Week</h3>
<p>I freaking enjoy content that makes me think, <strong><em>"This feels like hanging out with a friend"</em></strong> (and this is a proven way to engage in video content).</p>
<p>That's exactly what <a class="user-mention" href="https://hashnode.com/@https://www.linkedin.com/in/taylordesseyn?miniProfileUrn=urn%3Ali%3Afs_miniProfile%3AACoAAAjGsSABWHslEtFmFsSlENjY18yR-rshRSQ">taylor desseyn</a> DevRel vlogs do. No fancy studios, no overengineered content - <strong>just pure, authentic community building through storytelling</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734974762454/605722dc-d830-4c78-9245-e6f15309c07d.jpeg" alt class="image--center mx-auto" /></p>
<p>This works because it <strong>shows the journey, not just the destination</strong>, feels like a friend sharing updates (not a corporate robot) and proves that "how-to" isn't the only way to engage developers</p>
<p>👉 <a target="_blank" href="https://www.youtube.com/watch?v=0Zr_ElADeBI">WATCH HERE</a></p>
<hr />
<h3 id="heading-tip-of-the-week-30-seconds-is-all-you-have">🎯 Tip of the Week: 30 seconds is all you have</h3>
<p><strong>Confession time</strong>: I used to start every video with "<em>Hi, I'm Kevin Blanco and I'm a DevRel at..</em>."</p>
<p>Guess what? <strong>Nobody cares.</strong></p>
<p><strong>Harsh? Maybe. True? Absolutely.</strong></p>
<p>Here's my new 30-second hook formula:</p>
<ol>
<li><p>Problem statement (10s): Hit them with what hurts</p>
</li>
<li><p>Proof you get their pain (10s): Show you've been there</p>
</li>
<li><p>Promise of the solution (10s): Tease what's coming</p>
</li>
</ol>
<p><strong>That's it. No bio. No life story</strong>. Just pure value signaling from second one.</p>
<p>Want to see one example? Here's a video I did showcasing a solution in less than 30 seconds to generate intrigue and keep people wanting to see the entire video. Seniors and advanced users gets it quickly, while I build tension for more introductory users to stay and watch the step by step video.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=87Vkmrs2guQ">https://www.youtube.com/watch?v=87Vkmrs2guQ</a></div>
<p> </p>
<hr />
<h3 id="heading-resource-of-the-week-atem-mini-pro">🛠️ Resource of the Week: ATEM Mini Pro</h3>
<p><strong>"Yo, Kevin, how do you switch cameras so smoothly in your streams?"</strong></p>
<p>I get this question A LOT. In my streams, I do everything by myself. Here's my little tool: the <a target="_blank" href="https://amzn.to/4iMhMDx">ATEM Mini Pro</a>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734974785990/add2523d-455c-4a34-a7a9-2193b55d6356.jpeg" alt class="image--center mx-auto" /></p>
<p>Look, I was tired of managing software (OBS) while trying to run a stream. This little box is just... <strong>buttons</strong>. Beautiful, <strong>physical buttons</strong>. Switch cameras? <em>press a button</em> - New angle? <em>press a button -</em> My screen with my face in the lower third? <em>press a button.</em> The best part is that it records the final output to your hard drive with a multicam project.</p>
<p>👉 <a target="_blank" href="https://amzn.to/4iMhMDx">Get your ATEM Mini Pro Here</a></p>
<hr />
<p><strong>And that's a wrap!</strong> Thank you again for taking the time to read this.</p>
<p>Have a creative week and keep producing!</p>
]]></content:encoded></item><item><title><![CDATA[My Doctor Prescribed Product Videos for Insomnia 🎬 | DevReel Weekly #2]]></title><description><![CDATA[Yo! Back for #2! Last week's launch got some amazing responses (especially about that story framework and 400 subscribers in the first week!!).
99% of product or announcement videos are bedtime stories.
Boring. Predictable. Forgettable.
I'm trying ha...]]></description><link>https://blog.kevinblanco.dev/my-doctor-prescribed-product-videos-for-insomnia-devreel-weekly-2</link><guid isPermaLink="true">https://blog.kevinblanco.dev/my-doctor-prescribed-product-videos-for-insomnia-devreel-weekly-2</guid><category><![CDATA[DevRel]]></category><category><![CDATA[developer relations]]></category><category><![CDATA[video]]></category><category><![CDATA[video streaming]]></category><category><![CDATA[Developer Tools]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Mon, 13 Jan 2025 14:00:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1736741233998/7bf303fc-5421-45a5-858a-bca270971c7d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Yo! Back for #2! Last week's launch got some amazing responses</strong> (especially about that story framework and 400 subscribers in the first week!!).</p>
<p><strong>99% of product or announcement videos are bedtime stories</strong>.</p>
<p>Boring. Predictable. Forgettable.</p>
<p>I'm trying hard to avoid that, and today, I'm sharing what is helping me achieve it.</p>
<h3 id="heading-video-of-the-week">📺 Video of the Week</h3>
<p>I love video announcements that feel like mini-movies and can <strong>deliver a story without saying a single word</strong>. <a target="_blank" href="https://www.linkedin.com/in/aarondfrancis/">Aaron Francis</a> did it with his "Mastering Postgres" launch video.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4E12AQFfcTySuqwiFg/article-inline_image-shrink_400_744/article-inline_image-shrink_400_744/0/1735234031521?e=1740614400&amp;v=beta&amp;t=ePTD_-h1qQPJPBZy0oykVSj2XCVPjBhHx8xkdP610-I" alt /></p>
<p><strong>Aaron is one of my role models when it comes to video creation,</strong> and here's why:</p>
<ul>
<li><p>Uses <strong>camera angles and focal length</strong> like a film director.</p>
</li>
<li><p>Practical lighting that <strong>builds intrigue</strong> (no fancy setup, just smart placement)</p>
</li>
<li><p>Shows how different shots can support your narrative (<strong>no random B-roll here!</strong>)</p>
</li>
</ul>
<p>👉 <a target="_blank" href="https://www.linkedin.com/feed/update/urn:li:activity:7239300302770749442/">WATCH HERE</a></p>
<p>I had the privilege of <a target="_blank" href="https://www.youtube.com/live/evyCg4DBXQ8?si=jt118C053yAIRSnJ&amp;t=204">hosting Aaron on my podcast</a> and learned a lot from him. You might also learn a thing or two from his wisdom.</p>
<p>I created my last video with this purpose in mind. <strong>Sound, Composition, Color Grading, and Cinematography</strong> all working together to deliver a story, and I'm proud of the result.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1736741860509/2c5860cf-5564-40d5-8746-a6a0c4e6c23a.png" alt class="image--center mx-auto" /></p>
<p>👉 <a target="_blank" href="https://www.youtube.com/watch?v=1-C1SgCmJ0E">WAT</a><a target="_blank" href="https://www.youtube.com/watch?v=1-C1SgCmJ0E">CH HERE</a></p>
<hr />
<h2 id="heading-tip-of-the-week-impactful-writing">🎯 Tip of the Week: Impactful Writing</h2>
<p><strong>Everything starts with writing</strong>. I've learned the hard way that a solid script is way more than half the battle for a good video<a target="_blank" href="https://www.youtube.com/watch?v=1-C1SgCmJ0E">.</a></p>
<p><strong>I’m obsessed with mastering copywriting and diving</strong> into the science and techniques behind it.</p>
<p><strong>The best person to learn from? Harry Dry</strong>. He got as a guest at an absolutely brilliant podcast, linked below:</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4E12AQHu_0u0ZhqCZg/article-inline_image-shrink_1000_1488/article-inline_image-shrink_1000_1488/0/1735234694514?e=1740614400&amp;v=beta&amp;t=NhbK8VR61Y_syhQABGBmjTxYnWZI3L8eTaQsUm7XEOk" alt /></p>
<p>Here are my top two takeaways:</p>
<ol>
<li><p>When writing, ask yourself three questions: <strong>Can you visualize it?</strong> <strong>Is it impossible to prove it wrong? Are you the only one who can say it?</strong> If you get three yeses, you're onto something good.</p>
</li>
<li><p><strong>Good writing comes from re-writing</strong>. No one nails it on the first try.</p>
</li>
</ol>
<p>👉 <a target="_blank" href="https://www.youtube.com/watch?v=TUMjnmfsPeM">WATCH HERE</a></p>
<hr />
<h2 id="heading-resource-of-the-week-insta360">🛠️ Resource of the Week: Insta360</h2>
<p>You might say: "But I don't have anyone to film me!" - <strong>Same here 👋</strong>! I have to shoot every single take myself (sometimes my wife), which takes time; sometimes, you do not have time.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4E12AQHLiZPWNiUNeQ/article-inline_image-shrink_1500_2232/article-inline_image-shrink_1500_2232/0/1735235943315?e=1740614400&amp;v=beta&amp;t=-ahDZ0jE8RmjigHnygtLjrCm9w48T0et6OnYcl6hvaU" alt /></p>
<p>The <a target="_blank" href="https://amzn.to/4iS90Uw">Insta360 X4</a> is a great resource because it gets the whole thing; <strong>you hit record and forget about framing</strong> and adjust everything in the post (zoom, pan, frame). This gives you a lot of freedom, <a target="_blank" href="https://youtu.be/CiHQi3jcdko?si=GLWpJdjmraTlbEKv&amp;t=132">check this video where I use it</a></p>
<p>Why do I like it? <strong>Stabilization</strong> is really good; it can record and export in <strong>ProRes 422</strong> and has handy features like Deep Track and AI editing that help speed up editing. Finally, the sound recording from it is not the best, but I got a <a target="_blank" href="https://amzn.to/3VRft8w">cheap mic adapter</a> and I plug my wireless mics so I get crisp audio.</p>
<p>👉 <a target="_blank" href="https://amzn.to/407NzHN">GET THE INSTA 360 X4 HERE</a></p>
<hr />
<p><strong>And that's a wrap!</strong> If you learned something today, share it. If you didn't learn anything, <strong>share it.</strong></p>
<p>Have a creative week, and keep producing!</p>
]]></content:encoded></item><item><title><![CDATA[3 Words That Changed My DevRel Stories + Jono's 26-Year Wisdom 🎬 | DevReel Weekly #1]]></title><description><![CDATA[After years of experimenting, failing, and eventually succeeding with developer-focused videos, I'm finally sharing my playbook. Every week, I'll break down what's working for me, what isn't, and what's next in DevRel video content. No fluff, just ac...]]></description><link>https://blog.kevinblanco.dev/3-words-that-changed-my-devrel-stories-jonos-26-year-wisdom-devreel-weekly-1</link><guid isPermaLink="true">https://blog.kevinblanco.dev/3-words-that-changed-my-devrel-stories-jonos-26-year-wisdom-devreel-weekly-1</guid><category><![CDATA[DevRel]]></category><category><![CDATA[developer relations]]></category><category><![CDATA[video]]></category><category><![CDATA[tips]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Sun, 05 Jan 2025 14:00:22 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1735588998219/fb7c1f8f-3753-4b18-9244-18ccae1caa1a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>After years of experimenting, failing, and eventually succeeding with developer-focused videos, <strong>I'm finally sharing my playbook</strong>. Every week, I'll break down what's working for me, what isn't, and what's next in DevRel video content. <strong>No fluff, just actionable insights</strong>. Well, <em>there might be some fluff</em>, because this will be <strong>AI-free, just my own voice.</strong></p>
<h3 id="heading-video-of-the-week">📺 Video of the Week</h3>
<p>The amazing <a class="user-mention" href="https://hashnode.com/@https://www.linkedin.com/in/jonobacon?miniProfileUrn=urn%3Ali%3Afs_miniProfile%3AACoAAAAMT_kBukLvuNeOpdpCBfV_INcfR84XytU">Jono Bacon</a> dropped <strong>26 years' worth of community-building</strong> wisdom bombs in one video, this one had me frantically taking notes.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734730878252/c7fd1375-d00e-4b9e-9381-e2f683445332.jpeg" alt class="image--center mx-auto" /></p>
<p>This video is pure gold because it saves you from making the same mistakes he did (<em>I was making some of them</em>)</p>
<p>👉 <a target="_blank" href="https://www.youtube.com/watch?v=itIg2z6vEAc">WATCH HERE</a></p>
<hr />
<h3 id="heading-tip-of-the-week-scripting-tip">🎯 Tip of the Week: Scripting Tip</h3>
<p>If you struggle with scripting your videos, follow this simple but effective technique:</p>
<p><strong>And… + But… + Therefore.</strong></p>
<p>My scriptwriting teacher always said: <strong><em>"Never use more than one 'and.'"</em></strong></p>
<p>Imagine me describing my day in Tokyo by saying: <em>I woke up, and had sushi for breakfast, and visited the Shibuya crossing, and explored the anime district, etc</em>.</p>
<p>It sounds silly, but that's how most people script their videos.</p>
<p><strong>Don't get confused—you might not actually hear the word <em>'and'</em> multiple times, but the storytelling implies it.</strong></p>
<p>And how does it feel? Like a flat line. <strong>No suspense. Not attention-grabbing. Boring</strong>. Instead, try to add a sudden change and an outcome it caused. It might be an action, an emotion, or a breakthrough, same Tokyo day example:</p>
<p><em>I woke up excited for my first day in Tokyo, started with fresh sushi at the famous Tsukiji market (and),</em> <strong><em>but</em></strong> <em>when I reached the Shibuya crossing, a sudden typhoon warning turned the world's busiest intersection into a ghost town,</em> <strong><em>therefore</em></strong> <em>I ducked into a tiny anime cafe where I ended up spending hours trading stories with local manga artists while waiting out the storm.</em></p>
<p><strong>And… but… therefore</strong></p>
<p><strong>Powerful stuff.</strong></p>
<hr />
<h3 id="heading-resource-of-the-week-magic-arm">🛠️ Resource of the Week: Magic Arm</h3>
<p>This section is for those things that make my day easier when creating videos - not sponsored (I wish haha) and this week's is a cheap but useful tool: <a target="_blank" href="https://amzn.to/4fKRcYV"><strong>The Magic Arm</strong></a></p>
<p><img src="https://m.media-amazon.com/images/I/61vvtXPNyVS._AC_SL1500_.jpg" alt /></p>
<p>I've been experimenting with different shot types like <strong>POVs</strong> and <strong>Over the Head</strong> to get new perspectives to support my story, and this just helped me SO BADLY, here are a couple of shots I did with it:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734730913430/c0b75bb6-47ee-4fa7-924c-21da83f5aa51.png" alt="Over the Head shoot in my office" class="image--center mx-auto" /></p>
<p>I attached the Magic Arm to my overhead light and mounted my phone! <strong>The clamp can grab from literally anything</strong>. I also used it in the following shot of my last vlog, attaching it to the baggage cart and then walking around the airport, making the perfect POV shot (<a target="_blank" href="https://www.youtube.com/watch?v=CiHQi3jcdko">see full video here</a>).</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734730938324/2537d8b4-0d6a-412b-9c6c-1fbcf9d3f26c.png" alt class="image--center mx-auto" /></p>
<p>👉 <a target="_blank" href="https://amzn.to/4fKRcYV">Get your Magic Arm from this Link</a></p>
<hr />
<p><strong>And that's a wrap!</strong> Thank you again for taking the time to read this.</p>
<p>Have a creative week and keep producing!</p>
]]></content:encoded></item><item><title><![CDATA[A DevRel Guide for Video Thumbnails]]></title><description><![CDATA[Viewers typically decide whether to click on a video in less than 2 seconds.  For technical content, this means your thumbnail needs to convey relevance and value almost instantaneously.
As a Senior DevRel Advocate focused on Video Production for Dev...]]></description><link>https://blog.kevinblanco.dev/a-devrel-guide-for-video-thumbnails</link><guid isPermaLink="true">https://blog.kevinblanco.dev/a-devrel-guide-for-video-thumbnails</guid><category><![CDATA[DevRel]]></category><category><![CDATA[developer relations]]></category><category><![CDATA[video]]></category><category><![CDATA[video streaming]]></category><category><![CDATA[youtube]]></category><category><![CDATA[YouTube Channel]]></category><category><![CDATA[youtube learning]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Mon, 09 Sep 2024 12:30:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1725676674151/169cc0eb-cc0f-49e2-b1ce-e4f9ef55cf5d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong><mark>Viewers typically decide whether to click on a video in less than 2 seconds. </mark> For technical content, this means your thumbnail needs to convey relevance and value almost instantaneously.</strong></p>
<p>As a Senior DevRel Advocate focused on Video Production for Developer Communities and Education with hundreds of videos produced, I've learned firsthand the critical importance of thumbnails for driving engagement and conversions. Through countless experiments, failures, and successes, I've gained valuable insights into what makes a thumbnail truly practical for a technical audience.</p>
<h2 id="heading-why-thumbnails-matter-for-devrel-content">Why Thumbnails Matter for DevRel Content</h2>
<p>When it comes to developer education and community building, capturing attention is half the battle. With an ocean of technical content available, your thumbnail is often the first and only chance to convince a developer that your video is worth their time. It's not just about aesthetics - a well-crafted thumbnail communicates <strong>value</strong>, <strong>relevance</strong>, and <strong>intrigue</strong> in a split second. This article aims to share what has worked for me after publishing more than 500 videos on different topics, areas, and products. Some well-produced videos have had less than 80 views. Some have had more than 20k, and I know that the thumbnail plays a crucial part in the result (among other things, obviously), <strong><mark>and this is not a guide to becoming viral; this is a guide to showcase what the video delivers in a single image that can drive viewership.</mark></strong></p>
<h2 id="heading-the-developers-scroll-a-unique-challenge">The Developer's Scroll: A Unique Challenge</h2>
<p><strong>Developers are a discerning audience</strong>. They're often looking for specific solutions or in-depth knowledge and are quick to scroll past content that doesn't immediately signal relevance. This makes our job as DevRel professionals particularly challenging - and exciting.</p>
<h3 id="heading-curiosity-is-king"><strong>Curiosity is King</strong></h3>
<p>Like in the general YouTube space, creating a "curiosity gap" is crucial. For developer content, this might mean hinting at a surprising solution to a common problem or showcasing an unexpected tech stack. Here's one example</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1720631051329/71a5f28d-ab78-4046-8666-a313b13d8f8b.png" alt class="image--center mx-auto" /></p>
<p><strong><mark>Now, this is not clickbait</mark></strong>. It's important to highlight <strong>that you don't need to lie;</strong> you can build curiosity from the thumbnail while delivering what's promised, so in your next thumbnail, <strong>spark some curiosity.</strong></p>
<h3 id="heading-technical-authenticity">Technical Authenticity</h3>
<p>While flashy designs can work for general audiences, <strong><mark>developers often respond better to thumbnails that signal technical depth</mark></strong>. Code snippets, architecture diagrams, or tool logos can be powerful scroll-stoppers for our audience.</p>
<p>For instance, if your video is about integrating a popular API or using a particular framework, consider incorporating a snippet of the relevant code or the framework's logo in the thumbnail. This approach not only adds credibility but also ensures that <strong>your thumbnail stands out in a sea of generic, overly-polished designs</strong>. The key is to balance simplicity with substance—ensuring that your thumbnail looks clean and professional while still conveying the technical depth your audience craves.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1725673374814/f54f4eff-40ff-42ac-bc50-44995e0b7f44.png" alt class="image--center mx-auto" /></p>
<p>Furthermore, using actual screenshots or snippets from the video itself can enhance authenticity. Developers <strong>appreciate seeing a glimpse of what they will learn</strong> or achieve by watching the video. This transparency builds trust and increases the likelihood of engagement.</p>
<p>Remember, your goal is to create a thumbnail that not only grabs attention but also <strong>sets the right expectations</strong>. By emphasizing technical authenticity, you're telling developers that your content respects their time and expertise, making them more likely to click and engage.</p>
<h3 id="heading-problem-solution-framing">Problem-Solution Framing</h3>
<p><mark>Developers are </mark> <strong><mark>often searching for answers</mark></strong>. Thumbnails that clearly communicate <strong>"I have the solution to your problem"</strong> tend to perform well. To achieve this, your thumbnail should be designed to quickly and clearly convey both the problem your video addresses and the solution it offers. This can be done through a combination of visual elements and text.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1725673751405/23f52c3f-8a7b-4140-904f-021166e0b967.jpeg" alt class="image--center mx-auto" /></p>
<p>For example, if your video is about resolving a common error in a popular programming language, the thumbnail might feature a snippet of the error message alongside a visual cue like a checkmark or a resolved icon, indicating that the video contains the solution. Accompanying this with a short, impactful text overlay—something like "Fix [Error Code]" or "Resolve [Issue] Quickly"—can make it immediately clear to viewers that your video will help them overcome a specific challenge.</p>
<p>Another effective strategy <strong>is to highlight the pain point directly.</strong> If your video addresses a time-consuming or frustrating task, visually representing that struggle in the thumbnail can resonate with viewers who are experiencing the same issue.</p>
<h3 id="heading-brand-consistency">Brand Consistency</h3>
<p>Building trust with your developer community is crucial. Consistent thumbnail styles can help in <strong>brand recognition</strong>, making your content stand out to returning viewers. They will also know what to expect, given the brand of the thumbnail.</p>
<p>For example, here at <a target="_blank" href="https://www.appsmith.com">Appsmith</a> where I work as a Senior DevRel Advocate focused on Video Production, we have a <strong>well-defined color and style for each topic/playlist</strong>, so users now understand what the video is about just by looking at the thumbnail.</p>
<p><img src="https://api.monosnap.com/file/download?id=fr62EumjAl1Va3qs1doWWigfyLdO46" alt class="image--center mx-auto" /></p>
<p>Moreover, brand consistency isn't just about aesthetics; it's about <strong>setting and meeting expectations</strong>. When viewers see a familiar thumbnail style, they immediately connect it with the value and insight they’ve received from your previous content. This association <strong>builds trust</strong> and encourages them to click on your video over others, knowing that it aligns with their needs and interests.</p>
<p>In practice, maintaining brand consistency involves adhering to a set of design guidelines that cover everything from color schemes and fonts to the placement of logos and text. It’s also important to adapt these elements to fit different platforms and audience segments while staying true to your core brand identity.</p>
<h3 id="heading-ab-testing-is-non-negotiable"><mark>A/B Testing is Non-Negotiable</mark></h3>
<p>When it comes to creating effective video thumbnails, <strong>one size rarely fits all</strong>. What resonates with one developer community might fall flat with another, and the only way to know for sure is through rigorous testing.</p>
<p>A/B testing is an indispensable tool in the DevRel video production toolkit, allowing you to fine-tune your thumbnails based on <strong>real-world performance data</strong> rather than assumptions or gut feelings.</p>
<p>A/B testing involves creating multiple variations of a thumbnail and comparing their effectiveness <strong>by measuring metrics like click-through rates (CTR), viewer engagement, and overall video performance</strong>. This process is crucial because it takes the guesswork out of design decisions. Even minor changes—such as altering the color of the text, changing the placement of an element, or tweaking the wording—can significantly impact how your audience responds, let's review the following example from Appsmith.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1725675223771/4d05be20-87f2-4111-b575-a621aa5a8f7d.png" alt class="image--center mx-auto" /></p>
<p>I setup these 3 options for Youtube, and here are the results after 15 days of Youtube test and analysis:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1725675703363/ce910936-75aa-419d-ae1f-eb5d2cd281ab.png" alt class="image--center mx-auto" /></p>
<p>This means that from all the watch time that this video got, 48.5% came from users who decided to click on the second thumbnail. This tells us that probably the curiosity of time (deploying in less than 3 minutes) generates more interest than the others, so know we know more about our audience.</p>
<h3 id="heading-the-power-of-faces">The Power of Faces</h3>
<p><strong>Even in technical content, <mark>thumbnails with human faces can increase click-through rates by up to 30-40% </mark></strong> and at Appsmith, we saw that after we started using our faces in the thumbnails.</p>
<p>However, for developer audiences, <strong>the face should be contextually relevant</strong> (e.g., a known expert or someone clearly engaged in coding, the person's reaction to the outcome of the video).</p>
<p>It's important to balance this approach with the technical elements of your thumbnail. <strong>The face should complement, not overshadow,</strong> the core technical message you’re trying to convey.</p>
<p>As you noticed on all the thumbnails I've shared so far on this article, most shows my face and reactions to the video, this creates a powerful connection with our audience.</p>
<h3 id="heading-conclusion">Conclusion</h3>
<p>As DevRel professionals, <strong>our goal is to educate, engage, and empower developers</strong>. While the content of our videos is paramount, neglecting the thumbnail is like writing brilliant code but forgetting to document it - it limits its reach and impact. By applying these lessons and continuously refining our approach to thumbnails, we can ensure our valuable content reaches and resonates with the developers who need it most.</p>
<p>The world of developer content is always evolving, and so are the best practices for thumbnails. What worked last year might not work today. That's why I'm constantly experimenting, analyzing data, and staying attuned to the preferences of various developer communities.</p>
<p>Remember, in the world of developer content, <strong>your thumbnail isn't just an image - it's the first line of your documentation</strong>, the cover of your technical book, and your handshake with the developer community. <strong><mark>Make it count.</mark></strong></p>
]]></content:encoded></item><item><title><![CDATA[Advises for Building Better Developer-Focused Videos from a Filmmaker]]></title><description><![CDATA[As a senior DevRel advocate specializing in film and video for developers, I've produced hundreds of videos and frequently encounter the same question: "What's the most important thing for making engaging videos?" While there's no single definitive a...]]></description><link>https://blog.kevinblanco.dev/advises-for-building-better-developer-focused-videos-from-a-filmmaker</link><guid isPermaLink="true">https://blog.kevinblanco.dev/advises-for-building-better-developer-focused-videos-from-a-filmmaker</guid><category><![CDATA[DevRel]]></category><category><![CDATA[developer marketing]]></category><category><![CDATA[developer relations]]></category><category><![CDATA[video]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Tue, 02 Jul 2024 21:49:54 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1719956549959/ffe638ab-5278-483b-a279-b32651a76366.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As a senior DevRel advocate specializing in film and video for developers, I've produced hundreds of videos and frequently encounter the same question: "<em>What's the most important thing for making engaging videos?</em>" While there's no single definitive answer, I've broken down some crucial elements that contribute to creating compelling content for developers. Let's dive into the anatomy of an effective dev-focused video, starting with a video breaking down an example I recently produced.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=YThVczINLUw">https://www.youtube.com/watch?v=YThVczINLUw</a></div>
<p> </p>
<h2 id="heading-the-script-structure-the-foundation-of-engagement">The Script Structure: The Foundation of Engagement</h2>
<p>At the heart of every great video lies a well-structured script. I've found success with a simple yet powerful format:</p>
<ul>
<li><p><strong>Hook</strong>: Start with a point of view that answers the question, "Why should developers listen to you?"</p>
</li>
<li><p><strong>Problem-Solution Dynamic</strong>: Employ a 1-2-1-2 punch of problem-solution language.</p>
<ul>
<li><p>Present the problem</p>
</li>
<li><p>Introduce the solution</p>
</li>
<li><p>Highlight the old way</p>
</li>
<li><p>Showcase the new way</p>
</li>
</ul>
</li>
<li><p><strong>The Power of "Old Way -&gt; New Way"</strong>: One of the most compelling elements in our script structure is the "old way -&gt; new way" comparison. This approach is particularly effective for a developer audience because it directly addresses their pain points and offers tangible improvements.</p>
</li>
</ul>
<p>This structure keeps viewers hooked, especially tech leaders looking to achieve their KPIs. End with a compelling offer that resonates with your audience. In my case, I end with <strong><em>"Build More, Code Less, and Ship Faster.</em></strong>"</p>
<h2 id="heading-visual-pacing-keeping-eyes-glued-to-the-screen">Visual Pacing: Keeping Eyes Glued to the Screen</h2>
<p><strong><mark>Static videos are engagement killers</mark></strong>. Maintain visual interest through:</p>
<ul>
<li><p>Quick cuts</p>
</li>
<li><p>Smooth transitions</p>
</li>
<li><p>Dynamic b-roll</p>
</li>
</ul>
<p>Each visual change should align with a new point, reinforcing your message and maintaining viewer attention. In today's world of short attention spans, visual variety reigns supreme.</p>
<h2 id="heading-audio-quality-the-often-overlooked-essential">Audio Quality: The Often Overlooked Essential</h2>
<p>Never underestimate the power of clear, crisp audio. It's non-negotiable. Invest in:</p>
<ul>
<li><p>A high-quality condenser microphone</p>
</li>
<li><p>If possible, proper room treatment for optimal sound</p>
</li>
</ul>
<p>Like most of us, I don't have a soundproof studio, so being able to record a high-dynamic range of audio helps me treat it in post-production. That is why I use a 32-bit flat audio recorder. Then, I can remove background noise or any unwanted noise and normalize the audio levels, if you want to know how to do it here's a video tutorial:</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=U0gz6odTIwA">https://www.youtube.com/watch?v=U0gz6odTIwA</a></div>
<p> </p>
<p><strong>Remember, subpar audio can undermine even the most visually stunning content.</strong></p>
<h2 id="heading-camera-angles-elevating-production-value">Camera Angles: Elevating Production Value</h2>
<p>Moving beyond the standard webcam setup is crucial for creating professional-looking, engaging content. Thoughtful use of camera angles can dramatically enhance your video's impact. Here's why it matters and how to do it effectively:</p>
<p><strong><em>Why Multiple Angles Matter:</em></strong></p>
<ul>
<li><p><strong>Visual Interest</strong>: Varied angles keep viewers engaged by providing visual stimulation.</p>
</li>
<li><p><strong>Professionalism</strong>: It mimics the look of high-end productions, elevating your content's perceived value.</p>
</li>
<li><p><strong>Emphasis</strong>: Different angles can highlight specific points or emotions in your script.</p>
</li>
<li><p><strong>Pacing</strong>: Changing angles helps maintain a dynamic rhythm in your video.</p>
</li>
</ul>
<p><strong><em>Types of Shots to Consider:</em></strong></p>
<ul>
<li><p><strong>Wide Shot</strong>: Sets the scene and gives context.</p>
</li>
<li><p><strong>Medium Shot</strong>: The standard for presenting information, showing from the waist up.</p>
</li>
<li><p><strong>Close-Up:</strong> Emphasizes emotions or details, which is great for important points.</p>
</li>
<li><p><strong>Over-the-Shoulder</strong>: Useful for demonstrating software or processes on a screen.</p>
</li>
<li><p><em>B-Roll</em>: Supplementary footage that adds visual interest and context.</p>
</li>
</ul>
<p><strong><em>Implementation Tips:</em></strong></p>
<ul>
<li><p><strong>Plan Your Shots</strong>: Align different angles with key points in your script.</p>
</li>
<li><p><strong>Rule of Thirds</strong>: Use this composition principle for more visually appealing framing.</p>
</li>
<li><p><strong>Movement</strong>: Consider subtle camera movements (pans, tilts) for added dynamism.</p>
</li>
<li><p><strong>Consistency</strong>: Ensure lighting and background are consistent across angles.</p>
</li>
</ul>
<p><strong><em>Equipment Considerations:</em></strong></p>
<ul>
<li><p><strong>Multiple Cameras</strong>: Use 2-3 cameras for easy angle switching.</p>
</li>
<li><p><strong>Quality Matters:</strong> Invest in good cameras capable of 4K resolution if possible.</p>
</li>
<li><p><strong>Proper Mounting</strong>: Use sturdy tripods or mounts to ensure stable shots, you don't want to damage your equipment.</p>
</li>
</ul>
<p>Remember, this isn't about creating a simple screen recording or using AI-generated talking heads. It's an investment in quality that sets your content apart. By thoughtfully incorporating various camera angles, you create a viewing experience that feels more like a high-end production, keeping your developer audience engaged and reinforcing your authority in the field.</p>
<h2 id="heading-color-grading-setting-the-mood">Color Grading: Setting the Mood</h2>
<p>Color grading is the process of altering and enhancing the colors of a video in post-production. It goes beyond simple adjustments to create a specific visual style that supports your message and brand. <strong>Here's why it's crucial</strong>:</p>
<ul>
<li><p><strong>Establishes Tone</strong>: Color influences emotions. A tech-focused palette with cool blues can evoke trust and professionalism.</p>
</li>
<li><p><strong>Ensures Consistency</strong>: It creates a cohesive look across different shots and scenes, even if they were filmed under varying conditions.</p>
</li>
<li><p><strong>Enhances Visual Appeal</strong>: Proper grading can make your footage look more polished and high-quality, elevating the perceived production value.</p>
</li>
<li><p><strong>Directs Attention</strong>: Using strategic color can guide the viewer's eye to important elements in your video.</p>
</li>
<li><p><strong>Reinforces Brand Identity</strong>: Consistent color schemes across your videos help build a recognizable brand.</p>
</li>
</ul>
<p>In this video, we used:</p>
<ul>
<li><p>Cool blues for a tech-friendly vibe</p>
</li>
<li><p>Warm accents for approachability</p>
</li>
<li><p>Consistent grading from intro to CTA</p>
</li>
</ul>
<p>A thoughtful color grade ties everything together and significantly boosts perceived production value.</p>
<h2 id="heading-call-to-action-cta-placement-the-soft-sell">Call-to-Action (CTA) Placement: The Soft Sell</h2>
<p>In developer-focused content, the approach to CTAs must be nuanced and respectful of your audience's intelligence. Here's how to master the art of the soft sell:</p>
<p><strong>Why Traditional CTAs Often Fall Flat with Developers:</strong></p>
<ul>
<li><p><strong><mark>Developers are typically skeptical of hard sells</mark></strong></p>
</li>
<li><p><strong>They value substance over promotional content</strong></p>
</li>
<li><p><strong>Abrupt or pushy CTAs can erode trust</strong></p>
</li>
</ul>
<p>The Soft Sell Approach: Instead of relegating your CTA to the final seconds, weave it throughout your video:</p>
<ol>
<li><p>Early Teaser:</p>
<ul>
<li><p>Hint at the value you'll provide early in the video</p>
</li>
<li><p>Example: "By the end of this video, you'll learn how to cut your deployment time in half."</p>
</li>
</ul>
</li>
<li><p>Mid-Video Value Reinforcement:</p>
<ul>
<li><p>As you explain concepts, subtly tie them back to your offering</p>
</li>
<li><p>Example: "This problem is exactly what our tool addresses, as we'll see later."</p>
</li>
</ul>
</li>
<li><p>Natural Integration:</p>
<ul>
<li><p>Make your CTA a logical conclusion to the content</p>
</li>
<li><p>Example: "Now that we've seen the challenge, let's look at how our solution addresses it."</p>
</li>
</ul>
</li>
<li><p>Final CTA:</p>
<ul>
<li><p>By the time you reach the end, viewers should be primed and ready</p>
</li>
<li><p>Make it clear and actionable, but not pushy</p>
</li>
</ul>
</li>
</ol>
<p><strong>Effective CTA Strategies for Developer Content</strong>:</p>
<ol>
<li><p><strong><em>Offer Value First:</em></strong></p>
<ul>
<li><p>Provide genuinely useful information before asking for anything</p>
</li>
<li><p>Example: "We've covered the basics. For a deep dive, check out our free ebook."</p>
</li>
</ul>
</li>
<li><p><strong><em>Use Developer-Friendly Language:</em></strong></p>
<ul>
<li><p>Speak their language; avoid marketing jargon</p>
</li>
<li><p>Example: "Ready to refactor your workflow? Clone our repo to get started."</p>
</li>
</ul>
</li>
<li><p><strong><em>Provide Options:</em></strong></p>
<ul>
<li><p>Not everyone is ready to buy. Offer different engagement levels</p>
</li>
<li><p>Example: "Join our Discord for more tips, or start a free trial if you're ready to dive in."</p>
</li>
</ul>
</li>
<li><p><strong><em>Make it Relevant:</em></strong></p>
<ul>
<li><p>Tie your CTA directly to the problem you've just solved in your content</p>
</li>
<li><p>Example: "Facing the same CI/CD challenges? Our tool is designed specifically for this."</p>
</li>
</ul>
</li>
<li><p><strong><em>Be Transparent:</em></strong></p>
<ul>
<li><p>Developers appreciate honesty about what they're getting into</p>
</li>
<li><p>Example: "No credit card required, and you can deploy to production from day one."</p>
</li>
</ul>
</li>
</ol>
<p><strong>Measuring CTA Effectiveness:</strong></p>
<ul>
<li><p>Track click-through rates on different types of CTAs</p>
</li>
<li><p>A/B test various placements and wordings</p>
</li>
<li><p>Gather feedback from your developer community</p>
</li>
</ul>
<p>Remember, the goal is to make your CTA feel like a natural, helpful next step rather than a sales pitch.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Creating engaging videos for developers is both an art and a science. By focusing on these key elements—script structure, visual pacing, audio quality, camera work, color grading, and strategic CTA placement—you'll be well on your way to producing content that resonates with your technical audience.</p>
<p>Remember, <strong><mark>the goal isn't just to inform but to inspire action</mark></strong>. Whether you're explaining a new technology, showcasing a tool, or sharing best practices, these techniques will help ensure your message doesn't just reach your audience<strong><em>—it sticks with them.</em></strong></p>
<p>What's your experience with creating developer-focused content? Have you found other techniques particularly effective? <strong>Share your thoughts in the comments below, and let's continue this conversation!</strong></p>
]]></content:encoded></item><item><title><![CDATA[How to Evaluate Video Performance in Developer Relations]]></title><description><![CDATA[Did you know that 82% of developers prefer watching videos to learn about new technologies and tools? That's right; this is backed by surveys and statistics from SlashData State of the Developer Nation Report, DataProtocol, Wistia State of Video Mark...]]></description><link>https://blog.kevinblanco.dev/how-to-evaluate-video-performance-in-developer-relations</link><guid isPermaLink="true">https://blog.kevinblanco.dev/how-to-evaluate-video-performance-in-developer-relations</guid><category><![CDATA[DevRel]]></category><category><![CDATA[video]]></category><category><![CDATA[developer relations]]></category><category><![CDATA[developer marketing]]></category><category><![CDATA[youtube]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Mon, 29 Apr 2024 15:39:55 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1714404779126/227953ab-6b45-4ce2-9306-4e18ca29b95a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Did you know that <strong>82% of developers</strong> prefer watching videos to learn about new technologies and tools? That's right; this is backed by surveys and statistics from <a target="_blank" href="https://www.slashdata.co/free-resources">SlashData State of the Developer Nation Report</a>, <a target="_blank" href="https://dataprotocol.com/stuff#playbooks">DataProtocol</a>, <a target="_blank" href="https://wistia.com/learn/marketing/video-marketing-statistics">Wistia State of Video Marketing 2024</a>, and, as one last confirmation, this week's Hashnode survey on LinkedIn shows this result:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714169425062/7c03d133-2af6-462b-8d53-97eb6ea1d24b.png" alt class="image--center mx-auto" /></p>
<p>Video has become the go-to medium for technical content consumption, surpassing traditional formats like documentation and blogs. This statistic alone should be a wake-up call for anyone in developer relations (devrel) – <strong>if you're not leveraging video, you're missing out on a massive opportunity to engage with your target audience.</strong></p>
<p>But simply creating videos isn't enough; you must measure their effectiveness and ensure they align <strong>with your DevRel goals</strong>. DevRel video detractors will say, "<em>You can't trust video metrics; they are unreliable.</em>" Here's my tip on how to measure video for DevRel.</p>
<p>This is where the Developer Journey Map comes into play, and for this article, I will use the fantastic resource <a target="_blank" href="https://www.devrel.agency/developerjourney">DevRel.Agency Developer Journey Map</a>.</p>
<p><img src="https://static.wixstatic.com/media/383279_bdc9a442a3c34e41b5d5269650717ae9~mv2.png/v1/fill/w_1141,h_88,al_c,lg_1,q_85,enc_auto/DevJourStages.png" alt="DevJourStages.png" /></p>
<h3 id="heading-measuring-video-success-across-the-developer-journey"><mark>Measuring Video Success Across the Developer Journey</mark></h3>
<p>The Developer Journey Map outlines five stages: <strong>Awareness, Interest, Evaluation, Adoption, and Growth</strong>.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text"><strong>The very first thing I identify when creating a video is which stage(s) of the Developer Journey it is for.</strong></div>
</div>

<p>Each stage has specific goals and questions that need to be addressed to progress developers to the next level and different metrics to call it "<strong>success</strong>." Here's how you can leverage video to measure success at each stage:</p>
<h3 id="heading-awareness"><strong><mark>Awareness</mark></strong></h3>
<p>The goal at this stage is to capture the developer's attention and introduce your product or service. Video metrics to use:</p>
<ul>
<li><p><strong>View count</strong></p>
</li>
<li><p><strong>Play rate</strong></p>
</li>
<li><p><strong>Audience retention(average view duration)</strong></p>
</li>
<li><p><strong>Description Links (UTM tracking)</strong></p>
</li>
</ul>
<p>Keeping track of the historical performance of these data points can help you gauge the effectiveness of your awareness videos. High view counts and strong audience retention indicate that your videos are resonating with developers and piquing their interest at this stage, <strong>you want an average view duration of at least 50%</strong> of the video length, if you are below this, your video is probably not interesting and people are just moving on, you've lost the opportunity.</p>
<p>Another important thing to do for awareness videos is to give the viewer a <strong>call to action</strong>, normally close to the end, to click a link in the description to sign up, download, learn more, etc. You need to track the clicks on these links using UTM codes or similar to know from the total number of video views how many of them clicked on these links.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text"><strong>Pro Tip</strong>: I normally keep these videos TOFU (Top of Funnel) - and use storytelling techniques to engage at the beginning of the video, awareness videos are normally for developers who don't know your product, and the first 1-2 minutes are KEY, if not, they will drop and just move on.</div>
</div>

<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=kTm5SOpHEKY">https://www.youtube.com/watch?v=kTm5SOpHEKY</a></div>
<p> </p>
<h3 id="heading-interest"><strong><mark>Interest</mark></strong></h3>
<p>Once developers know your offering, the next step is to pique their interest and provide more detailed information. At this stage, here are the engagement metrics I am looking for:</p>
<ul>
<li><p><strong>Video Likes</strong></p>
</li>
<li><p><strong>Comments</strong></p>
</li>
<li><p><strong>Shares</strong></p>
</li>
<li><p><strong>Description Links (UTM tracking)</strong></p>
</li>
</ul>
<p><strong>These 4 become crucial for videos at this stage</strong>. If your videos are generating active discussions, being shared within developer communities, and conversion rate (e.g., developers signing up for a trial or downloading a sample project) it's a clear sign that you're successfully nurturing their interest, if not, while you might get a lot of views and a healthy play rate, we could say you failed if there are no likes, follow up questions, comments, etc.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text"><strong>Pro Tip</strong>: I normally invite viewers to share their comments during the actual video and more than once, giving them questions to answer in the comments, this drives them to comment and keep the conversation going.</div>
</div>

<h3 id="heading-evaluation"><strong><mark>Evaluation</mark></strong></h3>
<p>As developers dive deeper into evaluating your product or service, <strong>they'll likely seek out technical walkthroughs, code samples, and demos</strong>. Here, the metric I look for the most is <strong>video completion rate. This</strong> can tell the effectiveness of your evaluation videos. High completion rates indicate that your videos are providing the necessary information and guidance for developers to make an informed decision.</p>
<p>If you have a demo video or tutorial on "<em>How to do X or Y</em>" and their completion rate is low, it means you failed since they probably didn't finish the tutorial.</p>
<p><strong>Here's a scenario: On an evaluation video, you get a lot of views (more than average) - thinking you succeeded, but low completion rate, it turns out you failed.</strong></p>
<p>On the other hand, on an evaluation video, you get a very low view (less than average) - thinking you failed, <strong>but high completion rate</strong>, <strong>it turns out you succeeded</strong>.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Don't let the overall metrics stats fool you. Take it with a grain of salt. Always go back to the Developer Journey Map.</div>
</div>

<h3 id="heading-adoption"><strong><mark>Adoption</mark></strong></h3>
<p>At this stage, developers <strong>have decided to adopt your product</strong> or service and are actively using it. Video metrics I look for:</p>
<ul>
<li><p><strong>Tutorial Viewership</strong></p>
</li>
<li><p><strong>Support Ticket Deflection</strong></p>
</li>
<li><p><strong>Adoption Rate</strong></p>
</li>
</ul>
<p>These can help you measure the impact of your adoption videos. If developers consistently watch your tutorial videos and adoption rates are high, it's proof of the effectiveness of your video content in onboarding and supporting new users.</p>
<p><strong>Here's a personal example</strong>: at my current position as DevRel Advocate, working <strong>along with the support team(this is why collaboration is key for DevRel)</strong>, we realized we had a lot of developers opening tickets and asking help about how to implement oAuth2 in our product. We support oAuth2 with no problem, and the feature works, but the implementation is different depending on the service to use. So, we created a series of videos about oAuth2 integration using different third-party auth services.</p>
<p>If we see the video metrics for these videos, we'll see <strong>a low view count (very low) but a large viewership and the support team saw a large reduction in</strong> tickets related to oAuth2. <strong>This is an example of success</strong> where low views, low likes, and almost no comments could be a misleading metric, but the fact that the few people who watched the video saw it until the end and reduced tickets, this is a success.</p>
<h3 id="heading-growth"><strong><mark>Growth</mark></strong></h3>
<p>The final stage is all about retaining and expanding your developer community, <strong>this is probably the hardest to measure for video, I must acknowledge</strong>. Here, metrics like community engagement, user-generated content, and net promoter score (NPS) can help you gauge the success of your growth videos. If developers are actively participating in your community, creating their own content, and recommending your product or service to others, it's a clear indication that your video strategy is driving long-term growth and advocacy, <strong>so you will need to measure data outside of YouTube (or your video platform).</strong></p>
<p><strong>Let me give you a personal example</strong>: I was on a Livestream with one of our customers going over a success case of our product. Normally, these conversations are more value-driven than technical to showcase to the community how other companies have adopted our product to achieve their goals and solve their problems.</p>
<p>During the livestream, the guest mentioned that one of the reasons why they didn't move to our competition, apart from being a good product, is that every time they had questions, issues, or blockers implementing our tool, they could always find a video tutorial on our YouTube channel that explained how to do it. Our videos also gave them ideas on how to expand product usage.</p>
<p><strong>So literally, they grow product usage thanks to video. At that moment, everything made sense.</strong></p>
<h3 id="heading-conclusion">Conclusion</h3>
<p><strong><mark>But this is a written article, isn't it? Why isn't this a video if it's a powerful medium</mark></strong> - well, embracing a multi-format approach aligns with the principles of inclusive and accessible developer education. By catering to different learning styles and preferences, you increase the chances of your content resonating with a wider audience, fostering greater engagement and understanding, I don't just do videos, I do a lot of written articles, docs, podcasts, etc.</p>
<p>Remember, video is not just a medium for developers to consume content; <strong>it's a powerful tool for building relationships</strong>, fostering trust, and cultivating a loyal community. Embrace video as a strategic pillar of your devrel efforts, and watch as your developer engagement soars to new heights.</p>
]]></content:encoded></item><item><title><![CDATA[Video the Best Medium for DevRel - Here's why]]></title><description><![CDATA[Language is a low-bandwidth medium: less than 12 bytes/second. A person can read 270 words/minute, or 4.5 words/second, which is 12 bytes/s (assuming 2 bytes per token and 0.75 words per token).
Vision has a much higher bandwidth: about 20MB/s. Each ...]]></description><link>https://blog.kevinblanco.dev/video-the-best-medium-for-devrel-heres-why</link><guid isPermaLink="true">https://blog.kevinblanco.dev/video-the-best-medium-for-devrel-heres-why</guid><category><![CDATA[DevRel]]></category><category><![CDATA[developer relations]]></category><category><![CDATA[video]]></category><category><![CDATA[video streaming]]></category><category><![CDATA[developer marketing]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Tue, 09 Apr 2024 15:54:09 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1712612493727/cacdedb3-1d40-4d87-9b94-cb6844dc1353.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Language</strong> is a <strong>low-bandwidth</strong> medium: less than 12 bytes/second. A person can read 270 words/minute, or 4.5 words/second, which is 12 bytes/s (assuming 2 bytes per token and 0.75 words per token).</p>
<p><strong>Vision</strong> has a much <strong>higher</strong> bandwidth: <strong>about 20MB/s</strong>. Each of the two optical nerves has 1 million nerve fibers, each carrying about 10 bytes per second.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">In other words, the data bandwidth of visual perception is roughly 1.6 million times higher than the data bandwidth of written (or spoken) language.</div>
</div>

<p>This tells us that most of human knowledge (and almost all of animal knowledge) <strong>comes from our sensory experience of the physical world</strong>. Language is the icing on the cake, and we need the cake to support the icing (Video is the cake in case you didn't figure it).</p>
<p>As a Senior DevRel Advocate with a diverse background in tech and filmmaking, I've witnessed firsthand the power of video as the best medium to engage and educate developers. In this article, I'll share my experiences and insights on why video should be a top priority for DevRel teams, and how DevRels can leverage this powerful medium.</p>
<h2 id="heading-capturing-attention-and-engagement">Capturing Attention and Engagement</h2>
<p>Developers are bombarded with countless blog posts, tutorials, and documentation, capturing and maintaining their attention is a significant challenge, <strong>deal with it</strong>.</p>
<p>However, video has the unique ability to captivate and engage audiences in a way that static text and images simply cannot.</p>
<p>Video can create a more immersive and compelling experience for your audience by leveraging the power of visual and auditory stimuli. Developers can see the product in action, hear the explanations directly from the experts, and feel a stronger connection to the content. This heightened engagement can lead to better comprehension, increased retention, and, ultimately, more effective knowledge transfer. Here's a quick example of how you can capture attention by quickly showcasing the capability of a given technology; then, you can do in-depth explanation slowly, but the attention is successfully grabbed.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/shorts/yMhvTo5C_3c">https://www.youtube.com/shorts/yMhvTo5C_3c</a></div>
<p> </p>
<h2 id="heading-effective-storytelling-and-emotional-connection">Effective Storytelling and Emotional Connection</h2>
<p>Developers are not just looking for dry, technical information; they also crave content that resonates with them on an emotional level. Video allows DevRel teams to craft compelling narratives that showcase the human side of the technology, the passion behind the solutions, and the real-world impact of the products.</p>
<p>By incorporating storytelling elements, such as relatable characters, personal anecdotes, and emotive visuals, you can create a deeper connection between your audience and the content. This emotional engagement can foster a stronger sense of trust, loyalty, and advocacy, which are crucial for building a thriving developer community.</p>
<h2 id="heading-demonstrating-complex-technical-concepts">Demonstrating Complex Technical Concepts</h2>
<p>Many technical concepts and product features can be challenging to explain through text alone. Video, on the other hand, provides the perfect medium to visually demonstrate complex ideas, step-by-step walkthroughs, and hands-on tutorials.</p>
<p>By combining clear explanations, interactive demonstrations, and well-designed visual aids, DevRel teams can help developers grasp technical details more easily and quickly. This can be particularly beneficial for onboarding new users, showcasing advanced functionalities, or troubleshooting common issues. In this video, I explain some mechanisms you can steal from Hollywood movies that you can then apply to your videos</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=kTm5SOpHEKY">https://www.youtube.com/watch?v=kTm5SOpHEKY</a></div>
<p> </p>
<h2 id="heading-scalable-and-accessible-content-delivery">Scalable and Accessible Content Delivery</h2>
<p>As the developer community continues to grow and become more diverse, it's crucial for DevRel teams to deliver content that is scalable and accessible. Video content can be easily shared, embedded, and repurposed across multiple platforms and channels, ensuring that your message reaches a broad and diverse audience.</p>
<p>Moreover, video content can be made accessible through features like closed captions, transcripts, and translations, allowing developers with various language proficiencies, hearing abilities, and learning preferences to engage with the content effectively. In this video, I explain how easy is to add Subtitles and Closed Captions using AI</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=xJmAOWkxnUU">https://www.youtube.com/watch?v=xJmAOWkxnUU</a></div>
<p> </p>
<h2 id="heading-building-a-robust-video-production-workflow">Building a Robust Video Production Workflow</h2>
<p>Implementing a well-structured video production workflow is crucial for ensuring consistent, high-quality video content. This includes elements such as content planning, script writing, video recording, editing, and optimization for various platforms and devices.</p>
<p>Let me share some of the tools I use in my day-to-day workflow to achieve my results:</p>
<ul>
<li><p>Script Writing: <a target="_blank" href="https://www.studiobinder.com/">Studio Binder</a></p>
</li>
<li><p>Video Production Management: <a target="_blank" href="https://www.notion.so/">Notion</a></p>
</li>
<li><p>Asset Design: <a target="_blank" href="https://www.figma.com/">Figma</a>.</p>
</li>
<li><p>Live Streaming Broadcaster Software: <a target="_blank" href="https://restream.io/">Restream</a></p>
</li>
<li><p>Broadcasting Console: <a target="_blank" href="https://www.blackmagicdesign.com/products/atemmini/techspecs/W-APS-15">ATEM Mini Pro ISO</a></p>
</li>
<li><p>Video Editing (Edit, Motion Graphics, Audio, Color Grading): <a target="_blank" href="https://www.blackmagicdesign.com/products/davinciresolve">Davinci Resolve</a></p>
</li>
<li><p>Screen Recording: <a target="_blank" href="https://www.screen.studio/">Screen Studio</a></p>
</li>
<li><p>Sounds Effects and Music: <a target="_blank" href="https://motionarray.com">Motion Array</a></p>
</li>
</ul>
<p>Now, this doesn't mean you have to use them the same way as I do, but, you do need a workflow that you can start testing, improving, and getting familiar with it. I use more equipment like cameras, microphones, lights, etc that I use but I can do another article about it (share a comment if you'd like to know more about it)</p>
<p>By investing in the necessary resources, tools, and expertise, DevRel teams can streamline the video creation process, ensure efficient collaboration, and maintain a steady cadence of engaging video content that resonates with their audience.</p>
<p>In case you are looking for an introduction to Video Editing, watch this Introductory Masterclass to Davinci Resolve and subscribe to my channel for more content like this</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/live/HkkfUCu9pRM?si=CSRZ_W4yuHB_n7uP&amp;t=9">https://www.youtube.com/live/HkkfUCu9pRM?si=CSRZ_W4yuHB_n7uP&amp;t=9</a></div>
<p> </p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>If you're a DevRel professional looking to amplify your impact, I encourage you to embrace the power of video and incorporate it as a core component of your content strategy. Start by assessing your current video efforts, identifying areas for improvement, and investing in the necessary resources and expertise to elevate your video production capabilities.</p>
<p>Remember, the future of developer relations is visual, and those who embrace this shift will reap the rewards of enhanced engagement, deeper connections, and a more informed and enthusiastic developer community.</p>
]]></content:encoded></item><item><title><![CDATA[Strapi CMS on Google Cloud Platform: The Definitive Guide - Part 3]]></title><description><![CDATA[Hello everyone! Welcome to part 3 and final of 'The Definitive Guide' on running Strapi, the headless open-source content management system, on Google Cloud Platform. I'm a Google Developer Expert in Google Cloud Platform. Be sure to check out Part 1...]]></description><link>https://blog.kevinblanco.dev/strapi-cms-on-google-cloud-platform-the-definitive-guide-part-3</link><guid isPermaLink="true">https://blog.kevinblanco.dev/strapi-cms-on-google-cloud-platform-the-definitive-guide-part-3</guid><category><![CDATA[Strapi]]></category><category><![CDATA[js]]></category><category><![CDATA[headless cms]]></category><category><![CDATA[cms]]></category><category><![CDATA[GCP]]></category><category><![CDATA[Google Cloud Platform]]></category><category><![CDATA[cicd]]></category><category><![CDATA[Continuous Integration]]></category><category><![CDATA[continuous deployment]]></category><category><![CDATA[#cloud-build]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Wed, 21 Feb 2024 15:05:04 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1711127456517/aad92c36-935e-4594-8c22-158c8d916ff3.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello everyone! Welcome to part 3 and final of 'The Definitive Guide' on running Strapi, the headless open-source content management system, on Google Cloud Platform. I'm a Google Developer Expert in Google Cloud Platform. Be sure to <a target="_blank" href="https://kevinblanco.dev/strapi-cms-on-google-cloud-platform-the-definitive-guide-part-1">check out Part 1</a>, where we set up our Google Cloud environment, <a target="_blank" href="https://kevinblanco.dev/strapi-cms-on-google-cloud-platform-the-definitive-guide-part-2">Part 2</a>, where we dived into configuring the Strapi application for Google Cloud. In this part, we will configure automated deployments and code checks as any real-world application (CI/CD) using Google Cloud Build and Github. In case you missed it, here's the diagram of what we are building:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1698868379498/4cec2407-aa24-4f89-9b28-c688cac58a67.png" alt class="image--center mx-auto" /></p>
<p><strong>So let's get started!</strong></p>
<p>TL;DR Watch this video:</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/2ykh9AmOzBo">https://youtu.be/2ykh9AmOzBo</a></div>
<p> </p>
<h2 id="heading-prerequisites"><strong>Prerequisites</strong></h2>
<ul>
<li><p><a target="_blank" href="https://nodejs.org/en">Node.js v.18+</a> installed locally.</p>
</li>
<li><p>Have <a target="_blank" href="https://kevinblanco.dev/strapi-cms-on-google-cloud-platform-the-definitive-guide-part-1">Part 1</a> and Part 2 completed.</p>
</li>
<li><p>The <a target="_blank" href="https://cloud.google.com/sdk/gcloud">gcloud command line interface</a> installed on your machine</p>
</li>
</ul>
<h2 id="heading-configure-your-repository"><strong>Configure your Repository.</strong></h2>
<p>As stated before, we will use github to configure the automated deployment, so we must ensure the repository is ready to integrate into Cloud Build. The main two files are the <code>app.yaml</code> and the <code>.gcloudignore</code> and if you followed <strong>Part 2</strong> you should be all set, but if you already have your existing Strapi project make sure to them like this:</p>
<p>app.yaml</p>
<pre><code class="lang-yaml"><span class="hljs-attr">runtime:</span> <span class="hljs-string">nodejs18</span>
<span class="hljs-attr">instance_class:</span> <span class="hljs-string">F2</span>

<span class="hljs-attr">env_variables:</span>
  <span class="hljs-attr">HOST:</span> <span class="hljs-string">'0.0.0.0'</span>
  <span class="hljs-attr">NODE_ENV:</span> <span class="hljs-string">'production'</span>
  <span class="hljs-attr">DATABASE_NAME:</span> <span class="hljs-string">'postgres'</span>
  <span class="hljs-attr">DATABASE_USER:</span> <span class="hljs-string">'postgres'</span>
  <span class="hljs-attr">DATABASE_PASSWORD:</span> <span class="hljs-string">'CLOUD_SQL_PASSWORD'</span>
  <span class="hljs-attr">INSTANCE_CONNECTION_NAME:</span> <span class="hljs-string">'CLOUD_SQL_CONNECTION_NAME'</span>
  <span class="hljs-attr">GCS_BUCKET_NAME:</span> <span class="hljs-string">'CLOUD_STORAGE_BUCKET_NAME'</span>
  <span class="hljs-attr">GCS_BASE_PATH:</span> <span class="hljs-string">'cms'</span>

<span class="hljs-attr">beta_settings:</span>
  <span class="hljs-attr">cloud_sql_instances:</span> <span class="hljs-string">'CLOUD_SQL_CONNECTION_NAME'</span>
</code></pre>
<p>and the <code>.gcloudignore</code></p>
<pre><code class="lang-bash">.gcloudignore
.git
.gitignore
node_modules/
<span class="hljs-comment">#!include:.gitignore</span>
!.env
yarn.lock  <span class="hljs-comment"># If you're using Yarn</span>
</code></pre>
<p>I have a public repository you can use as a reference to compare; that's the one we will use for setting up Cloud Build.</p>
<h2 id="heading-integrate-github-repository-into-cloud-build"><strong>Integrate Github Repository into Cloud Build</strong></h2>
<p>Go to Google Cloud Build <a target="_blank" href="https://console.cloud.google.com/cloud-build/builds">https://console.cloud.google.com/cloud-build/builds</a>, and on the left menu, select <strong><em>"Repositories"</em></strong>, then make sure to be on the <strong><em>"2ND GEN"</em></strong> tab and select the <strong><em>"Create Host Connection"</em></strong> to connect our Github into Cloud Build</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1700861600860/0c292c4b-6eb3-4126-abe3-9146f5c23605.png" alt class="image--center mx-auto" /></p>
<p>On the next screen, make sure to have "Github" selected on the left, then choose a Region, i<strong>t is vital that this region is the same as the App Engine app</strong> (us-central1 for me), and then give your connection a name.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1700861661995/5127f200-cf9f-4bb3-8525-1f3469ccd62c.png" alt class="image--center mx-auto" /></p>
<p>I called mine <em>"Github-KevinBlanco"</em> and clicked <strong>Connect</strong>; then, on the following screen, you can <strong>"Install in a New Account"</strong>, in case you already have a connection in place, you might use it, but <strong>I recommend a connection per repository</strong>. On the following screen, select the account or organization you want to connect the repository, in this case, I will select my personal account</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1700862176937/6167f6ca-1d83-4056-9b81-3d9d060e5566.png" alt class="image--center mx-auto" /></p>
<p>On the next screen, you will select the repository you want to integrate with App Engine, you could select all repositories but from a security standpoint is a good practice to only allow the repository you will use.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1700862253352/80e21e4d-7c74-49fb-9749-79474f1612db.png" alt class="image--center mx-auto" /></p>
<p>After selecting the proper repository, click on "<strong>Connect</strong>", after that, you will see the Connection listed; now, we can click on "<strong>Link Repository</strong>".</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1700862597539/22b9edb3-0f01-4d6c-a62e-f35f55d90ee2.png" alt class="image--center mx-auto" /></p>
<p>On the Link Repository creation form, select the Connection we just created and then select the repository we allowed, it will look like this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1700862754556/db06a22a-9bc7-47f0-8d29-a577ed0ebcc6.png" alt class="image--center mx-auto" /></p>
<p>Now, we are ready to configure our <strong>Triggers</strong> and <strong>Build Scripts</strong>!</p>
<h2 id="heading-configure-a-trigger"><strong>Configure a Trigger</strong></h2>
<p>Go to the Triggers section in the Google Cloud Build <a target="_blank" href="https://console.cloud.google.com/cloud-build/triggers">https://console.cloud.google.com/cloud-build/triggers</a> and create a new Trigger</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1700863011688/787a258a-a0b1-4b19-be88-23a4cef94286.png" alt class="image--center mx-auto" /></p>
<p>Now, let's breakdown the details we need to enter on the different fields on the Trigger creation</p>
<ul>
<li><p><strong>Name</strong>: Define your preferred name</p>
</li>
<li><p><strong>Region</strong>: Define the Region to run this build, select the same region we've created our connection and the App Engine. Do not select Global since you won't be able to use 2nd GEN repos.</p>
</li>
<li><p><strong>Description</strong>: Optional, a description</p>
</li>
<li><p><strong>Tags</strong>: Optional, define tags for this trigger</p>
</li>
<li><p><strong>Event</strong>: Define what event triggers this job, in my case is going to be <strong>"Push to a branch"</strong>, but yours could be different like based on a <em>pull request</em>, <em>manual invocation, webhook event</em>, etc.</p>
</li>
<li><p><strong>Source</strong>: Select the 2nd GEN repository we just created</p>
</li>
<li><p><strong>Branch</strong>: Since we selected <strong>"Push to a Branch"</strong> as the event, we can define which branch will trigger this job, I'll define <code>^master$</code> so that way, when there's a new commit to the <code>master</code> branch it will trigger this job.</p>
</li>
<li><p><strong>Configuration</strong>: There are multiple ways to define what's going to happen in our job, the first one is a <strong>Cloud Build configuration file</strong> (this is going to be our choice), a <strong>Dockerfile</strong> (in case you use App Engine Flexible), and a <strong>Buildpack</strong></p>
</li>
<li><p><strong>Location</strong>: Here, we will define where the configuration file lives if it's in the repository or inline, I will choose Inline.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1700865274173/4a048674-9582-4951-91b2-a2a720965508.png" alt class="image--center mx-auto" /></p>
<p>Now, click on the "Open Editor" button and let's write our build script, here's where we tell Google Cloud Build what to run when the trigger executes.</p>
<pre><code class="lang-yaml"><span class="hljs-attr">steps:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">gcr.io/google.com/cloudsdktool/cloud-sdk</span>
    <span class="hljs-attr">args:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">'-c'</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">&gt;-
        gcloud config set app/cloud_build_timeout 1600 &amp;&amp; gcloud app deploy
        app.yaml --project appsmith-403817
</span>    <span class="hljs-attr">entrypoint:</span> <span class="hljs-string">bash</span>
<span class="hljs-attr">timeout:</span> <span class="hljs-string">1600s</span>
<span class="hljs-attr">options:</span>
  <span class="hljs-attr">logging:</span> <span class="hljs-string">CLOUD_LOGGING_ONLY</span>
</code></pre>
<p>So what's happening in this Cloud Build script is that we are pulling the <code>cloud-sdk</code> image so we can use all the <code>gcloud</code> commands, and then we will execute the <code>gcloud app deploy</code> command that will read our <code>app.yaml</code> file and the build script in the <code>package.json</code> . As you can see, this is really simple.</p>
<p>Last but not least, we have to select the service account, and is <strong>really important</strong> that we choose the service account we configured in Step 1, in our case, the default App Engine service account, so with all put together it should look like this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1700866208338/7ec1bfe6-a266-44be-9aab-3d1dd5444329.gif" alt class="image--center mx-auto" /></p>
<p>Now, save this trigger and make a commit to the branch, or, run the trigger manually. We can then go to the History section and see that the job triggered and is in progress</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1700866393540/4cf41b4a-79f3-4c3a-9bfe-0ca1fe8e8138.png" alt class="image--center mx-auto" /></p>
<p>You can select the build and see the logs, once the job is done, you will notice on the logs that the App Engine deployment happened successfully!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1700866658204/a9dbd5b4-63a8-448c-81a7-e4310492f900.png" alt class="image--center mx-auto" /></p>
<p>You can go to App Engine and see that the new version is live and working correctly!</p>
<h2 id="heading-conclusion"><strong>Conclusion</strong></h2>
<p>We have come a long way but now we have a production-ready, secure application that is actually running and working correctly. Let me know in the comments in case you have questions.</p>
]]></content:encoded></item><item><title><![CDATA[Strapi CMS on Google Cloud Platform: The Definitive Guide - Part 2]]></title><description><![CDATA[Hello everyone! Welcome to part 2 of 'The Definitive Guide' on running Strapi, the headless open-source content management system, on Google Cloud Platform. I'm a Google Developer Expert in Google Cloud Platform. Be sure to check out Part 1 where we ...]]></description><link>https://blog.kevinblanco.dev/strapi-cms-on-google-cloud-platform-the-definitive-guide-part-2</link><guid isPermaLink="true">https://blog.kevinblanco.dev/strapi-cms-on-google-cloud-platform-the-definitive-guide-part-2</guid><category><![CDATA[Strapi]]></category><category><![CDATA[headless cms]]></category><category><![CDATA[APIs]]></category><category><![CDATA[GraphQL]]></category><category><![CDATA[GCP]]></category><category><![CDATA[google cloud]]></category><category><![CDATA[Google]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[js]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Wed, 21 Feb 2024 15:00:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1711127496205/13660b85-e28a-42cc-be55-7b8ded57fea6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello everyone! Welcome to part 2 of 'The Definitive Guide' on running Strapi, the headless open-source content management system, on Google Cloud Platform. I'm a Google Developer Expert in Google Cloud Platform. Be sure to <a target="_blank" href="https://kevinblanco.dev/strapi-cms-on-google-cloud-platform-the-definitive-guide-part-1">check out Part 1</a> where we set up our Google Cloud environment. Now, in Part 2, we're going to dive into configuring the Strapi application itself for Google Cloud. We'll cover everything from setting up the Strapi application to securing it, connecting it to Google Cloud SQL, and managing media files with Google Cloud Storage. In case you missed it, here's the diagram of what we are building:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1698868379498/4cec2407-aa24-4f89-9b28-c688cac58a67.png" alt class="image--center mx-auto" /></p>
<p><strong>So let's get started!</strong></p>
<p>TL;DR Watch the video:</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/1Wb3EOFPwBU">https://youtu.be/1Wb3EOFPwBU</a></div>
<p> </p>
<h2 id="heading-prerequisites"><strong>Prerequisites</strong></h2>
<ul>
<li><p><a target="_blank" href="https://nodejs.org/en">Node.js v.18+</a> installed locally.</p>
</li>
<li><p>Have <a target="_blank" href="https://kevinblanco.dev/strapi-cms-on-google-cloud-platform-the-definitive-guide-part-1">Part 1</a> completed to deploy Strapi.</p>
</li>
<li><p>The <a target="_blank" href="https://cloud.google.com/sdk/gcloud">gcloud command line interface</a> installed on your machine</p>
</li>
</ul>
<h3 id="heading-creating-a-local-strapi-project"><strong>Creating a local Strapi project</strong></h3>
<p>Creating a Strapi project is simple, using your preferred terminal, in my case I use iTerm, go to the folder you want the Strapi project to be initialized, and there, you will run</p>
<pre><code class="lang-plaintext">npx create-strapi-app@latest appsmith
</code></pre>
<p>This command uses npx, which is a way to install Node.js dependencies and execute npm package binaries. This takes care of setting up our project which we named <code>appsmith</code> . After it installs all the dependencies, it will ask us what type of project we want to create.</p>
<pre><code class="lang-plaintext">npx: installed 101 in 10.48s
? Choose your installation type
❯ Quickstart (recommended)
  Custom (manual settings)
</code></pre>
<p>We will choose the <code>Quickstart</code> option which is best for most of the projects. Once this is done, our Strapi CMS app will be ready and we will see on the terminal that the server is running on  <a target="_blank" href="http://localhost:1337/admin"><code>http://localhost:1337/admin</code></a>, open it on your browser and you should see something like this:</p>
<p><img src="https://community.appsmith.com/sites/default/files/styles/wide/public/2023-10/Screenshot%202023-10-25%20at%208.04.44%20PM.png?itok=Sm1t8v3w" alt="strapi1" /></p>
<p>Here you will enter the details for the first and super admin user. After you enter your information, you will land on the Strapi dashboard, which is very straightforward.</p>
<p><img src="https://community.appsmith.com/sites/default/files/styles/wide/public/2023-10/Screenshot%202023-10-25%20at%208.11.03%20PM.png?itok=B6wmQEwi" alt="Strapi 2" /></p>
<ol>
<li><p><strong>Content Manager:</strong> Here you will see all the content on your CMS, divided by content type with filtering, search, sorting, etc.</p>
</li>
<li><p><strong>Content-Type Builder:</strong> Here you visually create your different data models, fields, relationships, and behavior. Most of the application building is done here and Strapi translates everything to code, which you can also edit or write code if you desire to define models, controllers, policies, etc.</p>
</li>
<li><p><strong>Media Library</strong>: Here you can see all media uploaded to the CMS, and group media in folders and categories very easily.</p>
</li>
<li><p><strong>Plugins</strong>: Here you will see the currently installed plugins on Strapi.</p>
</li>
<li><p><strong>Marketplace</strong>: Here you will see all the available plugins to install in your Strapi project.</p>
</li>
<li><p><strong>Settings</strong>: Here are all the project settings like Roles, Permissions, Users, Internationalization**,** Emails, API Tokens, Providers, Webhooks and much more.</p>
</li>
</ol>
<p>Now we are ready to start creating all the content types for our application or deploy it to Google Cloud, before that let's review some important Strapi commands to take into consideration:</p>
<pre><code class="lang-plaintext">  npm run build
  Build Strapi admin panel.

  npm run develop
  Start Strapi in watch mode. 

  npm run start
  Start Strapi without watch mode.
</code></pre>
<p>So <code>npm run build</code> is a command to build Stapi, this one is important to run before running the <code>develop</code> one so all the configuration and changes are applied, for example, if you install new plugins or change the configuration files, make sure to run the <code>build</code> command.</p>
<h2 id="heading-install-required-strapi-packages"><strong>Install required Strapi packages</strong></h2>
<p>Now that we have a working Strapi project, to run it in GCP we need to install 2 packages, one for the PostgreSQL connection, and one for the Cloud Storage provider. Locally and by default, Strapi comes with a basic SQLite database and stores the files in the same folder, so to run it on App Engine (serverless) we need to detach this.</p>
<h3 id="heading-database-connection-configuration">Database Connection Configuration</h3>
<p>Install the PostgreSQL package by running <code>sudo npm install pg --save</code> and now, create a folder under the <code>config</code> folder named <code>env</code> and inside of it created another folder named <code>production</code> here, we will put the configuration of our production environment like database connection, plugins config, etc. If you want to name your environment something different like <code>stage</code> or <code>test</code> that's ok, just created a folder with that name.</p>
<p>Now inside that folder create a file called <code>database.js</code> (<code>config/env/production/database.js</code>) and put the following content:</p>
<pre><code class="lang-javascript"><span class="hljs-built_in">module</span>.exports = <span class="hljs-function">(<span class="hljs-params">{ env }</span>) =&gt;</span> ({
    <span class="hljs-attr">connection</span>: {
      <span class="hljs-attr">client</span>: <span class="hljs-string">"postgres"</span>,
      <span class="hljs-attr">connection</span>: {
        <span class="hljs-attr">host</span>: <span class="hljs-string">`/cloudsql/<span class="hljs-subst">${env(<span class="hljs-string">"INSTANCE_CONNECTION_NAME"</span>)}</span>`</span>,
        <span class="hljs-attr">database</span>: env(<span class="hljs-string">"DATABASE_NAME"</span>),
        <span class="hljs-attr">user</span>: env(<span class="hljs-string">"DATABASE_USER"</span>),
        <span class="hljs-attr">password</span>: env(<span class="hljs-string">"DATABASE_PASSWORD"</span>),
      },
    },
 });
</code></pre>
<p>This will have our connection string using environment variables, we will configure these environment variables in the next steps.</p>
<h3 id="heading-cloud-storage-connection-configuration">Cloud Storage Connection Configuration</h3>
<p>Install the Strapi Cloud Storage provider package by running <code>sudo npm install @strapi-community/strapi-provider-upload-google-cloud-storage --save</code> and create a file in the same environment folder we created in the previous step called <code>plugins.js</code> (<code>config/env/production/plugins.js</code>) (read more about <a target="_blank" href="https://github.com/strapi-community/strapi-provider-upload-google-cloud-storage">this package here</a>)</p>
<pre><code class="lang-javascript"><span class="hljs-built_in">module</span>.exports = <span class="hljs-function">(<span class="hljs-params">{ env }</span>) =&gt;</span> ({
    <span class="hljs-attr">upload</span>: {
      <span class="hljs-attr">config</span>: {
        <span class="hljs-attr">provider</span>: <span class="hljs-string">'@strapi-community/strapi-provider-upload-google-cloud-storage'</span>,
        <span class="hljs-attr">providerOptions</span>: {
          <span class="hljs-attr">bucketName</span>: env(<span class="hljs-string">'GCS_BUCKET_NAME'</span>),
          <span class="hljs-attr">basePath</span>: env(<span class="hljs-string">'GCS_BASE_PATH'</span>),
          <span class="hljs-attr">publicFiles</span>: <span class="hljs-literal">true</span>,
          <span class="hljs-attr">uniform</span>: <span class="hljs-literal">false</span>,
        },
      },
    },
});
</code></pre>
<p>Important note here: If your Cloud Bucket is set to use uniform <strong>Object Access Control, then change</strong><code>uniform: true</code>. Also, if you do not have the files publicly accessible, then setup <code>publicFiles: false</code>.</p>
<p>Lastly. we have to set up the <code>strapi::security</code> middleware to avoid CSP-blocked URLs. Edit <code>./config/middlewares.js</code> and make sure to edit the <code>strapi::security</code> line with an object that looks like this:</p>
<pre><code class="lang-bash">module.exports = [
  <span class="hljs-string">'strapi::errors'</span>,
  {
    name: <span class="hljs-string">'strapi::security'</span>,
    config: {
      contentSecurityPolicy: {
        useDefaults: <span class="hljs-literal">true</span>,
        directives: {
          <span class="hljs-string">'connect-src'</span>: [<span class="hljs-string">"'self'"</span>, <span class="hljs-string">'https:'</span>],
          <span class="hljs-string">'img-src'</span>: [<span class="hljs-string">"'self'"</span>, <span class="hljs-string">'data:'</span>, <span class="hljs-string">'blob:'</span>, <span class="hljs-string">'storage.googleapis.com'</span>],
          <span class="hljs-string">'media-src'</span>: [<span class="hljs-string">"'self'"</span>, <span class="hljs-string">'data:'</span>, <span class="hljs-string">'blob:'</span>, <span class="hljs-string">'storage.googleapis.com'</span>],
          upgradeInsecureRequests: null,
        },
      },
    },
  },
  <span class="hljs-string">'strapi::cors'</span>,
  <span class="hljs-string">'strapi::poweredBy'</span>,
  <span class="hljs-string">'strapi::logger'</span>,
  <span class="hljs-string">'strapi::query'</span>,
  <span class="hljs-string">'strapi::body'</span>,
  <span class="hljs-string">'strapi::favicon'</span>,
  <span class="hljs-string">'strapi::public'</span>,
];
</code></pre>
<p>What this does in short words, is allowing Strapi to preview the images that are uploaded to Cloud Storage.</p>
<h2 id="heading-app-engine-configuration"><strong>App Engine Configuration</strong></h2>
<p>Now that our app has the necessary packages and configuration files, let's create the App Engine configuration file which will define how our Strapi CMS will run. Let's create a file called <code>app.yaml</code><strong>in the root of the Strapi project</strong> which is what App Engine reads to run the app.</p>
<p>Before we do that, go to the Cloud SQL instance we created in Part 1 by visiting <a target="_blank" href="https://console.cloud.google.com/sql/instances">https://console.cloud.google.com/sql/instances</a> on the instance dashboard you will see the connection name, you will need this to put on the <code>app.yaml</code>, normally the structure is <code>project_name:region:instance_name</code> in my case <code>appsmith-403817:us-central1:appsmith</code></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1699504252657/23a4df0c-923e-42c4-b045-0f81dd97e1e6.png" alt class="image--center mx-auto" /></p>
<p>Now with that connection name copied, create the <code>app.yaml</code> file and enter your credentials</p>
<pre><code class="lang-javascript">runtime: nodejs18
<span class="hljs-attr">instance_class</span>: F2

<span class="hljs-attr">env_variables</span>:
  HOST: <span class="hljs-string">'0.0.0.0'</span>
  <span class="hljs-attr">NODE_ENV</span>: <span class="hljs-string">'production'</span>
  <span class="hljs-attr">DATABASE_NAME</span>: <span class="hljs-string">'postgres'</span>
  <span class="hljs-attr">DATABASE_USER</span>: <span class="hljs-string">'postgres'</span>
  <span class="hljs-attr">DATABASE_PASSWORD</span>: <span class="hljs-string">'CLOUD_SQL_PASSWORD'</span>
  <span class="hljs-attr">INSTANCE_CONNECTION_NAME</span>: <span class="hljs-string">'CLOUD_SQL_CONNECTION_NAME'</span>
  <span class="hljs-attr">GCS_BUCKET_NAME</span>: <span class="hljs-string">'CLOUD_STORAGE_BUCKET_NAME'</span>
  <span class="hljs-attr">GCS_BASE_PATH</span>: <span class="hljs-string">'cms'</span>

<span class="hljs-attr">beta_settings</span>:
  cloud_sql_instances: <span class="hljs-string">'CLOUD_SQL_CONNECTION_NAME'</span>
</code></pre>
<ul>
<li><p><strong>runtime</strong>: This is the version of the Node.js image we want to use, <code>nodejs18</code> is recommended.</p>
</li>
<li><p><strong>instance_class</strong>: The instance class defines the CPU/Memory configuration of the instance, read more about all the instance classes <a target="_blank" href="https://cloud.google.com/appengine/docs/standard/#instance_classes">here</a> (<strong>F2</strong> is a basic 768MB memory and 1.2 GH CPU). <strong>For production I recommend B8</strong>.</p>
</li>
<li><p><strong>NODE_ENV</strong>: <code>production</code> (if you defined another environment folder in the previous step then use that name instead of production)</p>
</li>
<li><p><strong>DATABASE_NAME</strong>: <code>postgres</code> (this is the default database that CloudSQL creates when you provision a new instance)</p>
</li>
<li><p><strong>DATABASE_USER</strong>: 'postgres' (this is the default user that CloudSQL creates when you provision a new instance)</p>
</li>
<li><p><strong>DATABASE_PASSWORD</strong>: replace <code>CLOUD_SQL_PASSWORD</code> with the password you created in Part 1.</p>
</li>
<li><p><strong>INSTANCE_CONNECTION_NAME</strong>: Replace <code>CLOUD_SQL_CONNECTION_NAME</code> with the connection name you copied from Cloud SQL in the previous step.</p>
</li>
<li><p><strong>GCS_BUCKET_NAME</strong>: Replace <code>CLOUD_STORAGE_BUCKET_NAME</code> with the name of the bucket we created in Part 1.</p>
</li>
<li><p><strong>GCS_BASE_PATH</strong>: This will be the prefix for your bucket URL files, you can define the one you prefer.</p>
</li>
</ul>
<h3 id="heading-google-cloud-build-command">Google Cloud Build Command</h3>
<p>Now that we have the configuration file in place that tells App Engine how to run Strapi, we need to configure the build command that GCP will run when we deploy the app, this is really simple, just locate the <code>package.json</code> file and edit the <code>scripts</code> object and add a new line for <code>"gcp-build": "strapi build"</code>, so it will look something similar to this:</p>
<pre><code class="lang-json"><span class="hljs-string">"scripts"</span>: {
    <span class="hljs-attr">"develop"</span>: <span class="hljs-string">"strapi develop"</span>,
    <span class="hljs-attr">"start"</span>: <span class="hljs-string">"strapi start"</span>,
    <span class="hljs-attr">"build"</span>: <span class="hljs-string">"strapi build"</span>,
    <span class="hljs-attr">"strapi"</span>: <span class="hljs-string">"strapi"</span>,
    <span class="hljs-attr">"gcp-build"</span>: <span class="hljs-string">"strapi build"</span>
},
</code></pre>
<p>Last, let's <strong>add a new file</strong> in the root of the project called <code>.gcloudignore</code> which tells Google what files or folders to ignore when deploying, similar to the <code>.gitignore</code>, to avoid pushing the <code>node_modules</code> folder and other non-necessary files.</p>
<pre><code class="lang-bash">.gcloudignore
.git
.gitignore
node_modules/
<span class="hljs-comment">#!include:.gitignore</span>
!.env
yarn.lock  <span class="hljs-comment"># If you're using Yarn</span>
</code></pre>
<h2 id="heading-deploy-to-app-engine"><strong>Deploy to App Engine!</strong></h2>
<p><strong>After all of this hard work</strong>, we are now ready to deploy our application to Google Cloud's App Engine! The way we do this is simple, in the root of the application folder, using your terminal with the <code>gcloud</code> run:</p>
<pre><code class="lang-bash"> gcloud app deploy app.yaml --project PROJECT_NAME
</code></pre>
<p>Replace <code>PROJECT_NAME</code> with your project's name, in my case, is <code>appsmith-403817</code> , you will see something like this:</p>
<pre><code class="lang-bash">descriptor:                  [/Users/kevin/PROJECTS/strapi-googlecloud/app.yaml]
<span class="hljs-built_in">source</span>:                      [/Users/kevin/PROJECTS/strapi-googlecloud]
target project:              [appsmith-403817]
target service:              [default]
target version:              [20231109t220246]
target url:                  [https://appsmith-403817.uc.r.appspot.com]
target service account:      [App Engine default service account]


Do you want to <span class="hljs-built_in">continue</span> (Y/n)?  y

Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 34 files to Google Cloud Storage               ═╣
╚════════════════════════════════════════════════════════════╝
File upload <span class="hljs-keyword">done</span>.
Updating service [default]...<span class="hljs-keyword">done</span>.
Setting traffic split <span class="hljs-keyword">for</span> service [default]...<span class="hljs-keyword">done</span>.
Deployed service [default] to [https://appsmith-403817.uc.r.appspot.com]

You can stream logs from the <span class="hljs-built_in">command</span> line by running:
  $ gcloud app logs tail -s default

To view your application <span class="hljs-keyword">in</span> the web browser run:
  $ gcloud app browse --project=appsmith-403817
</code></pre>
<h2 id="heading-congrats"><strong>CONGRATS!</strong></h2>
<p>Now you are ready to visit the Strapi instance by going to the URL mentioned on the console, in my case is <a target="_blank" href="https://kevinblanco-appsmith.uc.r.appspot.com/admin">https://appsmith-403817.uc.r.appspot.com/admin/</a>.</p>
<p>You can review my codebase as a reference, it's publicly available here: <a target="_blank" href="https://github.com/kevinblanco/strapi-googlecloud">https://github.com/kevinblanco/strapi-googlecloud</a></p>
<p>You are now ready for <a target="_blank" href="https://kevinblanco.dev/strapi-cms-on-google-cloud-platform-the-definitive-guide-part-3"><strong>Part 3</strong></a><strong>,</strong> where we are going to setup automated deployment builds using <strong>Google Cloud Build</strong>!</p>
]]></content:encoded></item><item><title><![CDATA[Strapi CMS on Google Cloud Platform: The Definitive Guide - Part 1]]></title><description><![CDATA[Hello everyone! Welcome to 'The Definitive Guide' on running Strapi, the headless open-source content management system, on Google Cloud Platform. I'm a Google Developer Expert in Google Cloud Platform. Today, I'm going to guide you through the entir...]]></description><link>https://blog.kevinblanco.dev/strapi-cms-on-google-cloud-platform-the-definitive-guide-part-1</link><guid isPermaLink="true">https://blog.kevinblanco.dev/strapi-cms-on-google-cloud-platform-the-definitive-guide-part-1</guid><category><![CDATA[Strapi]]></category><category><![CDATA[google cloud]]></category><category><![CDATA[APIs]]></category><category><![CDATA[SQL]]></category><category><![CDATA[PostgreSQL]]></category><category><![CDATA[GCP]]></category><category><![CDATA[architecture]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Wed, 21 Feb 2024 14:57:53 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1711127378608/b18ff8b9-e9f7-4be7-abc1-e49c28522745.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello everyone! Welcome to 'The Definitive Guide' on running Strapi, the headless open-source content management system, on Google Cloud Platform. I'm a Google Developer Expert in Google Cloud Platform. Today, I'm going to guide you through the entire process of deploying Strapi on GCP using <strong>Google App Engine</strong>, <strong>Google Cloud SQL</strong>, <strong>Google Cloud Storage</strong> with continuous integration/delivery using <strong>Google Cloud Build</strong>, from zero to production.</p>
<p>TL;DR Watch the following video:</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/NkDaHDRsAwg">https://youtu.be/NkDaHDRsAwg</a></div>
<p> </p>
<p>If you, like me, have struggled with incomplete documentation on achieving this, don't worry. This series aims to provide you with a comprehensive step-by-step guide, sharing insights and best practices based on my real-world experience as a Certified Google Cloud Architect and Google Developer Expert running more than <strong>five</strong> production Strapi workloads in GCP for big customers. First, let's review a diagram of what we are going to be building:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1698868379498/4cec2407-aa24-4f89-9b28-c688cac58a67.png" alt class="image--center mx-auto" /></p>
<h4 id="heading-cloud-app-engine"><strong>Cloud App Engine</strong></h4>
<p>Zero server management service that will run our Strapi Headless CMS. We will use the Node runtime from App Engine Standard.</p>
<h4 id="heading-cloud-sql"><strong>Cloud SQL</strong></h4>
<p>We will leverage this serverless database service running PostgreSQL to effortlessly scale to meet any demand, with no maintenance for accelerated development with built-in live synchronization, offline mode, daily backups, multiple zones availability and Point-in-time recovery from Slave.</p>
<h4 id="heading-cloud-storage"><strong>Cloud Storage</strong></h4>
<p>All assets uploaded to the CMS such as files, images and videos will be saved in Cloud Storage for reliable and secure object storage. Also, these files might be securely served in any “frontend” layer using AIM policies and ACL for object storage.</p>
<h4 id="heading-cloud-stackdriver-monitor-and-error-trace"><strong>Cloud Stackdriver, Monitor and Error Trace</strong></h4>
<p>To follow the standard SRE principles and control the four golden signals of monitoring (latency, traffic, errors, and saturation) we will use Strackdriver to pull information from all of these services and drive these to Cloud Monitoring where we will have dashboards for each of these values, alerts to let key technical members know of any anomaly, Cloud Logging to track and view all logs generated by these services and finally Cloud Trace to trace errors across the different application layers and services.</p>
<h4 id="heading-cloud-build"><strong>Cloud Build</strong></h4>
<p>We'll use Cloud Build for delivery pipelines, continuous integration and automated code checks.</p>
<h2 id="heading-prerequisites"><strong>Prerequisites</strong></h2>
<ul>
<li><p>A <a target="_blank" href="https://console.cloud.google.com/">Google Cloud Platform</a> Account with billing enabled or a free trial $300 credit.</p>
</li>
<li><p>The <a target="_blank" href="https://cloud.google.com/sdk/gcloud">gcloud command line interface</a> installed on your machine</p>
</li>
</ul>
<p>This first part is all about <strong>setting up for success</strong>, we'll go over enabling and creating the necessary APIs, Permissions, Services and Products needed for this to run as it should.</p>
<h2 id="heading-apis-amp-permissions"><strong>APIs &amp; Permissions</strong></h2>
<p>To run Strapi in GCP, a set of APIs has to be enabled so that the different services can connect to each other:</p>
<ul>
<li><p><a target="_blank" href="https://console.cloud.google.com/marketplace/product/google/secretmanager.googleapis.com">Secret Manager API</a></p>
</li>
<li><p><a target="_blank" href="https://console.cloud.google.com/marketplace/product/google/cloudbuild.googleapis.com?q=search">Cloud Build API</a></p>
</li>
<li><p><a target="_blank" href="https://console.cloud.google.com/marketplace/product/google/sqladmin.googleapis.com">Cloud SQL Admin API</a></p>
</li>
<li><p><a target="_blank" href="https://console.cloud.google.com/marketplace/product/google/compute.googleapis.com">Compute Engine API</a></p>
</li>
<li><p><a target="_blank" href="http://logging.googleapis.com/">Cloud Logging API</a></p>
</li>
<li><p><a target="_blank" href="https://console.cloud.google.com/marketplace/product/google/appengine.googleapis.com">App Engine API</a></p>
</li>
<li><p><a target="_blank" href="https://console.cloud.google.com/apis/api/iam.googleapis.com/overview">Identity and Access Management (IAM) API</a></p>
</li>
<li><p><a target="_blank" href="https://console.cloud.google.com/apis/api/appengine.googleapis.com/metrics">App Engine Admin API</a></p>
</li>
</ul>
<p>Now, if you don't want to go one by one enabling them on the browser, you can enable them using the gcloud CLI or the Cloud Shell in GCP running each of these commands separately or in a single command separated by commas.</p>
<pre><code class="lang-bash">gcloud services <span class="hljs-built_in">enable</span> secretmanager.googleapis.com
gcloud services <span class="hljs-built_in">enable</span> cloudbuild.googleapis.com
gcloud services <span class="hljs-built_in">enable</span> sqladmin.googleapis.com
gcloud services <span class="hljs-built_in">enable</span> compute.googleapis.com
gcloud services <span class="hljs-built_in">enable</span> logging.googleapis.com
gcloud services <span class="hljs-built_in">enable</span> appengine.googleapis.com
gcloud services <span class="hljs-built_in">enable</span> iam.googleapis.com
gcloud services <span class="hljs-built_in">enable</span> appengine.googleapis.com
</code></pre>
<p>Now, let's initiate our App Engine service so we can configure its service account permissions. App Engine is the serverless service we will use to deploy Strapi to the Cloud</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">A service account is a special kind of account typically used by an application or compute workload, rather than a person. A service account is identified by its email address, which is unique to the account. Applications use service accounts to make authorized API calls. When an application authenticates as a service account, it has access to all resources that the service account has permission to access.</div>
</div>

<p>You can do this manually by searching for "App Engine" in the search box at the top and initiating the app in the region of your choice, but remember, this <strong>regionis key</strong> since most of the services we'll use should be in the same region, also, select the default App Engine service account.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1698876967579/6d72482a-493e-4522-b74f-7d6b4bf503a4.png" alt class="image--center mx-auto" /></p>
<p>You can also easily do this with <code>gcloud</code> by running the following command (you can again, pass the region of your choice as a parameter, for this demo we'll use <code>us-central</code>):</p>
<pre><code class="lang-bash">gcloud app create --region=us-central
</code></pre>
<p>Now that App Engine is initiated, we can give its service account the permissions it needs to connect to the APIs and Services that Strapi will need to connect. go to <a target="_blank" href="https://console.cloud.google.com/iam-admin/iam">AIM - Under service accounts</a> and find the service account for <strong>App Engine</strong>, normally the name is <code>app-name@appspot.gserviceaccount.com</code> for example, in my case is <code>appsmith-403817@appspot.gserviceaccount.com</code>, you can also find the right service account by running</p>
<pre><code class="lang-bash">gcloud app describe
</code></pre>
<p>This will tell you the service account associated with your app. Now, edit this service account and add the following permissions</p>
<ul>
<li><p>Cloud SQL Client</p>
</li>
<li><p>Cloud SQL Editor</p>
</li>
<li><p>Storage Object Admin</p>
</li>
<li><p>App Engine Deployer</p>
</li>
<li><p>Logging Admin</p>
</li>
</ul>
<p>You can also do this easily with the <code>gcloud</code> CLI using the <code>gcloud projects add-iam-policy-binding</code> command. Here's the structure of the command:</p>
<pre><code class="lang-bash">gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member=serviceAccount:SERVICE_ACCOUNT \
  --role=ROLE
</code></pre>
<p>So to allow these permissions we would run:</p>
<pre><code class="lang-bash">gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member=serviceAccount:appsmith-403817@appspot.gserviceaccount.com \
  --role=roles/cloudsql.client

gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member=serviceAccount:appsmith-403817@appspot.gserviceaccount.com \
  --role=roles/cloudsql.editor

gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member=serviceAccount:appsmith-403817@appspot.gserviceaccount.com
  --role=roles/storage.objectAdmin

gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member=serviceAccount:appsmith-403817@appspot.gserviceaccount.com \
  --role=roles/appengine.deployer

gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member=serviceAccount:appsmith-403817@appspot.gserviceaccount.com \
  --role=roles/logging.admin
</code></pre>
<p>Replace <code>YOUR_PROJECT_ID</code> with your actual Google Cloud project ID. These commands will add the specified roles to the <a target="_blank" href="mailto:appsmith-403817@appspot.gserviceaccount.com"><code>appsmith-403817@appspot.gserviceaccount.com</code></a> service account in the project. Now, we are ready to create the database.</p>
<h2 id="heading-create-a-database"><strong>Create a Database</strong></h2>
<p>To run Strapi you will need a database to store the data, Strapi supports multiple databases and in my experience, the best in the context of GCP is to use <strong>Cloud SQL</strong>.</p>
<p>Go to Cloud SQL (<a target="_blank" href="https://console.cloud.google.com/sql/instances">https://console.cloud.google.com/sql/instances</a>) and <strong><em>Create a New Instance</em></strong>, then select <strong><em>"PosteSQL"</em></strong> and on the next screen, you will define the instance characteristics</p>
<ul>
<li><p><strong>Instance Name</strong>: The name of your choice, lowercase no spaces or special characters, in my case the name will be <code>strapi</code></p>
</li>
<li><p><strong>Password</strong>: Define the default admin user "postgres" password. I recommend using the generator to create a strong password <strong>and store it since you will need it</strong>.</p>
</li>
<li><p><strong>Database Version</strong>: PostgreSQL 15 (<em>14 tested to work fine as well</em>)</p>
</li>
<li><p><strong>Cloud SQL Edition</strong>: Here it depends on your system availability requirements, for production I recommend <strong><em>Enterprise Plus</em></strong>, but for development <strong><em>Enterprise</em></strong> is fine</p>
</li>
<li><p><strong>Preset</strong>: Again, if it's production choose "<em>Production</em>", if it's development "<em>Development</em>" or "<em>Sandbox</em>" will work. I will choose Sandbox to avoid high costs.</p>
</li>
<li><p><strong>Region</strong>: Select the same region as the one you choose for the App Engine app, in my case <strong><em>us-central1</em></strong>.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1699485565931/d6e26cff-b054-476b-bfb5-a2e01059657c.png" alt class="image--center mx-auto" /></p>
<p>You can also do this using the <code>gcloud</code> CLI:</p>
<pre><code class="lang-bash">gcloud sql instances create INSTANCE_NAME \
  --database-version=POSTGRESQL_15 \
  --tier=db-custom-2-8192 \
  --region=us-central1 \
  --availability-type=zonal \
  --storage-type=SSD \
  --storage-size=10GB \
  --network-throughput=500MB \
  --maintenance-window-day=1 \
  --maintenance-window-hour=2 \
  --backup-start-time=02:00 \
  --activation-policy=ALWAYS \
  --location-preference=us-central1 \
  --failover-replica-name=INSTANCE_NAME-replica \
  --root-password=YOUR_PASSWORD
</code></pre>
<p>Replace the following placeholders:</p>
<ul>
<li><p><code>INSTANCE_NAME</code>: Provide a name for your Cloud SQL instance.</p>
</li>
<li><p><code>YOUR_PASSWORD</code>: Replace this with the desired password for the root user.</p>
</li>
</ul>
<p>Last, now that we have a database, we need to give the service account permissions to access that Database, since Strapi will use the App Engine service account to read/write to the DB. You can easily do this by running:</p>
<pre><code class="lang-bash">gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:SERVICE_ACCOUNT \
    --role=roles/cloudsql.editor
</code></pre>
<p>In my case it's</p>
<pre><code class="lang-bash">gcloud projects add-iam-policy-binding appsmith-403817 \
    --member=serviceAccount:appsmith-403817@appspot.gserviceaccount.com \
    --role=roles/cloudsql.editor
</code></pre>
<h2 id="heading-create-a-cloud-storage-bucket"><strong>Create a Cloud Storage Bucket</strong></h2>
<p>For Strapi CMS to store and retrieve assets such as images, videos and files we need to set up a Cloud Storage bucket, so go to <a target="_blank" href="https://console.cloud.google.com/storage/browser">https://console.cloud.google.com/storage</a> and click "<strong><em>Create</em></strong>" to add a new bucket.</p>
<ul>
<li><p><strong>Name</strong>: The name of your choice, lowercase no spaces or special characters, in my case the name will be <code>strapi-cms-gcp</code></p>
</li>
<li><p><strong>Location Type</strong>: For Production projects, I recommend <strong><em>Multi-region</em></strong> or <strong><em>Dual-region</em></strong> at least, for Development, a single region is fine, I'm selecting the same <strong><em>us-central1</em></strong> as the Database and App Engine.</p>
</li>
<li><p><strong>Storage Class</strong>: Select <strong><em>Standard</em></strong>, which is best for short-term storage and frequently accessed data.</p>
</li>
<li><p><strong>Object Access Control</strong>: Here you define how the objects's access rules will be defined. <strong><em>Uniform</em></strong>: Ensure uniform access to all objects in the bucket by using only bucket-level permissions (IAM) or <strong><em>Fine-grained</em></strong>: Specify access to individual objects by using object-level permissions (ACLs) in addition to your bucket-level permissions (IAM). Strapi supports both, I will select <strong><em>Uniform</em></strong>.</p>
</li>
<li><p><strong>Object Protection Policy</strong>: Here you can control how object deletion works, you can define object versioning or a retention policy by minutes, hours, days, etc. For the sake of a development environment, I will select "<strong><em>None</em></strong>" but for <strong><em>Production</em></strong>, I recommend a Retention Policy to comply with data practices.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1699489386786/9e6bcd46-1966-42e7-8579-831de4ce49a7.gif" alt class="image--center mx-auto" /></p>
<p>You can also do this easily by using the <code>gsutil</code> CLI which is part of <code>gcloud</code> running the following 2 commands</p>
<pre><code class="lang-bash">gsutil mb -p PROJECT_ID -l us-central1 gs://strapi-cms-gcp
gsutil uniformbucketlevelaccess <span class="hljs-built_in">set</span> on gs://strapi-cms-gcp
</code></pre>
<p>Replace <code>PROJECT_ID</code> with your project ID and <code>strapi-cms-gcp</code> with your desired bucket name.</p>
<p><strong>OPTIONAL</strong>: If your case is to use Strapi as a CMS to be accessible from the internet you will want the assets to have a public URL from the bucket, to do this you can run:</p>
<p>To grant public read access to a Google Cloud Storage bucket and its files for <code>allUsers</code>, you can use the <code>gsutil</code> tool with the <code>acl ch</code> command. Here's how to do it:</p>
<pre><code class="lang-bash">gsutil acl ch -u AllUsers:R gs://strapi-cms-gcp
</code></pre>
<p>This command grants read (R) permission to <code>allUsers</code>, which effectively makes the files in the bucket publicly accessible. Users can access and download objects in the bucket without authentication.</p>
<p><strong>Last but not least</strong>, you want to give the <strong>App Engine service account</strong> permissions to write/read this bucket, because Strapi will use the service account credentials to write and read the files on the bucket, to do that, you can go to the bucket's permissions tab by adding a New Principal and give the "Object Storage Creator" and "Object Storage Viewer"</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1699490285376/83928d5f-646c-46c1-8f2e-b4514e9f0187.gif" alt class="image--center mx-auto" /></p>
<p>You can also do that by using the CLI by running:</p>
<pre><code class="lang-bash">gcloud storage buckets add-iam-policy-binding gs://YOUR_BUCKET \
    --member=serviceAccount:YOUR_SERVICE_ACCOUNT \
    --role=roles/storage.objectAdmin

gcloud storage buckets add-iam-policy-binding gs://YOUR_BUCKET \
    --member=serviceAccount:YOUR_SERVICE_ACCOUNT \
    --role=roles/storage.objectCreator
</code></pre>
<p>In my case, it will be</p>
<pre><code class="lang-bash">gcloud storage buckets add-iam-policy-binding gs://strapi-cms-gcp \
    --member=serviceAccount:appsmith-403817@appspot.gserviceaccount.com \
    --role=roles/storage.objectAdmin

gcloud storage buckets add-iam-policy-binding gs://strapi-cms-gcp \
    --member=serviceAccount:appsmith-403817@appspot.gserviceaccount.com \
    --role=roles/storage.objectCreator
</code></pre>
<p>With this, <strong>we are done with Part 1</strong>! We have our Database, Storage, App Engine Instance and all permissions needed, <a target="_blank" href="https://kevinblanco.dev/strapi-cms-on-google-cloud-platform-the-definitive-guide-part-2"><strong>you are now ready to head to Part 2</strong></a>, where we build the Strapi CMS and then deploy it to the stack we just created!</p>
<p>Let me know if you have any questions or issues with any of the steps, keep it up!</p>
]]></content:encoded></item><item><title><![CDATA[Secrets to Writing a CFP that Gets You on Stage]]></title><description><![CDATA[Imagine it: your name in flashing lights above a bustling conference hall, a captivated audience hanging on your every word. That's the dream, right? But a crucial hurdle between you and that coveted keynote slot lies the Call for Papers (CFP). So, h...]]></description><link>https://blog.kevinblanco.dev/secrets-to-writing-a-cfp-that-gets-you-on-stage</link><guid isPermaLink="true">https://blog.kevinblanco.dev/secrets-to-writing-a-cfp-that-gets-you-on-stage</guid><category><![CDATA[DevRel]]></category><category><![CDATA[speaking ]]></category><category><![CDATA[Speakers]]></category><category><![CDATA[events]]></category><category><![CDATA[advocate]]></category><dc:creator><![CDATA[Kevin Blanco]]></dc:creator><pubDate>Thu, 25 Jan 2024 17:00:16 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1704595099336/cd126fe5-3c8d-4fb6-b36f-9a25c96bc4f2.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Imagine it</strong>: your name in flashing lights above a bustling conference hall, a captivated audience hanging on your every word. That's the dream, right? But a crucial hurdle between you and that coveted keynote slot lies the <strong>Call for Papers (CFP)</strong>. So, how do you turn your brilliant idea into a proposal that screams, <em>"Pick me!"</em>?</p>
<p>Fear not, fellow devrels, for I, Kevin Blanco, Google Developer Expert, and seasoned speaker-on-the-go, am here to share my hard-won secrets.</p>
<h3 id="heading-nail-the-why-they-care-factor"><strong>Nail the "Why They Care" Factor:</strong></h3>
<p>Forget flashy titles and self-promotional fluff. Your proposal's heart lies in addressing a concrete <strong>problem your audience faces.</strong> What keeps them up at night? What roadblocks are hindering their progress? Frame your talk as a beacon of hope, a guide to solving those very challenges. Remember, you're not just delivering content, you're delivering <strong>actionable takeaways.</strong></p>
<h3 id="heading-think-fresh-think-unique">Think Fresh, Think Unique:</h3>
<p>Sure, everyone wants to talk about the latest tech buzzword (for example, AI). But how can you make your topic <strong>stand out from the crowd?</strong> Dig deeper, find a unique angle, and explore a niche within the niche. Offer a fresh perspective, a contrarian view, or even a touch of humor (but avoid cringe-worthy puns!). Remember, originality is key.</p>
<h3 id="heading-be-prepared-be-precise">Be Prepared, Be Precise:</h3>
<p>Don't wait until the deadline to scramble for information. Download the CFP questions beforehand, gather your data, and craft a <strong>compelling narrative.</strong> Choose your target audience wisely, and be specific about the learning level – are you catering to newbies or seasoned veterans? Clarity is crucial.</p>
<p><strong>Craft a Title that Hooks, an Abstract that Seals the Deal:</strong></p>
<p>Your title is your first impression, so make it count. Aim for <strong>succinct and descriptive,</strong> avoiding cheesy jargon and cryptic acronyms. Think "curiosity-piquing" rather than "snooze-fest." As for the abstract, use keywords strategically, highlight customer success stories, and throw in a <strong>jaw-dropping stat</strong> (with attribution, of course). Remember, you normally have around 150 words to paint a picture of brilliance, <strong>so make them count.</strong></p>
<h2 id="heading-session-titles-from-good-to-great-examples">Session titles: From good to great examples</h2>
<p><strong>Before</strong>: SaaS solutions solving customer support's toughest challenges with Appsmith<br /><strong>After</strong>: Solve customer support's toughest challenges with Appsmith</p>
<p><strong>Before</strong>: Lower your costs: Hear from experts about the top 10 cost optimization tricks they apply when using Low-Code.<br /><strong>After:</strong> Top 10 ways to lower your costs using Low-Code</p>
<h3 id="heading-remember-its-all-about-value">Remember – It's All About Value:</h3>
<p>Every detail in your CFP matters. Treat it as a mini-masterpiece, a testament to your expertise and passion. By putting yourself in the audience's shoes, focusing on actionable insights, and showcasing your unique voice, you'll craft a proposal that shines.</p>
<h3 id="heading-elaborate-on-your-experience-and-credentials">Elaborate on Your Experience and Credentials</h3>
<p>Briefly highlight your background, expertise, or past speaking experience in the first paragraph of your proposal. This establishes credibility and shows you are qualified to present on the topic.</p>
<h3 id="heading-get-feedback-before-submitting">Get Feedback Before Submitting</h3>
<p>Ask colleagues, friends, or past conference attendees to review your proposal. Get their perspective on whether your abstract is compelling and makes them want to attend your talk.</p>
<h3 id="heading-share-unique-data-or-case-studies">Share Unique Data or Case Studies</h3>
<p>Include exciting data points, statistics, or customer success stories supporting your core message. This adds credibility and demonstrates real-world relevance.</p>
<h3 id="heading-outline-clear-takeaways">Outline Clear Takeaways</h3>
<p>Specifically, list 2-3 key takeaways or lessons attendees will learn from your presentation. This gives reviewers insight into the tangible value your session will provide.</p>
<h3 id="heading-explain-why-this-topic-matters">Explain Why This Topic Matters</h3>
<p>Briefly note 1-2 reasons why your topic is timely, relevant, or critical for your target audience. This shows reviewers you understand the current landscape and audience needs.</p>
<h3 id="heading-be-specific-about-the-format">Be Specific About the Format</h3>
<p>If proposing a panel, workshop, or interactive format, provide details about how you will structure the session and engage the audience.</p>
<h3 id="heading-review-past-conference-agendas">Review Past Conference Agendas</h3>
<p>Look at previous events' schedules to get ideas for inventive session titles and hot topics. This can help you brainstorm a creative spin for your proposal.</p>
<h3 id="heading-follow-up-after-submitting">Follow Up After Submitting</h3>
<p>Politely check on the status of your submission after the CFP deadline passes. Express your enthusiasm and reiterate your interest in presenting.</p>
<h3 id="heading-lets-review-winning-abstracts-from-google-cloud-next-23">Let's review Winning Abstracts from Google Cloud Next ‘23</h3>
<p><strong>Title: Five (and a half) actions you can take to mitigate software supply chain threats</strong></p>
<p>Abstract: <em>According to Mandiant’s M-Trends 2022 report, 17% of all security breaches in 2021 started with a supply chain attack. In this session, we’ll explore threats that specifically target your software supply chain and offer five (and a half) actions that you can take to mitigate them. You’ll also learn how Commerzbank is using Google Cloud’s Assured Open Source Software (Assured OSS) to reduce their risk from open source dependencies.</em></p>
<p><strong>Title: Tales of clouds compromised – real incidents, real learnings</strong><br />Absctract: <em>The rapid adoption of cloud technology has brought numerous benefits to businesses, but it has also introduced new risks and challenges to information security. In this session, we’ll explore various scenarios that can lead to the compromise of cloud environments and the impact that can have on an organization’s security posture. We’ll discuss both common and less-frequent attack vectors that occur in cloud environments. Finally, we’ll provide practical recommendations and best practices learned from real-world incidents that you can use to help minimize the risks of cloud-related security incidents.</em></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Now, go forth and write proposals that get you noticed! Remember, a little preparation and a lot of passion can turn your CFP into a key that unlocks the door to your conference dreams.</p>
<p><strong>SEE YOU ON THE STAGE!</strong></p>
]]></content:encoded></item></channel></rss>