<?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[Crispy Engineering]]></title><description><![CDATA[Software - Development. Architecture. Management. Writing to learn. Learning to thrive.]]></description><link>https://www.crispy-engineering.com</link><image><url>https://substackcdn.com/image/fetch/$s_!7g_F!,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%2F26c2d2d6-e6a2-44f3-9d0c-f484d13de302_500x500.png</url><title>Crispy Engineering</title><link>https://www.crispy-engineering.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 30 Apr 2026 03:30:04 GMT</lastBuildDate><atom:link href="https://www.crispy-engineering.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Dusko Bajic]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[crispyengineering@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[crispyengineering@substack.com]]></itunes:email><itunes:name><![CDATA[Dusko Bajic]]></itunes:name></itunes:owner><itunes:author><![CDATA[Dusko Bajic]]></itunes:author><googleplay:owner><![CDATA[crispyengineering@substack.com]]></googleplay:owner><googleplay:email><![CDATA[crispyengineering@substack.com]]></googleplay:email><googleplay:author><![CDATA[Dusko Bajic]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Mastering the Art of Delegation: Empower, Enable, and Elevate]]></title><description><![CDATA[Delegation is an essential skill for any good leader, especially in the world of engineering.]]></description><link>https://www.crispy-engineering.com/p/mastering-the-art-of-delegation-empower</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/mastering-the-art-of-delegation-empower</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Wed, 29 Jan 2025 06:31:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7g_F!,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%2F26c2d2d6-e6a2-44f3-9d0c-f484d13de302_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Delegation is an essential skill for any good leader, especially in the world of engineering. It might sound easy, but many managers find it challenging. </p><p>With over ten years of experience in engineering, I've found that delegation can be tough for those who always feel the need to stay in control or feel guilty about assigning tasks. However, mastering delegation is crucial for building strong teams and growing as a leader.</p><h3>Why Delegation Matters</h3><p>Delegation is more than just lightening your workload. It's a way to empower your team, boost efficiency, and establish trust. </p><p>Proper delegation also helps your team members grow and learn. By assigning tasks that develop their skills, you are <strong>preparing them for future </strong>leadership roles. When your team feels empowered, they're likely to be more creative and carried out tasks independently. </p><blockquote><p><em>Effective delegation makes people feel respected, trusted, and motivated to succeed.</em></p></blockquote><h3>Problems in Delegating Tasks</h3><p>Managers often struggle with either delegating too little or too much. </p><p><strong>Under-delegation</strong> - Some leaders don't delegate enough because they fear losing control, a mindset which leads to excessive workload for the leader and stunts team growth. It's important to delegate tasks that matter and contribute to team member growth, rather than just simple jobs.</p><p><strong>Over-delegation:</strong> Conversely, over-delegating can overwhelm your team, causing stress and dampening morale. This occurs when leaders assume their team can manage everything without enough guidance. It's crucial to keep a close eye on the team's capacity and aptly match tasks to their skills. Clear instructions and ongoing support can help minimize stress.</p><blockquote><p><em>There is a great explanation about this topic in &#8220;The Manager&#8217;s Path&#8221; book by Camille Fournier.</em></p></blockquote><h3>Tips for Delegating Well</h3><h4>Know What to Delegate</h4><p>Not every task should be moved off your plate! <br>Consider delegating tasks that will challenge your team and promote growth, rather than only the easy ones (yes you should delegate the easy ones). Evaluate your workload to identify opportunities for growth for your team.</p><h4>Match Tasks with Employee Talents</h4><p>Each team member brings unique skills to the table. Understand their aspirations and assign tasks that align with their career goals and strengths.</p><h4>Set Clear Goals</h4><p>Be explicit about expectations and objectives. Allow your team <strong>the freedom to determine</strong> how best to meet these expectations, which will foster both creativity and accountability.</p><h4>Provide Needed Resources</h4><p>Ensure that your team has the necessary tools, sufficient time, and any required training to complete their tasks effectively. Sometimes, this includes connecting them with knowledgeable contacts.</p><h4>Encourage Communication and Feedback</h4><p>Cultivate an atmosphere where feedback is valued. Regular check-ins keep everyone aligned and fortify the bond between you and your team. Remember, feedback goes in both directions.</p><p></p><p>It&#8217;s important that you as a leader unlock your team's full potential and achieve desired outcomes. Effective leadership is about nurturing your team and creating an environment where everyone can perform at their best. Delegation is the tool one cannot avoid and the sooner you master it, the better leader you&#8217;ll become.</p><p>It&#8217;s up to you to recognize those team members with great potential and push them forward. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.crispy-engineering.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.crispy-engineering.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Branching Strategy for the Rest of Us]]></title><description><![CDATA[And why you should restrain from hype more than ever.]]></description><link>https://www.crispy-engineering.com/p/branching-strategy-for-the-rest-of-us</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/branching-strategy-for-the-rest-of-us</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Mon, 30 Oct 2023 22:42:15 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/84c45964-8e5e-4b62-a533-490d585a3c5d_1562x1052.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As I am getting older, I noticed that my sentences often start with &#8220;back in the days&#8221;. It kinda feels like old Albert Trotter from the &#8220;Only Fools and Horses&#8221; sitcom, but here it is.</p><p>Back in the days, we used SVN as a Version Control System (VCS). The most popular client TortoiseSVN was a window into how to push and pull your code to the <strong>trunk</strong>. Wait what?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!s1Jv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffad8f627-dcd8-43cf-af50-8dbdd5709415_638x479.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s1Jv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffad8f627-dcd8-43cf-af50-8dbdd5709415_638x479.jpeg 424w, https://substackcdn.com/image/fetch/$s_!s1Jv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffad8f627-dcd8-43cf-af50-8dbdd5709415_638x479.jpeg 848w, https://substackcdn.com/image/fetch/$s_!s1Jv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffad8f627-dcd8-43cf-af50-8dbdd5709415_638x479.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!s1Jv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffad8f627-dcd8-43cf-af50-8dbdd5709415_638x479.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s1Jv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffad8f627-dcd8-43cf-af50-8dbdd5709415_638x479.jpeg" width="638" height="479" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fad8f627-dcd8-43cf-af50-8dbdd5709415_638x479.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:479,&quot;width&quot;:638,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60153,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&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="" srcset="https://substackcdn.com/image/fetch/$s_!s1Jv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffad8f627-dcd8-43cf-af50-8dbdd5709415_638x479.jpeg 424w, https://substackcdn.com/image/fetch/$s_!s1Jv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffad8f627-dcd8-43cf-af50-8dbdd5709415_638x479.jpeg 848w, https://substackcdn.com/image/fetch/$s_!s1Jv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffad8f627-dcd8-43cf-af50-8dbdd5709415_638x479.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!s1Jv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffad8f627-dcd8-43cf-af50-8dbdd5709415_638x479.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><p>Yes, some version of Trunk Based Development was a thing a long time ago, we just didn&#8217;t give it a name. Then Git became popular as a more powerful solution, and soon enough, GitFlow established itself as a dominant branching model to organize a codebase on VCS.</p><blockquote><p>Before we move on, let me tell you - this is not just another post about trunk-based development.</p></blockquote><h2>Trunk Based Development</h2><p>All the cool kids from the block are using it today. The main idea is to use one long-lived branch and everyone contributes directly, or by merging short-lived branches into it. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Nahf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9091df87-766e-4bc6-88fd-6a21c72a4661_3075x1300.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nahf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9091df87-766e-4bc6-88fd-6a21c72a4661_3075x1300.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Nahf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9091df87-766e-4bc6-88fd-6a21c72a4661_3075x1300.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Nahf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9091df87-766e-4bc6-88fd-6a21c72a4661_3075x1300.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Nahf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9091df87-766e-4bc6-88fd-6a21c72a4661_3075x1300.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Nahf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9091df87-766e-4bc6-88fd-6a21c72a4661_3075x1300.jpeg" width="1456" height="616" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9091df87-766e-4bc6-88fd-6a21c72a4661_3075x1300.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:616,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:209714,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&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_!Nahf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9091df87-766e-4bc6-88fd-6a21c72a4661_3075x1300.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Nahf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9091df87-766e-4bc6-88fd-6a21c72a4661_3075x1300.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Nahf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9091df87-766e-4bc6-88fd-6a21c72a4661_3075x1300.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Nahf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9091df87-766e-4bc6-88fd-6a21c72a4661_3075x1300.jpeg 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><figcaption class="image-caption">Trunk Based Development with a couple of short-lived branches and Continuous Deployment</figcaption></figure></div><p>Nowadays, Trunk Based Development is enabled on Git by imposing the <code>master/main</code> branch as the only long-lived branch. CI/CD pipeline is set on this branch to deploy the changes to production. </p><p>Advocates of this approach will often say that this is the only way that enables true Continuous Deployment and Build-Once-Deploy-More strategy.</p><p>It&#8217;s true. The advantage of this approach is that you can push to the trunk a couple of times a day, and deploy to production at the same rate. Although unintuitive, it reduces the amount of serious defects in the product.</p><p>As a side effect, there is less operational overhead, and fewer communication lines, and eventually, the team working on the product can shrink and be simpler. That&#8217;s because in order to deploy frequently, user stories are often very small. QA process as we think of it is minimal or not existing, as developers are doing QA mostly.<br>As a cherry on top, the just apply different environment variables to the already-built container and deploy it to a different environment. Magic.</p><h2>GitFlow (and its variations)</h2><p>As a branching model, it assumes more than one long-lived branch and a couple of different types of short-lived branches.</p><h3>Feature development</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-_v3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32fe01-77d0-4a21-a40b-37083b9cdf6b_2716x1472.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-_v3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32fe01-77d0-4a21-a40b-37083b9cdf6b_2716x1472.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-_v3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32fe01-77d0-4a21-a40b-37083b9cdf6b_2716x1472.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-_v3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32fe01-77d0-4a21-a40b-37083b9cdf6b_2716x1472.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-_v3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32fe01-77d0-4a21-a40b-37083b9cdf6b_2716x1472.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-_v3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32fe01-77d0-4a21-a40b-37083b9cdf6b_2716x1472.jpeg" width="1456" height="789" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed32fe01-77d0-4a21-a40b-37083b9cdf6b_2716x1472.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:789,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:157191,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-_v3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32fe01-77d0-4a21-a40b-37083b9cdf6b_2716x1472.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-_v3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32fe01-77d0-4a21-a40b-37083b9cdf6b_2716x1472.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-_v3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32fe01-77d0-4a21-a40b-37083b9cdf6b_2716x1472.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-_v3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32fe01-77d0-4a21-a40b-37083b9cdf6b_2716x1472.jpeg 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><figcaption class="image-caption">GitFlow with two long-term branches - main and dev and feature branches (based on dev) where the feature development is being done</figcaption></figure></div><h4>Main Branch (<code>main</code>):</h4><ul><li><p><code>main</code> is a production-ready branch. The code here is stable and usually represents the version of the code that is currently live in the production.</p></li><li><p>Deployments to production are made from this branch.</p></li></ul><h4>Development Branch (dev):</h4><ul><li><p>This is the primary development branch where all the features, bug fixes, or any other code changes are merged.</p></li><li><p>It's ahead of the <code>main</code> branch in terms of new code changes.</p></li></ul><h4>Feature Branch (<code>feature/user-registration</code> as an example):</h4><ul><li><p>Branches created for developing specific features.</p></li><li><p>These branches are short-lived and exist for the duration of specific feature development.</p></li><li><p>They are branched off from dev and will eventually be merged back into dev once the feature is complete.</p></li></ul><h3>Release Procedure with GitFlow</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aULe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14a8f7e-ba6a-4cfe-86bf-9edc64af28e7_3022x1323.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aULe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14a8f7e-ba6a-4cfe-86bf-9edc64af28e7_3022x1323.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aULe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14a8f7e-ba6a-4cfe-86bf-9edc64af28e7_3022x1323.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aULe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14a8f7e-ba6a-4cfe-86bf-9edc64af28e7_3022x1323.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aULe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14a8f7e-ba6a-4cfe-86bf-9edc64af28e7_3022x1323.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aULe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14a8f7e-ba6a-4cfe-86bf-9edc64af28e7_3022x1323.jpeg" width="1456" height="637" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b14a8f7e-ba6a-4cfe-86bf-9edc64af28e7_3022x1323.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:637,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:232026,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aULe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14a8f7e-ba6a-4cfe-86bf-9edc64af28e7_3022x1323.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aULe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14a8f7e-ba6a-4cfe-86bf-9edc64af28e7_3022x1323.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aULe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14a8f7e-ba6a-4cfe-86bf-9edc64af28e7_3022x1323.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aULe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb14a8f7e-ba6a-4cfe-86bf-9edc64af28e7_3022x1323.jpeg 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></p><h4>Release Branch (<code>release/0.9.0</code>)</h4><p>When you are ready for a release, a <code>release</code> branch is created off the <code>dev</code> branch. This branch is used to prepare for a new production release. Any final adjustments (like bug fixes, and documentation) needed for the release are made here.</p><p>No new features are added to this branch.</p><h4>Deployment</h4><p>The release branch undergoes deployments to different environments for testing.</p><ul><li><p>First, it's deployed to a <strong>Staging Environment</strong>.</p></li><li><p>Then, it's deployed to a <strong>Demo Environment</strong>.</p></li><li><p>Once everything is tested and ready, the release branch is merged into the <code>main</code> and is deployed to <strong>Production</strong>.</p></li></ul><p>It's also a good practice to merge the <code>release</code> branch back into <code>dev</code> to ensure any last-minute fixes are incorporated into the <code>development</code> branch.</p><h4>Build-Once-Deploy-More with GitFlow?</h4><p>A general misunderstanding with GitFlow is that every branch needs to have a build pipeline. This is especially true with the <code>master/main</code> branch.</p><p>Nothing is stopping us from using artifacts built from the <code>release </code>branch treating is as immutable artifacts, and promoting them across different environments.</p><h2>Which one is better?</h2><p>Neither and both. Set the process based on the needs of your current context. Here is a quick rule of thumb.</p><h4>When to use GitFlow?</h4><ul><li><p>When you have a junior team.</p></li><li><p>When your release cycle is measured in weeks and not hours.</p></li><li><p>When you start a greenfield project.</p></li><li><p>The expected scope is a couple of months only.</p></li><li><p>If your team doesn&#8217;t have established a developer culture that promotes stability-before-delivery-speed.</p></li></ul><h4>When to use Trunk Based Development?</h4><ul><li><p>When you deploy multiple times a day.</p></li><li><p>Your team is composed of experienced engineers.</p></li><li><p>There is a high trust culture in the team. If you as a dev, break something simple in the production by pushing an untested codebase, you&#8217;ll break the development culture of such a team, and you&#8217;ll feel pretty bad about it. What&#8217;s more, you&#8217;ll undermine the trust given to you.</p></li><li><p>Long-running project, which already found product market fit and is stable to some extent.</p></li><li><p>When the advantages of this approach are greater than the risks of breaking something in the process.</p></li></ul><h2>Reality Check</h2><p>How many of you are working in such a team? Lasts for years, working on a continuous product? Although I admit I am biased toward the software service industry, most people I know are changing projects on a yearly basis, or often.</p><p>Software developers with the luxury of working in the same team, with established trust, culture, and norms, and the same product are usually in big tech.</p><p>I am not rooting against any approach, but I am rooting for you not to follow the hype by default. Take wider context into consideration, look around you calculate the risks, and then make a decision. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.crispy-engineering.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 Crispy Engineering! 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[Choosing to Act: The Mindset of a Proactive Engineer]]></title><description><![CDATA[Proactivity is more than just a buzzword. It's how you set yourself up for growth.]]></description><link>https://www.crispy-engineering.com/p/the-mindset-of-a-proactive-engineer</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/the-mindset-of-a-proactive-engineer</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Sat, 07 Oct 2023 08:57:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qJK4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dea661a-6bea-4dcc-8d7f-65d94a554074_1024x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>During any kind of feedback sessions and performance evaluations one could hear -  <em>&#8220;You could benefit from being more proactive in your team.&#8221;</em></p><p>Why is this? Well, here is most simple answer.</p><blockquote><p>Nobody likes to see coworkers and peers that are sitting silently and waiting for work to come to them.</p><p>What&#8217;s more, if there is no work assigned you won&#8217;t hear of them at all. </p></blockquote><p>While one could argue that it is our job to do what we are assigned to, no one forbids us asking for more work when there is none.</p><p>And usual responses are in line of <em>&#8220;I know, but I just feel I&#8217;m not motivated enough&#8221;</em> or <em>&#8220;This project is the worst I have been working on&#8221;</em>, <em>&#8220;My previous team was much better than this one&#8221;</em> and so on.. <em>&#8220;I&#8217;m not paid to do that.. &#8220;</em> (really?)<br>Justifications.</p><h2>Proactivity is a state of mind</h2><p>And it can take many forms. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qJK4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dea661a-6bea-4dcc-8d7f-65d94a554074_1024x1024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qJK4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dea661a-6bea-4dcc-8d7f-65d94a554074_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qJK4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dea661a-6bea-4dcc-8d7f-65d94a554074_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qJK4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dea661a-6bea-4dcc-8d7f-65d94a554074_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qJK4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dea661a-6bea-4dcc-8d7f-65d94a554074_1024x1024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qJK4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dea661a-6bea-4dcc-8d7f-65d94a554074_1024x1024.jpeg" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8dea661a-6bea-4dcc-8d7f-65d94a554074_1024x1024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&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_!qJK4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dea661a-6bea-4dcc-8d7f-65d94a554074_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qJK4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dea661a-6bea-4dcc-8d7f-65d94a554074_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qJK4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dea661a-6bea-4dcc-8d7f-65d94a554074_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qJK4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dea661a-6bea-4dcc-8d7f-65d94a554074_1024x1024.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><p><strong>You don&#8217;t have a task?</strong><br>Ask for one! Still no task, make one for yourself. At least in software engineering, there are always things you can adjust on your project. Refactorings to be made. Tests to be written. Tech debt to be reduced.</p><p><strong>Your coworker is struggling?</strong><br>Offer your assistance. Help them and teach them. It&#8217;ll feel great!</p><p><strong>You are a junior and lack experience?</strong><br>Do the POC, ask your senior colleagues or managers for an advice. I personally don&#8217;t mind staying up very late to assist younger colleague that is hungry for knowledge and most people I know are the same. </p><p><strong>You&#8217;ve noticed organisational inefficiencies?</strong><br>Do something about it. Come up with a proposal to your manager, it might become a solution and help hundreds of people.</p><p>Thing is, we can always get silent, sit and wait. But:</p><ul><li><p>It&#8217;s a state of mind which doesn&#8217;t spark curiosity. <br>For a software engineer, it is very dangerous.</p></li><li><p>It&#8217;s a state of mind where you&#8217;re not making an opportunity for yourself and depend on others. <br>You can produce perfect code, but, it will drive you to half of the journey.<br>Combine those skills with readiness to contribute to your organisation further and the magic will unfold.</p></li><li><p>It&#8217;s a state of mind that spirals down and makes you miserable because you see that others around you are succeeding, like they have a secret formula or something. <br>No, they just speak up and get noticed, included and promoted.</p></li></ul><h2>Motivation</h2><p>I have a simple rule. When working, I am giving 100+%. There is work to be done, and someone has to do it. There is no one available - then it&#8217;ll be me. And I don&#8217;t have to like it, but still, it has to be done.</p><p>Anything less then that, and I am working against myself, because I am not fully contributing to organisation that I belong to.<br>What&#8217;s worse, I am working against my very colleagues, and their families.</p><p>Yes, one can lack motivation to push things through, to speak up, to contribute, but then ask yourself: Have you tried making a change? Have you led any initiatives? Are you enjoying in doing what you do, in an organisation you&#8217;re at?</p><p>Maybe you&#8217;re in a golden handcuffs, too comfortable with the salary and benefits, or you&#8217;re thinking about your family and the risks involved? These are all valid reasons, no shame in that, but especially then it makes no sense to sit and wait.</p><p>There are many ways to find motivation and usually, motivation cannot be served, nor is anyone obliged to make one for you.</p><p>Act now.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.crispy-engineering.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 Crispy Engineering! 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[The Power Dynamics of Effective Team Management]]></title><description><![CDATA[Tips for building collaborative relationships with your team as a manager]]></description><link>https://www.crispy-engineering.com/p/the-power-dynamics-of-effective-team</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/the-power-dynamics-of-effective-team</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Mon, 10 Apr 2023 16:43:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7g_F!,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%2F26c2d2d6-e6a2-44f3-9d0c-f484d13de302_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As a team manager, you hold a unique position of authority that comes with a certain degree of power imbalance vis-&#224;-vis your team. This power imbalance can create challenges in communication and collaboration with your team, particularly if you are new to management or have not yet fully accepted the reality of your role.</p><blockquote><p>Being a manager is not an extension of a previous role.</p></blockquote><p>It can be easy to fall into the trap of believing that your position as a team manager is simply an extension of your previous technical role, where relationships with team members may have been more equal. </p><p>However, the truth is that as a manager, you have the power to make decisions that affect your team members' careers.</p><blockquote><p>This transition from a technical role to management can create a strain on relationships with team members, particularly if you are not fully aware of the power dynamics at play. </p></blockquote><p>It's not uncommon for new managers to be taken aback when team members begin to keep things from them, as they become less informed than they were previously. To overcome these challenges and improve communication and collaboration with your team, it's important to recognize and address the power dynamics at play. Consider the following strategies:</p><ol><li><p><strong>Avoid monopolizing team discussions.</strong> By refraining from being the first to contribute, you can create an environment that values diverse perspectives and leverages the collective wisdom of your team.</p><p>Leaders eat last, therefore let your team members speak first. </p></li><li><p><strong>Actively invite input from your team members.</strong> Some team members may feel hesitant to contribute to discussion. Maybe that&#8217;s because they expect their manager to drive the conversation, or think they don&#8217;t have anything valuable to add. </p><p>You can create a more inclusive environment by inviting your team members to speak up. It&#8217;s simple.</p></li><li><p><strong>Be intentional in your actions and comments.</strong> As a manager, your words and actions can set the tone for the team. Take care to be thoughtful in your approach to avoid unintended consequences that may negatively impact team morale.</p><p>Remember that video when the teacher takes a deep breath before they enter the classroom. That.</p></li><li><p><strong>Build trust with each team member.</strong> While the inherent power imbalance cannot be completely removed, building trust can create a more transparent and approachable environment.</p><p>While building trust is obvious, it has to be stated all over again. It&#8217;s importance must not be neglected.</p></li><li><p><strong>Empower team members by delegating decision-making responsibilities.</strong> By doing so, you can mitigate power imbalances and foster a culture of collaboration that grows the skill sets of your team members.</p></li></ol><p>Effective team management is a continuous process that requires ongoing effort and attention. While the strategies outlined above can help address the power dynamics at play, there are countless other approaches that can be taken. Experienced managers understand this reality and are constantly adapting their approaches to suit the needs of their team. </p><p>For those new to management, the challenge lies in accepting and adapting to the dynamics of their new role. It may be difficult, but it is essential to prepare for the reality of making decisions based on the power of your position. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.crispy-engineering.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 Crispy Engineering! 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[Are we destined to become ancient software developers?]]></title><description><![CDATA[Get ahead of the game with no-code tools. Learn bubble.io concepts and get super-efficient in product-delivery.]]></description><link>https://www.crispy-engineering.com/p/deliver-web-app-in-one-week-with-bubble</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/deliver-web-app-in-one-week-with-bubble</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Sat, 28 Jan 2023 17:15:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4qzR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b728263-103e-4e81-9215-6213ec3a69b8_960x576.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4qzR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b728263-103e-4e81-9215-6213ec3a69b8_960x576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4qzR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b728263-103e-4e81-9215-6213ec3a69b8_960x576.png 424w, https://substackcdn.com/image/fetch/$s_!4qzR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b728263-103e-4e81-9215-6213ec3a69b8_960x576.png 848w, https://substackcdn.com/image/fetch/$s_!4qzR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b728263-103e-4e81-9215-6213ec3a69b8_960x576.png 1272w, https://substackcdn.com/image/fetch/$s_!4qzR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b728263-103e-4e81-9215-6213ec3a69b8_960x576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4qzR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b728263-103e-4e81-9215-6213ec3a69b8_960x576.png" width="960" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b728263-103e-4e81-9215-6213ec3a69b8_960x576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:862006,&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;:true,&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_!4qzR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b728263-103e-4e81-9215-6213ec3a69b8_960x576.png 424w, https://substackcdn.com/image/fetch/$s_!4qzR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b728263-103e-4e81-9215-6213ec3a69b8_960x576.png 848w, https://substackcdn.com/image/fetch/$s_!4qzR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b728263-103e-4e81-9215-6213ec3a69b8_960x576.png 1272w, https://substackcdn.com/image/fetch/$s_!4qzR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b728263-103e-4e81-9215-6213ec3a69b8_960x576.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><figcaption class="image-caption">Ancient Greeks coding on a laptop (this image is generated with Stable Diffusion)</figcaption></figure></div><p>On January 1st, 2023 I decided to deploy a working web app in two weeks. Two weeks later, <a href="https://www.stashtoread.com/">Stash to Read</a> was live and functional. It&#8217;s a proof of concept, but works.</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/bajicdusko/status/1609499465307815936&quot;,&quot;full_text&quot;:&quot;How I started new year?\n\n&#9989; Bought a new domain&#128578;\n&#9989; Started working on a product\n&#10145;&#65039; Launch in two weeks&quot;,&quot;username&quot;:&quot;bajicdusko&quot;,&quot;name&quot;:&quot;Dusko &#128247;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Sun Jan 01 10:39:10 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:50,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>How did I do it? I built this web app with the no-code tool - <a href="https://www.bubble.io">bubble.io</a>  </p><p>Bubble is one of the most popular no-code solutions for building web applications (source: reddit).</p><h1>Why should we use no-code solutions?</h1><p>Proof-of-Concept and Minimum-Viable-Product type applications are a great fit for no-code solutions. </p><p>You have an idea and a very limited budget. Therefore you wanna push your product to market as fast as possible. You want to validate it and try to find a product-market fit. If so, then seriously consider a no-code tool like Bubble.</p><p>With it, you&#8217;ll be able to build a product in an extremely short period, with the minimal team required.</p><blockquote><p>No-code by its definition means absolute technical debt.</p></blockquote><p>You have to have this in mind, as the tool has its own limitations that might be hard to overcome. Once your product gains traction, your user base grows and you get the funds from investors, you&#8217;ll most probably have to rewrite everything from scratch. </p><h1>Bubble core concepts  </h1><p>Bubble is relying on three major sections to help you define the look-alike and the logic of your app:</p><ul><li><p>design</p></li><li><p>workflow</p></li><li><p>data  </p></li></ul><p>This is exactly how they sorted options in their working environment. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MDdU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0dabdc1-57aa-4047-b6b5-3b8c053613c3_2160x928.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MDdU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0dabdc1-57aa-4047-b6b5-3b8c053613c3_2160x928.png 424w, https://substackcdn.com/image/fetch/$s_!MDdU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0dabdc1-57aa-4047-b6b5-3b8c053613c3_2160x928.png 848w, https://substackcdn.com/image/fetch/$s_!MDdU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0dabdc1-57aa-4047-b6b5-3b8c053613c3_2160x928.png 1272w, https://substackcdn.com/image/fetch/$s_!MDdU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0dabdc1-57aa-4047-b6b5-3b8c053613c3_2160x928.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MDdU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0dabdc1-57aa-4047-b6b5-3b8c053613c3_2160x928.png" width="1456" height="626" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0dabdc1-57aa-4047-b6b5-3b8c053613c3_2160x928.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:626,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:190565,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MDdU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0dabdc1-57aa-4047-b6b5-3b8c053613c3_2160x928.png 424w, https://substackcdn.com/image/fetch/$s_!MDdU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0dabdc1-57aa-4047-b6b5-3b8c053613c3_2160x928.png 848w, https://substackcdn.com/image/fetch/$s_!MDdU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0dabdc1-57aa-4047-b6b5-3b8c053613c3_2160x928.png 1272w, https://substackcdn.com/image/fetch/$s_!MDdU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0dabdc1-57aa-4047-b6b5-3b8c053613c3_2160x928.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><h2>Design </h2><p>This is where we create a UI. A palette of fully functional elements is already at our disposal. Buttons, inputs, dropdowns ..everything. </p><p>All elements are organized into groups. A group can have an orientation, either as a column or a row. By stacking groups, we define the layout of the page. </p><p>80% of our time is spent inside the "Design" section. More specifically in the property editor of specific elements on the screen.  </p><h3>Property editor</h3><p>With the property editor, we define the element style, element behavior in layout, and various conditionals. </p><p><strong>Style</strong> - By adjusting the style, we affect how the element looks like. </p><p><strong>Layout</strong> - By tackling layout properties, we define how the element should stack in its parent group. </p><p><strong>Conditions </strong>- By setting up the conditionals for an element, we are able to affect element behavior when a certain state is changed (like page width for example).</p><p>Using a property editor was usually straightforward for me. There are some specific use cases that I found hard to overcome (more about these in the next posts).</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.crispy-engineering.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.crispy-engineering.com/subscribe?"><span>Subscribe now</span></a></p><p>Every element on the screen can be hooked up with the workflow and the data to connect it to the business logic. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nXiE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454cd5a7-7242-4152-ae8b-9c4d1ac17113_2732x1843.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nXiE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454cd5a7-7242-4152-ae8b-9c4d1ac17113_2732x1843.png 424w, https://substackcdn.com/image/fetch/$s_!nXiE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454cd5a7-7242-4152-ae8b-9c4d1ac17113_2732x1843.png 848w, https://substackcdn.com/image/fetch/$s_!nXiE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454cd5a7-7242-4152-ae8b-9c4d1ac17113_2732x1843.png 1272w, https://substackcdn.com/image/fetch/$s_!nXiE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454cd5a7-7242-4152-ae8b-9c4d1ac17113_2732x1843.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nXiE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454cd5a7-7242-4152-ae8b-9c4d1ac17113_2732x1843.png" width="1456" height="982" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/454cd5a7-7242-4152-ae8b-9c4d1ac17113_2732x1843.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:982,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:740062,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nXiE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454cd5a7-7242-4152-ae8b-9c4d1ac17113_2732x1843.png 424w, https://substackcdn.com/image/fetch/$s_!nXiE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454cd5a7-7242-4152-ae8b-9c4d1ac17113_2732x1843.png 848w, https://substackcdn.com/image/fetch/$s_!nXiE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454cd5a7-7242-4152-ae8b-9c4d1ac17113_2732x1843.png 1272w, https://substackcdn.com/image/fetch/$s_!nXiE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454cd5a7-7242-4152-ae8b-9c4d1ac17113_2732x1843.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><h2>Workflow</h2><p>With workflow, we define a series of actions that needs to happen once a certain event is triggered.</p><p>The most powerful aspect of the workflows is the actions that you can chain one after another. While these actions can be as simple as "<em>Reset input</em>", they can be as complex as "Sign in with Google" or "Charge current user".  </p><p>In the screenshot below, you can see multiple triggers defined. Trigger for the &#8220;Submit button&#8221; click as expanded. It shows the chain of actions necessary to complete when the user clicks a Submit button.</p><p>New actions can be added from the dropdown menu and are organized into logical groups, as shown below.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W4KN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F853e1d13-f8e7-4d19-a54f-23e714bcff9b_2423x1588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W4KN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F853e1d13-f8e7-4d19-a54f-23e714bcff9b_2423x1588.png 424w, https://substackcdn.com/image/fetch/$s_!W4KN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F853e1d13-f8e7-4d19-a54f-23e714bcff9b_2423x1588.png 848w, https://substackcdn.com/image/fetch/$s_!W4KN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F853e1d13-f8e7-4d19-a54f-23e714bcff9b_2423x1588.png 1272w, https://substackcdn.com/image/fetch/$s_!W4KN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F853e1d13-f8e7-4d19-a54f-23e714bcff9b_2423x1588.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W4KN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F853e1d13-f8e7-4d19-a54f-23e714bcff9b_2423x1588.png" width="1456" height="954" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/853e1d13-f8e7-4d19-a54f-23e714bcff9b_2423x1588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:954,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:405336,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!W4KN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F853e1d13-f8e7-4d19-a54f-23e714bcff9b_2423x1588.png 424w, https://substackcdn.com/image/fetch/$s_!W4KN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F853e1d13-f8e7-4d19-a54f-23e714bcff9b_2423x1588.png 848w, https://substackcdn.com/image/fetch/$s_!W4KN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F853e1d13-f8e7-4d19-a54f-23e714bcff9b_2423x1588.png 1272w, https://substackcdn.com/image/fetch/$s_!W4KN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F853e1d13-f8e7-4d19-a54f-23e714bcff9b_2423x1588.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></p><h2>Data</h2><p>This is the area where you'll spend less time, but it is the core of the whole app - the database. </p><p>In Bubble, the database is abstracted a bit. </p><ul><li><p>We have the possibility to create a data type (table), with fields (columns).  </p></li><li><p>It is possible to create joint tables, but you don't really define the foreign keys and similar stuff. </p></li><li><p>We have no control over indexes and query optimizations at all.   </p></li><li><p>Data privacy is granular and is set for every data type and field.</p></li><li><p>You can import and export your database.</p></li><li><p>You have really no control over schema migration from one version to another.</p></li></ul><h1>How do elements, workflows, and data work together?  </h1><ul><li><p>Groups can set the data type they work with. What does this mean? <br>Let&#8217;s say that a group contains text fields for displaying the user&#8217;s first name and last name. In this case, the data type assigned to a group will be '<em><strong>User</strong></em>', and child elements can reference a parent data type and access its properties. </p></li><li><p>The element usually loads specific data of its parent. If the group data type is '<em><strong>User</strong></em>', then on the '<em><strong>username</strong></em>' text element we would say <em>'Parent's User's username'</em> </p></li><li><p>Workflow is linked to one or more events that an element emits. </p><p>For example, if a user clicks a button, a click event will be emitted and the workflow will be triggered.</p></li><li><p>Workflow has access to elements and can read their values, and create or modify records in the database. </p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!M8uQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04097597-f64b-4a14-9b95-4a611590e167_1941x1107.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M8uQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04097597-f64b-4a14-9b95-4a611590e167_1941x1107.jpeg 424w, https://substackcdn.com/image/fetch/$s_!M8uQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04097597-f64b-4a14-9b95-4a611590e167_1941x1107.jpeg 848w, https://substackcdn.com/image/fetch/$s_!M8uQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04097597-f64b-4a14-9b95-4a611590e167_1941x1107.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!M8uQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04097597-f64b-4a14-9b95-4a611590e167_1941x1107.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M8uQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04097597-f64b-4a14-9b95-4a611590e167_1941x1107.jpeg" width="1456" height="830" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/04097597-f64b-4a14-9b95-4a611590e167_1941x1107.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:830,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:184764,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!M8uQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04097597-f64b-4a14-9b95-4a611590e167_1941x1107.jpeg 424w, https://substackcdn.com/image/fetch/$s_!M8uQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04097597-f64b-4a14-9b95-4a611590e167_1941x1107.jpeg 848w, https://substackcdn.com/image/fetch/$s_!M8uQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04097597-f64b-4a14-9b95-4a611590e167_1941x1107.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!M8uQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04097597-f64b-4a14-9b95-4a611590e167_1941x1107.jpeg 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></p><h1>FAQ</h1><p><strong>Does Bubble support the development environment?</strong></p><p>Yes, it does. By default, you can differentiate application versions and data between the development and live environment. In fact, on more expensive packages, you can create multiple environments.</p><p><strong>How to manage user sessions?</strong></p><p>You don&#8217;t, it is done by Bubble. You can always access &#8220;Current user&#8221; and inspect whether the user is logged in or not, to access its data, log the user out, etc.</p><p><strong>Is it possible to query the data directly?</strong></p><p>Let&#8217;s put it like this. You cannot query data in an SQL fashion. There are specific and quite limited options to load data into existing elements. There is a possibility to open the database through API. Still, complex SQL queries are not possible by default. <br>It suffices to say that you can install SQL plugins and run SQL queries against external databases.</p><p><strong>How to control data privacy?</strong></p><p>Bubble base privacy on data type level (database table), where you can specify multiple sets of rules with access rights for every field(column) in data type.</p><p><strong>Who owns the code?</strong></p><p>That&#8217;s not important. You own the intellectual rights and the Bubble cannot copy-paste your app as its own.</p><p><strong>What&#8217;s the quality of generated code?</strong></p><p>Who cares, it works.</p><p><strong>Is it possible to create a top-level style and color scheme?</strong></p><p>Absolutely.</p><p><strong>How to reuse elements between pages?</strong></p><p>You can create reusable elements and add them to multiple pages. The header is one example of the most common reusable element. Sign-up popup might be a good candidate as well.</p><p><strong>How to connect to an external API?</strong></p><p>Via plugin. There is a vast amount of plugins available and one of them is the External API plugin. With it, you can connect to API and consume its content.</p><p><strong>Where is the app hosted?</strong></p><p>On Bubble servers. Depending on the package you purchased, you have specific guarantees over availability.</p><p><strong>Is Bubble GDPR compliant?</strong></p><p>Yes.</p><p><strong>What if need to load millions of records from the database?</strong></p><p>You won&#8217;t. If you have this use case, think of whether Bubble is the right choice for your product. Bubble time-outs queries after 3 seconds.</p><p>Do you have some unanswered questions? Leave a comment below.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.crispy-engineering.com/p/deliver-web-app-in-one-week-with-bubble/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://www.crispy-engineering.com/p/deliver-web-app-in-one-week-with-bubble/comments"><span>Leave a comment</span></a></p><div><hr></div><blockquote><p>Small disclaimer:</p><p><em>I am using Bubble for less than a month and my experience is limited. I wanna learn as well and improve my skills over time. It might be that what I wrote above is absolute nonsense. If so, please let me know, I&#8217;ll be grateful to learn from you!</em> </p></blockquote><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.crispy-engineering.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 Crispy Engineering! 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></p>]]></content:encoded></item><item><title><![CDATA[Optimizing Stripe Fees for Your Business: Tips and Strategies]]></title><description><![CDATA[Launching your business quickly is crucial, but don't forget the importance of optimizing payment costs for the future of your online business.]]></description><link>https://www.crispy-engineering.com/p/optimizing-stripe-fees-for-your-business</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/optimizing-stripe-fees-for-your-business</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Mon, 02 Jan 2023 08:34:29 GMT</pubDate><enclosure url="https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/b42ab1f2-99e5-438c-a6c3-7d2fb7d13719_1920x1282.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>This is a Part #2 post on card processing fees. I will explain in details how Stripe fees work and what to pay attention to when setting up Stripe account, so that you avoid unwanted costs.</p><p>Part #1 is about generic explanation of how card processing fees work. In case you missed it you can read it through here.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:93878778,&quot;url&quot;:&quot;https://www.crispy-engineering.com/p/credit-card-processing-fees-what&quot;,&quot;publication_id&quot;:864226,&quot;publication_name&quot;:&quot;Crispy Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/26c2d2d6-e6a2-44f3-9d0c-f484d13de302_500x500.png&quot;,&quot;title&quot;:&quot;Credit Card Processing Fees: What You Need to Know&quot;,&quot;truncated_body_text&quot;:&quot;As of January 31st Gumroad made an announcement that they will increase their margin to 10%. In the email they sent, there is one tiny detail (highlighted below). They presented it in a way that creators should be happy because of transparency, but in reality, they are saying&quot;,&quot;date&quot;:&quot;2023-01-02T08:16:41.097Z&quot;,&quot;like_count&quot;:0,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:26656427,&quot;name&quot;:&quot;Dusko Bajic&quot;,&quot;previous_name&quot;:&quot;Dusko&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/af9935ce-4999-4981-8380-7e789a5cdce4_2226x3021.jpeg&quot;,&quot;bio&quot;:&quot;I write about leadership in tech, software development and startups &#8226; dad of a beautiful girl &#8226; VP of Engineering &#8226; photography &#128247;&quot;,&quot;profile_set_up_at&quot;:&quot;2021-09-26T20:28:20.335Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:804726,&quot;user_id&quot;:26656427,&quot;publication_id&quot;:864226,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:864226,&quot;name&quot;:&quot;Crispy Engineering&quot;,&quot;subdomain&quot;:&quot;crispyengineering&quot;,&quot;custom_domain&quot;:&quot;www.crispy-engineering.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Software - Development. Architecture. Management. Writing to learn. Learning to thrive.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/26c2d2d6-e6a2-44f3-9d0c-f484d13de302_500x500.png&quot;,&quot;author_id&quot;:26656427,&quot;theme_var_background_pop&quot;:&quot;#99A2F1&quot;,&quot;created_at&quot;:&quot;2022-04-26T11:01:58.204Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Crispy Engineering by Dusko Bajic&quot;,&quot;copyright&quot;:&quot;Dusko Bajic&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;}}],&quot;twitter_screen_name&quot;:&quot;bajicdusko&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;inviteAccepted&quot;:true}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:false,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://www.crispy-engineering.com/p/credit-card-processing-fees-what?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!7g_F!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F26c2d2d6-e6a2-44f3-9d0c-f484d13de302_500x500.png"><span class="embedded-post-publication-name">Crispy Engineering</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Credit Card Processing Fees: What You Need to Know</div></div><div class="embedded-post-body">As of January 31st Gumroad made an announcement that they will increase their margin to 10%. In the email they sent, there is one tiny detail (highlighted below). They presented it in a way that creators should be happy because of transparency, but in reality, they are saying&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 years ago &#183; Dusko Bajic</div></a></div></blockquote><p>To unwrap Stripe fees, let&#8217;s start with two most basic factors:</p><ul><li><p>Business location</p></li><li><p>Customer location</p></li></ul><h4>Business location</h4><p>Stripe has a similar, but different fee structure depending on the country in which you registered your account.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NiRl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71b41480-105e-44ec-a635-0e533b40c353_611x342.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NiRl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71b41480-105e-44ec-a635-0e533b40c353_611x342.png 424w, https://substackcdn.com/image/fetch/$s_!NiRl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71b41480-105e-44ec-a635-0e533b40c353_611x342.png 848w, https://substackcdn.com/image/fetch/$s_!NiRl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71b41480-105e-44ec-a635-0e533b40c353_611x342.png 1272w, https://substackcdn.com/image/fetch/$s_!NiRl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71b41480-105e-44ec-a635-0e533b40c353_611x342.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NiRl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71b41480-105e-44ec-a635-0e533b40c353_611x342.png" width="611" height="342" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/71b41480-105e-44ec-a635-0e533b40c353_611x342.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:342,&quot;width&quot;:611,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:43540,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:true,&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_!NiRl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71b41480-105e-44ec-a635-0e533b40c353_611x342.png 424w, https://substackcdn.com/image/fetch/$s_!NiRl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71b41480-105e-44ec-a635-0e533b40c353_611x342.png 848w, https://substackcdn.com/image/fetch/$s_!NiRl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71b41480-105e-44ec-a635-0e533b40c353_611x342.png 1272w, https://substackcdn.com/image/fetch/$s_!NiRl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F71b41480-105e-44ec-a635-0e533b40c353_611x342.png 1456w" sizes="100vw" loading="lazy" 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><figcaption class="image-caption">Card payment processing fees for domestic customers</figcaption></figure></div><p>The most important factor, defined by business location is the choice of settlement currency.</p><p><strong>Settlement currency</strong></p><p>Settlement currency is the currency of your bank account. Usually, this is the official currency of your country.</p><p>In some countries, you can set a default settlement currency to be USD, even if the official currency is some other (like EUR, or GBP). This is important because you will avoid currency conversions. With Stripe, you can set multiple bank accounts and have transactions automatically routed to a bank account with matching currency.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_Uxt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f217b-e9c3-4805-aa66-ae6b9dfa64cc_3704x1502.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_Uxt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f217b-e9c3-4805-aa66-ae6b9dfa64cc_3704x1502.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_Uxt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f217b-e9c3-4805-aa66-ae6b9dfa64cc_3704x1502.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_Uxt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f217b-e9c3-4805-aa66-ae6b9dfa64cc_3704x1502.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_Uxt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f217b-e9c3-4805-aa66-ae6b9dfa64cc_3704x1502.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_Uxt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f217b-e9c3-4805-aa66-ae6b9dfa64cc_3704x1502.jpeg" width="1456" height="590" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e95f217b-e9c3-4805-aa66-ae6b9dfa64cc_3704x1502.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:590,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:345572,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_Uxt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f217b-e9c3-4805-aa66-ae6b9dfa64cc_3704x1502.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_Uxt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f217b-e9c3-4805-aa66-ae6b9dfa64cc_3704x1502.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_Uxt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f217b-e9c3-4805-aa66-ae6b9dfa64cc_3704x1502.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_Uxt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f217b-e9c3-4805-aa66-ae6b9dfa64cc_3704x1502.jpeg 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><figcaption class="image-caption">Card payment processing fees without currency conversion involved</figcaption></figure></div><p>Depending on the type of business you&#8217;re running, you can make early optimization if you know where your future customers are coming from. This is a bit difficult for digital products, as your market is the whole world. Therefore, some other rules apply as well, as customer location plays a huge role.</p><h3>Customer location</h3><p>On the opposite side of the transaction flow, there is a customer with similar factors. What affects the card processing fee are the following:</p><ul><li><p><strong>country of residence</strong></p><p>Location of the bank that issued your card.</p></li><li><p><strong>credit card currency</strong></p><p>This is the currency of your bank account, usually, the official currency of the customer&#8217;s country/region.</p></li></ul><p>The parameters above are affecting whether additional fees will apply to the transaction flow. Those additional fees are:</p><ul><li><p><strong>cross-border fees</strong> (often called international payments) </p></li><li><p><strong>currency conversion fees</strong></p></li></ul><h4>Cross-Border Fees (international payments)</h4><p>Whenever someone uses a card issued in a country/region other than the country/region of a POS, a cross-border fee will apply. There is no difference in whether the card is present or not. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8URX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F88e768a1-5a16-4537-a69f-f7defd2a2c6d_5464x4096.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8URX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F88e768a1-5a16-4537-a69f-f7defd2a2c6d_5464x4096.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8URX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F88e768a1-5a16-4537-a69f-f7defd2a2c6d_5464x4096.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8URX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F88e768a1-5a16-4537-a69f-f7defd2a2c6d_5464x4096.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8URX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F88e768a1-5a16-4537-a69f-f7defd2a2c6d_5464x4096.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8URX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F88e768a1-5a16-4537-a69f-f7defd2a2c6d_5464x4096.jpeg" width="1456" height="1091" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/88e768a1-5a16-4537-a69f-f7defd2a2c6d_5464x4096.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1091,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1215679,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8URX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F88e768a1-5a16-4537-a69f-f7defd2a2c6d_5464x4096.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8URX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F88e768a1-5a16-4537-a69f-f7defd2a2c6d_5464x4096.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8URX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F88e768a1-5a16-4537-a69f-f7defd2a2c6d_5464x4096.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8URX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F88e768a1-5a16-4537-a69f-f7defd2a2c6d_5464x4096.jpeg 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><figcaption class="image-caption">Stripe cross-border fees</figcaption></figure></div><p>With Stripe, this is where it comes to play when you choose the country to register your Stripe account. Registering in the USA means that every payment with a card issued outside of the USA will have a cross-border fee added on top of the domestic fee.</p><p>In the table below, we can see payment processing fees with a cross-border fee included.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ALDN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F45c29024-b3b4-424d-887c-265d7a6c9f35_1480x293.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ALDN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F45c29024-b3b4-424d-887c-265d7a6c9f35_1480x293.png 424w, https://substackcdn.com/image/fetch/$s_!ALDN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F45c29024-b3b4-424d-887c-265d7a6c9f35_1480x293.png 848w, https://substackcdn.com/image/fetch/$s_!ALDN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F45c29024-b3b4-424d-887c-265d7a6c9f35_1480x293.png 1272w, https://substackcdn.com/image/fetch/$s_!ALDN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F45c29024-b3b4-424d-887c-265d7a6c9f35_1480x293.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ALDN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F45c29024-b3b4-424d-887c-265d7a6c9f35_1480x293.png" width="1456" height="288" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/45c29024-b3b4-424d-887c-265d7a6c9f35_1480x293.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:288,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:71841,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ALDN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F45c29024-b3b4-424d-887c-265d7a6c9f35_1480x293.png 424w, https://substackcdn.com/image/fetch/$s_!ALDN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F45c29024-b3b4-424d-887c-265d7a6c9f35_1480x293.png 848w, https://substackcdn.com/image/fetch/$s_!ALDN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F45c29024-b3b4-424d-887c-265d7a6c9f35_1480x293.png 1272w, https://substackcdn.com/image/fetch/$s_!ALDN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F45c29024-b3b4-424d-887c-265d7a6c9f35_1480x293.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Card payment processing fees with cross-border fees included</figcaption></figure></div><blockquote><p>For someone running an online business, this table is more relevant than the previous one. If you&#8217;re globally present, selling digital products, chances are you will have many international buyers.</p></blockquote><h4>Currency conversion</h4><p>With currency conversion in place, things get very shady. </p><p>For businesses, currency conversion happens when the card is charged in a different currency than the settlement currency.</p><p>Fortunately, businesses can affect this by choosing the charge currency for transactions. This is also called a <strong>presentment</strong> <strong>currency</strong>, as the product price will be presented to the customer with that currency.</p><p>Almost always, businesses match presentment currency with settlement currency, in order to avoid additional transaction costs. This also means that the costs of currency conversion are transferred to the customer, as the customer bank will do the currency conversion from local currency to presentment currency. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lj_X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F18b4bd10-807e-4302-b9ea-35a702fa59e6_3701x1485.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lj_X!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F18b4bd10-807e-4302-b9ea-35a702fa59e6_3701x1485.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Lj_X!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F18b4bd10-807e-4302-b9ea-35a702fa59e6_3701x1485.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Lj_X!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F18b4bd10-807e-4302-b9ea-35a702fa59e6_3701x1485.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Lj_X!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F18b4bd10-807e-4302-b9ea-35a702fa59e6_3701x1485.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lj_X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F18b4bd10-807e-4302-b9ea-35a702fa59e6_3701x1485.jpeg" width="1456" height="584" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/18b4bd10-807e-4302-b9ea-35a702fa59e6_3701x1485.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:584,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:350533,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Lj_X!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F18b4bd10-807e-4302-b9ea-35a702fa59e6_3701x1485.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Lj_X!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F18b4bd10-807e-4302-b9ea-35a702fa59e6_3701x1485.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Lj_X!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F18b4bd10-807e-4302-b9ea-35a702fa59e6_3701x1485.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Lj_X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F18b4bd10-807e-4302-b9ea-35a702fa59e6_3701x1485.jpeg 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><figcaption class="image-caption">Card payment processing with currency conversion optimized for business</figcaption></figure></div><p>A negative side effect of this is that customers will see one price on the product, and they will be charged more, due to the local bank FX rate. This leads to unclear costs to customers.</p><p>In some businesses (especially in service B2C), customers will complain about unclear costs. This is  where the business can offer customers the choice of the currency they wanna be presented/charged with (the customer decides about the presentment currency).</p><p>This means that the transaction could be more expensive for the business, but on the other hand, the business could generate more sales due to the best user experience.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-Yw6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0f816cf2-c227-4281-ba66-c9bc2b8dd88a_3707x1458.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Yw6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0f816cf2-c227-4281-ba66-c9bc2b8dd88a_3707x1458.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-Yw6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0f816cf2-c227-4281-ba66-c9bc2b8dd88a_3707x1458.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-Yw6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0f816cf2-c227-4281-ba66-c9bc2b8dd88a_3707x1458.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-Yw6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0f816cf2-c227-4281-ba66-c9bc2b8dd88a_3707x1458.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Yw6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0f816cf2-c227-4281-ba66-c9bc2b8dd88a_3707x1458.jpeg" width="1456" height="573" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/0f816cf2-c227-4281-ba66-c9bc2b8dd88a_3707x1458.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:573,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:357016,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-Yw6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0f816cf2-c227-4281-ba66-c9bc2b8dd88a_3707x1458.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-Yw6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0f816cf2-c227-4281-ba66-c9bc2b8dd88a_3707x1458.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-Yw6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0f816cf2-c227-4281-ba66-c9bc2b8dd88a_3707x1458.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-Yw6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0f816cf2-c227-4281-ba66-c9bc2b8dd88a_3707x1458.jpeg 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><figcaption class="image-caption">Card payment processing with currency conversion optimized for business</figcaption></figure></div><p>This results in the most expensive version of transactions for a business.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8hgl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F27c6e3a7-bf66-4edd-9adc-0dbe8799185a_1775x356.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8hgl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F27c6e3a7-bf66-4edd-9adc-0dbe8799185a_1775x356.png 424w, https://substackcdn.com/image/fetch/$s_!8hgl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F27c6e3a7-bf66-4edd-9adc-0dbe8799185a_1775x356.png 848w, https://substackcdn.com/image/fetch/$s_!8hgl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F27c6e3a7-bf66-4edd-9adc-0dbe8799185a_1775x356.png 1272w, https://substackcdn.com/image/fetch/$s_!8hgl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F27c6e3a7-bf66-4edd-9adc-0dbe8799185a_1775x356.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8hgl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F27c6e3a7-bf66-4edd-9adc-0dbe8799185a_1775x356.png" width="1456" height="292" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/27c6e3a7-bf66-4edd-9adc-0dbe8799185a_1775x356.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:292,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:143892,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!8hgl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F27c6e3a7-bf66-4edd-9adc-0dbe8799185a_1775x356.png 424w, https://substackcdn.com/image/fetch/$s_!8hgl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F27c6e3a7-bf66-4edd-9adc-0dbe8799185a_1775x356.png 848w, https://substackcdn.com/image/fetch/$s_!8hgl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F27c6e3a7-bf66-4edd-9adc-0dbe8799185a_1775x356.png 1272w, https://substackcdn.com/image/fetch/$s_!8hgl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F27c6e3a7-bf66-4edd-9adc-0dbe8799185a_1775x356.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Card payment processing fees when the business pays currency conversion costs</figcaption></figure></div><blockquote><p>If you&#8217;re starting the business, a piece of advice is to always match presentment currency with settlement currency.</p><p>Your customers will see the price in foreign currency and they will expect some currency conversion on their side. </p><p>Othewise, transaction costs become too expensive.</p></blockquote><h4>UX dark pattern in presenting the product price</h4><p>What businesses should never do, is &#8220;localize&#8221; the prices to customer currency, and charge in another currency.</p><p>Gumroad is letting this &#8220;UX dark pattern&#8221; happen.</p><p>On Gumroad you can present the price of your product in EUR, but the customer will be charged in USD every time. They do the currency conversion for UI purposes only. It&#8217;s safe to say that the FX rate that Gumroad used is different from the FX rate of your bank.</p><p>This means that the price that customer sees and the charge amount on their card will be different due to currency conversions applied by their bank.</p><blockquote><p>Be extra careful, if you intend to make a conversion from one currency to another, just for the localization's sake. No one likes to be charged for something they didn&#8217;t expect.</p></blockquote><h2>In summary</h2><p>When selling your digital product, make sure to think about card processing fees early by factoring in:</p><ul><li><p>Your location (business currency)</p></li><li><p>Customer location (customer currency)</p></li></ul><p>This way you will be able to mitigate additional costs from:</p><ul><li><p>cross-border fees</p></li><li><p>unwanted currency conversion</p></li><li><p>and currency conversion fees.</p></li></ul><p>It&#8217;s important to remember if you have a huge transactional volume, you can always negotiate better terms with Stripe. Any payment processor will rather do the discount than let you redirect your traffic to some other payment processor.</p><p>At some point, the leverage is on the business side.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.crispy-engineering.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 Crispy Engineering! 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></p>]]></content:encoded></item><item><title><![CDATA[Credit Card Processing Fees: What You Need to Know]]></title><description><![CDATA[If you are starting an online business, make sure to understand how to optimize payment transaction costs.]]></description><link>https://www.crispy-engineering.com/p/credit-card-processing-fees-what</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/credit-card-processing-fees-what</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Mon, 02 Jan 2023 08:16:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F16c9d99c-31f6-4e72-a1f5-603bdbe87ce2_11705x8253.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As of January 31st Gumroad made an announcement that they will increase their margin to 10%. In the email they sent, there is one tiny detail (highlighted below).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nx-s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb4dc05-5c84-4c8c-bf2f-53a3e47d96db_1452x812.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nx-s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb4dc05-5c84-4c8c-bf2f-53a3e47d96db_1452x812.png 424w, https://substackcdn.com/image/fetch/$s_!nx-s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb4dc05-5c84-4c8c-bf2f-53a3e47d96db_1452x812.png 848w, https://substackcdn.com/image/fetch/$s_!nx-s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb4dc05-5c84-4c8c-bf2f-53a3e47d96db_1452x812.png 1272w, https://substackcdn.com/image/fetch/$s_!nx-s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb4dc05-5c84-4c8c-bf2f-53a3e47d96db_1452x812.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nx-s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb4dc05-5c84-4c8c-bf2f-53a3e47d96db_1452x812.png" width="1452" height="812" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/efb4dc05-5c84-4c8c-bf2f-53a3e47d96db_1452x812.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:812,&quot;width&quot;:1452,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:571301,&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_!nx-s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb4dc05-5c84-4c8c-bf2f-53a3e47d96db_1452x812.png 424w, https://substackcdn.com/image/fetch/$s_!nx-s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb4dc05-5c84-4c8c-bf2f-53a3e47d96db_1452x812.png 848w, https://substackcdn.com/image/fetch/$s_!nx-s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb4dc05-5c84-4c8c-bf2f-53a3e47d96db_1452x812.png 1272w, https://substackcdn.com/image/fetch/$s_!nx-s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fefb4dc05-5c84-4c8c-bf2f-53a3e47d96db_1452x812.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>They presented it in a way that creators should be happy because of transparency, but in reality, they are saying</p><blockquote><p><em>We&#8217;re gonna take 10%.</em></p><p><em>On top of that, you will be charged credit card processing fees. </em></p><p><em>How much? - Well&#8230;</em></p></blockquote><p>What was the actual problem here for Gumroad? </p><p>Their fee was blended, and they couldn&#8217;t really tell how much they earn, depending on the dynamics of credit card processing fees. </p><p>They don&#8217;t wanna do that anymore. Their cut is 10% and the revenue is more predictable.</p><h2>What are interchange fees?</h2><p>Paying with cards costs, and costs both sides, the merchant, and the customer. Yet it&#8217;s a commodity of modern life. Paying for books, digital services, and whatnot, from the comfort of your home.</p><p>Let&#8217;s take a look at the credit card processing fee structure. In its most basic form card payment fees comes in three types of fees:</p><ol><li><p><strong>Acquirer markup</strong></p><p>Charged by the bank which owns the POS. Usually, the bank where the merchant has a bank account opened.</p></li><li><p><strong>Card scheme fee</strong></p><p>Charged by the card network such as VISA and MASTERCARD </p></li><li><p><strong>Interchange fee</strong></p><p>Charged by the bank which issued the card. Usually, the bank where the customer has the bank account. The interchange fee is the most significant part of this fee structure.</p></li></ol><p>On the infographic displayed below, there are two flows executing at different time<em>s</em>. </p><ul><li><p>Authorization flow (displayed in blue)</p></li><li><p>Settlement flow (displayed in dotted red)</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tS0N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F16c9d99c-31f6-4e72-a1f5-603bdbe87ce2_11705x8253.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tS0N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F16c9d99c-31f6-4e72-a1f5-603bdbe87ce2_11705x8253.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tS0N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F16c9d99c-31f6-4e72-a1f5-603bdbe87ce2_11705x8253.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tS0N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F16c9d99c-31f6-4e72-a1f5-603bdbe87ce2_11705x8253.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tS0N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F16c9d99c-31f6-4e72-a1f5-603bdbe87ce2_11705x8253.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tS0N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F16c9d99c-31f6-4e72-a1f5-603bdbe87ce2_11705x8253.jpeg" width="1456" height="1027" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/16c9d99c-31f6-4e72-a1f5-603bdbe87ce2_11705x8253.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1027,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3262086,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tS0N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F16c9d99c-31f6-4e72-a1f5-603bdbe87ce2_11705x8253.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tS0N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F16c9d99c-31f6-4e72-a1f5-603bdbe87ce2_11705x8253.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tS0N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F16c9d99c-31f6-4e72-a1f5-603bdbe87ce2_11705x8253.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tS0N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F16c9d99c-31f6-4e72-a1f5-603bdbe87ce2_11705x8253.jpeg 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><figcaption class="image-caption">Card payment processing: Authorization and settlement flow</figcaption></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.crispy-engineering.com/p/credit-card-processing-fees-what?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.crispy-engineering.com/p/credit-card-processing-fees-what?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p><strong>Authorization flow</strong> is happening during the purchase, and the network communicates whether the customer has enough funds. This is when the reservation of funds is made as well. Usually, funds are not transferred between the customer and the merchant at this moment.</p><p><strong>Settlement flow</strong> executes when the merchant closes the day. This is when the batch of transactions is transferred by the acquirer to the network, and the network distributes transactions to issuers. </p><h2>What affects card processing fees</h2><p>It comes down to risks. The riskier transaction, the more expensive. </p><ul><li><p>What is the card type (credit is more expensive than debit, a business card is more expensive than individual)</p></li><li><p>Card present or not (online payments are more expensive, risk of fraud is higher). For example in the EU:</p><ul><li><p>When present, interchange fee = 0.2%</p></li><li><p>When not present, interchange fee = 1.15%</p></li></ul></li><li><p>Visa vs Mastercard</p></li><li><p>Business categorization - MCC - (in some countries, charities and similar services have lower fees)</p></li><li><p>Regionality (EU is cheaper than the rest of the world due to high regulations)</p><ul><li><p>In the EU, Debit and Credit interchange fees are capped at 0.2% and 0.3%</p></li><li><p>In the US, regulated banks have a cap on Debit, while Credit is unregulated.</p></li><li><p>Mexico is 5 times more expensive than the EU, and Australia 4 times.</p></li></ul></li></ul><p>Can we really affect these factors? Truth is, not really. In the areas of the world with smaller markets, but the high presence of card networks, it&#8217;s pretty much up to card networks to decide how much they&#8217;ll take.</p><p>Basically, institutions in power are card networks. And things are way more unregulated in online payments.</p><h2>Online payments</h2><p>In the last couple of years, the number of investments into fintech startups is measured in tens of billions. It is a very lucrative business to have your checkout form integrated into hundreds of thousands of websites.</p><p>Everyone is fighting to capture as many online purchases as possible and route transactions through their systems to the same card networks.&nbsp;</p><p>You heard about PayPal, Stripe, AliPay, Adyen, Square, etc. These are default choices when enabling online payments for your product nowadays.</p><p>What is their business model? It&#8217;s collecting fees and each of them has different fee structures.&nbsp;</p><p>In my next post, I explained Stripe's fee structure and optimization strategies.<br>Click on the link below.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:91961012,&quot;url&quot;:&quot;https://www.crispy-engineering.com/p/optimizing-stripe-fees-for-your-business&quot;,&quot;publication_id&quot;:864226,&quot;publication_name&quot;:&quot;Crispy Engineering&quot;,&quot;publication_logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/26c2d2d6-e6a2-44f3-9d0c-f484d13de302_500x500.png&quot;,&quot;title&quot;:&quot;Optimizing Stripe Fees for Your Business: Tips and Strategies&quot;,&quot;truncated_body_text&quot;:&quot;This is a Part #2 post on card processing fees. I will explain in details how Stripe fees work and what to pay attention to when setting up Stripe account, so that you avoid unwanted costs. Part #1 is about generic explanation of how card processing fees work. In case you missed it you can read it through here.&quot;,&quot;date&quot;:&quot;2023-01-02T08:34:29.328Z&quot;,&quot;like_count&quot;:0,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:26656427,&quot;name&quot;:&quot;Dusko Bajic&quot;,&quot;previous_name&quot;:&quot;Dusko&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/af9935ce-4999-4981-8380-7e789a5cdce4_2226x3021.jpeg&quot;,&quot;bio&quot;:&quot;I write about leadership in tech, software development and startups &#8226; dad of a beautiful girl &#8226; VP of Engineering &#8226; photography &#128247;&quot;,&quot;profile_set_up_at&quot;:&quot;2021-09-26T20:28:20.335Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:804726,&quot;user_id&quot;:26656427,&quot;publication_id&quot;:864226,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:864226,&quot;name&quot;:&quot;Crispy Engineering&quot;,&quot;subdomain&quot;:&quot;crispyengineering&quot;,&quot;custom_domain&quot;:&quot;www.crispy-engineering.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Software - Development. Architecture. Management. Writing to learn. Learning to thrive.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/26c2d2d6-e6a2-44f3-9d0c-f484d13de302_500x500.png&quot;,&quot;author_id&quot;:26656427,&quot;theme_var_background_pop&quot;:&quot;#99A2F1&quot;,&quot;created_at&quot;:&quot;2022-04-26T11:01:58.204Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Crispy Engineering by Dusko Bajic&quot;,&quot;copyright&quot;:&quot;Dusko Bajic&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;}}],&quot;twitter_screen_name&quot;:&quot;bajicdusko&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;inviteAccepted&quot;:true}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://www.crispy-engineering.com/p/optimizing-stripe-fees-for-your-business?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!7g_F!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F26c2d2d6-e6a2-44f3-9d0c-f484d13de302_500x500.png" loading="lazy"><span class="embedded-post-publication-name">Crispy Engineering</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Optimizing Stripe Fees for Your Business: Tips and Strategies</div></div><div class="embedded-post-body">This is a Part #2 post on card processing fees. I will explain in details how Stripe fees work and what to pay attention to when setting up Stripe account, so that you avoid unwanted costs. Part #1 is about generic explanation of how card processing fees work. In case you missed it you can read it through here&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 years ago &#183; Dusko Bajic</div></a></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.crispy-engineering.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 Crispy Engineering! 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></p>]]></content:encoded></item><item><title><![CDATA[Why test diamond model makes sense?]]></title><description><![CDATA[Optimize software testing for faster but stable product delivery.]]></description><link>https://www.crispy-engineering.com/p/why-test-diamond-model-makes-sense</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/why-test-diamond-model-makes-sense</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Thu, 08 Dec 2022 22:53:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F195c526f-db7c-4590-a387-11089bbe2d15_5464x4096.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In his book "Succeeding Agile", Mike Cohn come up with the concept of the test pyramid. It's a visual metaphor presenting three layers of different testing procedures (or test types) that we write for our software product.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Mc1v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda75d748-5eeb-434f-bc4a-e097e1d61c0b_5464x4096.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Mc1v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda75d748-5eeb-434f-bc4a-e097e1d61c0b_5464x4096.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Mc1v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda75d748-5eeb-434f-bc4a-e097e1d61c0b_5464x4096.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Mc1v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda75d748-5eeb-434f-bc4a-e097e1d61c0b_5464x4096.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Mc1v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda75d748-5eeb-434f-bc4a-e097e1d61c0b_5464x4096.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Mc1v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda75d748-5eeb-434f-bc4a-e097e1d61c0b_5464x4096.jpeg" width="1456" height="1091" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/da75d748-5eeb-434f-bc4a-e097e1d61c0b_5464x4096.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1091,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2668691,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&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="" srcset="https://substackcdn.com/image/fetch/$s_!Mc1v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda75d748-5eeb-434f-bc4a-e097e1d61c0b_5464x4096.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Mc1v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda75d748-5eeb-434f-bc4a-e097e1d61c0b_5464x4096.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Mc1v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda75d748-5eeb-434f-bc4a-e097e1d61c0b_5464x4096.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Mc1v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda75d748-5eeb-434f-bc4a-e097e1d61c0b_5464x4096.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><p>Martin Fowler extended this idea with &#8220;<a href="https://martinfowler.com/articles/practical-test-pyramid.html">The Practical Test Pyramid</a>&#8221;.</p><p>The current model wasn&#8217;t fit for the industry's needs anymore and by focusing on automation, he went with the test pyramid to the next level.</p><p>Here is an excerpt from this text:</p><blockquote><p><em>Unfortunately the concept of the test pyramid falls a little short if you take a closer look. Some argue that either the naming or some conceptual aspects of Mike Cohn's test pyramid are not ideal, and I have to agree. From a modern point of view the test pyramid seems overly simplistic and can therefore be misleading.</em></p><p><em>Still, due to its simplicity the essence of the test pyramid serves as a good rule of thumb when it comes to establishing your own test suite.</em></p><p>Martin Fowler</p></blockquote><p>The industry evolved again, and stakes have changed when it comes to testing software products.</p><h1><strong>Product size matters</strong></h1><p>I have worked on dozens of software projects in the past 13 years. They range from projects for global conglomerates in the car industry, to small startup apps.</p><p>Money poured into startups in the last decade is hard to imagine. Startups usually have one goal in the beginning. Ship fast, go to market as soon as possible, iterate fast, repeat. This results in half-baked MVPs reaching production.</p><p>It's fair to say that in the majority of cases, these products don't have any tests at all.</p><p>Those that had tests written are not even close to the test pyramid model.</p><h1><strong>Test diamond</strong></h1><p>What I saw working in practice, that organically showed up is a test diamond model.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S3Ou!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F195c526f-db7c-4590-a387-11089bbe2d15_5464x4096.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S3Ou!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F195c526f-db7c-4590-a387-11089bbe2d15_5464x4096.jpeg 424w, https://substackcdn.com/image/fetch/$s_!S3Ou!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F195c526f-db7c-4590-a387-11089bbe2d15_5464x4096.jpeg 848w, https://substackcdn.com/image/fetch/$s_!S3Ou!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F195c526f-db7c-4590-a387-11089bbe2d15_5464x4096.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!S3Ou!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F195c526f-db7c-4590-a387-11089bbe2d15_5464x4096.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S3Ou!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F195c526f-db7c-4590-a387-11089bbe2d15_5464x4096.jpeg" width="1456" height="1091" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/195c526f-db7c-4590-a387-11089bbe2d15_5464x4096.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1091,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2888622,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!S3Ou!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F195c526f-db7c-4590-a387-11089bbe2d15_5464x4096.jpeg 424w, https://substackcdn.com/image/fetch/$s_!S3Ou!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F195c526f-db7c-4590-a387-11089bbe2d15_5464x4096.jpeg 848w, https://substackcdn.com/image/fetch/$s_!S3Ou!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F195c526f-db7c-4590-a387-11089bbe2d15_5464x4096.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!S3Ou!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F195c526f-db7c-4590-a387-11089bbe2d15_5464x4096.jpeg 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>It consists of 4 major layers.</p><ol><li><p>Unit tests</p></li><li><p>Integration tests</p></li><li><p>E2E tests</p></li><li><p>Manual tests</p></li></ol><h2><strong>Unit tests</strong></h2><p>Unit tests are written for critical parts of the system. If it's an accounting app, we'll test specific accounting rules as units.</p><p>Or we might test a method that is parsing a string into a number with 6 decimals precision, rounding up.</p><h2><strong>Integration tests</strong></h2><p>The number of integration tests is the largest. We lean on its stability to guarantee the working product.</p><p>Integration tests usually start from an endpoint level (with the assumption that we're building an API-exposed service).</p><blockquote><p>Some teams cover these tests through Postman as well.</p></blockquote><p>Advantages are:</p><ul><li><p>we're utilizing the whole call-stack vertical which helps in code coverage</p></li><li><p>by changing the input, we can affect a different vertical to be called.</p></li><li><p>we're testing the most likely scenario that is going to happen in the production</p></li><li><p>less time is spent on mocking everything and running the test in isolation</p></li><li><p>can be run in CI in the same way as unit tests.</p></li></ul><p>Disadvantages are</p><ul><li><p>it's slower to execute</p></li><li><p>test size is bigger</p></li><li><p>more effort is put into seeding the proper data for different scenarios</p></li></ul><h2><strong>E2E tests</strong></h2><p>These are complete use cases from the user's perspective. We assume UI tests in this case. E2E tests are usually written in the scale-up phase of product development.</p><p>At this point, the company has enough money and enough users to start tinkering with the optimizations of the test process.</p><p>UI E2E tests are hard to maintain. They are very slow to execute and suffer from a high percentage of flakiness in their execution.</p><p>A huge blocker is the absence of knowledge in writing testing scenarios. These testing scenarios aren't focusing on implementation details but on user experience.</p><h2><strong>Manual tests</strong></h2><p>Not everything can be automated, and that's completely fine. There are countless cases where human needs to sit and click through the product.</p><p>Usually, this is the case with 3rd party integrations. </p><p>For example, you have to upload an invoice to 3rd party service and check through the UI dashboard of that service if the invoice is there.</p><p>Not avoidable, but should be reduced to a minimum. The fact is, in the MVP stages of product development, manual testing is absolutely dominant.</p><h1><strong>So why test diamond?</strong></h1><p>Because of efficiency in product delivery, while keeping the product stable.</p><p>By focusing on integration tests, we will cover the most used code paths. A minority of users will stumble upon the bug, fine, it's 2/10. Once that happens, we'll write a bug fix for it.</p><p>By now you must be wondering:</p><div class="pullquote"><p>&#8220;What&#8217;s the catch? This isn&#8217;t a surprise for me.</p></div><p>Well, I want to tell, you, if your test setup looks more like a diamond, that&#8217;s fine. It works for others, it works for you, and everyone&#8217;s happy.</p><p>Often we&#8217;re judged and feel guilty because we&#8217;re not following some methodology by the book. It&#8217;s fine not to. Processes evolve. </p><blockquote><p><em>&#8220;Bug-free software product doesn't exist, and it is important for a software product not to cease to exist.&#8221;</em></p><p>Unknown, but honest product owner</p></blockquote><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.crispy-engineering.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 Crispy Engineering! If you liked this post, 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[We can never make people do anything]]></title><description><![CDATA[We judge. We criticize. We talk about wrongness of others. How to make communication with coworkers efficient?]]></description><link>https://www.crispy-engineering.com/p/we-can-never-make-people-do-anything</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/we-can-never-make-people-do-anything</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Wed, 30 Nov 2022 08:00:56 GMT</pubDate><enclosure url="https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/43358b9f-ee7e-4d81-9513-5e460084b58a_8686x4343.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Communication between coworkers is often taking wrong turns. Arguments, misunderstanding, gossip. No one really enjoys being part of those situations.</p><p>As a VP of Engineering, I constantly have to find the common ground between different parties. Throughout this time, I learned how to position myself in conversations.</p><p>I am going to show you a couple of tricks. </p><h3>Judging others is so easy</h3><blockquote><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"><strong>Jack:</strong> <em>- Have you seen that message on Slack he wrote?</em>
<strong>Mike</strong>: <em>- Yes, I have. I can't believe he acts like that in front of the whole team.</em>
<strong>Jack</strong>: <em>- He has zero understading in all the work we did so far. It has been explained to him already once.</em>
<strong>Mike</strong>: - <em>Yeah, we're busting our a** here! He should pay more attention! Not a team work man ...not cool at all.</em></pre></div></blockquote><p>We, humans, have needs and expectations. Often, these expectations are not fulfilled and we got disappointed and angry with others.</p><p>So we go into a conversation. Mike from the example above would say the following.</p><blockquote><p><em>The problem is that YOU don&#8217;t care about our team as other team members. </em></p></blockquote><p>Blame, insults, put-downs, labels, and criticism are all forms of judgment. We are preoccupying ourselves with WHO is arrogant, ignorant, irresponsible, good, bad, normal&#8230; </p><p>Rather than telling others what we need (and not getting btw), our attention is focused on classifying, analyzing, and determining levels of wrongness with others.</p><p>Let&#8217;s look at another example, which shows that a judgmental way of thinking is built-in into each one of us.</p><div class="pullquote"><p>If a colleague is more concerned about details than I am, he is &#8220;picky&#8221;.</p><p>If I am more concerned about details than him, he is &#8220;sloppy, unstructured&#8221;. </p></div><p>We focus on the faults of others and miss out. It&#8217;s tragic. Because when faced with judgment, people defend and resist the critic. What happens then is an argument. When arguing too much, the environment becomes stressful, people become resentful of each other. Efficiency drops. People quit.</p><p>You get the point. So, how do we go past this?</p><h3>Look behind the curtain - Be curious and observe</h3><p>Let&#8217;s set the stage for what follows below: </p><div class="pullquote"><p>Delgado, a team member sent you a chat message that you find disturbing! </p></div><p>What will you do? Act instantly? Defend yourself? Or ignore?</p><p>This is what you should try instead - <strong>be curious about what&#8217;s going on and instead of providing any reaction, first ask yourself:</strong></p><blockquote><p>What made him act like this? Something has to happen that I am not aware of. I need to know more.</p></blockquote><p>Curiosity leads to observation. By observing what&#8217;s going on, we manage to pull ourselves out and take a bird-view of the situation in a completely objective way.</p><p>It&#8217;s so powerful because we are no longer attached. We don&#8217;t feel attacked, or criticized. This is where we start developing empathy and compassion for that other person.</p><h3>Empathy and compassion</h3><p>The majority of people I know are not bad people. They don&#8217;t wanna harm me in any way. So what are the chances that a colleague behind a chat message has bad intentions? I&#8217;d say pretty low. </p><p>By having a compassionate approach, we will think about that person first. For example, an approach to this disturbing chat message could go as follows:</p><blockquote><p>Omg, look at this message of his. Imagine how hard it is for him, if he did not manage to find any other way to put it.</p><p>I need to understand this better. </p></blockquote><p>By acting compassionately, you should have open questions only. Not assumptions and not your own evaluations.</p><div class="pullquote"><p>&#8220;Observing without evaluating is the highest form of human intelligence.&#8221;</p><p>J. Krishnamurti, Indian philosopher.</p></div><h3>Expressing the need. Requesting but not demanding</h3><p>There is a reason why such a chat message is disturbing to us. It triggered some feelings of ours. And it is important to self-reflect on those feelings and understand the reason behind them. </p><p>Such feeling is usually connected to our own unmet need. We might need a simple thing like <em>&#8220;desire to have harmony in the team&#8221;</em>. You might realize that this is not happening in the team and start panicking or being frustrated. Therefore our need is not met, and we have an emotional reaction.</p><p>In order to resolve the situation to the end, the moment has come to approach our coworker. </p><p>The next steps in this little framework are to: </p><ol><li><p>To express our own needs, and feelings, so that the request we are about to make, makes sense.</p></li><li><p>To make a request (but not a demand) to our coworker for what we believe will help us resolve the situation.</p></li></ol><p>Here is an example:</p><div class="pullquote"><p>Hey Delgado, I see that something is going on, and it seems there is more to say. By reading your message I&#8217;m a little disturbed, as I would like for all of us to work in harmony. I would love to get 30 minutes of your time on a call so we can talk about it thoroughly.</p></div><p>Let&#8217;s analyze this a bit:</p><p><strong>An observation without evaluation:</strong> <em>Hey Delgado, I see that something is going on, and it seems there is more to say.</em></p><p><strong>Expressing the feeling: </strong><em>By reading your message I&#8217;m a little disturbed.</em></p><p><strong>Expressing the need:</strong> <em>I would like for all of us to work in harmony.</em></p><p><strong>Making a request, without demanding:</strong>  <em>I would love to get 30 minutes of your time on a call so we can talk about it thoroughly.</em></p><p></p><h3>In summary</h3><p>When faced with a difficult situation in communication with a coworker, the following steps will help you </p><ol><li><p>Do not act impulsively. Wait, be curious and observe.</p></li><li><p>Assess the situation through compassion and empathy for others.</p></li><li><p>Self-reflect on your own feelings and unmet need.</p></li><li><p>Reflect on observation, express your feeling, state your need and make a request, without demanding.</p></li></ol><p>This approach helps me in guiding and coaching my team members. And this isn&#8217;t something new. It&#8217;s an old method, which Marshal B Rosenberg explained in the book Nonviolent Communication. If you liked this post, then I&#8217;m sure you&#8217;ll like the book even more.</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/bajicdusko/status/1588591936180363264?s=20&amp;t=E2BWGdrG7gtMl80pXo-qwA&quot;,&quot;full_text&quot;:&quot;\&quot;Nonviolent Communication: A Language of life\&quot; - Marshall Rosenberg\n\nHe teaches us how to communicate with other human beings. This is a book I constantly read. It helps in relationship with coworkers, friends, parents, partner..\n\nStrong recommendation!\n\n&quot;,&quot;username&quot;:&quot;bajicdusko&quot;,&quot;name&quot;:&quot;Dusko &#128247;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Nov 04 18:00:06 +0000 2022&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:1,&quot;like_count&quot;:4,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{&quot;url&quot;:&quot;https://www.amazon.com/dp/B014OISVU4/ref=cm_sw_r_tw_dp_YFRSFRPF8G9T4ZAV62EA&quot;,&quot;image&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/d7be2b35-c435-4ed0-a5b5-01ef5f365d0b_1x1.gif&quot;,&quot;title&quot;:&quot;Nonviolent Communication: A Language of Life: Life-Changing Tools for Healthy Relationships (Nonviolent Communication Guides) - Kindle edition by Rosenberg, Marshall B., Chopra, Deepak. Health, Fitness &amp; Dieting Kindle eBooks @ Amazon.com.&quot;,&quot;description&quot;:&quot;Nonviolent Communication: A Language of Life: Life-Changing Tools for Healthy Relationships (Nonviolent Communication Guides) - Kindle edition by Rosenberg, Marshall B., Chopra, Deepak. Download it once and read it on your Kindle device, PC, phones or tablets. Use features like bookmarks, note takin&#8230;&quot;,&quot;domain&quot;:&quot;amazon.com&quot;},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.crispy-engineering.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 Crispy Engineering! 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[Organizing a performance review for your engineering team]]></title><description><![CDATA[When could I expect a promotion, as I feel I'm performing on senior level?]]></description><link>https://www.crispy-engineering.com/p/organise-first-performance-review</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/organise-first-performance-review</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Sun, 20 Nov 2022 18:11:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0d844c5f-540c-4981-9b18-b94cf812da5a_2000x1333.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sPD_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0d844c5f-540c-4981-9b18-b94cf812da5a_2000x1333.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sPD_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0d844c5f-540c-4981-9b18-b94cf812da5a_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!sPD_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0d844c5f-540c-4981-9b18-b94cf812da5a_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!sPD_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0d844c5f-540c-4981-9b18-b94cf812da5a_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!sPD_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0d844c5f-540c-4981-9b18-b94cf812da5a_2000x1333.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sPD_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0d844c5f-540c-4981-9b18-b94cf812da5a_2000x1333.jpeg" width="1456" height="970" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/0d844c5f-540c-4981-9b18-b94cf812da5a_2000x1333.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Organize a first performance review for your engineering team&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="Organize a first performance review for your engineering team" title="Organize a first performance review for your engineering team" srcset="https://substackcdn.com/image/fetch/$s_!sPD_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0d844c5f-540c-4981-9b18-b94cf812da5a_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!sPD_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0d844c5f-540c-4981-9b18-b94cf812da5a_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!sPD_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0d844c5f-540c-4981-9b18-b94cf812da5a_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!sPD_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0d844c5f-540c-4981-9b18-b94cf812da5a_2000x1333.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><p>People expect rewards and they value security and certainty. In a less mature company, most processes are self-driven. At some point, your team will start asking important questions:</p><ul><li><p>How does the career ladder look for me?</p></li><li><p>When could I expect a promotion?</p></li></ul><p>And these are very important questions. They might be running on the same salary or title for years and they feel it&#8217;s no longer a fair relationship. Depending on how univocal your answers are, it will either set their peace of mind, or they will realize that the future is uncertain for this them.</p><p>Before we move on, let&#8217;s do a small exercise now. Choose a team member from your team and try answering the following question: </p><div class="pullquote"><p><em>"As a manager of your team, how can you tell if this team member is (NOT) fit for promotion?".</em></p></div><p>By answering this question, ask yourself - are the reasons for denying someones promotion based on your subjective opinion? If yes, you&#8217;re on a slippery slope. The team member you just thought about will challenge you, and you won&#8217;t have any counterarguments.  </p><p>This is a pretty uncomfortable situation to be in. This person will lose trust in you, as they will perceive you as someone who&#8217;s wanna stop them in their growth.</p><p>So we usually have three choices:</p><ul><li><p><strong>You won't promote anyone.</strong> </p><p>This can work just for a while, but eventually, your peers will feel that they are operating on a completely different level and it'll come naturally for them to start asking questions.</p></li><li><p><strong>You will promote most team members.</strong> </p><p>This is even worse, especially if they aren't ready for promotion. This is giving them a false understanding of their skills.</p></li><li><p><strong>You will explain why someone is not fit for promotion.</strong> </p><p>Without any documentation or metrics, provided explanation is your subjective and biased opinion. Your peer can disagree and it's the end of the game. What follows is usually a loss of trust.</p></li></ul><p>So you need an objective insight into the growth and performances of your team members.</p><blockquote><p>Each one of us, especially in tech would like to know the following:</p><ul><li><p>current expectations</p></li><li><p>career path</p></li><li><p>projected salary growth</p></li></ul></blockquote><h2>Expectations and competencies</h2><p>If you're a startup, chances are that:</p><ul><li><p>You don't have levels per position defined.</p></li><li><p>You don't have expectations set per level.</p></li><li><p>You don't have competencies defined as well.</p></li></ul><p>This limits how precise your performance review can be. That's because you can't say that someone is "above/below expectations". What if they ask <em>"based on what expectations I am below"</em>?</p><p>You will lose credibility. The importance of such a performance review is no longer relevant. Thus, you have to define a performance review, which is a bit flexible, because you don&#8217;t have a career ladder defined.</p><h2>Set goals for your performance review</h2><p>What is it that you want to achieve with the performance review? When defining the goals think of the following:</p><ul><li><p>At what stage of growth is my company?</p></li><li><p>How mature is my team?</p></li><li><p>Am I trying to solve some hidden problems with the performance review? Run 5-why's analysis here.</p></li></ul><blockquote><p><strong>Five-why&#8217;s</strong></p><ol><li><p>My team is not growing professionally. Why?</p></li><li><p>They are not proactive in learning new things. Why?</p></li><li><p>They don't have time to do so. Why?</p></li><li><p>They are in a delivery mode with huge scope. Why?</p></li><li><p>Our sprints take too long. Maybe we should write more granular user stories and limit the iteration scope instead.</p><p></p><p>Do I need a performance review just for this?</p></li></ol></blockquote><p>When I went in front of my team, these are the goals wanted to achieve with the performance review.</p><ol><li><p>Presenting transparent promotion plans and compensation adjustments.</p></li><li><p>Set growth areas for every team member.</p></li><li><p>Tie compensation and promotion cycles to it.</p></li><li><p>Communicate underperforming aspects on time and out loud.</p></li></ol><h2>To the performance review!</h2><p>In my team, we did not have expectations and competencies set. So we've come up with the following procedure for the performance review process.</p><h3>Process</h3><ol><li><p>Every team member has to write down a self-review.</p></li><li><p>Every team member has to write two peer reviews. One for a close collaborator, and one for someone outside of his team.</p></li><li><p>The manager has to write his review for his peers.</p></li><li><p>The manager will sum up all documents and write down a final performance review</p></li><li><p>Schedule a performance review meeting with every team member.</p></li><li><p>Send performance review documents to your team members 24h upfront. </p><p>This will make sure that everyone has the time to process the review emotionally and prepare the questions for you. 24h is a good offset. Not too early, not too late.</p></li></ol><h3>Document templates</h3><p>It is important to control the narrative of the review process. To do that I have prepared document templates for each step.</p><p>These are the template documents we have used.</p><ul><li><p><strong><a href="https://docs.google.com/document/d/1AVePZYrP0MnNbu3MeycS8H2r6ZKvvZMa7FDgzRxE4wE/edit">Self-review template</a></strong> (team members to fill for themselves)</p></li><li><p><strong><a href="https://docs.google.com/document/d/1fRYZ53MXhDrPiozKZF13J_cDNDXPgCTs3IL41UIMsck/edit">Peer-review template</a></strong> (team members to fill in for others)</p></li><li><p><strong><a href="https://docs.google.com/document/d/1q47B6dHyQTronGA1ucKOcQX2cbGLAW_p9K_TRSMtvqQ/edit">Performance review template</a></strong> (for the manager to fill in for their peers)</p></li></ul><h2>Things to pay attention to</h2><h3>How you announce the performance review to your team is important</h3><ul><li><p>talk about it on your one-on-ones</p></li><li><p>don't send a too official email, as it'll boost the seriousness around the review process</p></li><li><p>schedule an all-hands call on the topic of the performance review</p></li><li><p>communicate performance review goals clearly</p></li><li><p>communicate the review process in detail</p></li><li><p>answer all questions honestly and openly</p></li></ul><h3>It's stressful for team members</h3><p>If you are a manager, chances are that you don't perceive performance reviews the same way as your peers. They see it as a checkpoint. It will set their future in the company, based on what you tell them.</p><h3>Reserve time for performance review</h3><p>Your team members deserve objective and detailed performance reviews. You have to find enough time for writing each one of them. <br>By delivering generic performance reviews, the process will also lose credibility. This is especially important if you're conducting it for the first time in your team.</p><h3>Set 'no blame' narrative</h3><p>Even if some reviews won't be pleasant, use this opportunity to set the ground for improving and fixing things. Listing out deficiencies only, won't help.</p><h3>Watch out for biases</h3><p>None of us is immune to biases but we should be aware of them as much as possible. <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Gergely Orosz&quot;,&quot;id&quot;:30107029,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/802a32bb-2048-428b-bdb5-d6acd1e2b2d5_48x48.png&quot;,&quot;uuid&quot;:&quot;a2687b98-23e2-4467-b739-32ab4582f2f2&quot;}" data-component-name="MentionToDOM"></span> has a nice video on this topic. Some of the biases to look after:</p><ul><li><p><strong>Recency bias</strong> - when we're under the impression of the most recent things that happened.</p></li><li><p><strong>Strictness bias</strong> - you shouldn't be strict with members you are not close with.</p></li><li><p><strong>Leniency bias</strong> - don't favor team members you communicate with often.</p></li><li><p><strong>Horns bias</strong> - if someone made a mistake once, that shouldn't flag them.</p></li><li><p><strong>Hallo bias</strong> - if someone made a fantastic achievement, it shouldn't mask their inefficiencies.</p></li><li><p><strong>Similarity bias</strong> - treat everyone equally. Gender, skin color, office location, and education can affect your judgment.</p></li><li><p><strong>Contrasting bias</strong> - Avoid comparing team members with one another.</p></li></ul><h2>Continuous feedback vs performance review</h2><p>Opposite to performance review, some teams advocate for continuous feedback instead. To paraphrase one of my former team members:</p><blockquote><p>As we're talking every two weeks on our 1-1s we can always discuss growth areas, as well as things to improve on. We don't really need a performance review for such things.</p></blockquote><p>In essence, this is true. We do have regular one-on-ones and we discuss and plan the next steps and growth areas. </p><p>However, it&#8217;s important to understand that there is some &#8220;politics&#8221; in every company. HR and company leadership will expect some reports about your team members, that explain why someone is eligible for a promotion or salary raise. </p><p>Therefore, performance review has a two-fold value. One that is directed to the company administration, and another to our team. The latter is more important though.</p><p>In our team, we looked at performance reviews as a point in time. A checkpoint where we retrospect everything we already discussed in the past 6 months. <br>That's why, the performance review in our team wasn&#8217;t  a surprise to anyone, as every topic we discuss during the review process, is already discussed in our one-on-ones.</p><h2>Follow-up and cadence</h2><p>Performance review conclusions must not be left aside. If you don't iterate on what you and your peers agreed on, then the review itself is pointless.<br>This sets you up for failure for the next review, as no one will see the value in it.</p><div><hr></div><p><em>I am sure that many teams are conducting performance reviews in different ways. What did we do wrong here? Let me know in the comments, I&#8217;d like to revisit this approach.</em></p>]]></content:encoded></item><item><title><![CDATA[It's a marathon. Not a sprint.]]></title><description><![CDATA[It become quite challenging for me to find someone who did not experience burnout recently.]]></description><link>https://www.crispy-engineering.com/p/its-a-marathon-not-a-sprint</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/its-a-marathon-not-a-sprint</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Fri, 11 Nov 2022 07:25:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6sUi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb01a3177-160b-4be8-ac05-8d914d40d7f3_2000x2000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6sUi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb01a3177-160b-4be8-ac05-8d914d40d7f3_2000x2000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6sUi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb01a3177-160b-4be8-ac05-8d914d40d7f3_2000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6sUi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb01a3177-160b-4be8-ac05-8d914d40d7f3_2000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6sUi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb01a3177-160b-4be8-ac05-8d914d40d7f3_2000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6sUi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb01a3177-160b-4be8-ac05-8d914d40d7f3_2000x2000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6sUi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb01a3177-160b-4be8-ac05-8d914d40d7f3_2000x2000.jpeg" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/b01a3177-160b-4be8-ac05-8d914d40d7f3_2000x2000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;It's a marathon. Not a sprint.&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="It's a marathon. Not a sprint." title="It's a marathon. Not a sprint." srcset="https://substackcdn.com/image/fetch/$s_!6sUi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb01a3177-160b-4be8-ac05-8d914d40d7f3_2000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6sUi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb01a3177-160b-4be8-ac05-8d914d40d7f3_2000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6sUi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb01a3177-160b-4be8-ac05-8d914d40d7f3_2000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6sUi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb01a3177-160b-4be8-ac05-8d914d40d7f3_2000x2000.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><p>It become quite challenging for me to find someone who did not experience burnout recently. Studies show that the most affected industries in the US are hospitality, manufacturing, and health care.</p><p>I could argue that the software industry is somewhere close.</p><p>People are wandering around, changing companies, getting divorced, going to psycho-therapy, fighting anxiety... All kinds of stuff.<br>Most of us do not realize what is going on until there is an obvious sign. Your body decides for you, or someone else tells you how fucked up you become.</p><p>I figured it comes with age and years spent working in the industry. Most people I talk with are in their mid-'30s or early '40s. Although my observation is biased, it perfectly falls into statistics.</p><blockquote><p>"Millennials (those born between 1981 and 1996) are most prone to burnout. <br>Gen-Z (born between 1997 and 2012) is a generation with the fastest growing burnout rate."</p></blockquote><p>This makes sense. '20s are hard. The '30s are a bit harder.</p><h3>So what a hell is going on?</h3><p>My wife, who isn't in the software, tried to provide her point of view - <em>"the biggest problem with you (software people) is that you can always work."</em></p><p>This got me thinking. Is it that we CAN work always, or do we CHOOSE to work always?</p><p>The drive that you get by working and solving problems is pushing you. Dopamine hits. It's comfortable. We push each other. We all like it, and we don't mind long hours. Chatting about it until we go to sleep. It's a crowd behavior. I think we CHOOSE that.</p><p>But it's a hustle culture that you're served with.</p><blockquote><p>Hey, you young person, everyone's expecting you to work more than 8h today, on weekends, remoting from vacation (just in case carying laptop wink-wink), but also be a solopreneur, and have a successful side gig. And a popular YouTube channel.</p></blockquote><p>It's just too much work in an unbalanced way. When not working, we're thinking about it. When thinking about it we're distracted. People around you are uncomfortable when you're distracted.</p><h3>Life</h3><p>Intensity doesn't work well for us in the long term. We've seen what happens to people being stressed for decades. It just doesn't work well eventually.</p><p>We should be available for our family and be there for our kids. Thinking about yourself and longevity. <br>Most of this generation have some 25-30 years to retirement. We can't keep such intensity of work forever. And there has to be a change.</p><h3>Change</h3><p>Ask yourself - how do you wanna turn up to your family and friends tomorrow? Do you wanna have family and friends that you can turn up to in the first place?</p><p>I don't wanna be a distracted and busy, stressed person forever. This is a marathon and not a sprint. Nothing is ever finished. There are always new things to do, and it never ends.</p><p>With that in mind, we should optimize toward what's a steady pace.</p><p>Continually sprinting across the week -&gt; having time with doing nothing -&gt; recharge -&gt; repeat. <br>That's not sustainable.</p><p>A change in relationship to work is necessary.</p><p>Work is part of life. Enjoying work is important. It should make us happy, build cool stuff, help others, being part of the community.</p><p>Yet, work is only part of life. Shrink that part down on a pie chart, to an important, but manageable part. Ironically you'll be even better at it.</p><h3>Solution</h3><p>It seems that managing energy instead of time provides good results.</p><p>Thinking in outputs throughout the week - instead of being obsessed to fill up every empty slot in our calendar with something "efficient".<br>Finding a steady pace &nbsp;- optimizing for the long term. That's important.</p><p>It's a constant battle though, and I would like to hear from you, about your approach, techniques, or anything that helps you manage your energy (and time).</p>]]></content:encoded></item><item><title><![CDATA[What kind of software engineer should I become?]]></title><description><![CDATA[In todays IT market, is it better to be a specialist, a generalist or something else?]]></description><link>https://www.crispy-engineering.com/p/what-kind-of-software-engineer-should-i-become</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/what-kind-of-software-engineer-should-i-become</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Mon, 31 Oct 2022 21:22:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F01d7634d-1368-4808-9d8d-993c258fb3cf_2000x1499.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The other day I tweeted it would be best for software developers in their early careers to avoid startups.</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/bajicdusko/status/1584589762672832512&quot;,&quot;full_text&quot;:&quot;As a fresh starter in software engineering, what would be the best advice. Here are my thoughts:\n\n1.  Seek for good mentor.\n2. Avoid startups.\n3.  Do full-stack.&quot;,&quot;username&quot;:&quot;bajicdusko&quot;,&quot;name&quot;:&quot;Dusko &#128247;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Oct 24 16:56:54 +0000 2022&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:2,&quot;like_count&quot;:6,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>It's a bit provoking and bold statement and it feels counterintuitive. In a startup you can learn how to be a generalist and a pretty good one, so why the statement?</p><h3>What does it mean to be a generalist?</h3><p>Simply put, you know many things. Generalist is often described as a full-stack developer. I disagree. Full-stack as a subset of a generalist in the context of experience.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9gWx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F997fc310-f0a3-4356-805f-2c6530be460a_1646x1474.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9gWx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F997fc310-f0a3-4356-805f-2c6530be460a_1646x1474.png 424w, https://substackcdn.com/image/fetch/$s_!9gWx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F997fc310-f0a3-4356-805f-2c6530be460a_1646x1474.png 848w, https://substackcdn.com/image/fetch/$s_!9gWx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F997fc310-f0a3-4356-805f-2c6530be460a_1646x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!9gWx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F997fc310-f0a3-4356-805f-2c6530be460a_1646x1474.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9gWx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F997fc310-f0a3-4356-805f-2c6530be460a_1646x1474.png" width="1456" height="1304" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/997fc310-f0a3-4356-805f-2c6530be460a_1646x1474.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1304,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3785699,&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;:true,&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_!9gWx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F997fc310-f0a3-4356-805f-2c6530be460a_1646x1474.png 424w, https://substackcdn.com/image/fetch/$s_!9gWx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F997fc310-f0a3-4356-805f-2c6530be460a_1646x1474.png 848w, https://substackcdn.com/image/fetch/$s_!9gWx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F997fc310-f0a3-4356-805f-2c6530be460a_1646x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!9gWx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F997fc310-f0a3-4356-805f-2c6530be460a_1646x1474.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><ul><li><p>frontend + backend (+ database) = full-stack</p></li><li><p>mobile + backend (+ database) = full-stack</p></li><li><p>frontend + mobile + backend (+ database) = full-stack</p></li></ul><p>Generalists can cover much more: Infrastructure. Cloud. Data. CRM's. Databases. QA. Security. Backend. Frontend. Mobile...</p><blockquote><p>I have been in on a technical interview, where I explained that I know mobile, backend, frontend a bit, AWS with Terraform, doing video courses etc.<br><br><strong>Interviewer said:</strong> <em>"So you're a full-stack."</em><br><strong>I said:</strong> <em>"No I'm not. I am mediocre at many things however my skills are best at mobile and backend."</em></p></blockquote><h3>What does it mean to be a specialist?</h3><p>Well, you specialize in one thing only. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u3o1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a8aab3-7bf7-4dbb-90d2-1ca85d2245b9_1644x1472.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u3o1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a8aab3-7bf7-4dbb-90d2-1ca85d2245b9_1644x1472.png 424w, https://substackcdn.com/image/fetch/$s_!u3o1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a8aab3-7bf7-4dbb-90d2-1ca85d2245b9_1644x1472.png 848w, https://substackcdn.com/image/fetch/$s_!u3o1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a8aab3-7bf7-4dbb-90d2-1ca85d2245b9_1644x1472.png 1272w, https://substackcdn.com/image/fetch/$s_!u3o1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a8aab3-7bf7-4dbb-90d2-1ca85d2245b9_1644x1472.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u3o1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a8aab3-7bf7-4dbb-90d2-1ca85d2245b9_1644x1472.png" width="1456" height="1304" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e5a8aab3-7bf7-4dbb-90d2-1ca85d2245b9_1644x1472.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1304,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3817433,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u3o1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a8aab3-7bf7-4dbb-90d2-1ca85d2245b9_1644x1472.png 424w, https://substackcdn.com/image/fetch/$s_!u3o1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a8aab3-7bf7-4dbb-90d2-1ca85d2245b9_1644x1472.png 848w, https://substackcdn.com/image/fetch/$s_!u3o1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a8aab3-7bf7-4dbb-90d2-1ca85d2245b9_1644x1472.png 1272w, https://substackcdn.com/image/fetch/$s_!u3o1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5a8aab3-7bf7-4dbb-90d2-1ca85d2245b9_1644x1472.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><ul><li><p><em>I am an android developer</em> - says you have specialized in android only.</p></li><li><p><em>I am a data engineer</em> - says you do nothing else but data-related architecture and development.</p></li><li><p><em>I am a .NET developer</em> - ...</p></li></ul><p>You get the point.</p><h3>Which one is better?</h3><p>Let's look through the prism of how much experience you have.</p><ul><li><p>If you just started your career - be a generalist.<br>You need to learn as much as possible from as many different fields. Truth is, usually, you won't be that generalist.<br>As you land a new job, you'll focus on being the best you can at that one thing you're working on. It's up to you to be curious and explore many other things you could be working on.</p></li><li><p>Once you accumulate a couple of years in the industry, you have the luxury of specializing in something.</p></li></ul><p>But here is the trick - specialize at multiple things, not just one. This is what is called <strong>Generalizing Specialist</strong>.</p><p>In the software industry nowadays, you don't wanna limit your opportunities by knowing one technology too damn good. Find your niche, expand it a bit and specialize. It helps with the identity of the company as well. Eventually, you'll be more wanted, and more expensive.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-ChS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F349a0efc-a26b-41ae-b33c-33ff028baaec_1644x1408.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-ChS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F349a0efc-a26b-41ae-b33c-33ff028baaec_1644x1408.png 424w, https://substackcdn.com/image/fetch/$s_!-ChS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F349a0efc-a26b-41ae-b33c-33ff028baaec_1644x1408.png 848w, https://substackcdn.com/image/fetch/$s_!-ChS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F349a0efc-a26b-41ae-b33c-33ff028baaec_1644x1408.png 1272w, https://substackcdn.com/image/fetch/$s_!-ChS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F349a0efc-a26b-41ae-b33c-33ff028baaec_1644x1408.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-ChS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F349a0efc-a26b-41ae-b33c-33ff028baaec_1644x1408.png" width="1456" height="1247" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/349a0efc-a26b-41ae-b33c-33ff028baaec_1644x1408.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1247,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3733966,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-ChS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F349a0efc-a26b-41ae-b33c-33ff028baaec_1644x1408.png 424w, https://substackcdn.com/image/fetch/$s_!-ChS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F349a0efc-a26b-41ae-b33c-33ff028baaec_1644x1408.png 848w, https://substackcdn.com/image/fetch/$s_!-ChS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F349a0efc-a26b-41ae-b33c-33ff028baaec_1644x1408.png 1272w, https://substackcdn.com/image/fetch/$s_!-ChS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F349a0efc-a26b-41ae-b33c-33ff028baaec_1644x1408.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>In his series of tweets, <a href="https://twitter.com/thiagoghisi?s=21&amp;t=Lo3WUgd0C1yihMBt0pP2Uw">@thiagoghisi</a> is talking about this and described Generalizing Specialists as "Jack of MANY Trades and Master of SOME".</p><p>I think that such a description fits perfectly. A warm suggestion to go and read the whole <a href="https://twitter.com/thiagoghisi/status/1509780357528244227?s=61&amp;t=Lo3WUgd0C1yihMBt0pP2Uw">twitter thread</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!z5fi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e7f1ce-c0a2-4666-979f-f03c0845740b_1279x1371.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!z5fi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e7f1ce-c0a2-4666-979f-f03c0845740b_1279x1371.png 424w, https://substackcdn.com/image/fetch/$s_!z5fi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e7f1ce-c0a2-4666-979f-f03c0845740b_1279x1371.png 848w, https://substackcdn.com/image/fetch/$s_!z5fi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e7f1ce-c0a2-4666-979f-f03c0845740b_1279x1371.png 1272w, https://substackcdn.com/image/fetch/$s_!z5fi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e7f1ce-c0a2-4666-979f-f03c0845740b_1279x1371.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!z5fi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e7f1ce-c0a2-4666-979f-f03c0845740b_1279x1371.png" width="1279" height="1371" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e2e7f1ce-c0a2-4666-979f-f03c0845740b_1279x1371.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1371,&quot;width&quot;:1279,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;What kind of software engineer should I become?&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="What kind of software engineer should I become?" title="What kind of software engineer should I become?" srcset="https://substackcdn.com/image/fetch/$s_!z5fi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e7f1ce-c0a2-4666-979f-f03c0845740b_1279x1371.png 424w, https://substackcdn.com/image/fetch/$s_!z5fi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e7f1ce-c0a2-4666-979f-f03c0845740b_1279x1371.png 848w, https://substackcdn.com/image/fetch/$s_!z5fi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e7f1ce-c0a2-4666-979f-f03c0845740b_1279x1371.png 1272w, https://substackcdn.com/image/fetch/$s_!z5fi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2e7f1ce-c0a2-4666-979f-f03c0845740b_1279x1371.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><h3>So, why "avoid" startups early in your career?</h3><p>Usually, early-stage startups are rushing to make something useful, as they are constantly running out of money. In this critical period, you'll be on your own more or less, while you could really use proper mentorship and guidance.</p><p>Therefore, seek for good mentors to guide you through the wood until you look at the green field.</p><p>You can form a diamond only once. Therefore, there is no greater danger for someone who is fresh in the industry, than to learn things in the wrong way and to be mediocre at everything.</p>]]></content:encoded></item><item><title><![CDATA[Fighting impostor syndrome in software engineering]]></title><description><![CDATA[What is causing impostor syndrome?]]></description><link>https://www.crispy-engineering.com/p/fighting-impostor-syndrome-as-software-engineer</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/fighting-impostor-syndrome-as-software-engineer</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Sun, 20 Mar 2022 21:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!H-Yr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55251ef-5567-4f2b-9bb3-69a58a242b5c_2000x1333.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H-Yr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55251ef-5567-4f2b-9bb3-69a58a242b5c_2000x1333.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H-Yr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55251ef-5567-4f2b-9bb3-69a58a242b5c_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!H-Yr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55251ef-5567-4f2b-9bb3-69a58a242b5c_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!H-Yr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55251ef-5567-4f2b-9bb3-69a58a242b5c_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!H-Yr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55251ef-5567-4f2b-9bb3-69a58a242b5c_2000x1333.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H-Yr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55251ef-5567-4f2b-9bb3-69a58a242b5c_2000x1333.jpeg" width="1456" height="970" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/d55251ef-5567-4f2b-9bb3-69a58a242b5c_2000x1333.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Fighting impostor syndrome in software engineering&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="Fighting impostor syndrome in software engineering" title="Fighting impostor syndrome in software engineering" srcset="https://substackcdn.com/image/fetch/$s_!H-Yr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55251ef-5567-4f2b-9bb3-69a58a242b5c_2000x1333.jpeg 424w, https://substackcdn.com/image/fetch/$s_!H-Yr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55251ef-5567-4f2b-9bb3-69a58a242b5c_2000x1333.jpeg 848w, https://substackcdn.com/image/fetch/$s_!H-Yr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55251ef-5567-4f2b-9bb3-69a58a242b5c_2000x1333.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!H-Yr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55251ef-5567-4f2b-9bb3-69a58a242b5c_2000x1333.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><h2>What is causing impostor syndrome?</h2><blockquote><p>&#10071;Disclaimer: <br><em>Impostor syndrome is a psychological state and I'm not a domain expert. I just learned how to overcome it by myself.</em></p></blockquote><p>It was when I started freelancing that I experienced the impostor syndrome for the first time. I had to find my own clients and the thought that there is something I don't know caused me to panic.</p><p>In my mind, that's because "<em>not knowing something</em>" leads to "<em>not being able to implement something</em>". Which leads to "<em>client will notice and end the contract</em>". <br>At the end of the day, I'm gonna be incapable of providing an income for my family.</p><blockquote><p>Impostor syndrome is especially widespread in software engineering. There are so many tools. So many programming languages. Countless ways to do the same thing and we don't know all of them.</p></blockquote><h2>Naive solution for impostor syndrome</h2><p>To me, impostor syndrome surface when I figure that I don't know something - new. <br>Since that's the case, an obvious solution is to - <strong>Learn what you don't know.</strong></p><p>In the short-term, that's good. You'll expand your knowledge and feel good. Yet, we forget that the more we learn, the more we discover how little we actually know.</p><p>It spirals down without control and the impostor kicks in more often and harder.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p6Pj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2c66c320-f94d-45b8-bc40-df520a6233ba_1454x1072.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p6Pj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2c66c320-f94d-45b8-bc40-df520a6233ba_1454x1072.png 424w, https://substackcdn.com/image/fetch/$s_!p6Pj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2c66c320-f94d-45b8-bc40-df520a6233ba_1454x1072.png 848w, https://substackcdn.com/image/fetch/$s_!p6Pj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2c66c320-f94d-45b8-bc40-df520a6233ba_1454x1072.png 1272w, https://substackcdn.com/image/fetch/$s_!p6Pj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2c66c320-f94d-45b8-bc40-df520a6233ba_1454x1072.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p6Pj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2c66c320-f94d-45b8-bc40-df520a6233ba_1454x1072.png" width="1454" height="1072" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/2c66c320-f94d-45b8-bc40-df520a6233ba_1454x1072.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1072,&quot;width&quot;:1454,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Fighting impostor syndrome in software engineering&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="Fighting impostor syndrome in software engineering" title="Fighting impostor syndrome in software engineering" srcset="https://substackcdn.com/image/fetch/$s_!p6Pj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2c66c320-f94d-45b8-bc40-df520a6233ba_1454x1072.png 424w, https://substackcdn.com/image/fetch/$s_!p6Pj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2c66c320-f94d-45b8-bc40-df520a6233ba_1454x1072.png 848w, https://substackcdn.com/image/fetch/$s_!p6Pj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2c66c320-f94d-45b8-bc40-df520a6233ba_1454x1072.png 1272w, https://substackcdn.com/image/fetch/$s_!p6Pj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2c66c320-f94d-45b8-bc40-df520a6233ba_1454x1072.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><figcaption class="image-caption">Curve showing the moment when we realise how much we don't know.</figcaption></figure></div><h2>Social networks and interactions have an enormous negative effect</h2><p></p><h3>Scenario #1:</h3><div class="pullquote"><p>A colleague or coworker is tweeting about something you haven't heard of &nbsp;so far. To make things worse, others are engaging and talking about the same topic.</p></div><p><strong>My mind:</strong></p><blockquote><p>- How is it possible that I hear about this for the first time<br>- Am I wasting my time on irrelevant things, while others are improving their knowledge.<br>- Who knows how many other things I don't know.<br>- I am plain stupid for this job.<br>- How did I even make it so far.<br>- I hope no one will notice that I don't know this.<br>- Quickly, let's learn all about it and go back to that discussion to show that I'm worthy as well.</p></blockquote><p><strong>Reality</strong></p><blockquote><p>As you learned something new, so did your colleagues. They wanna share that and ask for feedback, as you do. <br>There are hundreds of things you know of, that they haven't heard. But that's not the point.<br><br>It's completely ok not to know everything, or not to be first that's informed. Chill.<br>When the time comes, you'll take a couple of hours and go through unknowns. Even better, you now know whom to ask for help.</p></blockquote><p></p><p></p><h3><strong>Scenario #2:</strong></h3><div class="pullquote"><p>There is a new tool/library/architecture/language, and everyone's are loosing it's mind about it. Reddit is on fire. Twitter is trending.Yet, I have no idea where to start.</p></div><p><strong>My mind:</strong></p><blockquote><p>- If I don't learn this new thing in 5 days, I'll be out of job in 6 months.<br>- There are so many libraries and architectures I still don't know.<br>- How can it be that other know all this stuff, am I late to the party?<br>- How did I even graduated CS without knowing this??<br>- I should accept I'm not fit for this job. I'm just pretending to know something.<br>- I am a fraud.</p></blockquote><p><strong>Reality</strong></p><blockquote><p>Development tools and libraries are also business as any other. Developer advocates are paid to talk about brand new things. It's a sales process, and you are the buyer. Conferences are organised, meet-ups. Adoption of new library, or programming language will determine the future of specific technology and its company.</p></blockquote><p>I'm using social networks to learn and expand my knowledge. In such a process, I discover many smart(er) persons with lots of accumulated knowledge.</p><p>Instead of learning from them, I start asking myself "why don't I know those things as they do". <br>Again, it's a downstream spiral without an end.</p><p></p><h2>Awakening</h2><p>An awakening moment happened to me a couple of years ago when I was reading about another new thing. At one point, it simply made no sense anymore. Every month, something extraordinarily new. How can it be!?</p><p>We're using "A", adopting "B" and now you're telling me that "C" is actually the best and "D" is in the canary line already? Oh come on!</p><p>That's when I could sit and see with my open eyes for the first time.</p><ul><li><p>"A" is working for decades.</p></li><li><p>"B" is working for a couple of months</p></li></ul><p>Either of those will do the work. And I know both of them. I picked up "B" quickly. Actually, it took a couple of days.</p><p>So I'm not stupid. I'm not a fraud. It's the hyper-production of all new technologies that is happening and we as software engineers are victims to it.</p><h2>How to control Impostor?</h2><p>Impostor syndrome will kick in from time to time. That's inevitable. When it does, be wise and say to yourself:</p><ul><li><p><em>This new thing - is it so urgent that I should pick it up today?</em> - I can tell you straight away - not really.</p></li><li><p><em>Will I become obsolete if I don't learn this new technology?</em> - No you will not, trust me.</p></li><li><p><em>Everyone's losing their mind about this new thing. Should I? </em>- No, let them test it and you wait for a stable release. If you're curious about it, sure, go ahead and explore. But usually, you're just a beta tester and that thing will change by the time it goes to a stable track.</p></li><li><p><em>How come I never heard about X?</em> - That's fine. You have it now, thus you're not late.</p></li></ul><blockquote><p>Dear reader, listen,<br><br>You came to this point of your career only with your accomplishments. No one did it for you. <br>Retrospect and see how long does it usually takes to go through some new fancy thing. It's days. In worst case, it's weeks to pick-up and start working. Thus, why worry.<br><br>We all start running at different time and it's normal for some to collect more experience. Yet, as time goes on, that experience and knowledge will converge.</p></blockquote><h2>When does the magic happen?</h2><p>By saying <em>"I don't know, can you explain this to me please?"</em> That's when you can call out a complete victory over Impostor.</p><p>There is no shame in admitting that you don't know something. What's more, it'll show others that you're just like them, because they are fighting the same battle. Just watch how the magic unfolds with your colleagues when they admit they don't know it either.</p><p>A side-effect of this is the reduction of your own ego. No ego = supportive team culture. And I think it's beautiful.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.crispy-engineering.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 Crispy Engineering! 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></p>]]></content:encoded></item><item><title><![CDATA[AWS S3 Glacier Instant Retrieval for additional storage cost savings]]></title><description><![CDATA[In fall 2021, AWS introduced an extra S3 storage class - Glacier Instant Retrieval.]]></description><link>https://www.crispy-engineering.com/p/aws-s3-glacier-instant-retrieval-for-additional-storage-cost-savings</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/aws-s3-glacier-instant-retrieval-for-additional-storage-cost-savings</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Thu, 06 Jan 2022 23:00:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Aut_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F423c056c-7b4c-42e2-8f0f-5d2491f1dd22_2000x1336.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Aut_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F423c056c-7b4c-42e2-8f0f-5d2491f1dd22_2000x1336.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Aut_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F423c056c-7b4c-42e2-8f0f-5d2491f1dd22_2000x1336.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Aut_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F423c056c-7b4c-42e2-8f0f-5d2491f1dd22_2000x1336.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Aut_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F423c056c-7b4c-42e2-8f0f-5d2491f1dd22_2000x1336.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Aut_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F423c056c-7b4c-42e2-8f0f-5d2491f1dd22_2000x1336.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Aut_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F423c056c-7b4c-42e2-8f0f-5d2491f1dd22_2000x1336.jpeg" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/423c056c-7b4c-42e2-8f0f-5d2491f1dd22_2000x1336.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;AWS S3 Glacier Instant Retrieval for additional storage cost savings&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="AWS S3 Glacier Instant Retrieval for additional storage cost savings" title="AWS S3 Glacier Instant Retrieval for additional storage cost savings" srcset="https://substackcdn.com/image/fetch/$s_!Aut_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F423c056c-7b4c-42e2-8f0f-5d2491f1dd22_2000x1336.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Aut_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F423c056c-7b4c-42e2-8f0f-5d2491f1dd22_2000x1336.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Aut_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F423c056c-7b4c-42e2-8f0f-5d2491f1dd22_2000x1336.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Aut_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F423c056c-7b4c-42e2-8f0f-5d2491f1dd22_2000x1336.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p>In fall 2021, AWS introduced an extra S3 storage class - Glacier Instant Retrieval. This brings us to a total of eight S3 storage classes offering different upsides.</p><ul><li><p>Standard</p></li><li><p>Standard Intelligent-Tiering</p></li><li><p>Standard Infrequent Access (IA)</p></li><li><p>Standard One-Zone Infrequent Access</p></li><li><p>Glacier Instant Retrieval</p></li><li><p>Glacier Flexible Retrieval</p></li><li><p>Glacier Deep Archive</p></li><li><p>Outposts</p></li></ul><h2>S3 Glacier Instant Retrieval</h2><p>Let's say you have had an object which requires real-time access. Depending on how often you access it, you would choose some of the Standard storage classes. Usually Standard-IA.<br><br>Glacier storage classes are used for archive purposes. If you don't want to delete the object, but still want to keep the option of accessing it (in no real-time), you would use Glacier. <br><br>Glacier Instant Retrieval is a missing link between cheap storage and real-time object access. <br><br><strong>Standard</strong> classes offering:</p><ul><li><p>realtime access</p></li><li><p>expensive storage</p></li><li><p>cheap data retrieval</p></li></ul><p><strong>Glacier</strong> classes offering the opposite:</p><ul><li><p>no realtime access</p></li><li><p>cheap storage</p></li><li><p>expensive data retrieval</p></li></ul><p><strong>Glacier Instant Retrieval</strong> offers the best of both worlds:</p><ul><li><p>realtime access</p></li><li><p>cheap storage ($0.004/GB - 3x cheaper than IA)</p></li><li><p>affordable data retrieval ($0.03/GB - 3x more expensive than IA)</p></li></ul><h2>Adjusting lifecycle rules to Glacier Instant Retrieval</h2><p>In November 2021, I wrote about optimizing S3 storage costs where we made a cost-cut of $40k annually.</p><div class="captioned-image-container"><figure><p><a href="https://www.crispy-engineering.com/optimize-aws-s3-storage-costs/">How to optimize AWS S3 storage costs with simple bucket analytics</a></p><figcaption class="image-caption"><a href="https://www.crispy-engineering.com/optimize-aws-s3-storage-costs/">Cloud services help us build and scale our products fast. Many forget that comes with an overlooked cost.This is how to optimize the costs of AWS S3 storage.</a></figcaption><figcaption class="image-caption"><a href="https://www.crispy-engineering.com/optimize-aws-s3-storage-costs/">Crispy EngineeringDusko Bajic</a></figcaption></figure></div><p>In bucket analytics, you can see a couple of important parameters.</p><blockquote><p>StorageClass<br>ObjectAge<br>Storage_MB<br>DataRetrieved_MB<br>ObjectCount</p></blockquote><p>By applying the same principle, but now based on December data, I've come up with the following calculation.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_mO7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e9f88e-2452-486f-8232-cb5a30f2e51a_1622x560.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_mO7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e9f88e-2452-486f-8232-cb5a30f2e51a_1622x560.png 424w, https://substackcdn.com/image/fetch/$s_!_mO7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e9f88e-2452-486f-8232-cb5a30f2e51a_1622x560.png 848w, https://substackcdn.com/image/fetch/$s_!_mO7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e9f88e-2452-486f-8232-cb5a30f2e51a_1622x560.png 1272w, https://substackcdn.com/image/fetch/$s_!_mO7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e9f88e-2452-486f-8232-cb5a30f2e51a_1622x560.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_mO7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e9f88e-2452-486f-8232-cb5a30f2e51a_1622x560.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/d3e9f88e-2452-486f-8232-cb5a30f2e51a_1622x560.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;AWS S3 Glacier Instant Retrieval for additional storage cost savings&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="AWS S3 Glacier Instant Retrieval for additional storage cost savings" title="AWS S3 Glacier Instant Retrieval for additional storage cost savings" srcset="https://substackcdn.com/image/fetch/$s_!_mO7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e9f88e-2452-486f-8232-cb5a30f2e51a_1622x560.png 424w, https://substackcdn.com/image/fetch/$s_!_mO7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e9f88e-2452-486f-8232-cb5a30f2e51a_1622x560.png 848w, https://substackcdn.com/image/fetch/$s_!_mO7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e9f88e-2452-486f-8232-cb5a30f2e51a_1622x560.png 1272w, https://substackcdn.com/image/fetch/$s_!_mO7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e9f88e-2452-486f-8232-cb5a30f2e51a_1622x560.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Glacier Instant Retrieval vs Standard IA</figcaption></figure></div><p>In this case, I am calculating the difference between Glacier Instant Retrieval and Standard-IA, by comparing storage costs and data retrieval costs.<br>As expected storage costs dropped significantly, while data retrieval costs are negligible.</p><p>The conclusion is obvious:</p><blockquote><p>By moving the objects to the Glacier Instant Retrieval instead of Standard Infrequent Access we can save 60% more on top of cost-reduction we already made.<br><br>Let's do it!!</p></blockquote><p>&#10145;&#65039;</p><p>A spreadsheet with real-world data is available here. With minor adjustments, you can use it to do your own calculations.<br><br><a href="https://docs.google.com/spreadsheets/d/11Mq_rpV2U-bRHW3CWQ1U7oRBXCVsyFUBuFVhv2r92aY/edit?usp=sharing">S3 IA vs S3 GIR: Cost analysis spreadsheet</a></p><h2>Why it works in the case above?</h2><ul><li><p>We have a small number of objects (around 100k long-lived, rarely accessed objects.</p></li><li><p>All our objects are huge - a couple of dozens of GBs.</p></li><li><p>We access these objects 2-3 times in a lifetime before it is a candidate for Deep Archive transfer.</p></li></ul><h2>When does it not make sense to switch to Instant Retrieval?</h2><ul><li><p>One downside of Glacier storage classes is that you have to keep objects in storage for 30 or 90 days. If you delete the objects - a pro-rated charge applies anyway.</p></li><li><p>If your storage is huge and you have small-size files (a couple of hundreds of kB), it means you'll have millions of files in the bucket. Pay attention to lifecycle transition cost, as it might be more expensive to move objects from one storage class to another than the cost is made.<br>For example:<br>- To move 1000 objects into Glacier Instant Retrieval, you'll be charged $0.02.<br>- To move 15m objects to Glacier Deep Archive will cost $750.</p></li><li><p>If you're accessing objects at least once a week (or so - it depends on the object size), it most probably makes sense to leave it in Standard IA. <br></p></li></ul><p>It's beyond belief that AWS is introducing these optimal storage options. We have reduced our S3 monthly costs from <strong>$3400 a month to $300 a month</strong>.<br><br>Therefore, if you have large storage, and you wanna keep those files - it's worth paying attention to different storage class capabilities as we did.</p><div><hr></div><p>&#9989;</p><p>If you've liked this post, make sure to subscribe down below. I am mostly writing about engineering management, specific software development stuff, and cloud services.</p>]]></content:encoded></item><item><title><![CDATA[Notion vs Jira | Why we decided to switch to Jira as ticketing tool]]></title><description><![CDATA[This is the pragmatic comparison of tools my team used extensively.]]></description><link>https://www.crispy-engineering.com/p/notion-vs-jira-as-ticketing-tool</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/notion-vs-jira-as-ticketing-tool</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Sun, 28 Nov 2021 18:43:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7g_F!,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%2F26c2d2d6-e6a2-44f3-9d0c-f484d13de302_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is the pragmatic comparison of tools my team used extensively.</p><p>We are a distributed team, in a startup company, working on software development for in-house products. Our team consists of product managers, product designers, software developers, QA, SysOps, etc.</p><p>We used Notion for four months and switched to Jira. Below is the explanation why.</p><h2><strong>Let's start with Notion.</strong></h2><p><br>When the team got invited to Notion, it looked like a "known tool". Soon, it was obvious that the rest of the team had no clue how Notion works.</p><p>Whole Notion works around three to four top-level containers:</p><ul><li><p>Database</p></li><li><p>Page</p></li><li><p>Subpage</p></li><li><p>Template</p></li></ul><p><strong>Database - </strong>You can imagine the database as a spreadsheet. You add columns and define its labels and data types (called properties in Notion)<br><strong>Page - </strong>One database can have many pages. Actually, every entry into the database is a page. Page can exist outside of the database as well.<br><strong>Subpage - </strong>Subpage cannot exist without a page. It's a classic parent-child relationship.<br><strong>Template - </strong>Well, it is a page template, and it links to a database.</p><h3><strong>Upsides</strong></h3><p><br><strong>Flexibility</strong>. <br>You can define databases and shape them for every need. Todo list. Project tickets. Countless existing templates to reuse and save time. <br>Easy to organize documentation with a powerful text editor.<br><br><strong>Filtering.</strong> <br>An advanced feature. You can create a "view" on top of the database and set up a filter for that view only, without affecting anything else.<br><br><strong>Custom templates.</strong><br>Countless, very useful and nice-looking page templates are available. What's more, you can define your own, and save time when creating "tickets" (read: pages).</p><h3><strong>Downsides</strong></h3><p><strong>Filtering</strong><br>Although listed as an upside, this is where Notion is a bit harder to understand. What was the challenge?</p><ul><li><p>You can create views on the database, and apply the filter on a view.</p></li><li><p>Editing a view filter and other setups don't affect the database.</p></li><li><p>Editing the page inside the database will apply the change across all views.</p></li><li><p>Setting up the filter on a database will affect everything.</p></li></ul><p>Our team struggled to differentiate view from a database.</p><p>In our setup, we had a personal page for everyone called "<em>My tasks</em>". That was a view on top of the database, filtering by <em>assignee</em> property.<br>And that worked. However, we needed some custom filterings all the time. Due to difficult understanding, most of the team members used filtering options on the database level instead.</p><p>By applying the filtering option on a database, you'd affect the whole system. Every view, and how the database looks like for everyone else would change all the time.<br>We had this issue at least three times a week. As time passed by, it become a joking topic in the team, followed by a rant.</p><blockquote><p>As a Director of Engineering, I have started asking myself. How many times we lose focus, started ranting instead of working. Why isn't this tool serving its purpose? Are we using it in the wrong way?</p></blockquote><p><strong>Permissions</strong><br>Very high-level permissions are available.</p><p>The product will evolve for sure. But not being able to set permission on "<em>who can change database schema</em>" is a huge problem.</p><p>Why? Someone clicked on a database and accidentally (or not) added a new property. This property shows up on every view, for everyone.</p><p>We could argue that "<em>it's great how flexible it is</em>"? Well, NO. As a product manager or project manager, we have no control over how to manage tasks, nor processes if everyone is intervening.</p><p>What's worse, you can delete the property as well. This is where things started to go south.</p><p>Isn't there a better way to start your Monday than to face a Notion database with the "<em>Project</em>" property removed? <br>We noticed this after 2-3 hours of work. Every filter everywhere is affected. Thousands of tickets mixed. There is no non-destructive way to revert the change.</p><p>A team member that made the change, reverted the version of the whole database out of panic, effectively canceling 3hrs of work for the team of 40. <br>There is an option to lock the database though, but it's not efficient, as you have to unlock it and lock it many times a day. <br><br>There was no permission to set to at least prevent:</p><ul><li><p>database property removal</p></li><li><p>database restoration process</p></li></ul><h3><strong>Workflow</strong></h3><p>As with any other ticketing system, you'd have a ticket status. In the case of Notion, it's a property "<em>Status</em>". A single-select data type, with values such as "<em>Backlog</em>", "<em>To do</em>", "<em>In progress</em>" etc.<br><br>Our views were set around the "<em>Status</em>" property, so we have had a board of tickets with these columns. What proved to be a problem for our team is the actual flexibility on where you can move the ticket.</p><p>In Notion, you can move it anywhere. I have spent so much time explaining the ticket flow.</p><blockquote><p>From "In progress" ticket has to go to "QA". <br>Then from "QA" to "Done". <br>From "Done" it would end up in "Deployed" and "Closed". <br><br>Closed means, it's in production and tested/verified.</p></blockquote><p><br>So often, developers would move the ticket from "<em>In progress</em>" to "<em>Done</em>", or even worse to "<em>Closed</em>". &nbsp;This was causing so much confusion, untested tickets, communication overhead over a single ticket.</p><h2><strong>Notion conclusion</strong></h2><p>Fantastic flexibility came with a price for us. I was spending 10-20% of my daytime communicating with team members how to use Notion. <br>Fixing filters, views, adjusting permissions, etc.</p><p>I even organized a "Coding Friday" with a topic: "<em>How to use Notion</em>". All with examples and differences between database, view, page, and template. <br>Without special positive outcomes.</p><p>Team frustration caused some team members to start using Github issues in parallel. Then they would sync (manually) Notion to be in the same state as Github. <br>This was a deal-breaker already. Imagine how inefficient this was. The tool should help us, and this wasn't happening.</p><p>It is a great tool for documentation. Its text editor is state of the art. Organizing pages, subpages, embedding external content is fantastic. Public exposure of single pages is so useful. When you have to present something to team members without a Notion account, it's a click away.</p><p>Pricing is questionable. Besides the tech team, other team members started applying, and quickly we had 100 accounts. Cheaper subscription packages on Notion have limitations.</p><blockquote><p>One that I disliked is the number of "timeline views" (read Gantt charts) you can create. Come on. I'm trying to create a view, trying to organize myself and you're limiting the number of views ??</p></blockquote><p>All in all, it was a cost of $10k a year for a tool that wasn't too efficient for us.<br></p><h2><strong>Jira</strong></h2><p>We needed a ticket management tool. By running a quick poll on Slack, Jira turns out to be a tool everyone worked with before.</p><p>I've exported all pages from Notion into CSV. Through Jira importer mapped the Notion properties to Jira fields and run the import. In a matter of hours, I had a setup in Jira which we used for tracking the progress of development.<br></p><h3><strong>Upsides</strong></h3><p><br><strong>Workflow</strong><br>By setting up the workflow of the tickets, all that communication overhead such as "<em>where this ticket should go</em>", disappeared. <br>The tool is serving its purpose. It is helping the team to do their work, without thinking of "how to use ticket management system".</p><p><strong>Automation</strong><br>Jira automation is making things even simpler and no one needs to think of "<em>to whom from the QA team to assign the ticket</em>". <br>Jira will do it, because someone already thought about it and set it up.</p><p><strong>Github</strong><br>Integration with Github makes it so easy to navigate back and forth. Impossible with Notion.</p><p><strong>Team satisfaction</strong><br>To an engineering manager, it's relieving to see the team happy. This change motivated the team, as they no longer have to struggle with simple tools.</p><p><strong>Price</strong><br>We are using Standard subscription. Together with the Confluence subscription, it still costs us less than Notion subscription on an annual basis. Worst case, it'll cost the same.<br></p><h3>Downsides</h3><p><br><strong>Complexity</strong><br>Jira is rather complex to set up. All the issues, types, projects, permissions, screens, schemes, fields, and whatnot. It is a time consuming to set it up. <br>I was relying on default setup for new projects, while I was setting up reusable setup in the background.<br>Once the reusable setup was ready it was a matter of few clicks to connect it with all projects.</p><p><strong>Less flexible</strong><br>Well, this week I googled <em>"How to support product backlog and sprint backlog in the same project in Jira".</em> It turns out it's a hard thing to achieve. <br>In Notion, it would be a matter of adding a "label property" and filtering with it.</p><p><strong>Expensive additions</strong><br>It's the same with all other products. As Notion puts limitations around subscription levels, similarly to use some advanced plugin with Jira (like BigPicture) might double the cost of a ticketing system.</p><h2><strong>Conclusion</strong></h2><p>Notion offers flexibility and powerful documentation options. It is not a ticketing system.<br><br>Jira + Confluence = ticketing + documentation, system. <br>Confluence also offers plenty of templates and a powerful editor. It lacks public exposure of pages as a downside.</p><p>The decision point was the efficiency of the team. Jira helped and we're happy with it.</p>]]></content:encoded></item><item><title><![CDATA[How to optimize AWS S3 storage costs with simple bucket analytics]]></title><description><![CDATA[Development, resilience, security.]]></description><link>https://www.crispy-engineering.com/p/optimize-aws-s3-storage-costs</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/optimize-aws-s3-storage-costs</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Fri, 12 Nov 2021 09:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XOec!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53176824-f831-45e1-abbb-2105e076fa7f_1982x964.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Development, resilience, security. All have greater priority than cost management. Yet, if costs are not managed on time, it can have a significant impact on the monthly bill. We haven't been immune to this, and we have started looking at how to optimize our service usage.</p><h2><strong>AWS Cost Explorer</strong></h2><p>We are hosting most of our services on AWS. Thus we've opened the Cost Explorer and started with a simple cost analysis. Three services popped up as obvious budget drains:</p><ul><li><p>RDS</p></li><li><p>S3</p></li><li><p>ECS</p></li></ul><p>We have figured that it'll take more effort to optimize something on RDS and ECS, compared to S3. That's how we came to the conclusion, that we have a quick win by focusing on S3 first.</p><h2><strong>S3 cost segmentation</strong></h2><p>By tweaking the filters on cost explorer, we come up with the visualization of S3 costs. The main driving factor in storage high-cost is actually storing the data.</p><p>We store video files, so the high cost doesn't come as a surprise. Yet, it was too much.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XOec!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53176824-f831-45e1-abbb-2105e076fa7f_1982x964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XOec!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53176824-f831-45e1-abbb-2105e076fa7f_1982x964.png 424w, https://substackcdn.com/image/fetch/$s_!XOec!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53176824-f831-45e1-abbb-2105e076fa7f_1982x964.png 848w, https://substackcdn.com/image/fetch/$s_!XOec!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53176824-f831-45e1-abbb-2105e076fa7f_1982x964.png 1272w, https://substackcdn.com/image/fetch/$s_!XOec!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53176824-f831-45e1-abbb-2105e076fa7f_1982x964.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XOec!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53176824-f831-45e1-abbb-2105e076fa7f_1982x964.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/53176824-f831-45e1-abbb-2105e076fa7f_1982x964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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_!XOec!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53176824-f831-45e1-abbb-2105e076fa7f_1982x964.png 424w, https://substackcdn.com/image/fetch/$s_!XOec!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53176824-f831-45e1-abbb-2105e076fa7f_1982x964.png 848w, https://substackcdn.com/image/fetch/$s_!XOec!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53176824-f831-45e1-abbb-2105e076fa7f_1982x964.png 1272w, https://substackcdn.com/image/fetch/$s_!XOec!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53176824-f831-45e1-abbb-2105e076fa7f_1982x964.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><figcaption class="image-caption">AWS S3 cost explorer per usage type</figcaption></figure></div><h2><strong>S3 storage classes</strong></h2><p>We assumed that our objects in S3 buckets aren't in a proper storage class. For those unaware of this, S3 supports the following storage classes.</p><ul><li><p>S3 Standard</p></li><li><p>S3 Intelligent-Tiering</p></li><li><p>S3 Standard IA</p></li><li><p>S3 OneZone IA</p></li><li><p>S3 Glacier</p></li><li><p>S3 Glacer Deep Archive</p></li><li><p>S3 Outposts</p></li></ul><p>Each storage class has its own specific pricing model. If you want to deep dive into the details, make sure to read about it <a href="https://aws.amazon.com/s3/storage-classes/">here</a>.</p><p><br>To sum up:</p><ul><li><p><strong>S3 Standard</strong> has the cheapest object access and transfer prices. But, it has the most expensive storage per GB price. It is used for frequent object access on a daily basis.</p></li><li><p><strong>S3 Standard IA</strong> is a middle ground. More expensive object access and transfer, but a bit cheaper storage price. Usually used for infrequent object access.</p></li><li><p><strong>S3 Glacier</strong> and <strong>S3 Glacier Deep Archive</strong> are used for archiving the objects. Realtime access to objects stored in these classes is no longer possible.</p></li></ul><p>We could not find out any addditional details and we had to move to S3 itself and continue with analysis.</p><h2><strong>Storage lens</strong></h2><p>The storage lens dashboard is accessible from the S3 service homepage. Once we opened the dashboard, it was a surprise how our data grew over time. 180TB and counting.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d1ek!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F092dda76-4819-4218-8d2e-1016b0965b35_1076x504.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d1ek!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F092dda76-4819-4218-8d2e-1016b0965b35_1076x504.png 424w, https://substackcdn.com/image/fetch/$s_!d1ek!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F092dda76-4819-4218-8d2e-1016b0965b35_1076x504.png 848w, https://substackcdn.com/image/fetch/$s_!d1ek!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F092dda76-4819-4218-8d2e-1016b0965b35_1076x504.png 1272w, https://substackcdn.com/image/fetch/$s_!d1ek!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F092dda76-4819-4218-8d2e-1016b0965b35_1076x504.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!d1ek!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F092dda76-4819-4218-8d2e-1016b0965b35_1076x504.png" width="1076" height="504" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/092dda76-4819-4218-8d2e-1016b0965b35_1076x504.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:504,&quot;width&quot;:1076,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!d1ek!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F092dda76-4819-4218-8d2e-1016b0965b35_1076x504.png 424w, https://substackcdn.com/image/fetch/$s_!d1ek!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F092dda76-4819-4218-8d2e-1016b0965b35_1076x504.png 848w, https://substackcdn.com/image/fetch/$s_!d1ek!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F092dda76-4819-4218-8d2e-1016b0965b35_1076x504.png 1272w, https://substackcdn.com/image/fetch/$s_!d1ek!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F092dda76-4819-4218-8d2e-1016b0965b35_1076x504.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>By exploring different options in storage lens, we have discovered three outstanding buckets. 110TB, 50TB and 20TB, respectively. But that was the best we could find out at the moment. To make a proper decision on what to do with this enormous set of data, we needed deep-level bucket analytics.</p><h2><strong>Storage class analysis</strong></h2><p>To get a detailed bucket analysis, we have created a new analytics configuration. It has to be set for each bucket individually.</p><ol><li><p>Open target bucket and select Metrics tab. Under the "Storage Class Analysis" section, choose "Create analytics configuration" option.</p></li><li><p>Define configuration name and choose options as on the following screenshot.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6Aiw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F73d1dff5-7c4e-4925-adb9-68099709b6e7_946x1196.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6Aiw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F73d1dff5-7c4e-4925-adb9-68099709b6e7_946x1196.png 424w, https://substackcdn.com/image/fetch/$s_!6Aiw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F73d1dff5-7c4e-4925-adb9-68099709b6e7_946x1196.png 848w, https://substackcdn.com/image/fetch/$s_!6Aiw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F73d1dff5-7c4e-4925-adb9-68099709b6e7_946x1196.png 1272w, https://substackcdn.com/image/fetch/$s_!6Aiw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F73d1dff5-7c4e-4925-adb9-68099709b6e7_946x1196.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6Aiw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F73d1dff5-7c4e-4925-adb9-68099709b6e7_946x1196.png" width="946" height="1196" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/73d1dff5-7c4e-4925-adb9-68099709b6e7_946x1196.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1196,&quot;width&quot;:946,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!6Aiw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F73d1dff5-7c4e-4925-adb9-68099709b6e7_946x1196.png 424w, https://substackcdn.com/image/fetch/$s_!6Aiw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F73d1dff5-7c4e-4925-adb9-68099709b6e7_946x1196.png 848w, https://substackcdn.com/image/fetch/$s_!6Aiw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F73d1dff5-7c4e-4925-adb9-68099709b6e7_946x1196.png 1272w, https://substackcdn.com/image/fetch/$s_!6Aiw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F73d1dff5-7c4e-4925-adb9-68099709b6e7_946x1196.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><figcaption class="image-caption">S3 analytics configuration setup</figcaption></figure></div><blockquote><p>Note: Even if you don't plan to do any S3 optimizations soon, turn on bucket analytics today. You will gather valuable information throughout the year. Based on this data, you will make a final decision on how to optimize S3 costs.</p></blockquote><h2><strong>Object usage analysis</strong></h2><p>Once you open the analytics file in the spreadsheet, you can see a couple of important parameters.</p><ul><li><p>StorageClass</p></li><li><p>ObjectAge</p></li><li><p>Storage_MB</p></li><li><p>DataRetrieved_MB</p></li><li><p>ObjectCount</p></li></ul><p>What are we looking at first? We want to know how often we access S3 objects. <code>DataRetrieved_MB</code> and <code>GetRequestCount</code> columns will tell us that. What's more, we have that information segmented by <code>ObjectAge</code>.</p><p>You can see example analytics for one of our buckets.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5tIX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F51bf54a9-68ef-44bb-96e6-aa13ea15f2bb_1188x594.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5tIX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F51bf54a9-68ef-44bb-96e6-aa13ea15f2bb_1188x594.png 424w, https://substackcdn.com/image/fetch/$s_!5tIX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F51bf54a9-68ef-44bb-96e6-aa13ea15f2bb_1188x594.png 848w, https://substackcdn.com/image/fetch/$s_!5tIX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F51bf54a9-68ef-44bb-96e6-aa13ea15f2bb_1188x594.png 1272w, https://substackcdn.com/image/fetch/$s_!5tIX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F51bf54a9-68ef-44bb-96e6-aa13ea15f2bb_1188x594.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5tIX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F51bf54a9-68ef-44bb-96e6-aa13ea15f2bb_1188x594.png" width="1188" height="594" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/51bf54a9-68ef-44bb-96e6-aa13ea15f2bb_1188x594.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:1188,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!5tIX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F51bf54a9-68ef-44bb-96e6-aa13ea15f2bb_1188x594.png 424w, https://substackcdn.com/image/fetch/$s_!5tIX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F51bf54a9-68ef-44bb-96e6-aa13ea15f2bb_1188x594.png 848w, https://substackcdn.com/image/fetch/$s_!5tIX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F51bf54a9-68ef-44bb-96e6-aa13ea15f2bb_1188x594.png 1272w, https://substackcdn.com/image/fetch/$s_!5tIX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F51bf54a9-68ef-44bb-96e6-aa13ea15f2bb_1188x594.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><figcaption class="image-caption">S3 bucket analytics in a spreadsheet</figcaption></figure></div><p><br>It is quite obvious here, that system is accessing objects in first couple of days of object life. After that, objects are not used anymore. <br>What's unfortunate for us, is that all objects are stored on the S3 Standard storage class. This one is the most expensive one for storing objects.</p><h2><strong>Optimization steps</strong></h2><p>Common sense is telling us that we have two options:</p><ul><li><p>Delete all objects older than 14 days</p></li><li><p>Move all objects older than 14 days to Glacier Deep Archive</p></li></ul><p>Before we validate those options, we have to look at other cost influential factors.</p><h3><strong>Transfer costs</strong></h3><p>When you're moving files from one storage class to another, you're paying a transfer fee. The most expensive destination is Glacier Deep Archive. It costs $0.05 per 1000 requests.</p><p>What you have to do then, is to look at the <code>ObjectCount</code> parameter and see how many objects you would have to move. That's how many transfer requests you will have. To save money in the long term, you have to pay something upfront.</p><h3><strong>Glacier meta-files</strong></h3><p>To store objects to Glacier Deep Archive, S3 creates metadata files. These files provide information on objects in deep-archive. For each transferred object to Glacier, S3 creates two more objects. One of 8KB in Standard class and one of 32KB in Glacier class. <br>Why is this important? If you have a huge amount of objects in the bucket, with a small object size (in KB), it is possible that you'll never have a positive break-even point for cost-saving. <br>It turns out that you might be spending more money on transferring the objects, than saving on storage.</p><p>In our case, that wasn't the case, and we moved on with the initial plan. We will move all files older than 15 days to the Glacier Deep Archive storage class.</p><p>How to do that?</p><h2>Lifecycle rules</h2><p>What's great about S3 object transfers is that you don't do it by hand. Instead, all we need is to set a lifecycle rule which moves the files automatically based on object age.</p><p>To set lifecycle rule:</p><ol><li><p>Go to bucket "Management" tab</p></li><li><p>And choose an option "Create lifecycle rule"</p></li></ol><p>We have set a rule action that applies to all objects in the bucket, as follows:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kypu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddd58ae-d27a-4ad3-bfd0-4e8ed685c45b_1622x878.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kypu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddd58ae-d27a-4ad3-bfd0-4e8ed685c45b_1622x878.png 424w, https://substackcdn.com/image/fetch/$s_!kypu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddd58ae-d27a-4ad3-bfd0-4e8ed685c45b_1622x878.png 848w, https://substackcdn.com/image/fetch/$s_!kypu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddd58ae-d27a-4ad3-bfd0-4e8ed685c45b_1622x878.png 1272w, https://substackcdn.com/image/fetch/$s_!kypu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddd58ae-d27a-4ad3-bfd0-4e8ed685c45b_1622x878.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kypu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddd58ae-d27a-4ad3-bfd0-4e8ed685c45b_1622x878.png" width="1456" height="788" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/9ddd58ae-d27a-4ad3-bfd0-4e8ed685c45b_1622x878.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:788,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!kypu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddd58ae-d27a-4ad3-bfd0-4e8ed685c45b_1622x878.png 424w, https://substackcdn.com/image/fetch/$s_!kypu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddd58ae-d27a-4ad3-bfd0-4e8ed685c45b_1622x878.png 848w, https://substackcdn.com/image/fetch/$s_!kypu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddd58ae-d27a-4ad3-bfd0-4e8ed685c45b_1622x878.png 1272w, https://substackcdn.com/image/fetch/$s_!kypu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9ddd58ae-d27a-4ad3-bfd0-4e8ed685c45b_1622x878.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><figcaption class="image-caption">S3 bucket lifecycle rules</figcaption></figure></div><p>And that's all it takes. From now on, every object older than 15 days will transfer to Glacier Deep Archive.</p><h2><strong>More complex scenarios</strong></h2><p>The bucket we used in the above example is not that common. Usually, object access happens throughout the year instead of the first two weeks. In another bucket example, we have set the lifecycle rules as follows:</p><ol><li><p><strong>After 30 days move files from "S3 Standard" to "S3 Standard IA".</strong><br>Because in the first 30 days, 80% of work on those objects completes. That's why S3 Standard Infrequent-Access fits in, as it's cheaper to store, but still provides real-time access.</p></li><li><p><strong>After 18 months move files from "S3 Standard IA" to "S3 Glacier Deep Archive"</strong>. <br>After 18 months, the object won't be available in real-time. Someone still might ask for that file. If that happens, they will have to wait for 12h to restore it from Glacier. It's a tradeoff we made with reduced storage costs.</p></li></ol><h2>Result</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gd2g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5b166e47-9ef1-4cee-9dfa-24da5093bb21_1286x726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gd2g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5b166e47-9ef1-4cee-9dfa-24da5093bb21_1286x726.png 424w, https://substackcdn.com/image/fetch/$s_!Gd2g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5b166e47-9ef1-4cee-9dfa-24da5093bb21_1286x726.png 848w, https://substackcdn.com/image/fetch/$s_!Gd2g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5b166e47-9ef1-4cee-9dfa-24da5093bb21_1286x726.png 1272w, https://substackcdn.com/image/fetch/$s_!Gd2g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5b166e47-9ef1-4cee-9dfa-24da5093bb21_1286x726.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gd2g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5b166e47-9ef1-4cee-9dfa-24da5093bb21_1286x726.png" width="1286" height="726" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5b166e47-9ef1-4cee-9dfa-24da5093bb21_1286x726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:726,&quot;width&quot;:1286,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Gd2g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5b166e47-9ef1-4cee-9dfa-24da5093bb21_1286x726.png 424w, https://substackcdn.com/image/fetch/$s_!Gd2g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5b166e47-9ef1-4cee-9dfa-24da5093bb21_1286x726.png 848w, https://substackcdn.com/image/fetch/$s_!Gd2g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5b166e47-9ef1-4cee-9dfa-24da5093bb21_1286x726.png 1272w, https://substackcdn.com/image/fetch/$s_!Gd2g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5b166e47-9ef1-4cee-9dfa-24da5093bb21_1286x726.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>With this simple approach, we reduced S3 costs seven times, saving ~$40k annually.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.crispy-engineering.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 Crispy Engineering! 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></p><p></p>]]></content:encoded></item><item><title><![CDATA[From software developer to engineering manager]]></title><description><![CDATA[Software developers as technical persons find a desire in making stuff.]]></description><link>https://www.crispy-engineering.com/p/from-software-developer-to-engineering-manager</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/from-software-developer-to-engineering-manager</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Mon, 25 Oct 2021 22:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7g_F!,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%2F26c2d2d6-e6a2-44f3-9d0c-f484d13de302_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Software developers as technical persons find a desire in making stuff. Engineering the solutions through coding, setup, installations, with its own ingenuity. They gotta love what they are doing, to be really good at it. And they stick to it.</p><p>Throughout the years, the engineer gets promoted. At some point, you become a team lead and stay in that position for some time. The biggest responsibility is to keep the high-quality bar in the team. It is usually reflected through code, architecture, and mentorship of younger team members.</p><p>Delivery of good results brings benefits and you get into the position of leading the whole project. The stakes get bigger. Less time spent on coding, but more on communication with product managers, customers, guiding team members.</p><p>And you are getting better and better, so you get an offer to be an engineering manager. Naturally, you accept, without fully understanding what does it mean for you.</p><h1>What is an engineering manager?</h1><p>First and foremost. Software engineer, that become engineering manager, is not promoted. It is a transition from a technical role into a managerial role. A career choice has been made that is no longer technical. After a decade of work, you're in beginner's shoes again, googling this article eventually.</p><p>It's completely fine to ask yourself then <strong>"What should I do?"</strong>.</p><p>If you have someone to show you direction and mentor you, consider yourself lucky. Because 14 out of 15 engineering managers are coming from the software development shoes, without any support provided by the company or upper-level management. So, don't be too stressed, your company is no different.</p><p>Engineering manager roles are different from one company to another. When I got promoted, I have tried to find a precise definition of my new role. And I failed. I will try to describe the most common things, you will do as an engineering manager.</p><h2>You have the team</h2><p>The engineering manager has a team of up to 10 people. Ideally less. Depending on the team topology in the company, your whole team is usually working on the same project.</p><p>Your team is here to stay. Even if the project change, team members won't leave the team, because you have established a trusting relationship already. That is crucial for your ability to help your team members.</p><h3>Trust</h3><p>The main driver of a successful engineering manager is establishing trust with its team members. It's easier said than done. Trust is not assumed, it has to be earned, and it takes time and skill to do it.</p><p>As a promoted engineering manager, you have a much easier job, as you worked with the team for quite some time. Take that as an advantage. Communicate openly and make sure to show by example that nothing is strange now with you in a different role.</p><p>Therefore, your first task is to schedule recurring 1-1 discussions with every team member. The optimal recurrence is once every two weeks.</p><blockquote><p>Don't mix trust with friendship. When approaching 1-1 discussion, it has to be driven on a professional level. Avoid beer-like discussion and leave it for the more appropriate time. <br>Closest metaphor would be, when you say to your partner "Can we take a sit, we gotta talk?". So, you still love each other, but you're still having a serious conversation.</p></blockquote><h3>Growth</h3><p>Having team members not improve their skills is a failure of an engineering manager. You should set the goals together with every team member. Support them in achieving those goals, by providing resources and connections with other experts inside or outside the company.</p><h3>Performances</h3><p>Your output, as an engineering manager, is just partially your personal achievement. What is measured is the output of your team actually. If the team is not performing well, it's a clear sign that something is off with your approach.</p><p>Performance reviews are done at least twice a year. In some companies every quarter. If you don't have them yet, start planning.</p><h1>Supporting software development</h1><p>Since most engineering managers have great software development knowledge, it's natural for them to get themselves involved in the technical decisions or at least discussions.<br>If possible, don't, as there are other team members in your team that have the accountability of making a technical decision. <br>Some high-level technical decisions are ok to be part of. I like to help the team with better version control, release cycles, deployment strategies, etc.</p><p>You as an engineering manager will constantly communicate with the product manager as well as with the manager you report to. Often communication provides a better perspective over business needs. What comes from that is the understanding of how a team effort can help those business needs.</p><p>Apart from the technical part of the process, applying software development methodology like Scrum requires additional involvement as well. Being in contact with the product manager to plan the next features is out of greatest importance.</p><h2>Hiring</h2><p>An important role of the engineering manager is to help with talent recruitment and hiring new team members. Therefore you will have to have open communication with your recruiter all the time. Checking new candidates and helping with the selection process every day. This will help in the better shortlisting process and optimal interviews.</p><p>You will have to organize interviews, and set general rules on how one interview should look like. Make sure to repeat constantly what to communicate to candidates and how to present company benefits in an easily understandable way.</p><p>After the interview, there is an onboarding stage. If it doesn't exist, it's up to you to define one. If it exists already, you have to make sure that the onboarding is improved with every new candidate. It is a never-ending process.</p><h2>Firing</h2><p>The most uncomfortable part of this role is when you have to fire someone from the team. It's impossible to be good at it if you're just starting as an engineering manager.</p><p>Take all of the help you're offered with. Value every piece of advice.</p><h1>What engineering manager is not?</h1><p>Usually, engineering managers do not code. Not many software developers are ready to make a full transition into management in a single day. That's why I suggest having the coding option open for really small tasks.</p><p>Set the goals for engineering managers, so that they don't fall back to the safe heaven of coding by default. Coding should not slow down education and the advancement of a manager.</p><p>The engineering manager is not a psychiatrist. If you are not an educated one, and chances are you aren't, don't try to be one. We might face team members in a difficult period of life. The best thing to do is to listen and be there for them.</p><h2>Where to start</h2><p>Start reading. Here are a couple of books (in order) that helped me to start my thought process on engineering management.</p><p><a href="https://www.amazon.com/dp/1680507249?tag=gregdoesit-20&amp;keywords=become%20an%20effective%20software%20engineering%20manager&amp;geniuslink=true#ace-9859629705">Become an Effective Software Engineering Manager: How to Be the Leader Your Development Team Needs</a></p><p><a href="https://www.amazon.com/Managers-Path-Leaders-Navigating-Growth/dp/1491973897/ref=sr_1_1?crid=12ZCADJ3RAK14&amp;dchild=1&amp;keywords=the+manager%27s+path&amp;qid=1635457670&amp;qsid=144-2089975-1735633&amp;s=books&amp;sprefix=the+manage%2Cstripbooks-intl-ship%2C186&amp;sr=1-1&amp;sres=1491973897%2C1549982036%2C0735219567%2C1680507249%2C1595622241%2C1541700430%2C1250235375%2C1119244609%2C0978440749%2C1732265186%2C0972553665%2C1119191092%2C1591846447%2CB0725RFDPY%2CB07GBF59H9%2CB08848D927&amp;srpt=ABIS_BOOK">The Manager's Path: A Guide for Tech Leaders Navigating Growth and Change</a></p><p><a href="https://www.amazon.com/Team-Topologies-Organizing-Business-Technology/dp/1942788819/ref=sr_1_1?crid=1D2KX2P89AXCR&amp;dchild=1&amp;keywords=team+topologies&amp;qid=1635457727&amp;qsid=144-2089975-1735633&amp;s=books&amp;sprefix=team+t%2Cstripbooks-intl-ship%2C180&amp;sr=1-1&amp;sres=1942788819%2C1732265186%2C1736633309%2CB0767H9ZMM%2CB07776XY3D%2CB07B9F83WM%2CB07QT9QR41%2CB089CSW3Y6%2C163369870X%2C0470100281%2C1775038335%2C1491973897%2C1091173265%2C111969129X%2C195212008X%2CB089D39383">Team Topologies: Organizing Business and Technology Teams for Fast Flow</a></p><p>Check for blogs of other engineering managers. One of my favorites is Gergely Orosz.</p><div class="captioned-image-container"><figure><p><a href="https://blog.pragmaticengineer.com/">The Pragmatic Engineer</a></p><figcaption class="image-caption"><a href="https://blog.pragmaticengineer.com/">Software. People. Problems. Ideas. Engineering.</a></figcaption><figcaption class="image-caption"><a href="https://blog.pragmaticengineer.com/">The Pragmatic Engineer</a></figcaption></figure></div><p>There is a whole community of people helping each other in these roles. You wont have to search for them, because this community is just exceptional.</p><div class="captioned-image-container"><figure><p><a href="https://ctocraft.com/">Transformational Coaching, Mentoring, Workshops and Events for CTOs &amp; Tech Managers | CTO Craft</a></p><figcaption class="image-caption"><a href="https://ctocraft.com/">What makes a good CTO great? Continuous learning and coaching! We work with CTOs and Technology Managers in businesses across the world become better leaders through transformational coaching, mentoring, workshops and events</a></figcaption><figcaption class="image-caption"><a href="https://ctocraft.com/">CTO Craft</a></figcaption></figure></div><h2>Closing note</h2><p>I am currently in the position of Director of Engineering and will be writing about engineering management challenges. If you liked this post, hit the subscribe option below and get more content in the future, based on personal experience.</p>]]></content:encoded></item><item><title><![CDATA[Registracija SP-a u Republici Srpskoj]]></title><description><![CDATA[U vijestima se svako toliko provu&#269;e tekst o freelancer-ima i (ne)pla&#263;anju poreza.]]></description><link>https://www.crispy-engineering.com/p/registracija-sp-republika-srpska</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/registracija-sp-republika-srpska</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Thu, 01 Apr 2021 08:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7Rq2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2b1b4933-d569-451b-b938-77b9f39e02ce_1152x406.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>U vijestima se svako toliko provu&#269;e tekst o freelancer-ima i (ne)pla&#263;anju poreza. Kako to obi&#269;no biva, negdje pri kraju tih tekstova se pozovu svi oni koji zara&#273;uju udaljenim poslovima, da svoje prihode prebace u legalne tokove.<br>Time se ustvari &#382;eli re&#263;i da svi oni koji ostvaruju prihode osnuju pravni subjekt preko kojeg &#263;e poslovati.</p><p>U Republici Srpskoj to je mogu&#263;e na dva na&#269;ina.</p><ul><li><p>Osnivanjem d.o.o (dru&#353;tvo sa ograni&#269;enom odgovorno&#353;&#263;u)</p></li><li><p>Osnivanjem SP (samostalni preduzetnik)</p></li></ul><p>U daljem tekstu &#263;emo se baviti SP-om, koja je procedura za osnivanje, koji su tro&#353;kovi i kako se ra&#269;una porez na dohodak.</p><h1>SP - D.O.O</h1><p>Prvo pitanje koje se ina&#269;e postavlja je, koja je razlika izmedju D.O.O i SP?<br>Osnovna razlika je u tome &#353;to sa SP u slu&#269;aju nekog spora odgovarate sa li&#269;nom imovinom, dok u slu&#269;aju D.O.O. odgovarate visinom osniva&#269;kog kapitala.</p><p>SP je mnogo br&#382;e i jeftinije registrovati (isto tako jeftino i ugasiti), te je ve&#263;ini freelancer-a za po&#269;etak sasvim dovoljan.</p><h1>MP/VP, a ustvari SP</h1><p>Kada se govori o SP-u, prvo &#263;e vam neko pomenuti famoznu cifru of 50.000KM.<br>Radi se o sljede&#263;em:</p><ul><li><p>Ukoliko u toku godine va&#353; promet ne pre&#273;e 50.000KM, vi ste mali preduzetnik (MP).</p></li><li><p>Ukoliko u toku godine va&#353; promet pre&#273;e 50.000KM, vi ste veliki preduzetnik (VP).</p></li></ul><p>&#352;ta to prakti&#269;no zna&#269;i, pogledajmo kroz tro&#353;kove.</p><h2>Tro&#353;kovi</h2><ul><li><p>Mali preduzetnik (MP) pla&#263;a porez na dohodak od 2% (a minimalno 50KM mjese&#269;no). Ovo se jo&#353; naziva i pau&#353;alni porez.</p></li><li><p>Veliki preduzetnik (VP) pla&#263;a porez na dohodak od 10% i ulazi u sistem PDV-a. Dakle, sa svojim pravnim subjektom mo&#382;ete imati milionski promet, a i dalje biti SP.</p></li><li><p>Vi kao vlasnik SP-a, za sebe pla&#263;ate doprinose (PIO, zdravstveno osiguranje itd) na mjese&#269;nom nivou. Iznos doprinosa se ra&#269;una na osnovu prosje&#269;ne plate u Republici Srpskoj za prethodnu godinu.<br>Npr. Za 2020-u godinu, prosje&#269;na bruto plata je bila 1485.00 KM, a ra&#269;unica izgleda kao na slici ispod:<br></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7Rq2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2b1b4933-d569-451b-b938-77b9f39e02ce_1152x406.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7Rq2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2b1b4933-d569-451b-b938-77b9f39e02ce_1152x406.png 424w, https://substackcdn.com/image/fetch/$s_!7Rq2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2b1b4933-d569-451b-b938-77b9f39e02ce_1152x406.png 848w, https://substackcdn.com/image/fetch/$s_!7Rq2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2b1b4933-d569-451b-b938-77b9f39e02ce_1152x406.png 1272w, https://substackcdn.com/image/fetch/$s_!7Rq2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2b1b4933-d569-451b-b938-77b9f39e02ce_1152x406.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7Rq2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2b1b4933-d569-451b-b938-77b9f39e02ce_1152x406.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/2b1b4933-d569-451b-b938-77b9f39e02ce_1152x406.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Doprinosi za SP&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="Doprinosi za SP" title="Doprinosi za SP" srcset="https://substackcdn.com/image/fetch/$s_!7Rq2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2b1b4933-d569-451b-b938-77b9f39e02ce_1152x406.png 424w, https://substackcdn.com/image/fetch/$s_!7Rq2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2b1b4933-d569-451b-b938-77b9f39e02ce_1152x406.png 848w, https://substackcdn.com/image/fetch/$s_!7Rq2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2b1b4933-d569-451b-b938-77b9f39e02ce_1152x406.png 1272w, https://substackcdn.com/image/fetch/$s_!7Rq2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2b1b4933-d569-451b-b938-77b9f39e02ce_1152x406.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Dakle, mjese&#269;ni iznos doprinosa koji morate platiti u 2021 godini je 292.00KM (upamtite ovu cifru).</p><ul><li><p>Komunalne i republi&#269;ke takse, razne naknade na godi&#353;njem nivou ko&#353;taju oko 200KM.</p></li></ul><p>Dakle, ako ste osnovali SP i jo&#353; uvijek ste mali preduzetnik, mjese&#269;no &#263;ete imati minimalno: <code>292 + 50 = 342 KM</code> troskova, jer je pau&#353;alni porez minimalno 50KM, kao i jednom godi&#353;nje pla&#263;anje pomenutih naknada.</p><p>Ukoliko ste veliki preduzetnik, pau&#353;alni porez ne pla&#263;ate, ve&#263; samo doprinose i godi&#353;nje naknade.</p><h3>Kako se ra&#269;una porez na dohodak</h3><p>Najbolje je da krenemo sa primjerom. Recimo da ste u toku mjeseca ukupno naplatili 3000 KM. Porez na dohodak se ra&#269;una tako &#353;to:</p><ol><li><p>Od preostalog iznosa iz prvog koraka se ra&#269;una iznos poreza.<br>U slu&#269;aju MP: <code>3000 * 2% = 60</code><br>U slu&#269;aju VP: <code>(3000 - 292) * 10% = 270.80</code></p></li></ol><p>Dakle, ukupni tro&#353;kovi koje ste du&#382;ni platiti poreskoj upravi u gornjem primjeru su:</p><p>MP: <code>292 + 60 = 352.00 KM</code><br>VP: <code>292 + 270.80 = 562.80 KM</code></p><p>Tako da vam na raspolaganju ostaje:<br>MP: <code>3000 - 352 = 2648.00 KM</code><br>VP: <code>3000 - 562.80 = 2437.20 KM</code></p><h3>PDV</h3><p>Vrlo je bitno da znate, da ukoliko svoje usluge fakturi&#353;ete inostranom klijentu, to &#353;to ste kao veliki preduzetnik u sistemu PDV-a BiH ne igra nikakvu ulogu, jer pravno lice kojem fakturi&#353;ete NIJE u sistemu PDV BiH.<br>Samim tim, PDV ne fakturi&#353;ete inostranom klijentu, tj nemate izlazni PDV i isti ne pla&#263;ate.<br>Dakle, ukoliko ste u sistemu PDV-a i fakturi&#353;ete inostranom klijentu, primjenjuje se ra&#269;unica iz gornjeg primjera.</p><p>Ukoliko svoje usluge fakturi&#353;ete pravnom subjektu registrovanom u BiH, na cijenu va&#353;e usluge se dodaje PDV od 17% i tako uve&#263;ana faktura se &#353;alje klijentu.</p><p>Kako ve&#263;ina freelancer-a radi sa inostranim klijentima, prelazak u sistem PDV-a ne predstavlja nikakav problem.</p><p>Ono &#353;to je bitno da se napomene. <strong>Svake godine do 31.1 u poreskoj upravi se mora podnijeti zahtjev za MP status.</strong> U suprotnom isti nemate te vam se status mijenja u velikog preduzetnika.</p><h2>Prednosti i mane</h2><p>Za&#353;to biste osnovali SP?</p><ul><li><p>Zdravstveno osiguranje, sta&#382;.<br>Ukoliko ste do sada radili kao freelancer i vr&#353;ili naplatu preko raznih payment servisa, deviznog ra&#269;una u banci itd, bili ste u obavezi da platite porez od 10% na ispla&#263;enu sumu i to je to.<br>Kroz poslovanje sa SP-om, zdravstveno osiguranje sebe i svoje porodice upla&#263;ujete na mjese&#269;nom nivou, a iznos poreza je manji (MP = 2%) ili isti (VP = 10%) nego kada ste bili u sivoj zoni.</p></li><li><p>Lako&#263;a poslovanja.<br>Kada imate osnovan pravni subjekt, potpisivanje ugovora sa drugim pravnim subjektima je stvar forme i vi vrlo lako ulazite u poslovne odnose sa drugim pravnim licima. Mnogim pravnim subjektima, naro&#269;ito na lokalnom tr&#382;i&#353;tu nije povoljno da posluju sa fizi&#269;kim licima.</p></li><li><p>Prepustite knjigovo&#273;i.<br>Obra&#269;un poreza, doprinosa, pla&#263;anje istih i svih nekih zakonskih zavrzlama i naknada za koje ne znate da postoje treba da prepustite knjigovo&#273;i da se o tome brine. Usluge knjigovodstva su od 50 - 150 KM mjese&#269;no.</p></li><li><p>Odbitak.<br>Ukoliko ste veliki preduzetnik, imate mogu&#263;nost odbitka od poreza kod nabavke opreme. Laptop, internet, kafa, monitor, su sredstva koja vi kupujete da biste uspje&#353;no prodavali svoje usluge. Tro&#353;kovi koje imate zbog nabavke svih tih sredstava se odbijaju od poreske osnovice. Kao mali preduzetnik, ovu mogu&#263;nost nemate.</p></li></ul><p>&#352;ta SP i dalje ne rije&#353;ava?</p><ul><li><p>Pote&#353;ko&#263;e naplate preko PayPal-a, UpWork-a itd. Ve&#263;ina freelancer-a radi putem UpWork-a i sli&#269;nih platformi. Vi kada radite za klijenta kojeg ste na&#353;li putem UpWork-a, naj&#269;e&#353;&#263;e nemate ugovor i ne &#353;aljete mu fakturu. Kada vam zara&#273;ena sredstva budu ispla&#263;ena vi nemate na osnovu &#269;ega da opravdate porijeklo tog novca.<br>Zato se preporu&#269;uje da se klijenti sa kojima se radi potpi&#353;e ugovor ili da im se izda faktura, kako biste istu mogli predo&#269;iti banci u trenutku kada vam zara&#273;ena sredstva budu ispla&#263;ena.<br>Prakti&#269;no je nebitno odakle se sredstva ispla&#263;uju (PayPal, Payoneer, Wire itd) dok god mo&#382;ete dokazati porijeklo novca.</p></li><li><p>Nepovoljan polo&#382;aj u banci kada vam treba kredit.<br>Desi&#263;e vam se da zara&#273;ujete vrlo lijepo, ho&#263;ete da kupite stan i odete u banku da podnesete zahtjev za stambeni kredit. Neprijatno &#263;ete se iznenaditi, jer &#263;e vas u banci smatrati vrlo rizi&#269;nim klijentom.<br>&#352;to se banke ti&#269;e, bud&#382;etski korisnik sa minimalnom platom od 500KM &#263;e lak&#353;e dobiti kredit nego vi koji mo&#382;ete imati primanja od nekoliko hiljada KM. Da biste ovaj problem prevazi&#353;li, prvo morate znati pregovarati, drugo morate znati svakoga, i tre&#263;e tra&#382;i&#263;e desetke i desetke potpisanih papira i izjava.</p></li><li><p>Zbog niskog praga prelaska u PDV sistem, vrlo brzo &#263;ete postati skupi lokalnim klijentima. Dakle, da biste pokrili tro&#353;ak od 10% + 17% PDV-a, vi &#263;ete di&#263;i svoju cijenu i biti u nepovoljnom polo&#382;aju u pore&#273;enju sa onima koji rade na crno, te naposljetku izgubiti poslovnu priliku, jer poku&#353;avate da radite po&#353;teno dok drugi to ignori&#353;u.<br>U zemljama regiona, samo Crna Gora ima ni&#382;i prag ulaska u PDV od Republike Srpske.</p></li></ul><h1>Postupak registracije SP-a u Republici Srpskoj</h1><p>Prvi savjet je da to prepustite knjigovo&#273;i da vam rije&#353;i, ukoliko pak ne&#263;ete, postupak za Banja Luku je otprilike ovakav:</p><ol><li><p>U op&#353;tini u sobi broj 21 imate besplatnu slu&#382;bu za savjetovanje, gdje &#263;e vam ljubazno osoblje sve objasniti.</p></li><li><p>U osnovnom sudu je potrebno da podnesete zahtjev za uvjerenjem da nemate nepla&#263;enih kazni. (&#269;eka se par dana)</p></li><li><p>U osnovnom sudu je potrebno da podnesete zahtjev za uvjerenje da nije izre&#269;ena pravosna&#382;na presuda zabrane obavljanja djelatnosti.</p></li><li><p>U poreskoj upravi je potrebno da podnesete zahtjev za uvjerenje o pla&#263;enim porezima. (&#269;eka se par dana)</p></li><li><p>U op&#353;tini je potrebno popuniti zahtjev za registraciju preduzetnika. Ponovo, osoblje iz sobe 21 &#263;e vam tu pomo&#263;i.</p></li><li><p>Zajedno sa tim zahtjevom i uvjerenjem iz suda i poreske u sobi 16 na &#353;alteru 1 i 2 se podnosi zahtjev za registraciju. Ovde se pla&#263;a par taksi (cca 30KM). Na rje&#353;enje od registraciji se &#269;eka oko 3-4 dana.</p></li><li><p>Nakon &#353;to je rje&#353;enje o registraciji gotovo, zovu vas na telefon te isto idete u op&#353;tinu preuzeti.</p></li><li><p>Sa rje&#353;enjem idete kod pe&#269;atoresca da vam se napravi pe&#269;at. (&#269;eka se par sati, u zavisnosti od vrste pe&#269;ata pla&#263;ate jeftinije ili skuplje, cca 30KM)</p></li><li><p>Kada dobijete pe&#269;at, idete u poresku upravu te podnosite zahtjev za izdavanje JIB-a (za ovaj zahtjev vam je potreban pe&#269;at) (&#269;eka se 3-7 dana)</p></li><li><p>Kada dobijete JIB u poreskoj upravi, tada idete u banku da otvorite poslovni ra&#269;un. Kako &#263;ete najvjerovatnije raditi sa inostranim klijentima, odmah naglasite da vam se otvori i devizni ra&#269;un (&#269;eka se 3-4 dana)</p></li><li><p>Po otvorenom ra&#269;unu u banci, idete kod knjigovo&#273;e i potpisujete ugovor o saradnji. Nivo ovla&#353;tenja koje &#263;ete dati knjigovo&#273;i je va&#353; izbor. Knjigovo&#273;a mo&#382;e da ima pristup va&#353;em bankovnom ra&#269;unu i da pla&#263;a sve umjesto vas ukoliko vi tako odaberete.</p></li><li><p>Naposljetku idete u poresku upravu da se prijavite i mo&#382;ete po&#269;eti sa radom.</p></li></ol><p>Iz li&#269;nog iskustva, proces osnovanja SP-a u Banjoj Luci traje oko 30 dana.</p><h3>Knjigovo&#273;a</h3><p>Ukoliko ste mali preduzetnik i znate da sami izra&#269;unate poreze i doprinose, knjigovo&#273;a vam manje-vi&#353;e i ne treba. Me&#273;utim, postoje razne naknade kojih niste svjesni, npr &#8220;Vodoprivredna naknada&#8221; od 6KM&#8230; sa druge strane, po&#353;to sa SP odgovarate svojom imovinom, ne &#382;elite da se dovedete u situaciju da vam poreska &#353;alje opomene zbog propu&#353;tenog pla&#263;anja.<br>50KM mjese&#269;no za knjigovo&#273;u je mala cijena za sprije&#269;avanje glavobolje i frustracije. Kada postanete veliki preduzetnik, knjigovo&#273;a &#263;e vam svakako trebati, a i pomo&#263;i &#263;e vam u transformaciji iz MP u VP.<br>Dobronamjeran savjet, unajmite knjigovo&#273;u.</p><p>Ukoliko pak odlu&#269;ite da sami vodite knjige u pla&#263;ate porez, po&#382;eljno je da podnesete zahtjev u poreskoj upravi za elektronski pristup aplikacijama preko kojih se podnose poreske prijave.</p><h2>SP: Da ili ne?</h2><p>Zavisi od mnogo &#269;ega. Ukoliko imate vrlo mali promet, mozda je ipak autorski ugovor svako toliko bolje rje&#353;enje.<br>Ako sa inostranim klijentima potpisujete direktan ugovor (na full-time) SP je sigurno najbolja opcija za vas.<br>Radite lokalno i uspjevate zadr&#382;ati promet ispod 50.000 KM? SP je definitivno opcija za vas.</p><p>U regionu, Republika Srpska ima najbolje uslove za poslovanje putem samostalnog preduzetni&#353;tva. 2% porez je najni&#382;a stopa u Evropi te to treba iskoristiti.</p>]]></content:encoded></item><item><title><![CDATA[Registering all types as generic interfaces in assembly in dotnet core]]></title><description><![CDATA[Let&#8217;s say that we have an interface in your app as IRepository<T> which has dozens of implementations.]]></description><link>https://www.crispy-engineering.com/p/registering-all-types-as-generic-interfaces-in-assembly-in-dotnet-core</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/registering-all-types-as-generic-interfaces-in-assembly-in-dotnet-core</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Mon, 04 Jan 2021 23:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7g_F!,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%2F26c2d2d6-e6a2-44f3-9d0c-f484d13de302_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Let&#8217;s say that we have an interface in your app as <code>IRepository&lt;T&gt;</code> which has dozens of implementations. Wouldn&#8217;t it be so nice to define the registration rule for dependency injection containers, only once so that it can cover all existing, and future repositories, without additional effort?</p><p>This is something we want to avoid:</p><pre><code>serviceCollection.AddTransient(typeof(IRepository&lt;User&gt;), typeof(UserRepository));
serviceCollection.AddTransient(typeof(IRepository&lt;Company&gt;), typeof(CompanyRepository));
serviceCollection.AddTransient(typeof(IRepository&lt;Car&gt;), typeof(CarRepository));
</code></pre><p>If you&#8217;ve used Autofac before, something like this could be defined in a couple of lines:</p><pre><code>public static void UseRepositories(this ContainerBuilder builder) 
{
    builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
        .AsClosedTypesOf(typeof(IRepository&lt;&gt;))
        .AsImplementedInterfaces();
}
</code></pre><p>Basically, you would get current assembly, select all types implementing <code>IRepository&lt;&gt;</code> and register them as interface they implement, which is at least <code>IRepository&lt;&gt;</code>.<br>After this, we&#8217;re able to inject <code>UserRepository</code> as <code>IRepository&lt;User&gt;</code>.</p><p>In dotnet core, you won't use Autofac most probably. We still don&#8217;t have those handy methods like <code>AsClosedTypesOf</code> or <code>AsImplementedInterfaces</code> therefore, we&#8217;d have to implement it on our own, something like this:</p><pre><code>Assembly.GetExecutingAssembly()
    .GetTypes()
    .Where(a =&gt; a.Name.EndsWith("Repository") &amp;&amp; !a.IsAbstract &amp;&amp; !a.IsInterface)
    .Select(a =&gt; new { assignedType = a, serviceTypes = a.GetInterfaces().ToList() })
    .ToList()
    .ForEach(typesToRegister =&gt;
    {
        typesToRegister.serviceTypes.ForEach(typeToRegister =&gt; services.AddScoped(typeToRegister, typesToRegister.assignedType));
    });
