<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Solved by Code</title>
    <link>https://kono.sh/</link>
    <description>Musings of a software engineer, dad, and geek at heart.</description>
    <pubDate>Fri, 03 Apr 2026 23:28:40 +0000</pubDate>
    <image>
      <url>https://i.snap.as/9W6K3NhL.png</url>
      <title>Solved by Code</title>
      <link>https://kono.sh/</link>
    </image>
    <item>
      <title>Uncommon remote working tip: Don&#39;t be so efficient during meetings</title>
      <link>https://kono.sh/uncommon-remote-working-tip-dont-be-so-efficient-during-meetings?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[If you&#39;re a stickler about meeting topics, you&#39;re hurting the remote workers on your team. &#xA;&#xA;Blasphemy? Maybe.&#xA;&#xA;Read on for 2 changes in your meetings to engage and include your remote workers.👇 &#xA;&#xA;!--more--&#xA;&#xA;Meetings are already a waste of time, why wouldn&#39;t you want to minimize the time we are all stuck on one?&#xA;&#xA;I&#39;ve been doing the remote work thing for over a decade. Bear with me on this one.&#xA;&#xA;1. Expect and accept small talk&#xA;&#xA;It&#39;s important to remember that remote workers don&#39;t have the luxury of water-cooler talk. There&#39;s no direct equivalent to chatting with someone in the hall.&#xA;&#xA;Zoom meetings are one of their few human-focused, face-to-face interactions.&#xA;&#xA;Even remote workers need an opportunity for small talk. &#xA;&#xA;To build camaraderie, you need unstructured conversation. By allowing, and expecting, this to occur in your meetings you empower team bonding.&#xA;&#xA;2. When the conversation diverges, give it a chance&#xA;&#xA;And let&#39;s not forget the benefits of serendipity.&#xA;&#xA;Sometimes an unexpected topic comes up. With devs, it&#39;s usually a bug, feature, or design decision. The original conversation prompted someone to pivot.&#xA;&#xA;Allow that pivot. Let the conversation flow.&#xA;&#xA;This isn&#39;t an endorsement for derailing every meeting, dodging the original topics, or dragging things out to the detriment of everyone on the call.&#xA;&#xA;It is a call for intentionality in allowing the team to interact, in a human-centric way.&#xA;&#xA;With their voices, expressions, and emotion. All those things missing from Slack (regardless of how many emojis you use).&#xA;&#xA;TLDR;&#xA;&#xA;Expect and accept small talk&#xA;When the conversation diverges, give it a chance&#xA;&#xA;Making these two changes to your meeting will give your remote workers a chance to bond with the rest of the team. &#xA;&#xA;Don&#39;t deny them that.&#xA;&#xA;#devp #remotework #crosspost #ship30for30&#xA;&#xA;---&#xD;&#xA;&#xD;&#xA;Thanks for reading. If you enjoyed the article subscribe via RSS feed or enter your email in the box below 👇&#xD;&#xA;&#xD;&#xA;!--emailsub--]]&gt;</description>
      <content:encoded><![CDATA[<p>If you&#39;re a stickler about meeting topics, you&#39;re hurting the remote workers on your team.</p>

<p>Blasphemy? Maybe.</p>

<p>Read on for 2 changes in your meetings to engage and include your remote workers.👇</p>



<p>Meetings are already a waste of time, why wouldn&#39;t you want to minimize the time we are all stuck on one?</p>

<p>I&#39;ve been doing the remote work thing for over a decade. Bear with me on this one.</p>

<h2 id="1-expect-and-accept-small-talk" id="1-expect-and-accept-small-talk">1. Expect and accept small talk</h2>

<p>It&#39;s important to remember that <strong>remote workers don&#39;t have the luxury of water-cooler talk</strong>. There&#39;s no direct equivalent to chatting with someone in the hall.</p>

<p>Zoom meetings are one of their few human-focused, face-to-face interactions.</p>

<p>Even remote workers need an opportunity for small talk.</p>

<p>To build camaraderie, you need unstructured conversation. By allowing, and expecting, this to occur in your meetings you empower team bonding.</p>

<h2 id="2-when-the-conversation-diverges-give-it-a-chance" id="2-when-the-conversation-diverges-give-it-a-chance">2. When the conversation diverges, give it a chance</h2>

<p>And let&#39;s not forget the benefits of serendipity.</p>

<p>Sometimes an unexpected topic comes up. With devs, it&#39;s usually a bug, feature, or design decision. The original conversation prompted someone to pivot.</p>

<p>Allow that pivot. Let the conversation flow.</p>

<p>This isn&#39;t an endorsement for derailing every meeting, dodging the original topics, or dragging things out to the detriment of everyone on the call.</p>

<p>It is a call for intentionality in allowing the team to interact, in a human-centric way.</p>

<p>With their voices, expressions, and emotion. All those things missing from Slack (regardless of how many emojis you use).</p>

<p>TLDR;</p>
<ol><li>Expect and accept small talk</li>
<li>When the conversation diverges, give it a chance</li></ol>

<p>Making these two changes to your meeting will give your remote workers a chance to bond with the rest of the team.</p>

<p>Don&#39;t deny them that.</p>

<p><a href="https://kono.sh/tag:devp" class="hashtag"><span>#</span><span class="p-category">devp</span></a> <a href="https://kono.sh/tag:remotework" class="hashtag"><span>#</span><span class="p-category">remotework</span></a> <a href="https://kono.sh/tag:crosspost" class="hashtag"><span>#</span><span class="p-category">crosspost</span></a> <a href="https://kono.sh/tag:ship30for30" class="hashtag"><span>#</span><span class="p-category">ship30for30</span></a></p>

<hr/>

<p>Thanks for reading. If you enjoyed the article subscribe via <a href="https://kono.sh/feed/">RSS feed</a> or enter your email in the box below 👇</p>


]]></content:encoded>
      <guid>https://kono.sh/uncommon-remote-working-tip-dont-be-so-efficient-during-meetings</guid>
      <pubDate>Sun, 20 Nov 2022 05:11:49 +0000</pubDate>
    </item>
    <item>
      <title>Modeling relational data in a DynamoDB Single Table Design is hard to wrap your head around. Start your learning with these 3 resources</title>
      <link>https://kono.sh/modeling-relational-data-in-a-dynamodb-single-table-design-is-hard-to-wrap-your?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[If you want predictable, consistent performance (with single-digit ms response times) for your relational data model, you need to think differently. Start learning with these 3 resources.&#xA;&#xA;!--more--&#xA;&#xA;Even the title of this essay is hard to wrap your head around.&#xA;&#xA;But as someone who has built systems on DynamoDB where sub 8ms response times were maintained well past 5T (yes, trillion) records, I can tell you both the title and the concept are worth learning. To do it, you&#39;ll need to approach modeling from a different point of view.&#xA;&#xA;Thankfully, there&#39;s some excellent resources available. Start with these three.&#xA;&#xA;1. Official DynamoDB Docs&#xA;&#xA;The name is &#34;Best practices for modeling relational data in DynamoDB&#34;, from the AWS docs themselves. Covers a common, recognizable order entry and HR schema, showing the traditional relational model, and then an example of how to reapproach it with an access patterns mindset.&#xA;&#xA;2. Alex Debrie&#39;s one-to-many&#xA;&#xA;Through showing strategies for modeling and querying the most common relationship in a relational data model, Alex hits multiple bite-sized samples. Most devs who have used SQL will have the wheels start turning on how to connect this to more complex schemas they&#39;ve worked with in the past.&#xA;&#xA;3. trek10 Blog Post&#xA;&#xA;Much respect for tackling the Northwind DB as their example. If you&#39;ve been through a few SQL tutorials, you&#39;ll recognize that name. And if you&#39;ve been reading my earlier DDB posts, the video at the start of the post should look familiar.&#xA;&#xA;These three resources will show you the possibilities of thinking about your relational data models differently.&#xA;&#xA;Still stuck wrapping your head around a concept? Let me know in the comments.&#xA;&#xA;This was the Day 23 #ship30for30 #atomicEssay.&#xA;&#xA;#dynamodb #aws #crosspost&#xA;&#xA;---&#xD;&#xA;&#xD;&#xA;Thanks for reading. If you enjoyed the article subscribe via RSS feed or enter your email in the box below 👇&#xD;&#xA;&#xD;&#xA;!--emailsub--]]&gt;</description>
      <content:encoded><![CDATA[<p>If you want predictable, consistent performance (with single-digit ms response times) for your relational data model, you need to think differently. Start learning with these 3 resources.</p>



<p>Even the title of this essay is hard to wrap your head around.</p>

<p>But as someone who has built systems on DynamoDB where sub 8ms response times were maintained well past 5T (yes, trillion) records, I can tell you both the title and the concept are worth learning. To do it, you&#39;ll need to approach modeling from a different point of view.</p>

<p>Thankfully, there&#39;s some excellent resources available. Start with these three.</p>

<h3 id="1-official-dynamodb-docs-https-docs-aws-amazon-com-amazondynamodb-latest-developerguide-bp-relational-modeling-html" id="1-official-dynamodb-docs-https-docs-aws-amazon-com-amazondynamodb-latest-developerguide-bp-relational-modeling-html">1. <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-relational-modeling.html">Official DynamoDB Docs</a></h3>

<p>The name is “Best practices for modeling relational data in DynamoDB”, from the AWS docs themselves. Covers a common, recognizable order entry and HR schema, showing the traditional relational model, and then an example of how to reapproach it with an access patterns mindset.</p>

<h3 id="2-alex-debrie-s-one-to-many-https-www-alexdebrie-com-posts-dynamodb-one-to-many" id="2-alex-debrie-s-one-to-many-https-www-alexdebrie-com-posts-dynamodb-one-to-many">2. <a href="https://www.alexdebrie.com/posts/dynamodb-one-to-many/">Alex Debrie&#39;s one-to-many</a></h3>

<p>Through showing strategies for modeling and querying the most common relationship in a relational data model, Alex hits multiple bite-sized samples. Most devs who have used SQL will have the wheels start turning on how to connect this to more complex schemas they&#39;ve worked with in the past.</p>

<h3 id="3-trek10-blog-post-https-www-trek10-com-blog-dynamodb-single-table-relational-modeling" id="3-trek10-blog-post-https-www-trek10-com-blog-dynamodb-single-table-relational-modeling">3. <a href="https://www.trek10.com/blog/dynamodb-single-table-relational-modeling/">trek10 Blog Post</a></h3>

<p>Much respect for tackling the Northwind DB as their example. If you&#39;ve been through a few SQL tutorials, you&#39;ll recognize that name. And if you&#39;ve been reading my earlier DDB posts, the video at the start of the post should look familiar.</p>

<p>These three resources will show you the possibilities of thinking about your relational data models differently.</p>

<p>Still stuck wrapping your head around a concept? Let me know in the comments.</p>

<p>This was the Day 23 <a href="https://kono.sh/tag:ship30for30" class="hashtag"><span>#</span><span class="p-category">ship30for30</span></a> <a href="https://kono.sh/tag:atomicEssay" class="hashtag"><span>#</span><span class="p-category">atomicEssay</span></a>.</p>

<p><a href="https://kono.sh/tag:dynamodb" class="hashtag"><span>#</span><span class="p-category">dynamodb</span></a> <a href="https://kono.sh/tag:aws" class="hashtag"><span>#</span><span class="p-category">aws</span></a> <a href="https://kono.sh/tag:crosspost" class="hashtag"><span>#</span><span class="p-category">crosspost</span></a></p>

<hr/>

<p>Thanks for reading. If you enjoyed the article subscribe via <a href="https://kono.sh/feed/">RSS feed</a> or enter your email in the box below 👇</p>


]]></content:encoded>
      <guid>https://kono.sh/modeling-relational-data-in-a-dynamodb-single-table-design-is-hard-to-wrap-your</guid>
      <pubDate>Thu, 10 Nov 2022 20:02:23 +0000</pubDate>
    </item>
    <item>
      <title>How 15 minutes a week and a simple list keeps my developer workflow humming</title>
      <link>https://kono.sh/how-15-minutes-a-week-and-a-simple-list-keeps-my-developer-workflow-humming?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[You can&#39;t improve what you don&#39;t track.&#xA;&#xA;When I&#39;m giving demos to or pairing with other devs, they inevitably ask how I put together my workflows and tooling. It, usually, appears smooth and effective. Everything from mnemonic shortcuts in my terminal to instantly opening the AWS console to the right account.&#xA;!--more--&#xA;I can thank two habits for building and keeping my workflows going.&#xA;&#xA;1. Keep a Friction List&#xA;&#xA;As I&#39;m working throughout the day, whenever there&#39;s a little hiccup or annoyance in my workflow, it goes on the Friction List. My natural inclination (and desire for procrastination) says to stop and fix it immediately. But in the spirit of GTD I send it off to a trusted system, knowing I&#39;ll circle back to it eventually.&#xA;&#xA;Here&#39;s a small snippet of things currently on it:&#xA;&#xA;no auto format on save for lua&#xA;ave should default to target1 acct&#xA;fuzzy directory jump history doesn&#39;t sync between laptops&#xA;nested cdk dir changes nvim file listing context&#xA;vaulted doesn&#39;t support image sharing&#xA;&#xA;Each of these has at one point or another annoyed or impeded my flow. Tiny to significant bits of friction that once removed, give back precious seconds to minutes of my day. Capturing them as they occur is a start, but it isn&#39;t enough to stave off the desire to fix them all. For that, I need to...&#xA;&#xA;2. Review and improve for 15 minutes each week&#xA;&#xA;Doing is critical to actually improving. &#xA;&#xA;Each week, 15 minutes of dedicated AM time is spent reviewing the list and making progress on something. It could be a quick new shortcut, or planning out the next feature on a side project.&#xA;&#xA;Any action is fair game, so long as it makes progress on the list.&#xA;&#xA;Now it&#39;s your turn. Do you track the friction in your workflow? If not, how do you know what to improve?&#xA;&#xA;This was the Day 24 #ship30for30 #atomicEssay.&#xA;&#xA;#devp #crosspost&#xA;&#xA;---&#xD;&#xA;&#xD;&#xA;Thanks for reading. If you enjoyed the article subscribe via RSS feed or enter your email in the box below 👇&#xD;&#xA;&#xD;&#xA;!--emailsub--]]&gt;</description>
      <content:encoded><![CDATA[<p>You can&#39;t improve what you don&#39;t track.</p>

<p>When I&#39;m giving demos to or pairing with other devs, they inevitably ask how I put together my workflows and tooling. It, usually, appears smooth and effective. Everything from mnemonic shortcuts in my terminal to instantly opening the AWS console to the right account.

I can thank two habits for building and keeping my workflows going.</p>

<h3 id="1-keep-a-friction-list" id="1-keep-a-friction-list">1. Keep a Friction List</h3>

<p>As I&#39;m working throughout the day, whenever there&#39;s a little hiccup or annoyance in my workflow, it goes on the Friction List. My natural inclination (and desire for procrastination) says to stop and fix it immediately. But in the spirit of GTD I send it off to a trusted system, knowing I&#39;ll circle back to it eventually.</p>

<p>Here&#39;s a small snippet of things currently on it:</p>
<ul><li>no auto format on save for lua</li>
<li>ave should default to target1 acct</li>
<li>fuzzy directory jump history doesn&#39;t sync between laptops</li>
<li>nested cdk dir changes nvim file listing context</li>
<li>vaulted doesn&#39;t support image sharing</li></ul>

<p>Each of these has at one point or another annoyed or impeded my flow. Tiny to significant bits of friction that once removed, give back precious seconds to minutes of my day. Capturing them as they occur is a start, but it isn&#39;t enough to stave off the desire to fix them all. For that, I need to...</p>

<h3 id="2-review-and-improve-for-15-minutes-each-week" id="2-review-and-improve-for-15-minutes-each-week">2. Review and improve for 15 minutes each week</h3>

<p>Doing is critical to actually improving.</p>

<p>Each week, 15 minutes of dedicated AM time is spent reviewing the list and making progress on <strong>something</strong>. It could be a quick new shortcut, or planning out the next feature on a side project.</p>

<p>Any action is fair game, so long as it makes progress on the list.</p>

<p>Now it&#39;s your turn. Do you track the friction in your workflow? If not, how do you know what to improve?</p>

<p>This was the Day 24 <a href="https://kono.sh/tag:ship30for30" class="hashtag"><span>#</span><span class="p-category">ship30for30</span></a> <a href="https://kono.sh/tag:atomicEssay" class="hashtag"><span>#</span><span class="p-category">atomicEssay</span></a>.</p>

<p><a href="https://kono.sh/tag:devp" class="hashtag"><span>#</span><span class="p-category">devp</span></a> <a href="https://kono.sh/tag:crosspost" class="hashtag"><span>#</span><span class="p-category">crosspost</span></a></p>

<hr/>

<p>Thanks for reading. If you enjoyed the article subscribe via <a href="https://kono.sh/feed/">RSS feed</a> or enter your email in the box below 👇</p>


]]></content:encoded>
      <guid>https://kono.sh/how-15-minutes-a-week-and-a-simple-list-keeps-my-developer-workflow-humming</guid>
      <pubDate>Thu, 10 Nov 2022 07:07:59 +0000</pubDate>
    </item>
    <item>
      <title>So you want to learn DynamoDB... skip the fluff &amp; go right to the 400 level course with this video</title>
      <link>https://kono.sh/so-you-want-to-learn-dynamodb?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[If you want to learn DynamoDB, you need a video that makes you 🤯. Here&#39;s my reco for the best one on the topic.&#xA;&#xA;!--more--&#xA;&#xA;There are a lot of videos and blogs about DynamoDB.&#xA;&#xA;And I&#39;ve watched/read more than I care to admit. While most hit the basics, they tend to miss out on the advanced, real-world application. And very few give that [Keanu voice] &#34;Woah&#34; moment.&#xA;&#xA;But the #1 must watch video on DynamoDB I&#39;ve found is Advanced Design Patterns for DynamoDB by Rick Houlihan. (Plenty of Woahs waiting in this one)&#xA;&#xA;Here&#39;s a teaser of what it covers:&#xA;&#xA;Real, concrete examples of relational data modeled in DDB.&#xA;Partition Key and Secondary Key deep dives &amp; best practices&#xA;Examples of mixing different data types in a GSI (Index Overloading design pattern)&#xA;Access pattern analysis from one of the best in the biz.&#xA;An example with a dozen access patterns supported by two GSIs on a single table. 🤯 One of the single best aha moments of any DDB resource around.&#xA;&#xA;And so much more ...&#xA;&#xA;Honestly, this video changed my perspective and continues to influence each of my DDB designs. Sometimes you just have to see the examples put to practice to really understand the power. Why not learn it from a master of his craft?&#xA;&#xA;If you are at all interested in DynamoDB, do yourself a favor and clear your calendar to give this a watch.&#xA;&#xA;This was the Day 22 #ship30for30 #atomicEssay.&#xA;&#xA;#crossPost #dynamodb #aws&#xA;&#xA;---&#xD;&#xA;&#xD;&#xA;Thanks for reading. If you enjoyed the article subscribe via RSS feed or enter your email in the box below 👇&#xD;&#xA;&#xD;&#xA;!--emailsub--]]&gt;</description>
      <content:encoded><![CDATA[<p>If you want to learn DynamoDB, you need a video that makes you 🤯. Here&#39;s my reco for the best one on the topic.</p>



<p>There are a lot of videos and blogs about DynamoDB.</p>

<p>And I&#39;ve watched/read more than I care to admit. While most hit the basics, they tend to miss out on the advanced, real-world application. And very few give that [Keanu voice] “Woah” moment.</p>

<p>But the #1 must watch video on DynamoDB I&#39;ve found is <a href="https://youtu.be/HaEPXoXVf2k">Advanced Design Patterns for DynamoDB</a> by Rick Houlihan. <em>(Plenty of Woahs waiting in this one)</em></p>

<p>Here&#39;s a teaser of what it covers:</p>
<ol><li>Real, concrete examples of relational data modeled in DDB.</li>
<li>Partition Key and Secondary Key deep dives &amp; best practices</li>
<li>Examples of mixing different data types in a GSI (Index Overloading design pattern)</li>
<li>Access pattern analysis from one of the best in the biz.</li>
<li>An example with a dozen access patterns supported by two GSIs on a single table. 🤯 <em>One of the single best aha moments of any DDB resource around.</em></li></ol>

<p>And <strong>so</strong> much more ...</p>

<p>Honestly, this video changed my perspective and continues to influence each of my DDB designs. Sometimes you just have to see the examples put to practice to really understand the power. Why not learn it from a master of his craft?</p>

<p>If you are at all interested in DynamoDB, do yourself a favor and clear your calendar to give this a watch.</p>

<p>This was the Day 22 <a href="https://kono.sh/tag:ship30for30" class="hashtag"><span>#</span><span class="p-category">ship30for30</span></a> <a href="https://kono.sh/tag:atomicEssay" class="hashtag"><span>#</span><span class="p-category">atomicEssay</span></a>.</p>

<p><a href="https://kono.sh/tag:crossPost" class="hashtag"><span>#</span><span class="p-category">crossPost</span></a> <a href="https://kono.sh/tag:dynamodb" class="hashtag"><span>#</span><span class="p-category">dynamodb</span></a> <a href="https://kono.sh/tag:aws" class="hashtag"><span>#</span><span class="p-category">aws</span></a></p>

<hr/>

<p>Thanks for reading. If you enjoyed the article subscribe via <a href="https://kono.sh/feed/">RSS feed</a> or enter your email in the box below 👇</p>


]]></content:encoded>
      <guid>https://kono.sh/so-you-want-to-learn-dynamodb</guid>
      <pubDate>Wed, 09 Nov 2022 07:31:18 +0000</pubDate>
    </item>
    <item>
      <title>3 questions to ask when deciding between a relational DB and DynamoDB for your project</title>
      <link>https://kono.sh/3-questions-to-ask-when-deciding-between-a-relational-db-and-dynamodb-for-your?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[To DynamoDB or not to DynamoDB. That is the question. Here&#39;s 3 more questions to ask (and make a decision).&#xA;&#xA;!--more--&#xA;&#xA;Choice of persistence stores has an outsized impact on project design.&#xA;&#xA;Having architected many projects for the cloud, I&#39;ve wrestled with &#34;which persistence&#34; too many times to count. But it is a decision that needs to be made early and thoughtfully.&#xA;&#xA;Applying these 3 questions quickly narrows down the choices.&#xA;&#xA;1. Is the domain model highly normalized and relational?&#xA;&#xA;While most developers will automatically say yes, they&#39;re wrong.&#xA;&#xA;In my experience, this is very rare. These designs are usually because of a team&#39;s existing relational experience and mental models. Not actually because the domain needs it.&#xA;&#xA;But, if your domain really is highly normalized data, don&#39;t think twice. Go relational.&#xA;&#xA;2. Is it cloud native?&#xA;&#xA;If your project isn&#39;t already taking advantage of cloud native features, forcing in Dynamo might bring more pain than value. Think traditional web frameworks with built-in ORMs, apps on steady EC2 servers, and similar designs.&#xA;&#xA;On the flip side, if you&#39;re already living with fine-grained IAM permissions, async processors off SQS, or highly variable connections (like Lambdas spinning up and down), Dynamo will fit right in.&#xA;&#xA;3. How well do you know the access patterns?&#xA;&#xA;DynamoDB shines when you use access-patterns-first design.&#xA;&#xA;Always start with access patterns. If you don&#39;t know them, figure them out. If you can&#39;t, because they are truly unknowns, choose a relational DB.&#xA;&#xA;Starting with access patterns will lead to a very different design than data model first.&#xA;&#xA;And often times forcing a decision about the access patterns leads to changes in the application design. That&#39;s a good thing.&#xA;&#xA;Notice, I didn&#39;t talk about cost, scaling, or high-availability requirements. More often than not, the prior three questions bring an answer before bridging these topics. But if you&#39;re still on the fence, those are the next design decisions to make.&#xA;&#xA;Drop a comment if you&#39;ve struggled with the decision or have different criteria for picking persistence.&#xA;&#xA;This was the Day 21 #ship30for30 #atomicEssay.&#xA;&#xA;#crossPost #dynamodb #aws #serverless&#xA;&#xA;---&#xD;&#xA;&#xD;&#xA;Thanks for reading. If you enjoyed the article subscribe via RSS feed or enter your email in the box below 👇&#xD;&#xA;&#xD;&#xA;!--emailsub--]]&gt;</description>
      <content:encoded><![CDATA[<p>To DynamoDB or not to DynamoDB. That is the question. Here&#39;s 3 more questions to ask (and make a decision).</p>



<p>Choice of persistence stores has an outsized impact on project design.</p>

<p>Having architected <strong>many</strong> projects for the cloud, I&#39;ve wrestled with “which persistence” too many times to count. But it is a decision that needs to be made early and thoughtfully.</p>

<p>Applying these 3 questions quickly narrows down the choices.</p>

<h3 id="1-is-the-domain-model-highly-normalized-and-relational" id="1-is-the-domain-model-highly-normalized-and-relational">1. Is the domain model highly normalized and relational?</h3>

<p>While most developers will automatically say yes, they&#39;re wrong.</p>

<p>In my experience, this is <strong>very</strong> rare. These designs are usually because of a team&#39;s existing relational experience and mental models. Not actually because the domain needs it.</p>

<p>But, if your domain really is highly normalized data, don&#39;t think twice. Go relational.</p>

<h3 id="2-is-it-cloud-native" id="2-is-it-cloud-native">2. Is it cloud native?</h3>

<p>If your project isn&#39;t already taking advantage of cloud native features, forcing in Dynamo might bring more pain than value. Think traditional web frameworks with built-in ORMs, apps on steady EC2 servers, and similar designs.</p>

<p>On the flip side, if you&#39;re already living with fine-grained IAM permissions, async processors off SQS, or highly variable connections (like Lambdas spinning up and down), Dynamo will fit right in.</p>

<h3 id="3-how-well-do-you-know-the-access-patterns" id="3-how-well-do-you-know-the-access-patterns">3. How well do you know the access patterns?</h3>

<p>DynamoDB shines when you use access-patterns-first design.</p>

<p>Always start with access patterns. If you don&#39;t know them, figure them out. If you can&#39;t, because they are truly unknowns, choose a relational DB.</p>

<p>Starting with access patterns will lead to a very different design than data model first.</p>

<p>And often times forcing a decision about the access patterns leads to changes in the application design. That&#39;s a good thing.</p>

<p>Notice, I didn&#39;t talk about <strong>cost</strong>, <strong>scaling</strong>, or <strong>high-availability</strong> requirements. More often than not, the prior three questions bring an answer before bridging these topics. But if you&#39;re still on the fence, those are the next design decisions to make.</p>

<p>Drop a comment if you&#39;ve struggled with the decision or have different criteria for picking persistence.</p>

<p>This was the Day 21 <a href="https://kono.sh/tag:ship30for30" class="hashtag"><span>#</span><span class="p-category">ship30for30</span></a> <a href="https://kono.sh/tag:atomicEssay" class="hashtag"><span>#</span><span class="p-category">atomicEssay</span></a>.</p>

<p><a href="https://kono.sh/tag:crossPost" class="hashtag"><span>#</span><span class="p-category">crossPost</span></a> <a href="https://kono.sh/tag:dynamodb" class="hashtag"><span>#</span><span class="p-category">dynamodb</span></a> <a href="https://kono.sh/tag:aws" class="hashtag"><span>#</span><span class="p-category">aws</span></a> <a href="https://kono.sh/tag:serverless" class="hashtag"><span>#</span><span class="p-category">serverless</span></a></p>

<hr/>

<p>Thanks for reading. If you enjoyed the article subscribe via <a href="https://kono.sh/feed/">RSS feed</a> or enter your email in the box below 👇</p>


]]></content:encoded>
      <guid>https://kono.sh/3-questions-to-ask-when-deciding-between-a-relational-db-and-dynamodb-for-your</guid>
      <pubDate>Sun, 06 Nov 2022 23:04:14 +0000</pubDate>
    </item>
    <item>
      <title>2 reasons why side projects make you a better software developer</title>
      <link>https://kono.sh/2-reasons-why-side-projects-make-you-a-better-software-developer?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[If you want to grow as a developer, remember the abc&#39;s: Always Be Coding&#xA;!--more--&#xA;&#xA;I&#39;m an avid believer in developers always having a side project.&#xA;&#xA;As a dev with ~200 repos on GitHub, many of them private, you could say I&#39;ve worked on a few. Some big, some small, some were a few days effort and others have been going for years. I keep going for two reasons.&#xA;&#xA;1. You need a safe space to experiment&#xA;&#xA;Under heavy pressure to finish before a deadline is not the time to try out a new framework. Or deploy to a new platform. Or bring in a language you&#39;ve never used.&#xA;&#xA;But as a dev, you need to explore to improve.&#xA;&#xA;Years ago I used to say the blog is my lightsaber. Something I&#39;d craft myself, test out crazy ideas, and generally a thing for focused play. As the blog has become a commodity, side projects became the perfect opportunity to dabble.&#xA;&#xA;2. There&#39;s more opportunities to up-level your skills&#xA;&#xA;Often times as engineers we become known for specific domains or skills. A Golang, Java, Backend, React, Functional, or [fill in the blank] developer. While that&#39;s not always a bad thing, we&#39;re best served by branching out.&#xA;&#xA;Gaining broader, full-stack experience makes us better at our day to day.&#xA;&#xA;Maybe your place of business is an AWS shop, but you never touch anything cloud related. Why not try deploying your side project to Lambda? Or use a non-relational store like DynamoDB, when your work projects only ever use Postgres.&#xA;&#xA;Each tech stack and new mental model learned in our side projects expands our ability to understand complex systems.&#xA;&#xA;Take advantage of that! Be intentional with your growth. Find something that meets your Rule of 3, and give it a run while scratching your own itch.&#xA;&#xA;Remember, Always Be Coding, even if it is just a toy project.&#xA;&#xA;This was the Day 20 #ship30for30 #atomicEssay.&#xA;&#xA;#crossPost #devp&#xA;&#xA;---&#xD;&#xA;&#xD;&#xA;Thanks for reading. If you enjoyed the article subscribe via RSS feed or enter your email in the box below 👇&#xD;&#xA;&#xD;&#xA;!--emailsub--]]&gt;</description>
      <content:encoded><![CDATA[<p>If you want to grow as a developer, remember the abc&#39;s: Always Be Coding
</p>

<p>I&#39;m an avid believer in developers always having a side project.</p>

<p>As a dev with ~200 repos on GitHub, many of them private, you could say I&#39;ve worked on a few. Some big, some small, some were a few days effort and others have been going for years. I keep going for two reasons.</p>

<h2 id="1-you-need-a-safe-space-to-experiment" id="1-you-need-a-safe-space-to-experiment"><strong>1. You need a safe space to experiment</strong></h2>

<p>Under heavy pressure to finish before a deadline is not the time to try out a new framework. Or deploy to a new platform. Or bring in a language you&#39;ve never used.</p>

<p>But as a dev, you <em>need</em> to explore to improve.</p>

<p>Years ago I used to say <strong>the blog is my lightsaber</strong>. Something I&#39;d craft myself, test out crazy ideas, and generally a thing for focused play. As the blog has become a commodity, side projects became the perfect opportunity to dabble.</p>

<h2 id="2-there-s-more-opportunities-to-up-level-your-skills" id="2-there-s-more-opportunities-to-up-level-your-skills"><strong>2. There&#39;s more opportunities to up-level your skills</strong></h2>

<p>Often times as engineers we become known for specific domains or skills. A Golang, Java, Backend, React, Functional, or <em>[fill in the blank]</em> developer. While that&#39;s not always a bad thing, we&#39;re best served by branching out.</p>

<p>Gaining broader, full-stack experience makes us better at our day to day.</p>

<p>Maybe your place of business is an AWS shop, but you never touch anything cloud related. Why not try deploying your side project to Lambda? Or use a non-relational store like DynamoDB, when your work projects only ever use Postgres.</p>

<p><strong>Each tech stack and new mental model learned in our side projects expands our ability to understand complex systems.</strong></p>

<p>Take advantage of that! Be intentional with your growth. Find something that meets your Rule of 3, and give it a run while scratching your own itch.</p>

<p>Remember, <strong>A</strong>lways <strong>B</strong>e <strong>C</strong>oding, even if it is just a toy project.</p>

<p>This was the Day 20 <a href="https://kono.sh/tag:ship30for30" class="hashtag"><span>#</span><span class="p-category">ship30for30</span></a> <a href="https://kono.sh/tag:atomicEssay" class="hashtag"><span>#</span><span class="p-category">atomicEssay</span></a>.</p>

<p><a href="https://kono.sh/tag:crossPost" class="hashtag"><span>#</span><span class="p-category">crossPost</span></a> <a href="https://kono.sh/tag:devp" class="hashtag"><span>#</span><span class="p-category">devp</span></a></p>

<hr/>

<p>Thanks for reading. If you enjoyed the article subscribe via <a href="https://kono.sh/feed/">RSS feed</a> or enter your email in the box below 👇</p>


]]></content:encoded>
      <guid>https://kono.sh/2-reasons-why-side-projects-make-you-a-better-software-developer</guid>
      <pubDate>Sat, 05 Nov 2022 21:34:14 +0000</pubDate>
    </item>
    <item>
      <title>Automation eliminates excuses. Here&#39;s how I used Pipedream to send my blog posts to LinkedIn</title>
      <link>https://kono.sh/automation-eliminates-excuses?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Sometimes the best way to stop procrastinating is to remove the excuses.&#xA;!--more--&#xA;As a few folks know, I&#39;ve been slow to post on LinkedIn. With my last essays I tried using Typeshare for the cross-platform posting. Unfortunately it created enough friction (manually editing the posts to get formatting right? No thanks) to fuel my procrastination.&#xA;&#xA;Today I eliminated that excuse.&#xA;&#xA;Since I&#39;ve been cross-posting each atomic essay over to my blog, I have a lovely RSS feed to use as a trigger for automations. Here&#39;s how I turned an RSS feed into nicely formatted LinkedIn posts and eliminated my excuses.&#xA;&#xA;The magic is in the Pipedream.&#xA;&#xA;Think IFTTT, but with code to do the dirty work. I&#39;ve barely touched it in the past, but thanks to good docs I was up and running in &lt;20 minutes, reading included.&#xA;&#xA;Essentially you just need to create a workflow with 3 steps:&#xA;&#xA;1. Trigger - New Item In Feed&#xA;&#xA;Add a trigger with the RSS New Item in Feed component and an RSS source pointed at your blog&#39;s feed URL.&#xA;&#xA;2. Code - The Magic&#xA;&#xA;For the entries received from my blog, there will be a Title and an encoded content block with HTML. We want to turn that content block into an automatically formatted text (line breaks, UPCASING for headers, etc), prefix it with the title, then send that to LinkedIn.&#xA;&#xA;Pipedream sets itself apart with the ability to write Nodejs, with modules, as a step. Add a step of Node -  Run Node Code.&#xA;&#xA;Grabbing the html-to-text package and a little bit of cleanup (my blog always includes an email signup form after the last hr/ that I want removed for LinkedIn) this was trivial. Full code of the step:&#xA;&#xA;import { convert }  from &#39;html-to-text&#39;;&#xA;&#xA;export default defineComponent({&#xA;  async run({ steps, $ }) {&#xA;    const title = steps.trigger.event.title;&#xA;    const body = steps.trigger.event&#34;content:encoded&#34;&#xA;    const html = body.slice(0, body.lastIndexOf(&#34;hr/&#34;));&#xA;&#xA;    const content = convert(html, {wordwrap: false});&#xA;    $.export(&#34;content&#34;, title + &#34;\n\n&#34; + content);&#xA;  },&#xA;})&#xA;&#xA;3. Action - Post to LinkedIn&#xA;&#xA;Posting to LinkedIn is a prebuilt action in Pipedream.&#xA;&#xA;Simply add the Post to LinkedIn step, configured for type Text (not Article), Public Visibility, and Text set to {{steps.code.content}}. Voila, automatic posting, with nice formatting.&#xA;&#xA;As easy as this was, I think I need to explore more use cases with Pipedream. If you use it, or something else, I&#39;d love to hear what excuses you eliminate through automation.&#xA;&#xA;I know, ship30for30, no blogs, blah blah. But I need a place for long form writing, owning my content library links, and The Blog is my Lightsaber. Future post coming on that last part...*&#xA;&#xA;This was the Day 17 #ship30for30 #atomicEssay.&#xA;&#xA;---&#xD;&#xA;&#xD;&#xA;Thanks for reading. If you enjoyed the article subscribe via RSS feed or enter your email in the box below 👇&#xD;&#xA;&#xD;&#xA;!--emailsub--]]&gt;</description>
      <content:encoded><![CDATA[<p>Sometimes the best way to stop procrastinating is to remove the excuses.

As a few folks know, I&#39;ve been slow to post on LinkedIn. With my last essays I tried using Typeshare for the cross-platform posting. Unfortunately it created enough friction (manually editing the posts to get formatting right? No thanks) to fuel my procrastination.</p>

<p>Today I eliminated that excuse.</p>

<p>Since I&#39;ve been cross-posting each atomic essay over to my blog*, I have a lovely RSS feed to use as a trigger for automations. Here&#39;s how I turned an RSS feed into nicely formatted LinkedIn posts and eliminated my excuses.</p>

<p><strong>The magic is in the <a href="https://pipedream.com/">Pipedream</a>.</strong></p>

<p>Think IFTTT, but with code to do the dirty work. I&#39;ve barely touched it in the past, but thanks to good docs I was up and running in &lt;20 minutes, reading included.</p>

<p>Essentially you just need to create a workflow with 3 steps:</p>

<h2 id="1-trigger-new-item-in-feed" id="1-trigger-new-item-in-feed">1. Trigger – New Item In Feed</h2>

<p>Add a trigger with the RSS New Item in Feed component and an RSS source pointed at your blog&#39;s feed URL.</p>

<h2 id="2-code-the-magic" id="2-code-the-magic">2. Code – The Magic</h2>

<p>For the entries received from my blog, there will be a Title and an encoded content block with HTML. We want to turn that content block into an automatically formatted text (line breaks, UPCASING for headers, etc), prefix it with the title, then send that to LinkedIn.</p>

<p>Pipedream sets itself apart with the ability to write Nodejs, with modules, as a step. <strong>Add a step of Node –&gt; Run Node Code.</strong></p>

<p>Grabbing the <a href="https://www.npmjs.com/package/html-to-text">html-to-text</a> package and a little bit of cleanup (my blog always includes an email signup form after the last <code>&lt;hr/&gt;</code> that I want removed for LinkedIn) this was <strong>trivial.</strong> Full code of the step:</p>

<pre><code>import { convert }  from &#39;html-to-text&#39;;

export default defineComponent({
  async run({ steps, $ }) {
    const title = steps.trigger.event.title;
    const body = steps.trigger.event[&#34;content:encoded&#34;][&#34;#&#34;]
    const html = body.slice(0, body.lastIndexOf(&#34;&lt;hr/&gt;&#34;));

    const content = convert(html, {wordwrap: false});
    $.export(&#34;content&#34;, title + &#34;\n\n&#34; + content);
  },
})
</code></pre>

<h2 id="3-action-post-to-linkedin" id="3-action-post-to-linkedin">3. Action – Post to LinkedIn</h2>

<p>Posting to LinkedIn is a prebuilt action in Pipedream.</p>

<p>Simply add the Post to LinkedIn step, configured for type Text (not Article), Public Visibility, and Text set to <code>{{steps.code.content}}</code>. Voila, automatic posting, with nice formatting.</p>

<p>As easy as this was, I think I need to explore more use cases with Pipedream. If you use it, or something else, I&#39;d love to hear what excuses you eliminate through automation.</p>
<ul><li><em>I know, ship30for30, no blogs, blah blah. But I need a place for long form writing, owning my content library links, and The Blog is my Lightsaber. Future post coming on that last part...</em></li></ul>

<p>This was the Day 17 <a href="https://kono.sh/tag:ship30for30" class="hashtag"><span>#</span><span class="p-category">ship30for30</span></a> <a href="https://kono.sh/tag:atomicEssay" class="hashtag"><span>#</span><span class="p-category">atomicEssay</span></a>.</p>

<hr/>

<p>Thanks for reading. If you enjoyed the article subscribe via <a href="https://kono.sh/feed/">RSS feed</a> or enter your email in the box below 👇</p>


]]></content:encoded>
      <guid>https://kono.sh/automation-eliminates-excuses</guid>
      <pubDate>Wed, 02 Nov 2022 02:38:14 +0000</pubDate>
    </item>
    <item>
      <title>Learning Vim can be overwhelming. Here&#39;s 3 tips from 10+ years of experience to make it easier</title>
      <link>https://kono.sh/learning-vim-can-be-overwhelming?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[There’s a reason “How do I exit Vim?” has been viewed 2.7M times on StackOverflow.&#xA;!--more--&#xA;Vim can be a beast. So many features to learn, new ways of working to understand. In the beginning, even quitting can make your headspin.&#xA;&#xA;Luckily, learning it doesn’t have to be like drinking from a firehose.&#xA;&#xA;I was just a kid when I first picked up Vi. And after 30 years of Vi &amp; Vim, with 10 straight as a primary editor, I have a few suggestions for new vim-ers.&#xA;&#xA;Eat the elephant, one bite at a time&#xA;&#xA;Time and again, when I’m helping someone who has tried and failed with Vim, the loss in early productivity is what scared them away. They tried to get comfortable with all the motions, plugins, everything all at once.&#xA;&#xA;What they should have done is pick one feature and use it ’till it’s normal. Then repeat.&#xA;&#xA;Example: Don’t do every motion all at once. Start by getting comfortable moving by Words with W and B. That’s it.&#xA;&#xA;Don’t worry about anything else for a few days. Work it like a (mostly) regular editor, except when using the word motion.&#xA;&#xA;Do the tutorials&#xA;&#xA;Start with vimtutor. For Neovim, use nvim +Tutor. That’ll get you the basics, and ready for the next step.&#xA;&#xA;  the average user needs something more than vimtutor and less than the help manual.&#xA;&#xA;After vimtutor, move to Learn Vim: The Smart Way, where that quote comes from.&#xA;&#xA;Add plugins slowly&#xA;&#xA;Nothing wrong with starting with one of the beginner configuration bases, like kickstart.nvim or Neovim from Scratch. Also use other people’s config as inspiration. Just don’t pull them in blindly, all at once.&#xA;&#xA;Pick one, get comfortable with it in your workflow, and then add another.&#xA;&#xA;If you’re going to code, I’d suggest coc.nvim or nvim-lspconfig as soon as you’re ready. They both enable VSCode-like IDE power through the magic of LSP servers.&#xA;&#xA;If you go slow, you’ll be productive faster. Don’t rush it.&#xA;&#xA;This Day 16 #ship30for30 #atomicEssay was shipped with this tweet:&#xA;https://twitter.com/bkono101010/status/1586950661685407744&#xA;&#xA;---&#xD;&#xA;&#xD;&#xA;Thanks for reading. If you enjoyed the article subscribe via RSS feed or enter your email in the box below 👇&#xD;&#xA;&#xD;&#xA;!--emailsub--]]&gt;</description>
      <content:encoded><![CDATA[<p>There’s a reason “How do I exit Vim?” has been viewed 2.7M times on StackOverflow.

Vim can be a beast. So many features to learn, new ways of working to understand. In the beginning, even quitting can make your headspin.</p>

<p>Luckily, learning it doesn’t have to be like drinking from a firehose.</p>

<p>I was just a kid when I first picked up Vi. And after 30 years of Vi &amp; Vim, with 10 straight as a primary editor, I have a few suggestions for new vim-ers.</p>

<h2 id="eat-the-elephant-one-bite-at-a-time" id="eat-the-elephant-one-bite-at-a-time">Eat the elephant, one bite at a time</h2>

<p>Time and again, when I’m helping someone who has tried and failed with Vim, the loss in early productivity is what scared them away. They tried to get comfortable with all the motions, plugins, everything all at once.</p>

<p>What they should have done is pick one feature and use it ’till it’s normal. Then repeat.</p>

<p>Example: Don’t do every motion all at once. Start by getting comfortable moving by <strong>W</strong>ords with <code>W</code> and <code>B</code>. That’s it.</p>

<p>Don’t worry about anything else for a few days. Work it like a (mostly) regular editor, except when using the word motion.</p>

<h2 id="do-the-tutorials" id="do-the-tutorials">Do the tutorials</h2>

<p>Start with <code>vimtutor</code>. For Neovim, use <code>nvim +Tutor</code>. That’ll get you the basics, and ready for the next step.</p>

<blockquote><p><em>the average user needs something more than vimtutor and less than the help manual.</em></p></blockquote>

<p>After <code>vimtutor</code>, move to <a href="https://github.com/iggredible/Learn-Vim">Learn Vim: The Smart Way</a>, where that quote comes from.</p>

<h2 id="add-plugins-slowly" id="add-plugins-slowly"><strong>Add plugins slowly</strong></h2>

<p>Nothing wrong with starting with one of the beginner configuration bases, like <a href="https://github.com/nvim-lua/kickstart.nvim">kickstart.nvim</a> or <a href="https://github.com/LunarVim/Neovim-from-scratch">Neovim from Scratch</a>. Also use other people’s config as inspiration. Just don’t pull them in blindly, all at once.</p>

<p>Pick one, get comfortable with it in your workflow, and then add another.</p>

<p>If you’re going to code, I’d suggest <a href="https://github.com/neoclide/coc.nvim">coc.nvim</a> or <a href="https://github.com/neovim/nvim-lspconfig">nvim-lspconfig</a> as soon as you’re ready. They both enable VSCode-like IDE power through the magic of LSP servers.</p>

<p><strong>If you go slow, you’ll be productive faster.</strong> Don’t rush it.</p>

<p>This Day 16 <a href="https://kono.sh/tag:ship30for30" class="hashtag"><span>#</span><span class="p-category">ship30for30</span></a> <a href="https://kono.sh/tag:atomicEssay" class="hashtag"><span>#</span><span class="p-category">atomicEssay</span></a> was shipped with this tweet:
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Day 16 of <a href="https://twitter.com/hashtag/ship30for30?src=hash&amp;ref_src=twsrc%5Etfw">#ship30for30</a><br><br>Learning the ultimate editor (Vim) can seem daunting. Take a few tips from a long time user to ease the process. <a href="https://t.co/iGY6K7vJSV">pic.twitter.com/iGY6K7vJSV</a></p>&mdash; bkono ? (@bkono101010) <a href="https://twitter.com/bkono101010/status/1586950661685407744?ref_src=twsrc%5Etfw">October 31, 2022</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>

<hr/>

<p>Thanks for reading. If you enjoyed the article subscribe via <a href="https://kono.sh/feed/">RSS feed</a> or enter your email in the box below 👇</p>


]]></content:encoded>
      <guid>https://kono.sh/learning-vim-can-be-overwhelming</guid>
      <pubDate>Mon, 31 Oct 2022 05:50:39 +0000</pubDate>
    </item>
    <item>
      <title>Vim is the best editor for software developers, full stop. Here&#39;s 5 reasons why I&#39;m right</title>
      <link>https://kono.sh/vim-is-the-best-editor-for-software-developers-full-stop?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Vim is the most impactful development tool I use.&#xA;&#xA;Don&#39;t worry, I&#39;m not looking for a Vim vs Emacs comments war (it would be a slaughter anyway 😆). I know full well how productive other editors can be. There was even a time I played rockstar coder armed with Visual Studio and Resharper. &#xA;&#xA;To each their own. But for me, the right choice is Vim and its variants. &#xA;&#xA;If you&#39;ve never given it consideration, here&#39;s a few of the reasons I think it&#39;s amazing:&#xA;&#xA;Less memorizing, more mnemonics&#xA;&#xA;By most measures, I&#39;m a keyboard junkie. But even I forgot if that shortcut was ⌘-⌥-S or ⌃-⌘-S. Vim let&#39;s me skip the modifiers and focus on mnemonics.&#xA;&#xA;Go to References is simply gr with my cursor on a symbol. Easy peasy.&#xA;&#xA;Your hands and wrists will thank you&#xA;&#xA;Years ago I had brutally painful, early carpal tunnel.&#xA;&#xA;Turns out, modifier keys, even remapped to better locations, are not my friend. The stretching of the fingers caused too much stress. Since switching to Vim, this is gone.&#xA;&#xA;I hardly ever need a modifier beyond the Control key, and with that mapped to Capslock, there&#39;s no stretch needed. It took many hours of wrist, forearm, and grip training (thanks deadlifts) to recover.&#xA;&#xA;A Vim a day keeps the Carpal away.&#xA;&#xA;Modal editing is amazing&#xA;&#xA;Most of our time is spent reading and navigating code.&#xA;&#xA;Modal editing is natural and very powerful. But it isn&#39;t something that can be explained, only experienced. Give it a couple weeks and you&#39;ll love it ... or hate it. But you&#39;ll understand either way.&#xA;&#xA;As simple or complex as you want&#xA;&#xA;Zero plugins, or over-powered-IDE, Vim has you covered.&#xA;&#xA;Integrate an LSP server and you have all the power of VSCode. Add as many features and snippets as your heart desires.&#xA;&#xA;Or don&#39;t. It&#39;ll still be an exceptionally lightweight, powerful editor.&#xA;&#xA;Opens the door for the best remote pairing tool available&#xA;&#xA;This is a topic for another day, but once you&#39;re living in Vim-land, you gain access to the best remote pairing solution I&#39;ve ever used.&#xA;&#xA;And pairing remotely is one of the most important level-ups a remote working software developer can do.&#xA;&#xA;Long story short, Vim is awesome. Give it a chance, just take it slow. There&#39;s a lot of power in there.&#xA;&#xA;This Day 15 #ship30for30 #atomicEssay was shipped with this tweet:&#xA;https://twitter.com/bkono101010/status/1586578165375373312 &#xA;&#xA;---&#xD;&#xA;&#xD;&#xA;Thanks for reading. If you enjoyed the article subscribe via RSS feed or enter your email in the box below 👇&#xD;&#xA;&#xD;&#xA;!--emailsub--]]&gt;</description>
      <content:encoded><![CDATA[<p>Vim is the most impactful development tool I use.</p>

<p>Don&#39;t worry, I&#39;m not looking for a Vim vs Emacs comments war (it would be a slaughter anyway 😆). I know full well how productive other editors can be. There was even a time I played rockstar coder armed with Visual Studio and Resharper.</p>

<p>To each their own. But for me, the right choice is Vim and its variants.</p>

<p>If you&#39;ve never given it consideration, here&#39;s a few of the reasons I think it&#39;s amazing:</p>

<h2 id="less-memorizing-more-mnemonics" id="less-memorizing-more-mnemonics">Less memorizing, more mnemonics</h2>

<p>By most measures, I&#39;m a keyboard junkie. But even I forgot if that shortcut was ⌘-⌥-S or ⌃-⌘-S. Vim let&#39;s me skip the modifiers and focus on mnemonics.</p>

<p><strong>G</strong>o to <strong>R</strong>eferences is simply <code>gr</code> with my cursor on a symbol. Easy peasy.</p>

<h2 id="your-hands-and-wrists-will-thank-you" id="your-hands-and-wrists-will-thank-you">Your hands and wrists will thank you</h2>

<p>Years ago I had brutally painful, early carpal tunnel.</p>

<p>Turns out, modifier keys, even remapped to better locations, are not my friend. The stretching of the fingers caused too much stress. Since switching to Vim, this is gone.</p>

<p>I hardly ever need a modifier beyond the Control key, and with that mapped to Capslock, there&#39;s no stretch needed. It took many hours of wrist, forearm, and grip training (thanks deadlifts) to recover.</p>

<p>A Vim a day keeps the Carpal away.</p>

<h2 id="modal-editing-is-amazing" id="modal-editing-is-amazing">Modal editing is amazing</h2>

<p>Most of our time is spent reading and navigating code.</p>

<p>Modal editing is natural and very powerful. But it isn&#39;t something that can be explained, only experienced. Give it a couple weeks and you&#39;ll love it ... or hate it. But you&#39;ll understand either way.</p>

<h2 id="as-simple-or-complex-as-you-want" id="as-simple-or-complex-as-you-want">As simple or complex as you want</h2>

<p>Zero plugins, or over-powered-IDE, Vim has you covered.</p>

<p>Integrate an LSP server and you have all the power of VSCode. Add as many features and snippets as your heart desires.</p>

<p>Or don&#39;t. It&#39;ll still be an exceptionally lightweight, powerful editor.</p>

<h2 id="opens-the-door-for-the-best-remote-pairing-tool-available" id="opens-the-door-for-the-best-remote-pairing-tool-available">Opens the door for the best remote pairing tool available</h2>

<p>This is a topic for another day, but once you&#39;re living in Vim-land, you gain access to the best remote pairing solution I&#39;ve ever used.</p>

<p>And pairing remotely is one of the most important level-ups a remote working software developer can do.</p>

<p><strong>Long story short, Vim is awesome.</strong> Give it a chance, just take it slow. There&#39;s a lot of power in there.</p>

<p>This Day 15 <a href="https://kono.sh/tag:ship30for30" class="hashtag"><span>#</span><span class="p-category">ship30for30</span></a> <a href="https://kono.sh/tag:atomicEssay" class="hashtag"><span>#</span><span class="p-category">atomicEssay</span></a> was shipped with this tweet:
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Day 15 of <a href="https://twitter.com/hashtag/ship30for30?src=hash&amp;ref_src=twsrc%5Etfw">#ship30for30</a> ... Hot take, Vim is the best editor for software developers. <br><br>Yeah I said it. Here&#39;s why I&#39;m right? <a href="https://t.co/dbZTPzZlPr">pic.twitter.com/dbZTPzZlPr</a></p>&mdash; bkono ? (@bkono101010) <a href="https://twitter.com/bkono101010/status/1586578165375373312?ref_src=twsrc%5Etfw">October 30, 2022</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>

<hr/>

<p>Thanks for reading. If you enjoyed the article subscribe via <a href="https://kono.sh/feed/">RSS feed</a> or enter your email in the box below 👇</p>


]]></content:encoded>
      <guid>https://kono.sh/vim-is-the-best-editor-for-software-developers-full-stop</guid>
      <pubDate>Sun, 30 Oct 2022 05:02:25 +0000</pubDate>
    </item>
    <item>
      <title>Why should you use Golang when starting new software dev side-projects? (Hint, move faster &amp; spend less)</title>
      <link>https://kono.sh/why-should-you-use-golang-when-starting-new-software-dev-side-projects?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[When starting a new side project, you don&#39;t know what the end result will look like.&#xA;&#xA;As a convert to Golang nearly 7 years ago, I&#39;ve written many small projects with it. Most dead and forgotten, some running for years with virtually no effort. With each new project, I&#39;m convinced Go is the perfect starting point.&#xA;&#xA;Here&#39;s why Golang is a great choice for small side projects:&#xA;&#xA;No distractions, Just code&#xA;&#xA;It Just Works™, and can be as simple as a single main.go file if you choose. No picking a dependency manager or build tool (looking at you JS). The language even encourages you to get to work solving your problem, not spend hours finding &#34;the right package&#34; to solve it for you.&#xA;&#xA;Born for the cloud, besties with serverless&#xA;&#xA;Run it cheap, run it serverless. Go is extremely resource efficient, has blazing fast startup times, and produces self-contained artifacts. It is a perfect match for serverless infrastructure where you pay based on resources consumed.&#xA;&#xA;Add in a few great Github Templates and you have an asset deploying with a CI/CD pipeline to a low-to-no cost serverless infrastructure in minutes.&#xA;&#xA;PoC fast, pivot quickly&#xA;&#xA;With the two prior bullet points in place, Go lets you PoC blazing fast, for virtually zero cost. Doesn&#39;t matter if you&#39;re shipping a CLI, API, or full website. And since we know where you started isn&#39;t where you&#39;re going, Go lets you pivot quickly. No ceremony, just code.&#xA;&#xA;Side projects are all about efficiency with your time. Pick tools that get out of the way and let you move fast and cheap.&#xA;&#xA;Next time you&#39;re thinking of kicking off a new side project, try building it with Golang.Tweet lead-in&#xA;&#xA;Bonus: My best templates aren&#39;t public (yet), but you can use this (https://github.com/bkono/go-lambdatmpl) as a great starting point for AWS Lambda.&#xA;&#xA;This Day 13 #ship30for30 #atomicEssay was shipped with this twitter thread: https://twitter.com/bkono101010/status/1585768527591620609&#xA;&#xA;---&#xD;&#xA;&#xD;&#xA;Thanks for reading. If you enjoyed the article subscribe via RSS feed or enter your email in the box below 👇&#xD;&#xA;&#xD;&#xA;!--emailsub--]]&gt;</description>
      <content:encoded><![CDATA[<p>When starting a new side project, you don&#39;t know what the end result will look like.</p>

<p>As a convert to Golang nearly 7 years ago, I&#39;ve written <em>many</em> small projects with it. Most dead and forgotten, some running for years with virtually no effort. With each new project, I&#39;m convinced Go is the perfect starting point.</p>

<p>Here&#39;s why Golang is a great choice for small side projects:</p>

<h3 id="no-distractions-just-code" id="no-distractions-just-code">No distractions, Just code</h3>

<p>It Just Works™, and can be as simple as a single <code>main.go</code> file if you choose. No picking a dependency manager or build tool (looking at you JS). The language even encourages you to get to work solving your problem, not spend hours finding “the right package” to solve it for you.</p>

<h3 id="born-for-the-cloud-besties-with-serverless" id="born-for-the-cloud-besties-with-serverless">Born for the cloud, besties with serverless</h3>

<p>Run it cheap, run it serverless. Go is extremely resource efficient, has blazing fast startup times, and produces self-contained artifacts. It is a perfect match for serverless infrastructure where you pay based on resources consumed.</p>

<p>Add in a few great Github Templates* and you have an asset deploying with a CI/CD pipeline to a low-to-no cost serverless infrastructure in minutes.</p>

<h3 id="poc-fast-pivot-quickly" id="poc-fast-pivot-quickly">PoC fast, pivot quickly</h3>

<p>With the two prior bullet points in place, Go lets you PoC blazing fast, for virtually zero cost. Doesn&#39;t matter if you&#39;re shipping a CLI, API, or full website. And since we know where you started isn&#39;t where you&#39;re going, Go lets you pivot quickly. No ceremony, just code.</p>

<p>Side projects are all about efficiency with your time. Pick tools that get out of the way and let you move fast and cheap.</p>

<p>Next time you&#39;re thinking of kicking off a new side project, try building it with Golang.Tweet lead-in</p>

<p><em>*Bonus: My best templates aren&#39;t public (yet), but you can use</em> <em>this</em> (<a href="https://github.com/bkono/go-lambdatmpl">https://github.com/bkono/go-lambdatmpl</a>) <em>as a great starting point for AWS Lambda.</em></p>

<p>This Day 13 <a href="https://kono.sh/tag:ship30for30" class="hashtag"><span>#</span><span class="p-category">ship30for30</span></a> <a href="https://kono.sh/tag:atomicEssay" class="hashtag"><span>#</span><span class="p-category">atomicEssay</span></a> was shipped with this twitter thread: <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Day 13 of <a href="https://twitter.com/hashtag/ship30for30?src=hash&amp;ref_src=twsrc%5Etfw">#ship30for30</a> ... Let&#39;s keep Go-ing.<br><br>When working on a software side project, you want to ship fast &amp; cheap. Here&#39;s why Golang should be your Go-to choice ? <a href="https://t.co/NztxrlydBS">pic.twitter.com/NztxrlydBS</a></p>&mdash; bkono ? (@bkono101010) <a href="https://twitter.com/bkono101010/status/1585768527591620609?ref_src=twsrc%5Etfw">October 27, 2022</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>

<hr/>

<p>Thanks for reading. If you enjoyed the article subscribe via <a href="https://kono.sh/feed/">RSS feed</a> or enter your email in the box below 👇</p>


]]></content:encoded>
      <guid>https://kono.sh/why-should-you-use-golang-when-starting-new-software-dev-side-projects</guid>
      <pubDate>Thu, 27 Oct 2022 23:11:38 +0000</pubDate>
    </item>
  </channel>
</rss>