<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[TheLearningDev]]></title><description><![CDATA[Join 800+ Devs to Go beyond "How-Tos" and learn deep technical concepts]]></description><link>https://newsletter.bhavaniravi.com</link><image><url>https://substackcdn.com/image/fetch/$s_!IfD_!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3083814c-7128-47b8-a91a-4bfd8b973f81_256x256.png</url><title>TheLearningDev</title><link>https://newsletter.bhavaniravi.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 18 May 2026 04:08:35 GMT</lastBuildDate><atom:link href="https://newsletter.bhavaniravi.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Bhavani Ravi]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[bhavaniravi@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[bhavaniravi@substack.com]]></itunes:email><itunes:name><![CDATA[Bhavani Ravi]]></itunes:name></itunes:owner><itunes:author><![CDATA[Bhavani Ravi]]></itunes:author><googleplay:owner><![CDATA[bhavaniravi@substack.com]]></googleplay:owner><googleplay:email><![CDATA[bhavaniravi@substack.com]]></googleplay:email><googleplay:author><![CDATA[Bhavani Ravi]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[OpenAI Open Sourced: What it is means to you?]]></title><description><![CDATA[What makes a model Open Sourced and how to use them?]]></description><link>https://newsletter.bhavaniravi.com/p/openai-released-their-open-source</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/openai-released-their-open-source</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Thu, 07 Aug 2025 01:56:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZmC3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe081e3-7228-471b-a687-88a4755d429d_2560x1440.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>OpenAI released open-source models. People think it&#8217;s a revolution. But this is not the first time such a revolution has occurred. Meta was the first one to do it with their <strong>Llama</strong> models. Deepseek did it right out of the bat. But we are not here today to debate who did it first, but to embrace what&#8217;s happening and how to look at it.</p><p>Soon, you will see videos of people talking about this release. Your brain tags it as a new, distant, complex thing. But it is yet another open-source model making its way to its users.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZmC3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe081e3-7228-471b-a687-88a4755d429d_2560x1440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZmC3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe081e3-7228-471b-a687-88a4755d429d_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!ZmC3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe081e3-7228-471b-a687-88a4755d429d_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!ZmC3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe081e3-7228-471b-a687-88a4755d429d_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!ZmC3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe081e3-7228-471b-a687-88a4755d429d_2560x1440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZmC3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe081e3-7228-471b-a687-88a4755d429d_2560x1440.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dfe081e3-7228-471b-a687-88a4755d429d_2560x1440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:573579,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.bhavaniravi.com/i/170322952?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe081e3-7228-471b-a687-88a4755d429d_2560x1440.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ZmC3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe081e3-7228-471b-a687-88a4755d429d_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!ZmC3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe081e3-7228-471b-a687-88a4755d429d_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!ZmC3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe081e3-7228-471b-a687-88a4755d429d_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!ZmC3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe081e3-7228-471b-a687-88a4755d429d_2560x1440.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>LLM Models and Their Components</h3><p>An LLM model has two parts: <strong>the code and the weights</strong>.</p><p>The code, again, contains two parts: <strong>training and inference.</strong></p><p><strong>Training </strong>involves certain chunking(large sentences to small), tokenizing(splitting sentences to words), vectorization(converting words to numbers so that GPUs can understand them), training phase where the magic of feeding a large neural network(a math equation) with large training data happens, followed by fine-tuning(where LLMs are nudged to perform specific tasks, another layer of training, with task specific dataset eg., Chatgpt = to chat = Q&amp;A). The output of all these <strong>weights</strong></p><p><strong>Inference </strong>is what you see ChatGPT do when you ask it a question. The text you enter goes through exact chunking, tokenization, and vectorization, except the weights from the training data make it hop through specific hoops based on what it &#8220;learned&#8221; previously. Certain nodes of a neural network light up, and some remain dormant, just like our brain. Finally, vectors are generated, converted back to words, and presented to you.</p><p><strong>Weights</strong>&#8212;The neural network, the vectorization, and the transformation layers together make up the <strong>architecture of a model. </strong>But all of this is of no use without the weights.</p><p>A model is truly open source when the weights and data used for training are open-sourced. We can do away with training data because we won&#8217;t have the infrastructure to train on, even with such large volumes of data. But the weights? That you can&#8217;t</p><p>What are these weights, anyway?</p><p>Numbers.</p><p>Yep. That&#8217;s it</p><p>Neural networks are large, glorified linear equations with billions of parameters. When you see 30B on a mode, that means 30B variables in the equation. </p><p>Ax + By + Cz + &#8230;&#8230;.. (30B such complicated, un-understandable chaos that somehow makes sense)</p><h3>How to use OSS models?</h3><p>That&#8217;s for the understanding part, what&#8217;s in it for you? How can you make use of this?</p><p>Well, if you have a GPU, you can run your own ChatGPT without ever fearing that your midnight therapy sessions will be exposed.</p><p>Even if you don&#8217;t, there is a&nbsp;<a href="https://ollama.com/library/gpt-oss">smaller 20B model</a>&nbsp;that I hope will run on a CPU. Unlike GPUs, CPUs struggle to perform math as complicated as this. To top that, the 20GB model comes with about 14GB, and&nbsp;the whole 14GB worth of code + weights has to be loaded into your RAM for you to use it. </p><p>So, if your system has more than 24GB RAM(14GB for the model + room for other apps and the Operating system), use Olama to run gpt-oss on your machine. </p><p>To try larger models without a GPU, you can use a hosting&nbsp;<a href="https://console.groq.com/docs/model/openai/gpt-oss-120b">provider like Groq.</a>&nbsp;They maintain the infrastructure for you, while you can use the models via API calls.</p><p><em>Happy to answer questions in comments</em></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.bhavaniravi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading TheLearningDev! Subscribe for free unscary technical guides!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[The Hate on AI Agentic Libraries]]></title><description><![CDATA[Is it justified? or are we missing a room full of opportunties?]]></description><link>https://newsletter.bhavaniravi.com/p/the-hate-on-ai-agentic-libraries</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/the-hate-on-ai-agentic-libraries</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Fri, 25 Jul 2025 09:56:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!X5jM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70be5722-a417-4a0f-9dae-ba2c8f5cea02_787x423.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>People hating on Agentic AI libraries are so annoying sometimes.</p><p>AI Agents are relatively new, and the whole ecosystem is figuring out how to do things. We are all learning from our experiences, and so are the makers of these libraries.  Look at their versions&#8212;they've barely hit 1.0 yet. How can you expect a newborn baby to run already? An OSS tool will grow along with its users, like any other tool. Most of it is Open Source, which means you can contribute rather than stand on the sidelines and shout at the maintainers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X5jM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70be5722-a417-4a0f-9dae-ba2c8f5cea02_787x423.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X5jM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70be5722-a417-4a0f-9dae-ba2c8f5cea02_787x423.jpeg 424w, https://substackcdn.com/image/fetch/$s_!X5jM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70be5722-a417-4a0f-9dae-ba2c8f5cea02_787x423.jpeg 848w, https://substackcdn.com/image/fetch/$s_!X5jM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70be5722-a417-4a0f-9dae-ba2c8f5cea02_787x423.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!X5jM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70be5722-a417-4a0f-9dae-ba2c8f5cea02_787x423.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X5jM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70be5722-a417-4a0f-9dae-ba2c8f5cea02_787x423.jpeg" width="787" height="423" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70be5722-a417-4a0f-9dae-ba2c8f5cea02_787x423.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:423,&quot;width&quot;:787,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;No alternative text description for this image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="No alternative text description for this image" title="No alternative text description for this image" srcset="https://substackcdn.com/image/fetch/$s_!X5jM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70be5722-a417-4a0f-9dae-ba2c8f5cea02_787x423.jpeg 424w, https://substackcdn.com/image/fetch/$s_!X5jM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70be5722-a417-4a0f-9dae-ba2c8f5cea02_787x423.jpeg 848w, https://substackcdn.com/image/fetch/$s_!X5jM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70be5722-a417-4a0f-9dae-ba2c8f5cea02_787x423.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!X5jM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70be5722-a417-4a0f-9dae-ba2c8f5cea02_787x423.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p><em>&#8220;I introduced agentic AI into my codebase two and a half weeks ago&#8230; today I&#8217;m scrapping it for parts&#8212;sort of.&#8221;<br>&#8212; r/ExperiencedDevs (recent thread)</em></p></blockquote><p>But this behavior on the internet is not new. I understand how something so glorified is not working as expected. Let me walk you through two major tech waves I was a part of </p><h2><strong>Django</strong></h2><p>Django was one of the biggest splashes of the Python ecosystem, but it wasn&#8217;t adopted overnight. Beginners swear off it mid-install because even &#8220;hello world&#8221; takes hours. People say DRF is over-engineered. They gripe about magic, opaque class hierarchies, and that admin panel they didn&#8217;t ask for.</p><blockquote><p><em>&#8220;Django has a steep learning curve.&#8221;<br>&#8212; <a href="https://news.ycombinator.com/item?id=1350537">Hacker News</a>, 2019</em></p><p><em>&#8220;I&#8217;m finding it quite hard to master django (rest framework as well)&#8230; Django is complicated even if you know Python. Django has the highest learning curve of any framework, by orders of magnitude.&#8221;<br>&#8212; <a href="https://www.reddit.com/r/learnpython/comments/ihpv81">r/learnpython, 2020</a></em></p></blockquote><p>But time smoothed that out. Today, Django runs enterprise apps, powers entire APIs, and still filters in fresh students at bootcamps.</p><h2><strong>Cloud Computing</strong></h2><p>Cloud computing got dragged <em>hard</em> when it launched:</p><ul><li><p>In <a href="https://www.theguardian.com/technology/2008/sep/29/cloud.computing.richard.stallman">2008, </a><strong><a href="https://www.theguardian.com/technology/2008/sep/29/cloud.computing.richard.stallman">Richard Stallman</a></strong><a href="https://www.theguardian.com/technology/2008/sep/29/cloud.computing.richard.stallman"> </a>called the cloud &#8220;worse than stupidity,&#8221; dead-set on defending your machine over someone else&#8217;s server.</p></li><li><p><strong><a href="https://www.cnet.com/culture/oracles-ellison-nails-cloud-computing/">Oracle&#8217;s CEO, Larry Ellison</a></strong>, labeled it &#8220;fashion-driven gibberish&#8221; even as cloud startups scaled into billions.</p></li></ul><p>These were not fringe opinions. They came from the top echelon. People griped about cost unpredictability, vendor lock-in, service sprawl, and debugging nightmares, yet the cloud became the backbone of global infrastructure.</p><p>But take a look around now. Google, AWS, and Azure have significant market share. Everyone builds abstractions after abstractions, be it Vercel, Netlify, or whatever.</p><blockquote><p><em>&#8220;The biggest frustration&#8230; overwhelmed with scores of settings and options you need to fill in before provisioning anything.&#8221;<br>&#8212; <a href="https://old.reddit.com/r/devops/comments/ge79zy/let_me_tell_you_why_i_think_gcp_is_better_than/">r/devops</a></em></p><p><em>&#8220;Amazon&#8217;s EBS is a barrel of laughs in terms of performance and reliability&#8230; constant source of failure&#8230;&#8221;<br>&#8212; <a href="https://news.ycombinator.com/item?id=2469838">Hacker News</a>, 2011</em></p></blockquote><h2><strong>Agentic AI Is Just the Next Chapter</strong></h2><p>Agentic AI is currently somewhere between Django&#8217;s &#8220;lost in MVT&#8221; era and the cloud&#8217;s &#8220;EBS down&#8221; phase. It&#8217;s underdeveloped, messy, and broken in places, but it&#8217;s growing fast. </p><p>Since most of these libraries are open-source, we have two options: We can sit on the sidelines and tweet snark, or we can build. Fork a repo, fix the docs, submit a PR, improve state caching or orchestration, and help shape the version&#8239;1.0 we&#8217;re all waiting for.</p><p>Because if you decide not to participate? That&#8217;s fine. But remember: the people who showed up when things sucked are the ones who become thought leaders of the ecosystem in the future.</p><div><hr></div><p>Some anti-thoughts and my answers to them</p><p>Yes, the hype is too much, but for most technological waves, it always was. Companies are making money off these so-called open-source libraries. If OSS needs to be genuinely free, it needs funding. Unfortunately, that&#8217;s not the case for major libraries. There is no harm in building a self-sustaining OSS library.</p><div><hr></div><p><em><strong><a href="https://nas.io/thelearningdev/challenges/30-day-genai-challenge-for-beginner?utm_source=substack-agent-post">Join the 30-Day online GenAI Challenge.</a></strong></em></p><p>Are you looking at GenAI technologies from the sidelines, not knowing where to start? There are already too many resources, so which is the best one?</p><p>Worry not!</p><p>The 30-Day GenAI challenge is designed just for that. It uses carefully curated materials with code and no-code samples to reinforce all the concepts fully.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://nas.io/thelearningdev/challenges/30-day-genai-challenge-for-beginner?utm_source=substack-agent-post&quot;,&quot;text&quot;:&quot;Register now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://nas.io/thelearningdev/challenges/30-day-genai-challenge-for-beginner?utm_source=substack-agent-post"><span>Register now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[How Freelancing made me a Leader - Part 2]]></title><description><![CDATA[What are your leadership principles?]]></description><link>https://newsletter.bhavaniravi.com/p/how-freelancing-made-me-a-leader</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/how-freelancing-made-me-a-leader</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Tue, 22 Jul 2025 14:15:53 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7dcf9149-cf14-4119-a698-e02bec0d07ce_1271x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The 2nd time I felt like a leader was during my 1st week with a new client. <a href="https://newsletter.bhavaniravi.com/p/how-freelancing-makes-you-a-leader?r=1cf2g">Since my time as an in-house Airflow expert</a>, I&#8217;ve found a place where I can be responsible for both architecting and building things. I was a part of a fantastic team. We were responsible for doing data integrations for their internal workflow engine. Imagine zapier, a workflow engine, with drag and drop and everything but tuned for a different usecase</p><p>Before I joined, the company had made an architectural choice that was ready for me to pick up: <strong>To use Airbyte for data/app integrations</strong>. I was tasked to get familiar with the work that had gone into it, the current workflow engine and previous Airbyte documents. </p><p>I started with a clean slate. I worked through the existing workflow specifications, existing data integrations, and why it was not working, and finally came to Airbyte. I took one look at it, and I immediately knew it wasn&#8217;t the right move. A decision that the CTO approved, but I wasn&#8217;t in the game.</p><p>I had my reasons</p><ol><li><p>Airbyte was young, and its open-source API support and documentation wasn&#8217;t there yet, integrating it with our workflow engines would&#8217;ve been nightmare.</p></li><li><p>I did integrate a few POCs. The integrations specification, for example, if you&#8217;re connecting Google Docs, our system needs to construct JSON at least two pages long that Airbyte can understand. All our engineers need to be masters of this spec to debug if any workflow fails, which means we are creating high knowledge and code coupling</p></li><li><p>Finally, given the team's size and expertise, creating an in-house SDK to tackle future integrations would be a good use of our resources.</p></li></ol><p>I mapped this out in a new Feasibility analysis document, which includes POC code to support my claim.</p><p>I walked up to my immediate manager about my claims, and he was a little shocked to see that something that went through multiple design approvals could not hold up. <em>But it was already CTO-approved.</em> I don&#8217;t remember exactly what happened, but I asked my manager to support me in the next Design review meeting. I told him I was hired to do exactly this.</p><p>Now comes the hard part. I had to present it. The Zoom room started filling up, 19, 27, 35, 43&#8230;. Almost all engineers from all teams were there. There I was, Bhavani Ravi, someone who joined just one week back, taking on against a technological choice that a whole company was sold on. </p><p>I walked them through how we arrived there, what I&#8217;ve learned in the last week, emphasised that I&#8217;m still learning, and opened the doors for feedback. Then, I unleashed the POCs and showed the whole team the 1.5 pages of JSON that did it. There were questions, and I had answers. What&#8217;s the alternative? In-house SDK + Integrations. Timeline?</p><p>Four engineers shipped 22 integrations to production in the next two months while constantly upgrading the SDK. The SDK had better error handling, monitoring, and retry. It became an integration powerhouse. Every new integration had a two-week development lifecycle: one week to understand the external APIs and one week for the integration.</p><div><hr></div><p>The second time I felt like a leader was during my first week with a new client when I asserted my expertise against a team of 60 engineers, as a newbie on the team, to stand up for something I strongly believed in. I would go on to create more such splashes, be it proposing a full-on data transformation engine or finding my way into devops tasks, even though it wasn&#8217;t a part of the &#8220;JD&#8221;</p><p>But that wasn&#8217;t the part that created the lasting impact. It was the part where my knowledge was received with intellectual curiosity rather than ego(a common theme in many engineering teams even today). That set a standard for the team I would lead later: to create a culture of safety where we debate ideas, not people or their hierarchy. The groundwork for my leadership was reinforced there: Ownership, Autonomy, Meritocracy, and continuous Learning&#8212;a culture not just on paper but a practice in how people show up.</p><p>I didn&#8217;t know I was preparing for something bigger, all the while taking notes of my managers&#8217; leadership style. My time to take the wheel came sooner than I expected, and it was time to put the learnings into practice</p>]]></content:encoded></item><item><title><![CDATA[How Freelancing made me a Leader - Part 1]]></title><description><![CDATA[In this series, I will be sharing 3 stories as a freelancer and how it helped me become a a leader(Head of Engineering)]]></description><link>https://newsletter.bhavaniravi.com/p/how-freelancing-makes-you-a-leader</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/how-freelancing-makes-you-a-leader</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Wed, 16 Jul 2025 15:19:58 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b144dee3-7bf0-4a76-9670-9b9025577fad_1080x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most people start freelancing because they want to make money on the side. But I did not start like that. I became a full-time freelancer to solve real problems for real companies while embracing my freedom of choice and time.</p><p>But that journey is never easy. You have to quickly skill up, not just technically but also in other dimensions. You will soon realize <a href="https://newsletter.bhavaniravi.com/p/your-skills-dont-matter-your-solution-does">your tech skills matter only about 50%</a>. Unlike a full-time job, you can never pause, there are no set goals, <a href="https://newsletter.bhavaniravi.com/p/business-doesnt-come-with-errors-and-tracebacks">and in the initial days, you&#8217;re stabbing in the dark, hoping to get clients.</a>&nbsp;Very soon, the reality is that I was fully <a href="https://newsletter.bhavaniravi.com/p/the-business-loop">running my own business</a>, juggling different business functions. </p><p>Is it worth it? Looking back, 100% yes. </p><p>Will I do this all over again? 100% yes.</p><p>Here is why&#8230;</p><h3>Leadership Story - 1 </h3><p>The first time I felt like a leader was when I worked for a client as their in-house Airflow expert. I helped resolve Airflow issues on their customers&#8217; infrastructure. A forward-deployed engineer, if you may. </p><p>Before this, I had never been in a customer-facing role at that scale. As I settled into this new world, I enjoyed customer conversations and problems. This was problem-solving on steroids; you must be quick, knowledgeable, and most importantly, know when to seek help. I enjoyed the hustle and the everyday challenges of the role.</p><p>That day came, and the real test of customer-facing roles came only when things went south. Pissed wasn&#8217;t enough to describe the client's anger.</p><p>Part of their infra has been down since that morning(their night), and their Airflow pipelines aren&#8217;t running. The client woke up, realized nothing was working, and chose rage mode. Our general rule is that if the customer reports a high-priority issue, you set up a call immediately. The team was new, and our runbooks were a WIP; there was no script to follow.</p><p>I opened all the error logs and dashboards I found helpful. Thankfully, I knew where things went wrong immediately, so I jumped on the call with reinforcements&#8230;</p><p>When I landed on the call, the customer was not ready for pleasantries. They sounded curt, pissed, and unpleasant. This is justified. A business-critical pipeline that didn&#8217;t run while the customer was sleeping is a nightmare.</p><p>In a dire time like this, common advice like&nbsp;<em>&#8220;Empathy matters the most,&#8221;</em>&nbsp;but they don&#8217;t want an apology; they want a fix</p><p><em>&#8220;I&#8217;m sorry that happened.&#8221;</em> No more pondering or feeling sorry</p><p><em>&#8220;Here is the problem&#8221;</em>, I highlighted the dashboard and opened the logs. By this time, seeing that I came prepared and I already knew what the issue was, the client calmed down a teeny bit, again, they want a fix, not where the problem is</p><p><em>&#8220;We need to fix the config, redeploy the pipeline, and watch for another 20 minutes to ensure nothing breaks.&#8221;</em>&nbsp;</p><p><em>&#8220;Alright, that&#8217;s reasonable,&#8221; t</em>he client said in a super soft voice.</p><p>I will never forget the change of tone in his voice. That was the most validating moment of that role, the first time it struck me what the JD of such a role is: to enter chaos and emerge triumphant, to take ownership of problems that you didn&#8217;t create in the first place. To keep your emotions at bay and put the logical brain to use. There is no room for ego here.</p><p>A year later, I signed off on that client, saying I wanted to be one who &#8220;built things,&#8221; not just &#8220;fixed things.&#8221; I always wondered why I ever said yes to that contract in the first place. Only the answer came four years later&#8230;.</p><div><hr></div><p>Over to you, what was that one moment in your career when you felt like a leader?</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.bhavaniravi.com/p/how-freelancing-makes-you-a-leader/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.bhavaniravi.com/p/how-freelancing-makes-you-a-leader/comments"><span>Leave a comment</span></a></p><p><em>Thank you for reading this far.  P.S. No AI was used to write/edit the above piece.</em> </p>]]></content:encoded></item><item><title><![CDATA[The Business Loop]]></title><description><![CDATA[The Freelance Mindset #3]]></description><link>https://newsletter.bhavaniravi.com/p/the-business-loop</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/the-business-loop</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Fri, 27 Dec 2024 17:12:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5TN5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c1f1b22-1bcc-47d9-a1cd-11096d8fe074_1338x1006.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The year was 2021. I had quit my job. Took a long break. My brain wanted to work again. I was sitting in front of the computer, not knowing what to do. No more Jira tasks, No more meetings, No more managers. Common advice is to create freelancing profiles. That was up, sitting there doing nothing. It took me 8 months to figure out what a sustainable freelancing business would look like. I had to carve out my way of running my business. I call it <strong>The Business Loop.</strong></p><div><hr></div><p>This is the 3rd essay of a multi-part series called <strong>The Freelance Mindset.</strong></p><ol><li><p><a href="https://newsletter.bhavaniravi.com/p/your-skills-dont-matter-your-solution-does">Your skills don&#8217;t matter; your solution does</a></p></li><li><p><a href="https://newsletter.bhavaniravi.com/p/business-doesnt-come-with-errors-and-tracebacks">Business doesn&#8217;t come with errors and tracebacks</a></p></li><li><p><strong>The Business Loop</strong></p></li></ol><p>I highly recommend you read (1 &amp; 2) before moving further</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5TN5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c1f1b22-1bcc-47d9-a1cd-11096d8fe074_1338x1006.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5TN5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c1f1b22-1bcc-47d9-a1cd-11096d8fe074_1338x1006.png 424w, https://substackcdn.com/image/fetch/$s_!5TN5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c1f1b22-1bcc-47d9-a1cd-11096d8fe074_1338x1006.png 848w, https://substackcdn.com/image/fetch/$s_!5TN5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c1f1b22-1bcc-47d9-a1cd-11096d8fe074_1338x1006.png 1272w, https://substackcdn.com/image/fetch/$s_!5TN5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c1f1b22-1bcc-47d9-a1cd-11096d8fe074_1338x1006.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5TN5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c1f1b22-1bcc-47d9-a1cd-11096d8fe074_1338x1006.png" width="1338" height="1006" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9c1f1b22-1bcc-47d9-a1cd-11096d8fe074_1338x1006.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1006,&quot;width&quot;:1338,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:183116,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!5TN5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c1f1b22-1bcc-47d9-a1cd-11096d8fe074_1338x1006.png 424w, https://substackcdn.com/image/fetch/$s_!5TN5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c1f1b22-1bcc-47d9-a1cd-11096d8fe074_1338x1006.png 848w, https://substackcdn.com/image/fetch/$s_!5TN5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c1f1b22-1bcc-47d9-a1cd-11096d8fe074_1338x1006.png 1272w, https://substackcdn.com/image/fetch/$s_!5TN5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c1f1b22-1bcc-47d9-a1cd-11096d8fe074_1338x1006.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>What should you do when you jump into the ocean of freelancing? Create a freelancing profile on different websites. Yes, that&#8217;s obvious. Figure out what you want to sell. Perfect. What next? Here is exactly where things went black. For most of us, this alone is not enough, i.e., this is not bringing clients to our door. We tweaked our profile and offered a little bit here and there, and in a matter of 2-3 months, we would lose all motivation.</p><p>Your aspiration for freelancing might be freedom, control, and variety, but ultimately, for a business to run sustainably, it has to make money, and it has to have a consistent stream of clients using the service you&#8217;re providing.</p><p>Throughout this series, I have comfortably left out specific business keywords. Not anymore. Marketing, Sales, and Service are the three main business keywords. No matter what business you run, you&#8217;ll constantly switch gears between one of these to maintain an ever-flowing, sustainable business.</p><p>So, you&#8217;ve put up your freelancing profile. Are people DMing you already? Then you don&#8217;t have to do any more marketing. It&#8217;s already working. Work on converting these potential clients. Devise a solution based on your client&#8217;s needs.  Convince them to work with you and <strong>Deliver.</strong></p><p>It&#8217;s been 2 weeks since your profile was up, and no prospective clients are knocking on your door, starting with marketing. Showcase your work and earn credibility.</p><p>You have a living business when</p><ol><li><p>You have a compelling, unique service that you can uniquely provide</p></li><li><p>You are reaching more and more people via your work</p></li><li><p>People trust you to get work done by you</p></li></ol><h2>Service</h2><p>Service can be divided into two parts: packaging and Delivery. Unlike marketing or sales, this is so unique that you must determine what works by trial and error. This is like a chef coming up with their signature recipes.</p><h4>Packaging: What to sell?</h4><p>Selling becomes much easier when you know </p><ol><li><p>what are you selling?</p></li></ol><p>My initial fivver profile looked like that of a fresher. It had all the skills under the radar. It had Python, which I had a lot of experience with, but it also had ReactJS, which I had zero experience with. This is casting a wider net, showing that you&#8217;re a jack of all trades never works.</p><p>Things started working only when I dropped everything and focused purely on <em><strong>&#8220;Airflow-related Data and infrastructure Problems&#8221;. </strong></em><a href="https://newsletter.bhavaniravi.com/p/your-skills-dont-matter-your-solution-does">Your service is not just your skills but how you present it to </a>stand out.</p><ol start="2"><li><p>How are you going to deliver it?</p></li></ol><p>Is it a consulting call over Zoom, MVP for startups, automation code, or a design or code review session? Have a few of these under your belt. Refine them to accommodate your client's needs. </p><p>Here are a few Examples, </p><ol><li><p>3 Zoom refinement sessions, 1 hour each, at 100$ per hour. </p></li><li><p>The project will be scoped and refined in 2 weeks. During the scoping, we will establish a milestone-based delivery system</p></li></ol><h4>Fulfillment: Delivery</h4><p>Fulfillment is when you deliver what you promised to your client. During the sales process, we earn a degree of tr. Only by satisfactorily providing the service can we retain their business. </p><p>You order a 13&#8221; pizza from Zomato, and imagine they deliver 8&#8221; how pissed would you be? Exactly. Don&#8217;t leave people with a bad taste. Deliver what you promise even better, under promise over-deliver.</p><h2>Marketing</h2><p>Marketing has a bad rep among software engineers. We hate marketing so much that people have to come up with a new term called <em>&#8220;Developer Advocacy&#8221;</em> to sell to us. It&#8217;s no surprise that most of us are uncomfortable pitching our skills and capabilities to the outside world. Forget the world. We have so much trouble highlighting our achievements for appraisal reviews. We find it flashy and artificial. After all, why would we write catchy lines? We only like cryptic languages. </p><p>Let me reframe marketing for you, &#8220;<em><strong>Marketing is a vehicle that takes your work and puts it in front of the right people&#8221;</strong></em>. Take a look around your room. Look at the things you own. How did you come across them? Blog post? Reddit? Friend recommended? Marketing is the visible and invisible force that drives a product from induction to the hands of the right people.</p><p>So, how does marketing look for Software Engineers trying to sell their skills? You don&#8217;t have to do anything flashy. Unlike most marketing, showcasing your skills shouldn&#8217;t be gimmicks and games. We stand for quality and outcome. The real value.</p><h4>Establish credibility. </h4><p>Credibility is the strongest vehicle. Why would someone miles away, seeing your work on a laptop screen, trust you? Because you&#8217;ve done it before, you&#8217;ve done it well, you&#8217;ve been consistent.</p><p>One of the easiest ways to establish credibility is by sharing knowledge. I use <em><strong>public speaking, teaching, and blog posts </strong>like this one</em> as a way to share my knowledge. As a side effect, I get to showcase my work to the world. </p><p>For example, I have been dealing with all kinds of Airflow problems for 3 years; when I started consulting, I&#8217;d get on Zoom calls to solve the same kind of problems again and again. It got boring. I compiled them all into a single blog post.  This blog post got credit from one of the core contributors of Airflow. It was later published in Airflow&#8217;s Slack group under the troubleshooting page. As a side effect of all this, this blog post became the biggest source by which my potential clients could reach me. People read this article and jump on my DM because they face similar problems and need expert advice.</p><p>You can use code as your credibility.  Write a tool, write automation, highlight the problem in an open-source project you already use, and propose your fix. Challenge an existing state-of-the-art best practice. Who wouldn&#8217;t want to hire a contributor to an open-source project used by 1000s of other people?</p><p>By establishing credibility,, you will attract people with baseline trust in you. You can code, you&#8217;re consistent, and you&#8217;re constantly learning.</p><h5><em>Marketing software engineering skills = Showcasing your skills = Establishing Credibility.</em></h5><h2>Sales</h2><p>Sales is not about selling. Sales happen way before when someone opens their wallet or signs a contract.  Sales happen in stages. It often starts with a&nbsp;<strong>DM, an email, or an introductory call</strong>. So be reachable. People should be able to write to you. Have your Email or DMs open. If not, it&#8217;s equal throwing your marketing efforts down the drain.</p><p>In the DMs, people would already ask for specific help; if not, ask for more details. If you find it compelling, set up an <strong>Exploratory call. </strong>An exploratory call where they talk to you about the problems they face. Quote examples of problems you&#8217;ve faced before and how you solved them. The signing might not happen in this call. </p><p>At this point, Be prepared to be rejected or ghosted.  It&#8217;s not all rosy on the other side. However, a potential client rejecting you or going silent is not a sign of your worth; it is just a misfit. Put them on a backlog client list; write to them when you have something new to offer.</p><p>The problem with engineers, as we discussed in the past essays, is that we need quick wins. We end up discarding these early connections rather than nurturing them. It&#8217;s about creating connections that will eventually become a long-lasting business. </p><p>People talking to you is a sign that your marketing is working. Your message reaches the right people (sometimes wrong people, too). When it happens, rather than shutting the doors, give it a shot. Get on a call. Sales calls are the interviews of the freelancing world. <strong>Earn their TRUST. </strong></p><div><hr></div><p>Marketing, Sales, and service are the three pedals that move the Business car forward. Knowing which lever to press to keep the car moving without running out of gas is the art of running a good business. For example, if you press too hard on marketing and sales and end up signing too many deals, now you&#8217;re context-switching every day and trying to serve them all. Bite only as much as you can chew.</p><p>This balancing act is what we call&nbsp;<strong>Business Operations.&nbsp;</strong>The invisible power, the very visible arrows, keeps the business alive and moving. You cannot have a deadline next week while preparing for a conference talk. An operational understanding of your business state allows you to balance and plan your day-to-day activities.</p>]]></content:encoded></item><item><title><![CDATA[Business Doesn’t Come with Errors and Tracebacks]]></title><description><![CDATA[The Freelance Mindset #2]]></description><link>https://newsletter.bhavaniravi.com/p/business-doesnt-come-with-errors-and-tracebacks</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/business-doesnt-come-with-errors-and-tracebacks</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Mon, 28 Oct 2024 16:15:30 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/493e7a4d-4d71-464f-bfe4-9fb8455ce501_1278x717.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>By now you&#8217;re aware that <em><strong><a href="https://newsletter.bhavaniravi.com/p/your-skills-dont-matter-your-solution-does">your skills don&#8217;t matter as much as how you&#8217;re packaging them into sellable solutions when it comes to freelancing</a></strong></em>. But, that still doesn&#8217;t shed light on how to get paying clients.&nbsp;</p><p>Infact this is the first question people ask when I tell them I&#8217;m a contractor.</p><p><em>&#8220;How do you find your clients?&#8221; </em>Every time that question pops up, my mind goes back to my early days.</p><p>Three months into freelancing, offering my services on Fivver and Upwork, showcasing what an amazing developer I was, but no clients were willing to believe me. It was a depressing phase. It was hard to muster courage and keep going. Motivation was depleting.</p><p><em>Heart Pounding. That unexplainable anxiety? No! There is a reason.&nbsp;</em></p><p><em>Aug 2023 Balance Sheet</em></p><p><em>The accountant fee: &nbsp; &nbsp; &nbsp; &nbsp; 3000 INR,&nbsp;</em></p><p><em>the freelancing income: &nbsp; 2000 INR</em></p><p><em>Total Income:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -1000 INR</em></p><p><em>*Sigh*</em></p><p>The imbalance on the balance sheet was the imbalance I was feeling inside.</p><p><em>How long is this going to last?&nbsp;</em></p><p><em>How long should I try?</em></p><p><em>Should I go back to a regular job?</em></p><p>By the end of 3 months, as I was mulling over the&nbsp; -1000 INR in my balance sheet, two conflicting voices erupted through my mind:</p><p><strong>Anxious voice:</strong> <em>I keep trying and trying, nothing&#8217;s working&nbsp;</em></p><p><strong>Awakening voice</strong>: <em>&#8220;What did you try? What didn&#8217;t work?&#8221;</em></p><h2><strong>Shedding the Developer Neurons&nbsp;</strong></h2><p>Coding has spoiled us. The instant feedback, the red squiggly lines, and the tracebacks with the line numbers lead us to exactly where the error propagated from.&nbsp;</p><p>Business is not like that.</p><p>Life is not like that.</p><p>When has life ever been anything like that?</p><p>The biggest problem with developers is we try to Google our way out of our life problems. Relationship problems? We search Reddit.&nbsp;Coding problems? We search Stackoverflow.&nbsp;We are the ones who would be Googling our way from a simple Flu to Cancer. Imagine asking Chatgpt why people are not looking at your profile. Will you get an answer?</p><p>In an ideal world, all you have to do is put up your portfolio and people will line up to use your services. But this world is a fantasy. We all know that conceptually, our brain still struggles to assimilate this reality. Your brain is trying to find the red squiggly lines whereas the fact that there isn&#8217;t one is enough to signal that something is not working.</p><p>Once you enter the world of freelancing your brain goes through the most humbling phase called <strong>Facing the Reality</strong>.&nbsp;</p><h2><strong>Facing the Reality</strong>&nbsp;</h2><p>The reality,&nbsp;</p><p><em><strong>You don&#8217;t know the value of your skill, because someone else is selling it for you.</strong></em></p><p>You need to learn how to package your skills and sell your services as a freelancer.</p><p><em><strong>You don&#8217;t know who your customers/clients are</strong></em></p><p>You need to find your target audience and build marketing channels so that they can find you.</p><p><strong>You don&#8217;t reap immediate rewards, worse yet, there is hardly any feedback as to what&#8217;s not working.</strong></p><p>You need to learn to listen to market signals. No signal is a huge signal. If you post something and there is no reaction for two weeks, that means it&#8217;s not working. You need a new strategy until you can engage people to have a conversation with you.</p><p><strong>You don&#8217;t have a manager to cover you or give you a pep talk during downtime.</strong></p><p>You need to show up every day even when you feel things aren&#8217;t going anywhere</p><p>If you try to stackoverflow your way into finding your business value, it won&#8217;t happen. If you copy-paste someone else&#8217;s guidebook, it won&#8217;t work. When you&#8217;re freelancing, you are no longer operating in binaries of <em>&#8220;it works&#8221; or &#8220;it doesn&#8217;t&#8221;. </em>This is why we see so many people trying freelancing for a few months and giving up. We are not trained to play the long game.</p><p>It&#8217;s not your fault. Your brain has not been trained to think like a business person. You need something new, new neural pathways, new mental models, and new frameworks. But worry not, thanks to the neuroplasticity and your ability to learn complex things as a Software-ian comes handly. You can learn this skill too &#128170;</p><h2><strong>Iteration and Experimentation</strong></h2><p><strong>In business(freelancing), uncertainty is the only certain outcome</strong>. The best way to combat the uncertainty is by Experimentation. In a language that you&#8217;d understand, you need to POC(Proof of Concept) the shit out of life.</p><p><em>But how?</em></p><p><em>Should you start creating content?</em></p><p><em>Should you start networking?</em></p><p><em>Should you upskill yourself on the latest technologies?</em></p><p>There is no silver bullet when it comes to business. Everyone starts at a different point. Don&#8217;t worry, the goals are the same.&nbsp;</p><p>You need to find those 2-4 people who will <s>pay us money in exchange for our services </s><strong>to start a conversation with you after looking at our profile. </strong></p><p><strong>That&#8217;s the first goal.</strong></p><p>We have established that there is no silver bullet, Googling won&#8217;t work. Then what is the way? You can read, learn, and absorb what has worked for other people and Carve out your way and that&#8217;s what I am leading you towards.</p><p>Rather than looking for answers outside, let&#8217;s look for the ones that already lie within you. With no business to set your goals and no managers to plan your sprint, you need to figure out what are you going to offer.</p><ol><li><p><strong>What&#8217;s a service that only you can provide? What&#8217;s your expertise?&nbsp;</strong></p></li></ol><blockquote><p><em>A typical engineer takes 3 months to set up an Airflow infrastructure on Kubernetes, I can build it in one. </em></p></blockquote><p>That was my pitch. Because I was combating Airflow Infrastructure problems for 3 years in my career I mastered it in and out. Similarly, create a map of services you can offer. Play your strengths. Figure out what your expertise is and focus on that.</p><p>Two things to note here,&nbsp;</p><ul><li><p>I&#8217;m being super specific about what service I offer</p></li><li><p>I&#8217;m using my efficiency(time) to my advantage. Think about yours.</p></li></ul><ol start="2"><li><p><strong>Who can be your customers and where can you find them?</strong></p></li></ol><p>It doesn&#8217;t have to be your close friends. It can be past managers, colleagues, companies, online communities, LinkedIn followers, or people whom you met at a tech conference.</p><p>Strike up a conversation. Don&#8217;t tell them anything about freelancing or your services. Ask for 30 minutes of their time and talk about the problems they&#8217;re facing.&nbsp;&nbsp;</p><p>Just so you don&#8217;t forget. <strong>This is an experiment. </strong>You are collecting data. There is no right answer, no there are no squiggly lines. Carve your freelancing journey your way.</p><div><hr></div><p>Yes, there is no documentation that you can use out of the box. This series is my way of theorizing my freelancing journey. This is what I tell my close friends when their balance sheets read negative and when they lose hope. If you can shrink my 8-month journey into 3, I&#8217;d call it a success. </p><p><a href="https://newsletter.bhavaniravi.com/p/the-business-loop?r=1cf2g">In the next edition I will cover the three pillars of any business</a></p><p>Thank you for reading this far. We are going deep from here. I love hearing from you, so do hit that Reply button to share your feedback or your questions.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.bhavaniravi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Tech Tinkering! Subscribe to learn from my experiments</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Your Skills Don’t Matter Your Solution Does]]></title><description><![CDATA[The Freelance Mindset #1]]></description><link>https://newsletter.bhavaniravi.com/p/your-skills-dont-matter-your-solution-does</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/your-skills-dont-matter-your-solution-does</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Tue, 15 Oct 2024 14:51:49 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/91fc7646-ad06-4574-b222-e1ea71b64d3e_1273x714.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve been a software engineer all my career. I thought writing code was magical.&nbsp;It is. But, something shifted became a Freelancer in 2021. If you&#8217;re a software engineer like me, you&#8217;d relate to the following narrative</p><p>You started coding, somehow you liked it, somehow these cryptic languages became your favorite. Voila! Now you&#8217;re coding away for hours and trading these hours for good cash. You switch jobs for better pay and keep improving your skillset, accumulate more tools, and &#8220;progress in your career&#8221;&nbsp;</p><p>Over time, it&#8217;s common to bias yourself into thinking your skills are what&#8217;s making you the big bucks.&nbsp;</p><p>Sad news! It&#8217;s not &#128577;</p><p>Now that might offend a lot of you, my fellow Software-ians, Yes, mastering that Programming language was hard and rewarding, but that&#8217;s not what&#8217;s making you the money. </p><p>Hear me out.</p><div class="preformatted-block" data-component-name="PreformattedTextBlockToDOM"><label class="hide-text" contenteditable="false">Text within this block will maintain its original spacing when published</label><pre class="text"><em><strong>Your skills are making you money because 
someone has figured out how to make money with your skills.&nbsp;</strong></em></pre></div><p>Let that sink in for a moment.&nbsp;</p><p>I&#8217;m not trying to make a capitalistic reformation here. Nor asking you to quit your job to take matters into your own hands but a gentle nudge to look at the system you&#8217;re operating on.</p><p>If you feel this is common knowledge, you&#8217;re an engineer with an eye for business. But I have been meeting engineers at conference after conference who walk around with a sense of entitlement. We also see cases of engineers crumbling through their layoffs again and again since they don&#8217;t know how to make money off their skills. </p><p>Here is how a software system operates. </p><p>Someone watches the market for the needs, problems, and niches, converts that into a product spec, you write the code push it and someone figures out a way to sell it. All of this has to happen for you to make money out of your code. No sale means your code has no value.</p><p>Although you might think your superpower to understand cryptic language alone is valuable, convincing another human being that your service/solution/product is worth their hard-earned money is wizardry.</p><p>I came to this knowledge when I started freelancing in 2021. I was burned out, quit my job, took a long break, wanted to experiment with freelancing, and created accounts on all freelancing websites, Fivver, Upwork, and Arc. You name it, I got it. It took me 8 months to land a decent profile that lured in clients.&nbsp;</p><p>Retrospectively it all boils down to this</p><p><em><strong>Your Skills Don&#8217;t Matter Your Solution Does</strong></em></p><p>You can stand at the top of the mountain and scream out all the skills you have. But no one will care. Not because they&#8217;re not valuable, but because it&#8217;s hard for business people to see the value yet.</p><p>One of the 1st mistakes I made as a Freelancer was casting a wider net. You might have seen these in resumes all the time. Listing 30 different skills. We need to drop that mindset. </p><p>Let&#8217;s say you&#8217;re looking to hire a personal chef who can cook South Indian food, you see two chefs applying for the role,</p><ul><li><p><em>Chef 1: I can cook you yummy delicious food. I have a decade of culinary experience.</em></p></li><li><p><em>Chef 2: I have been cooking crispy dosas, yummy sambhars, biriyanis, and curries. Don&#8217;t let another day go by without smelling the South Indian flavors at home.</em></p></li></ul><p>Who will you hire?</p><p>I could already smell every tadka as I wrote it.&nbsp;</p><p>I&#8217;d hire the 2nd one for sure.  They seem to cater to my needs precisely. That&#8217;s exactly what I did  your my freelancing profile too.</p><p>I packaged my skill into a solution based on the problems I knew existed in the Industry.</p><ul><li><p><em>Cooking = Coding = Skill</em></p></li><li><p><em>South Indian food = Airflow on Kubernetes = Service/Solution</em></p></li></ul><p>The chef might easily know baking and North Indian and European but none of that matters here. Be the wizard, and have multiple spells in your power, but when you present them to the world nicely box them around problem statements</p><ul><li><p><strong>Generalization</strong> is having enough tools in your bag,&nbsp;</p></li><li><p><strong>Specialization</strong> is knowing when to use what</p></li></ul><div><hr></div><p>All of this makes sense, but how do I implement it? How do I know what problems exist in the Industry? I&#8217;ll cover this in detail in the <a href="https://newsletter.bhavaniravi.com/p/business-doesnt-come-with-errors-and-tracebacks?r=1cf2g">next edition of </a><strong><a href="https://newsletter.bhavaniravi.com/p/business-doesnt-come-with-errors-and-tracebacks?r=1cf2g">The Freelance Mindset</a></strong></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.bhavaniravi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Never miss out on Insights, Experiments, Ideas, and Side projects. Subscribe now</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><br></p><p><br></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Tinkering With a Tech Community]]></title><description><![CDATA[Welcome to TheLearningDev]]></description><link>https://newsletter.bhavaniravi.com/p/tinkering-with-a-tech-community</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/tinkering-with-a-tech-community</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Thu, 11 Jul 2024 17:05:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JPTm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e487ef9-dc9b-4585-9a41-f3929158f6dc_1836x1256.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I wish I started this earlier. Infact I did. Then I stopped. But not again. </p><p><em><strong><a href="https://lu.ma/thelearningdev">TheLearningDev</a> is </strong></em>my dream community to stroke your curiosity and my urge to teach. Following on the roots of my mentor Mr. Dorai Thodla, I am presenting you with TheLearningDev.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JPTm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e487ef9-dc9b-4585-9a41-f3929158f6dc_1836x1256.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JPTm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e487ef9-dc9b-4585-9a41-f3929158f6dc_1836x1256.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JPTm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e487ef9-dc9b-4585-9a41-f3929158f6dc_1836x1256.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JPTm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e487ef9-dc9b-4585-9a41-f3929158f6dc_1836x1256.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JPTm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e487ef9-dc9b-4585-9a41-f3929158f6dc_1836x1256.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JPTm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e487ef9-dc9b-4585-9a41-f3929158f6dc_1836x1256.jpeg" width="1456" height="996" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e487ef9-dc9b-4585-9a41-f3929158f6dc_1836x1256.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:996,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!JPTm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e487ef9-dc9b-4585-9a41-f3929158f6dc_1836x1256.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JPTm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e487ef9-dc9b-4585-9a41-f3929158f6dc_1836x1256.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JPTm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e487ef9-dc9b-4585-9a41-f3929158f6dc_1836x1256.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JPTm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e487ef9-dc9b-4585-9a41-f3929158f6dc_1836x1256.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>The 1st Meetup</h3><p>On 6th July 2024, 25 people hopped on a Zoom call and cracked open the box of Data Engineering.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mg_l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6879570-e26c-41da-99bb-54d6ba9c3b29_2184x1001.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mg_l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6879570-e26c-41da-99bb-54d6ba9c3b29_2184x1001.png 424w, https://substackcdn.com/image/fetch/$s_!mg_l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6879570-e26c-41da-99bb-54d6ba9c3b29_2184x1001.png 848w, https://substackcdn.com/image/fetch/$s_!mg_l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6879570-e26c-41da-99bb-54d6ba9c3b29_2184x1001.png 1272w, https://substackcdn.com/image/fetch/$s_!mg_l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6879570-e26c-41da-99bb-54d6ba9c3b29_2184x1001.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mg_l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6879570-e26c-41da-99bb-54d6ba9c3b29_2184x1001.png" width="1456" height="667" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6879570-e26c-41da-99bb-54d6ba9c3b29_2184x1001.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:667,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1289728,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mg_l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6879570-e26c-41da-99bb-54d6ba9c3b29_2184x1001.png 424w, https://substackcdn.com/image/fetch/$s_!mg_l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6879570-e26c-41da-99bb-54d6ba9c3b29_2184x1001.png 848w, https://substackcdn.com/image/fetch/$s_!mg_l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6879570-e26c-41da-99bb-54d6ba9c3b29_2184x1001.png 1272w, https://substackcdn.com/image/fetch/$s_!mg_l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6879570-e26c-41da-99bb-54d6ba9c3b29_2184x1001.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There were a tonne of errors, attempts, and failures waiting for us.</p><p>The goal was not to master everything in one go but to get a taste of everything all at once.</p><p>To see a dashboard despite only understanding 20% of how it works will nudge people to leap the rest 80%.</p><h3><strong>What&#8217;s next?</strong></h3><p>On 20th July 2024, we are going to do it all over again. But this time <em><strong>Building the Backend with FastAPI.</strong></em></p><p>Ready? <a href="https://lu.ma/tnsy584z">Let&#8217;s hack together.</a></p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://lu.ma/tnsy584z&quot;,&quot;text&quot;:&quot;RSVP Now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://lu.ma/tnsy584z"><span>RSVP Now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Building NextJS App from Scratch]]></title><description><![CDATA[5 part series of designing and building frontend of an app from scratch]]></description><link>https://newsletter.bhavaniravi.com/p/building-nextjs-app-from-scratch</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/building-nextjs-app-from-scratch</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Sun, 10 Mar 2024 04:08:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/AjBsQ49y644" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Yes, I&#8217;ve moved my tinkering from writing to recording. Went overboard the last few weeks and created a whole series for you. </p><p>Hope you enjoy it&#8230;.</p><p></p><div><hr></div><h3>Step 1: Setting up the Project and Laying the Foundation</h3><h4>[8 mins]</h4><div id="youtube2-AjBsQ49y644" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;AjBsQ49y644&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/AjBsQ49y644?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>Step 2: File Upload and Download in NextJS</h3><h4>[5 mins]</h4><div id="youtube2-q2Lfaa8hNL0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;q2Lfaa8hNL0&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/q2Lfaa8hNL0?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>Step 3: Designing the Layout</h3><h4>[19 mins]</h4><div id="youtube2-iGm-s491HZQ" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;iGm-s491HZQ&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/iGm-s491HZQ?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>Step 4: Deploying in Vercel</h3><h4>[8 mins]</h4><div id="youtube2--lpNhSflyQo" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;-lpNhSflyQo&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/-lpNhSflyQo?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p></p><div><hr></div><p>Let me know what should I teach next</p>]]></content:encoded></item><item><title><![CDATA[Python Decorators - A Deep Dive]]></title><description><![CDATA[Maybe the 15th time I look at decorators it will click..]]></description><link>https://newsletter.bhavaniravi.com/p/python-decorators-a-deep-dive</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/python-decorators-a-deep-dive</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Thu, 01 Feb 2024 23:58:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IfD_!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3083814c-7128-47b8-a91a-4bfd8b973f81_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>Why write a decorator when you can simply write a function? Again,</p></blockquote><blockquote><p>Passing function as an argument to another function? Are you kidding me.</p></blockquote><blockquote><p>Maybe the 15th time I look at decorators, it will click. I dunno why it's so hard for me to wrap my head around this one..</p></blockquote><blockquote><p>Why would I not just write a new function using the old function inside it? What is the benefit of a decorator?</p></blockquote><div><hr></div><p>When I introduce decorators in my Python class, It&#8217;s often one of the above reactions, and I don&#8217;t blame them</p><ol><li><p>Decorators are unique to Python</p></li><li><p>Passing functions around and treating them like objects isn&#8217;t easy to grasp</p></li></ol><p>But oftentimes, what really nails the concept is the use cases. I also showcase famous Python libraries and their famous decorators.</p><p>That&#8217;s exactly what I tried to do in my recent blog post.</p><p><a href="https://www.bhavaniravi.com/python/advanced-python/python-decorators-a-deep-dive">https://www.bhavaniravi.com/python/advanced-python/python-decorators-a-deep-dive</a></p><p></p><div><hr></div><p>I hope you find this useful. Reply or comment with that Python topic that you find hard to wrap your head around, I&#8217;ll create a guide just for you.</p>]]></content:encoded></item><item><title><![CDATA[Refine your Developer Resume]]></title><description><![CDATA[Job Magnet 2.0: Seize Stunning Opportunites with a Stunning Resume]]></description><link>https://newsletter.bhavaniravi.com/p/refine-your-developer-resume</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/refine-your-developer-resume</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Fri, 12 Jan 2024 05:08:19 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/56db129c-2100-444b-8613-87bbf621f1cd_2400x1254.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Are you constantly applying for jobs but aren&#8217;t hearing back? Part of it could be the current market situation, but another reason could be your resume.</p><p>Let&#8217;s fix that. </p><ul><li><p>Open your resume in PDF Format.</p></li><li><p>Put yourself in the shoes of the recruiter</p></li><li><p>List down 3 things that you notice immediately</p></li></ul><p>If it&#8217;s not your key skills and experience - It&#8217;s time to rearrange them.</p><p>How? Here, I&#8217;ve got you covered.</p><ul><li><p><a href="https://www.bhavaniravi.com/products/refine-your-developer-resume">https://www.bhavaniravi.com/products/refine-your-developer-resume</a></p></li></ul><p>Got a question? Drop them in the comments or reply to this email</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.bhavaniravi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Next week, we are deep-diving on a Python feature. Don&#8217;t miss it. &#128071;&#127995;</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Multiple ways to add Auth Layer to FastAPI]]></title><description><![CDATA[Tech Tinkering with FastAPI interfaces]]></description><link>https://newsletter.bhavaniravi.com/p/multiple-ways-to-add-auth-layer-to</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/multiple-ways-to-add-auth-layer-to</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Fri, 05 Jan 2024 03:11:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IfD_!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3083814c-7128-47b8-a91a-4bfd8b973f81_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The Zen of Python says, &#8220;There should be one-- and preferably only one-- obvious way to do it.&#8221;<em> </em></p><p>Oftentimes, you can find even the most famous Python libraries not abiding by this rule. </p><p>FastAPI is not an exception. <a href="https://www.bhavaniravi.com/python/fastapi/add-auth-layer-to-your-fastapis">Here is a blog post based on my recent exploration of adding an auth layer to my APIs</a></p><p>It should&#8217;ve been straightforward, but it was not. </p><div><hr></div><p> This is clearly what I intend to do with Tech Tinkering. Send you little blurbs of my long experimentation. I hope you like it</p><p>Happy 2024 :)</p><p><a href="https://topmate.io/bhavaniravi">Here is a little gift </a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Enhancing Transparency, Security, and Compliance in Your Software Projects]]></title><description><![CDATA[Do you know about SBOMs?]]></description><link>https://newsletter.bhavaniravi.com/p/enhancing-security-and-compliance-of-projects</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/enhancing-security-and-compliance-of-projects</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Mon, 13 Nov 2023 14:29:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4dNi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ac287e3-250b-4109-92a5-7ae6c1d4e47a_385x489.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>In the mail &#128231;</h2><ul><li><p><strong>One Tech idea &#128165;: SBOM</strong></p></li><li><p>One question for you</p></li></ul><p><em><strong>Read time: 4 minutes.</strong></em></p><div><hr></div><h2>SBOMs: </h2><p><em>A software bill of materials (SBOM) is an inventory of all components and dependencies involved in the development and delivery of an application.</em> </p><p>That doesn&#8217;t explain much, does it? </p><p>Before diving into the <strong>What</strong>, let me tell you the <strong>Why </strong>(we need it)</p><h3>&#8212;</h3><p>Let&#8217;s imagine this: You&#8217;re running a Pizza company. You would want to track all the raw materials <em><strong>in case they cause health issues or the FDA says so</strong></em>. At the top level<em><strong>,</strong></em> we have the dough, tomato sauce, cheese, and meat. If you dig one level deeper, we must find the source of flour, tomatoes, milk to level grains, farm, and dairy barns. </p><p>We can track as far as the cattle and its feed. We can track information such as date of sourcing, kind of breed, weight, etc.,</p><p>As a pizza company, having this information handy saves a ton of time in mitigating customer issues rather than waiting until a huge issue blows up.</p><p>Does it ring a bell? Kinda?</p><p>If you think about it, a software company is not far from a pizza company in this aspect. In software, we follow the DRY principle, like our life source. When there is a library or package available, why write from scratch? This comes with its pros and cons.</p><p><strong>Pros</strong> - Productivity, Tested code </p><p><strong>Cons</strong> - Adopting vulnerabilities</p><p>We have seen<a href="https://arstechnica.com/information-technology/2016/03/rage-quit-coder-unpublished-17-lines-of-javascript-and-broke-the-internet/"> &#8220;Code that broke the internet&#8221; </a> in the past. <a href="https://www.zdnet.com/article/hacker-backdoors-popular-javascript-library-to-steal-bitcoin-funds/">Not to forget hackers sneaking</a> in via vulnerable codebases. If none of this rings a bell, it&#8217;s impossible to have missed this XKCD comic.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4dNi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ac287e3-250b-4109-92a5-7ae6c1d4e47a_385x489.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4dNi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ac287e3-250b-4109-92a5-7ae6c1d4e47a_385x489.png 424w, https://substackcdn.com/image/fetch/$s_!4dNi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ac287e3-250b-4109-92a5-7ae6c1d4e47a_385x489.png 848w, https://substackcdn.com/image/fetch/$s_!4dNi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ac287e3-250b-4109-92a5-7ae6c1d4e47a_385x489.png 1272w, https://substackcdn.com/image/fetch/$s_!4dNi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ac287e3-250b-4109-92a5-7ae6c1d4e47a_385x489.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4dNi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ac287e3-250b-4109-92a5-7ae6c1d4e47a_385x489.png" width="385" height="489" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ac287e3-250b-4109-92a5-7ae6c1d4e47a_385x489.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:489,&quot;width&quot;:385,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;2347: Dependency - explain xkcd&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="2347: Dependency - explain xkcd" title="2347: Dependency - explain xkcd" srcset="https://substackcdn.com/image/fetch/$s_!4dNi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ac287e3-250b-4109-92a5-7ae6c1d4e47a_385x489.png 424w, https://substackcdn.com/image/fetch/$s_!4dNi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ac287e3-250b-4109-92a5-7ae6c1d4e47a_385x489.png 848w, https://substackcdn.com/image/fetch/$s_!4dNi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ac287e3-250b-4109-92a5-7ae6c1d4e47a_385x489.png 1272w, https://substackcdn.com/image/fetch/$s_!4dNi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ac287e3-250b-4109-92a5-7ae6c1d4e47a_385x489.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let&#8217;s read <strong>The What</strong> one more time.</p><p><em>A software bill of materials (SBOM) is an <strong>inventory of all constituent components and software dependencies involved</strong> in the development and delivery of an application.</em> </p><p>Next time a customer raises a security issue, a memory leak, or an issue raised during a software audit, you know exactly which code is responsible.</p><p>But <strong>how</strong>?</p><h2>SPDX format</h2><p>The Software Package Data Exchange (SPDX) is the specification by the Linux Foundation to generate SBOMS for your projects.</p><p>SPDX can be used to describe several types of software components: packages, files, and code snippets. The specification tracks the name, copyright information, licensing information, and many others. SPDX can be created in many file formats: xlsx spreadsheets, YAML, JSON, RDF, XML</p><h2>FAQ</h2><h4><strong>Do you have to generate it manually?</strong></h4><p>Automated tools and built system integration streamline SBOM generation and manual verification whenever necessary.</p><h4><strong>What is a good starting point?</strong></h4><p>Take stock of all your projects and their dependencies, research SBOM standards like CycloneDX, or stick to the ones that come with your cloud provider.</p><p>Make compliance a development practice rather than a chore before the audit.</p><p>Ensure the libraries you&#8217;re adopting are reliable and devoid of any vulnerabilities.</p><h4><strong>SBOM has a vulnerability - What now?</strong></h4><p>There are two kinds of Vulnerabilities - The ones that have a fix released and the ones without a fix. Often, security patches have little to no API changes.  For the ones with a fix, update them immediately. </p><p>The ones without, keep an eye for fixes to adopt them whenever available</p><h4><strong>Where can I learn more about this?</strong></h4><p>A lot of what I&#8217;ve learned came from the <a href="https://github.com/awesomeSBOM/awesome-sbom">Awesome-SBOM</a> repo</p><div><hr></div><p><em>One question for you&#8230;</em></p><p>Have you ever made your project ready for compliance and security audit? </p><p>Share your experience. </p>]]></content:encoded></item><item><title><![CDATA[Python & FastAPI: Slaying Exceptions Like a Pro 😎]]></title><description><![CDATA[Handlers and Middlewares]]></description><link>https://newsletter.bhavaniravi.com/p/python-and-fastapi-slaying-exceptions</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/python-and-fastapi-slaying-exceptions</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Mon, 25 Sep 2023 11:09:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IfD_!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3083814c-7128-47b8-a91a-4bfd8b973f81_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>So, last week, I was sent on a wild expedition into the treacherous realm of Python and FastAPI. My mission? To whip up a way to handle exceptions centrally rather than everywhere in the codebase.</p><p>How hard can it be? </p><p>At least that&#8217;s what I thought until&#8230; But hey, I'm not the kind to back down from a challenge, So here is how I tackled it&#8230;</p><blockquote><p><a href="https://www.bhavaniravi.com/python/fastapi/the-pain-of-building-a-centralized-error-handler-in-fastapi">https://www.bhavaniravi.com/python/fastapi/the-pain-of-building-a-centralized-error-handler-in-fastapi</a></p></blockquote><div><hr></div><p><em>What do you think? Do you have thoughts or questions, or do you want to say hi? </em></p><p><em>Don't be shy; hit me up in the comments or shoot a reply to this newsletter. &#128227;</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.bhavaniravi.com/p/python-and-fastapi-slaying-exceptions/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://newsletter.bhavaniravi.com/p/python-and-fastapi-slaying-exceptions/comments"><span>Leave a comment</span></a></p>]]></content:encoded></item><item><title><![CDATA[Building Your Own Unit Testing Library]]></title><description><![CDATA[Reinventing the wheel for learning]]></description><link>https://newsletter.bhavaniravi.com/p/building-your-own-unit-testing-library</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/building-your-own-unit-testing-library</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Thu, 14 Sep 2023 15:22:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/gjUzPGKSuDM" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I am a big fan of reinventing the wheel. Breaking open things, reading about them, eventually reverse engineering them to add my own spin. One such thing I worked on was an attempt to recreate Pytest - A Python unit testing library.</p><p>Why?  How did it go? I shared them all as a talk at Pycon Australia </p><p>Here you go.</p><div id="youtube2-gjUzPGKSuDM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;gjUzPGKSuDM&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/gjUzPGKSuDM?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><p>Did this fire any of your creative neurons?</p><p>In the next edition, I will share my rocky road with FastAPI and exception handling. Stay tuned.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.bhavaniravi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Tech Deep Dives! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[1-Week of Tech Experiments]]></title><description><![CDATA[What happens when a Freelancer falls sick]]></description><link>https://newsletter.bhavaniravi.com/p/1-week-of-tech-experiments</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/1-week-of-tech-experiments</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Thu, 16 Mar 2023 14:40:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e17bb7f2-0c2e-4e1b-84ad-51f28595c9b4_1861x1069.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>In the mail &#128231;</h2><ul><li><p>Why the experiments?</p></li><li><p>K8s with Kind</p></li><li><p>How do my students make me a better Pythonista?</p></li><li><p>Is create-react-app still a thing?</p></li></ul><blockquote><p><em>Unlike our usual ones, this one is longer and has a lot of links. I appreciate the time you  spend reading this. Once you do let me know if you like to read more like this.</em></p></blockquote><div><hr></div><h3>Uncertain Discomfort</h3><p>Last week was tough. When a freelancer falls sick for 2-weeks, the most common side effect  is that there are no calls or business on week 3. After providing Data Engineering and Infra services for the last three months, that&#8217;s where I was last week. The reality is that living the worst fear wasn&#8217;t easy.</p><p>Thanks to Doomscorlling, I landed on a <a href="https://youtube.com/clip/UgkxR4O1HopnfFmuKGAPKRZK8jf8_cLRP5s8">video of Paul Milled and Ali abdal</a>, where they mentioned <strong><a href="https://youtube.com/clip/UgkxR4O1HopnfFmuKGAPKRZK8jf8_cLRP5s8">Uncertain discomfort</a> </strong>that I felt was written just for me.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.bhavaniravi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Tech Deep Dives! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><blockquote><p><strong>Add this sense of wonder and </strong>possibility to an uncertain discomfort. <strong><a href="https://youtube.com/clip/UgkxR4O1HopnfFmuKGAPKRZK8jf8_cLRP5s8">Uncertain discomfort</a></strong> is terrifying yeah that's pretty scary but if you pair it with Wonder like ooh what might also happen then you can sort of in immunize <strong>yourself for a certain period of time</strong></p></blockquote><p>Now instead of thinking of this as a letdown, how can I use it to my advantage? I planned to dust off projects that I kept on the side.</p><div><hr></div><h2>DevOps &amp; Data</h2><h4>Local Kubernetes Cluster</h4><p>If you ever wanted to learn/try Kubernetes and are afraid of trying it in a Cloud account, try <a href="https://www.bhavaniravi.com/devops/local-k8-cluster-with-kind">setting up a local cluster with Kind</a></p><h4>Robusta</h4><p>No, it&#8217;s not the coffee I was drinking. <a href="https://home.robusta.dev/">Robusta-Dev</a> is a Kubernetes Opensource project I have been eyeing. Robusta installs itself on your k8 cluster on top of Prometheus and sends alters to your slack or Microsoft teams. It also has a UI platform to track the number of alters. </p><p>The project is fairly new and has a lot of scope for contribution. Just going through their Github issues and  <a href="https://www.linkedin.com/in/natanyellin/">Natan Yellin</a>&#8217;s Linkedin profile will help you learn alot about Kubernetes.</p><h4>Apache OSS Data Tools</h4><p>As a freelancer, you must skill up and constantly understand the ecosystem you&#8217;re in. Since I started with Apache, which has a large ecosystem of data tools, I used the time to research and write about the <a href="https://dataanddevops.com/apaches-opensource-world-of-data-tools">different Apache OSS data tools and when to use them</a>.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://newsletter.bhavaniravi.com/p/1-week-of-tech-experiments?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Like what you&#8217;re reading? Share it with a friend </p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.bhavaniravi.com/p/1-week-of-tech-experiments?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.bhavaniravi.com/p/1-week-of-tech-experiments?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div><hr></div><h3>My students make me a better Pythonista.</h3><p>A new batch of the PythonToProject bootcamp started last week, and the students are already thinking about what project to build in the next 5 weeks.</p><ul><li><p>For this batch, I&#8217;ve added a module covering Git and GitHub. <a href="https://youtu.be/2J3LueZZc1w">YES! It&#8217;s available for you for free. </a></p></li><li><p>During the 0th week of the bootcamp, we do primer exercises to solidify some Python concepts. I also introduce my students to advanced concepts. The one function that alarms all beginners in Python classes is __new__. <a href="https://youtu.be/cn3-EJw98ig?t=931">Here is me explaining it to one of my students last year, which came in handy this year</a></p></li><li><p>Do you know Python&#8217;s sorted method looks like this? </p></li></ul><blockquote><p><em>sorted(iterable, /, *, key=None, reverse=False)</em></p></blockquote><ul><li><p><a href="https://www.bhavaniravi.com/python/python-position-and-keyword-only-arguments">What does / and * mean in a Python function definition mean?</a></p></li></ul><h4>1:1 Coaching</h4><p><em>Do you do 1:1 coaching/training?</em> This a question I get a lot. </p><p>I have been thinking about opening a few slots per month for a 1:1 training over a zoom call. I haven&#8217;t jotted down the specifics yet, but if this interests you, reply to this email.</p><div><hr></div><h2>Frontend</h2><h4>Is create-react-app still a thing?</h4><p>I&#8217;m always suspicious of doing things the way I&#8217;ve done years back. I was wary of using `create-react-app` for my new project. The last time I checked, my frontend friends on Twitter Unanimously suggested Vite, so I tried it.</p><p>Here are the reasons I will stick with it</p><ul><li><p>The Super easy-to-set-up the project</p></li><li><p>The <a href="https://v3.vitejs.dev/">Vite</a> Development server is super fast to spin up and reflect new changes.</p></li><li><p>Vite keeps the terminal clean while the browser console displays the actual errors. </p></li></ul><h4>To Ease the pain of Backend Dev&#8217;s Frontend Aspirations</h4><p>I&#8217;m still very much a backend developer. Tailwind CSS replaced the pain of writing barebones CSS with memorizing different class names. Thanks to Google, I found something more than Tailwind CSS. </p><p><strong>Component Libraries </strong>are a library of pre-written components in the particular frontend framework(e.g., React). </p><ul><li><p><a href="https://ant.design/components/overview/">Antd</a></p></li><li><p><a href="https://primereact.org/">Prime React</a></p></li></ul><p>These two looked promising, and I started using Antd. You no longer have to fiddle with CSS or install multiple libraries from different creators. You need this one library for other components. (Grid/Layout/Calender/Datatable</p><div><hr></div><p>Thanks for staying till the end. I hope you learned a thing or two from my tech experiments. But the one thing I want you to leave with is <em>you don&#8217;t need permission to create something outside your 9-5.</em> It&#8217;s scary but also fun.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.bhavaniravi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Tech Deep Dives! Subscribe for free to stay on top of my Tech Experiments and Freelance Life</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How to Plan and Build Your Side Projects?]]></title><description><![CDATA[Twice a year for the past three years, I have been teaching #PythonToProject bootcamp. I've captured the mental models I teach in the course as a blog post. I hope you enjoy and learn from them.]]></description><link>https://newsletter.bhavaniravi.com/p/how-to-plan-and-build-your-side-projects</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/how-to-plan-and-build-your-side-projects</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Fri, 03 Mar 2023 13:32:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IfD_!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3083814c-7128-47b8-a91a-4bfd8b973f81_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Twice a year for the past three years, I have been teaching <em><a href="https://bhavaniravi.gumroad.com/l/LaFSj">#PythonToProject bootcamp</a></em>. I've captured the mental models I teach in the course as a blog post. I hope you enjoy and learn from them.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.bhavaniravi.com/indie-hacking/how-to-plan-and-build-a-programming-project&quot;,&quot;text&quot;:&quot;Read Blog Post&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.bhavaniravi.com/indie-hacking/how-to-plan-and-build-a-programming-project"><span>Read Blog Post</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[UML isn't Dead]]></title><description><![CDATA[Why I think so? Tools to help you Generate UML diagrams]]></description><link>https://newsletter.bhavaniravi.com/p/uml-isnt-dead</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/uml-isnt-dead</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Thu, 16 Feb 2023 05:59:48 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ab0fa0bd-dd4c-435e-a0ba-32fcadb849bf_680x676.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When was the last time you used a UML diagram? That&#8217;s the question that intrigued me. Diagrams are the best way to communicate complex systems. Yet, somehow as a Software Engineer, I felt like I was moving far away from it. </p><p>I believe there is still some life to UML diagrams and the tools around them, and god, was I right?</p><p>In this edition, I want to share a blog post I have been drafting for almost two months.</p><p>I hope you enjoy it, and if you do, share your comments.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.bhavaniravi.com/python/uml-isnt-dead&quot;,&quot;text&quot;:&quot;Read Blog Post&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.bhavaniravi.com/python/uml-isnt-dead"><span>Read Blog Post</span></a></p><p></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.bhavaniravi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Tech Deep Dives! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[5 Myths of Technical Writing]]></title><description><![CDATA[In the mail &#128231; One Tech idea &#128165;: 5 Myths of Technical Writing Read time: 2 minutes. Technical writing is the shiny new toy around the block. Everyone wants to be a technical writer these days. It has a low barrier to entering the tech world. It&#8217;s easier to make a documentation contribution over. A typical technical writing gig pays well. That is a great motivator.]]></description><link>https://newsletter.bhavaniravi.com/p/5-myths-of-technical-writing</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/5-myths-of-technical-writing</guid><dc:creator><![CDATA[Bhavani Ravi]]></dc:creator><pubDate>Wed, 25 Jan 2023 13:23:32 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/516d3965-71ca-45fe-9812-e69e829f3185_600x600.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>In the mail &#128231;</h2><ul><li><p><strong>One Tech idea &#128165;: 5 Myths of Technical Writing</strong></p></li></ul><p><em><strong>Read time: 2 minutes.</strong></em></p><p>Technical writing is the shiny new toy around the block. Everyone wants to be a technical writer these days. It has a low barrier to entering the tech world. It&#8217;s easier to make a documentation contribution over. A typical technical writing gig pays well. That is a great motivator.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.bhavaniravi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Tech Deep Dives! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Let&#8217;s smash a few myths that are going around.</p><ol><li><p><em><strong>Technical writing and technical blogging are not the same</strong></em>. Blogging is a subsection of technical writing. As a technical writer, you will write guides, ebooks, blog posts, video scripts, product demos, Documentation, and more.</p></li><li><p><em><strong>Technical writing has a low barrier to entry</strong></em>. That is true. But you also need to build a good amount of credibility by yourself before applying for gigs.</p></li><li><p><em><strong>Newbies techies can start technical writing easily. </strong></em>I had an opportunity to talk to a few newbies who were utterly overwhelmed by this advice. As a newbie in tech, you will be learning a lot of technical jargon. Writing is a great way to comprehend and understand it. But it is too early for you to write a suggestive tutorial. The best way for you to write is to compile what you learn and publish them. </p></li><li><p> <em><strong>Having a Blog is enough for a portfolio. </strong></em>Despite having a blog, I had difficulty landing a technical writing gig. Writing a blog on different topics doesn&#8217;t sell a great message. Instead, consider compiling your work depending on the gig you are applying for. Suggest techniques and methods on how you will approach writing the blogs. Do your research and share ideas. </p></li><li><p><em><strong>You should be a technical writer because you like blogging. </strong></em>I thought so. I went that route and came right back. Sometimes, things you enjoy should be just for fun. I write more to share knowledge and establish credibility.</p></li></ol><p><em><strong>What does writing for credibility look like?</strong></em></p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/BhavaniRavi_/status/1617767251868024832?s=20&quot;,&quot;full_text&quot;:&quot;After 2 weeks of research and writing, published the blog on Airflow's slack. \n\nJarek, one of the core contributors of Airflow said this  \n\nWriting for this &amp;gt;&amp;gt;&amp;gt;&amp;gt; Writing for money. &quot;,&quot;username&quot;:&quot;BhavaniRavi_&quot;,&quot;name&quot;:&quot;Bhavani Ravi &#128105;&#127995;&#8205;&#128187;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Jan 24 06:12:24 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FnN1dYWaEAUNq1j.png&quot;,&quot;link_url&quot;:&quot;https://t.co/kigZC2v7zO&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:3,&quot;like_count&quot;:45,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>Want to get started with writing for fun, profit, and credibility? </p><h4><em><strong><a href="https://bhavaniravi.gumroad.com/l/technical-blogging">Check out my new book on Technical blogging.</a></strong></em></h4><p></p><p></p><div><hr></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.bhavaniravi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Tech Deep Dives! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[ Zero-ETL, What's that?]]></title><description><![CDATA[1 Tech Idea, 1 Action, 1 Look back]]></description><link>https://newsletter.bhavaniravi.com/p/zero-etl-whats-that</link><guid isPermaLink="false">https://newsletter.bhavaniravi.com/p/zero-etl-whats-that</guid><pubDate>Thu, 05 Jan 2023 05:18:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IfD_!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3083814c-7128-47b8-a91a-4bfd8b973f81_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>In the mail &#128231;</h2><ul><li><p><strong>One Tech idea &#128165;: Zero-ETL</strong></p></li><li><p><strong>One Small Action&#128161;: 2023 Resolutions? - </strong>Don&#8217;t give up just yet</p></li><li><p><strong>DevRetro2022 &#127757; :</strong> Delivering hope via my 2022 reflection</p></li></ul><p><em><strong>Read time: 2 minutes</strong></em></p><div><hr></div><h2>Zero ETL</h2><p>Data Warehousing combines data from multiple sources and stores them in centralized storage. </p><h4>ETL</h4><p>Conventionally, this is achieved by ETL systems, a combination of tools and code(Python/Spark/SQL) to retrieve and transform the data. For Large systems with TBs of data, this might not be a great solution. Since the data is duplicated from its source and pushed into the warehouse, duplication also means that they must be kept in constant sync, and data quality must be ensured at all times.</p><h4>Zero-ETL</h4><p>Zero-ETL enables you to integrate data from different sources and run federated queries on top of them, without explicit ETL pipelines. This means the data can remain in it&#8217;s source but can still be accessed through a centralized warehouse, removing storage and duplication problem. The data is also available near real time, working past data freshness and sync issues. </p><p><strong><a href="https://aws.amazon.com/about-aws/whats-new/2022/11/amazon-aurora-zero-etl-integration-redshift/">Amazon recently announced</a> </strong>ETL-free integration between</p><ol><li><p>Aurora and Redshift.</p></li><li><p>Amazon Redshift and Apache Spark</p></li></ol><p><strong><a href="https://cloud.google.com/blog/products/data-analytics/bigtable-bigquery-federation-brings-hot--cold-data-closer">Google&#8217;s Zero-ETL approach with big Query</a></strong></p><p><strong><a href="https://docs.databricks.com/external-data/jdbc.html">Databricks&#8217; external DB support using JDBC</a></strong></p><p>One downside of Zero-ETL is with the current implementations there is little support for transformation and compliance. But this is just the beginning of the Zero-ETL era. We will keep a watch for more updates.</p><div><hr></div><h2>One Small Action <strong>&#128161;</strong></h2><p>It&#8217;s common to fall off our new year goals after the 1st week of Jan. After all, we are all human, and our willpower is limited. To keep you going, here is a slight nudge. Fill the following in a sticky note and put it where you can see it.</p><pre><code>I will [action] every [frequency] for the next ____ weeks</code></pre><h3><strong>My 2022 Reflection&#128161;</strong></h3><p>2022 was a mixture of good and bad, Uncertain times with specific actions.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://thelearning.dev/a-burned-out-developer-to-indie-hacker-dev-retro-2022&quot;,&quot;text&quot;:&quot;Read DevRetro 2022&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://thelearning.dev/a-burned-out-developer-to-indie-hacker-dev-retro-2022"><span>Read DevRetro 2022</span></a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.bhavaniravi.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Tech Deep Dives! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>