</code></pre><p>What does this block of code do actually?</p><p>First, we get all types from the assembly:</p><pre><code>...
Assembly.GetExecutingAssembly()
    .GetTypes()
...
</code></pre><p>then we filter those types to the repository classes</p><pre><code>...
.Where(a =&gt; a.Name.EndsWith("Repository") &amp;&amp; !a.IsAbstract &amp;&amp; !a.IsInterface)
...
</code></pre><p>and we define pairs of types with the list of interfaces they implement</p><pre><code>...
.Select(a =&gt; new { assignedType = a, serviceTypes = a.GetInterfaces().ToList() })
    .ToList()
...
</code></pre><p>in the end, we just iterate through the pairs of types and register each of them as the interface they implement</p><pre><code>...
.ForEach(typesToRegister =&gt;
    {
        typesToRegister.serviceTypes.ForEach(typeToRegister =&gt; services.AddScoped(typeToRegister, typesToRegister.assignedType));
    });
...
</code></pre><p>Now we&#8217;re able to inject <code>UserRepository</code> as <code>IRepository&lt;User&gt;</code>, without the need for explicit registration in the DI containers of each type.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.crispy-engineering.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 Crispy Engineering! 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></p>]]></content:encoded></item><item><title><![CDATA[How to setup git author details for different business clients]]></title><description><![CDATA[On git, every commit has author info attached to it.]]></description><link>https://www.crispy-engineering.com/p/setup-git-author-details-for-different-clients</link><guid isPermaLink="false">https://www.crispy-engineering.com/p/setup-git-author-details-for-different-clients</guid><dc:creator><![CDATA[Dusko Bajic]]></dc:creator><pubDate>Tue, 07 Jul 2020 13:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OBoq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56538d4a-8b86-4823-8fbc-1bac6406a4b2_2000x1307.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OBoq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56538d4a-8b86-4823-8fbc-1bac6406a4b2_2000x1307.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OBoq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56538d4a-8b86-4823-8fbc-1bac6406a4b2_2000x1307.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OBoq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56538d4a-8b86-4823-8fbc-1bac6406a4b2_2000x1307.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OBoq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56538d4a-8b86-4823-8fbc-1bac6406a4b2_2000x1307.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OBoq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56538d4a-8b86-4823-8fbc-1bac6406a4b2_2000x1307.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OBoq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56538d4a-8b86-4823-8fbc-1bac6406a4b2_2000x1307.jpeg" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/56538d4a-8b86-4823-8fbc-1bac6406a4b2_2000x1307.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How to setup git author details for different business clients&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="How to setup git author details for different business clients" title="How to setup git author details for different business clients" srcset="https://substackcdn.com/image/fetch/$s_!OBoq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56538d4a-8b86-4823-8fbc-1bac6406a4b2_2000x1307.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OBoq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56538d4a-8b86-4823-8fbc-1bac6406a4b2_2000x1307.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OBoq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56538d4a-8b86-4823-8fbc-1bac6406a4b2_2000x1307.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OBoq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F56538d4a-8b86-4823-8fbc-1bac6406a4b2_2000x1307.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p>On git, every commit has author info attached to it. It is usually a name, and email. If you are working with multiple clients, it can be a legal problem if you push a code with a different email. Been there...</p><p>But even if you don't work with multiple clients, you still can work on personal side projects and company projects. &nbsp;It's important to differentiate those. You might open source your project and commit history will be public to everyone. You don't want to have a company email attached to it.</p><p>It's super-easy to set this up with git config so that you never think of that again.</p><p>On the repository level, it&#8217;s easy to set it with <code>--local</code> parameter in the config. However, this is repetitive and you&#8217;ll forget it at some point.<br>What we need is a more general, and once per client set, approach, without tackling each repository individually.</p><h2>1. Organize repositories on disk</h2><p>Whether you&#8217;re setting git configs or not, having a directory structure like this helps with other stuff as well:</p><pre><code>repositories
  - clientA
    + longterm_repo
    + new_proj
  - clientB
    + boring_project
    + mainenance_repo
</code></pre><h2>2. Define client-specific git config files</h2><p>Locate the directory where <code>gitconfig</code> is located. The location of this file depends on your git installation. On macOS, it&#8217;s in the <code>/Users/youruser/.gitconfig</code>.</p><p>Create additional config file(s) for every client, as in the snippet below.</p><pre><code>- users
  - youruser
    .gitconfig
    .gitconfig-companyA
    .gitcontig-companyB
</code></pre><p>The content of client git config files is minimal and is shown below.</p><p><code>.gitconfig-clientA</code></p><pre><code>[user]
        name = Dusko Bajic
        email = dusko@clientA.net
</code></pre><p><code>.gitconfig-clientB</code></p><pre><code>[user]
        name = Dusko Bajic
        email = dusko@clientB.org
</code></pre><h2>3. Edit git global config</h2><p>Open <code>.gitconfig</code> file in edit mode and add the following blocks.</p><pre><code>[user]
        name = Dusko Bajic
        email = dusko@mail.com

[includeIf "gitdir:~/repositories/clientA/"]
        path = .gitconfig-clientA

[includeIf "gitdir:~/repositories/clientB/"]
        path = .gitconfig-clientB
</code></pre><p>With <code>name</code> and <code>email</code>, we&#8217;ve defined the default author setup for all repositories.<br><code>[includeIf]</code> blocks are matching the client repositories directory, with the client git config file.</p><p>And that's it. Each repository will have correct author info, per client. You can check it out by navigating to <code>/repositories/clientA/longtermRepo</code> and executing <code>git config user.email</code>. With the setup example from above, it will print <code>dusko@clientA.net</code> in the console.</p>]]></content:encoded></item></channel></rss>