<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Michal Ganzarcik, Author at ShiftMag</title>
	<atom:link href="https://shiftmag.dev/author/michal-ganzarcik/feed/" rel="self" type="application/rss+xml" />
	<link>https://shiftmag.dev/author/michal-ganzarcik/</link>
	<description>Insightful engineering content &#38; community</description>
	<lastBuildDate>Mon, 09 Mar 2026 14:24:26 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://shiftmag.dev/wp-content/uploads/2024/08/cropped-ShiftMag-favicon-32x32.png</url>
	<title>Michal Ganzarcik, Author at ShiftMag</title>
	<link>https://shiftmag.dev/author/michal-ganzarcik/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Saying NO is not a free action in the world of software engineering</title>
		<link>https://shiftmag.dev/saying-no-is-not-a-free-action-in-the-world-of-software-engineering-5339/</link>
		
		<dc:creator><![CDATA[Michal Ganzarcik]]></dc:creator>
		<pubDate>Wed, 03 Sep 2025 13:27:05 +0000</pubDate>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Developer Productivity]]></category>
		<category><![CDATA[development]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=5339</guid>

					<description><![CDATA[<p>'Who could refuse that?' Turns out, almost no one - especially when faced with puppy eyes, heartfelt asks, or a desperate Pikachu. Refusing is hard, and it costs more than we admit.</p>
<p>The post <a href="https://shiftmag.dev/saying-no-is-not-a-free-action-in-the-world-of-software-engineering-5339/">Saying NO is not a free action in the world of software engineering</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-post-featured-image"><img fetchpriority="high" decoding="async" width="1200" height="630" src="https://shiftmag.dev/wp-content/uploads/2025/06/saying-no.png?x94846" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2025/06/saying-no.png 1200w, https://shiftmag.dev/wp-content/uploads/2025/06/saying-no-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2025/06/saying-no-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2025/06/saying-no-768x403.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph">We all agree: <strong>saying <em>no</em> is important</strong> &#8211; it can be liberating, support work-life balance, and is a crucial life skill.</p>



<p class="wp-block-paragraph">What’s discussed far less is the cost of refusing, especially the <strong>psychological cost</strong>. That’s what I’d like to explore: the emotional toll of refusing &#8211; on ourselves and on those we ask for something, even when we reassure them, &#8220;It’s totally fine if you can’t.&#8221;</p>



<h2 class="wp-block-heading">It’s hard to refuse &#8211; and all too easy to agree</h2>



<p class="wp-block-paragraph">Overall, <a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2443710/">saying <em>no</em> often carries negative connotations</a>, which is why we tend to avoid it. We dislike being in situations where <strong>our words or actions might be perceived as negative</strong>. It becomes even more difficult to decline in person &#8211; especially when we know the person well or feel emotionally connected to them or the topic.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">People are generally more dismissive online or in anonymous settings, where <strong>the perceived consequences are minimal</strong>. It’s much easier to ignore or mock a request to &#8220;like&#8221; a post on social media than to say <em>no</em> to your mum when she asks for help picking apples.</p>
</blockquote>



<p class="wp-block-paragraph">In a professional setting, declining becomes even more complicated.</p>



<p class="wp-block-paragraph">We’ve created a work culture where <strong>declining requests too often can feel like a career risk</strong>, especially for <a href="https://shiftmag.dev/the-journey-of-a-lone-female-software-developer-2876/" target="_blank" rel="noreferrer noopener">women</a> and members of <a href="https://www.harpersbazaar.com/culture/features/a36687625/naomi-osaka-and-the-cost-of-saying-no/">minority groups</a>. Declining isn’t only disappointing for the person who asked; it might also mean missing out on a promotion or an exciting opportunity. <a href="https://en.wikipedia.org/wiki/Carp" target="_blank" rel="noreferrer noopener">Holy carp</a>!</p>



<p class="wp-block-paragraph">Conversely, <strong>accepting is effortless</strong>. </p>



<p class="wp-block-paragraph">It feels nice and positive. You&#8217;re pleasing the other person, maybe even securing a future reward for yourself. What could be better? Since <a href="https://en.wikipedia.org/wiki/Hyperbolic_discounting">humans are wired to chase immediate rewards</a> and often <a href="http://spia.uga.edu/faculty_pages/tyler.scott/teaching/PADP6950_Spring2017/Readings/Odonoghue.Rabin.2000.pdf">overlook future pain</a>, we tend to say <em>yes</em> just to see that happy twinkle in someone’s eye &#8211; consequences be damned!</p>



<p class="wp-block-paragraph">If you Google <a href="https://www.google.com/search?q=how+to+say+no">&#8220;how to say no&#8221;</a>, you’ll get a lot of results, mostly focused on the actual skill of rejecting something. If you Google <a href="https://www.google.com/search?q=how+to+say+yes">&#8220;how to say yes&#8221;</a>, you mostly get results about how to say words and phrases in different languages. <strong>Declining is a tricky soft skill</strong>; accepting is often just about language.</p>



<h2 class="wp-block-heading"><span id="turning-something-down-is%e2%80%a6-stressful">Turning something down is… stressful.</span></h2>



<p class="wp-block-paragraph">So, where are we with <em>no</em>?</p>



<ul class="wp-block-list">
<li>We&#8217;re not that great at saying it.</li>



<li>It&#8217;s not a pleasant thing to do.</li>



<li>It can have negative consequences.</li>
</ul>



<p class="wp-block-paragraph">As a result,<strong> it’s often stressful to refuse a request</strong>. </p>



<p class="wp-block-paragraph">We tend to worry about it before, during, and after the fact. This stress can be even worse if we’re already dealing with things like <strong>burnout, impostor syndrome, or anxiety</strong>. Saying <em>no</em> in those situations can feel like adding fuel to the fire. If I already don’t believe I’m doing a stellar job, turning something down might only reinforce the fear that others see me as a failure.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Our tendency toward <a href="https://en.wikipedia.org/wiki/Herd_mentality">herd mentality</a> doesn’t help either. When most of the team says <em>yes</em> and we&#8217;re the only ones who want to say <em>no</em>, <strong>we often end up going along with the group</strong>, even if we feel conflicted inside.</p>
</blockquote>



<p class="wp-block-paragraph">Many of us have experienced this in sprint planning and sprint reviews &#8211; the team takes on more work than necessary during planning to avoid refusing requests, and then feels deflated and disappointed when they can&#8217;t deliver everything by the end. Over time, this can <strong>hurt team morale and spirit</strong>, lower motivation, and even create a toxic dynamic between teams and their stakeholders.</p>



<p class="wp-block-paragraph">All of this leads to a simple point: <strong>refusing comes with its own burden</strong>. Telling someone to &#8220;just say <em>no</em>&#8221; can be disingenuous &#8211; placing the emotional and social cost of rejection on them, while pretending it’s easy.</p>



<h2 class="wp-block-heading"><span id="expecting-a-simple-refusal-hurts-the-ones-who-care-most">Expecting a simple refusal hurts the ones who care most</span></h2>



<p class="wp-block-paragraph">The people who are most invested in a project, those who care deeply about the quality of their work and their team’s delivery, often your &#8220;best performers&#8221;, are <strong>usually the ones who find it hardest to say <em>no</em></strong>. As a result, they often take the initiative to pick up tasks that others might reject.</p>



<p class="wp-block-paragraph">If you keep asking, they may continue to agree, depending on their situation, until they eventually hit a wall and burn out.</p>



<h2 class="wp-block-heading"><span id="be-kind-don%e2%80%99t-act-like-no-is-just-a-simple-word">Be kind. Don’t act like <em>no</em> is just a simple word</span></h2>



<p class="wp-block-paragraph">We should be<strong> mindful of our colleagues’ workloads</strong> and, whenever possible, avoid asking them for additional tasks if we know they might already have a full plate. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">It’s important to recognize that they may feel unable or reluctant to refuse, even when they want to. And even when they do refuse, it can still come at a cost to their emotional well-being or personal life.</p>
</blockquote>



<p class="wp-block-paragraph">We should also recognize that <strong>refusal comes in many forms</strong>. It can mean:</p>



<ul class="wp-block-list">
<li>Literally saying <em>no</em>.</li>



<li>Taking only 5 tasks out of 10 that were offered.</li>



<li>Choosing not to volunteer when most others do.</li>



<li>Not attending a meeting or participating in a Slack discussion.</li>
</ul>



<p class="wp-block-paragraph">All of the above can be difficult to do and <strong>may lead to negative consequences down the road</strong>, for both the individual and the team.</p>



<h2 class="wp-block-heading"><span id="what%e2%80%99s-the-solution">What’s the solution?</span></h2>



<ul class="wp-block-list">
<li><strong>Talk openly with your colleagues.</strong> Be aware of the challenges they face and the workloads they carry. Don’t expect them to simply reject additional work &#8211; understand their situation through honest conversations.</li>



<li><strong>Keep expectations realistic.</strong> Avoid presenting people or teams with overwhelming wish lists they can’t reasonably deliver. Don’t assume others will just say <em>no</em> to unreasonable demands.</li>



<li><strong>Diversify your requests for help.</strong> Instead of always turning to the same people who tend to say <em>yes</em>, reach out to others and distribute the load more evenly.</li>



<li><strong>Avoid herd mentality pressure.</strong> Give individuals space and time to make decisions independently, and encourage sharing outcomes in a safe environment. This is why practices like writing retrospective points individually or revealing estimations simultaneously in planning poker are important.</li>



<li><strong>Lead by example.</strong> Show that saying <em>no</em> when it’s appropriate is acceptable. Recognize that you might also struggle with this and discuss it openly with your team.</li>



<li><strong>Establish fair systems and processes.</strong> Ensure workloads are distributed transparently and fairly, rather than relying on informal methods that often favor those who find it easier to say <em>no</em> &#8211; which can unfairly burden those who care most about the project’s success.</li>



<li><strong>Don’t reward or idolize overwork.</strong> Encourage a culture that values balance and sustainable effort over relentless hustle.</li>
</ul>
<p>The post <a href="https://shiftmag.dev/saying-no-is-not-a-free-action-in-the-world-of-software-engineering-5339/">Saying NO is not a free action in the world of software engineering</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Participate in PR Reviews, Make Friends and Influence People</title>
		<link>https://shiftmag.dev/code-review-best-practices-5276/</link>
		
		<dc:creator><![CDATA[Michal Ganzarcik]]></dc:creator>
		<pubDate>Mon, 19 May 2025 10:55:19 +0000</pubDate>
				<category><![CDATA[Developer Experience]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[code review best practice]]></category>
		<category><![CDATA[PR review]]></category>
		<category><![CDATA[pull request author]]></category>
		<category><![CDATA[pull request review]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=5276</guid>

					<description><![CDATA[<p>Many things can go wrong in human interactions, especially if the interaction involves finding mistakes in one's work. </p>
<p>The post <a href="https://shiftmag.dev/code-review-best-practices-5276/">How to Participate in PR Reviews, Make Friends and Influence People</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-post-featured-image"><img decoding="async" width="1200" height="630" src="https://shiftmag.dev/wp-content/uploads/2025/05/code-review.png?x94846" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2025/05/code-review.png 1200w, https://shiftmag.dev/wp-content/uploads/2025/05/code-review-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2025/05/code-review-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2025/05/code-review-768x403.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph">When you combine that with mostly remote, written communication in a foreign language between people who might not know each other that well, who are under various types of pressure (time, quality, focus&#8230;), with various skill levels and seniority, you have a good chance of things getting out of hand.</p>



<p class="wp-block-paragraph">Luckily, there are some easy things we can do to make this easier on everyone. Read on to find out what!</p>



<p class="wp-block-paragraph"><em>Sidenote: This document is not a PR review checklist. It will not tell you what to check during a review or what code to expect. I wrote this to show you HOW to communicate during reviews to make the experience more useful and pleasant for everyone, but it will not define any rules. For that, I suggest you talk to your team, your partner teams, and your stakeholders and agree on some rules with them.</em></p>



<h1 class="wp-block-heading" id="HowtoparticipateinPRreviews,makefriendsandinfluencepeople-ThepillarsofagoodPRexperience"><span id="the-pillars-of-a-good-pr-experience">The Pillars of a Good PR Experience</span></h1>



<p class="wp-block-paragraph">There are just two things that need to work well in order for the whole thing to be a success:</p>



<ol class="wp-block-list">
<li>Mindset</li>



<li>Communication</li>
</ol>



<p class="wp-block-paragraph">Now, let&#8217;s break those down.</p>



<h2 class="wp-block-heading" id="HowtoparticipateinPRreviews,makefriendsandinfluencepeople-Mindset"><span id="mindset-prs-are-not-personal">Mindset: PRs are not Personal </span></h2>



<p class="wp-block-paragraph">In general, it is good practice to<strong>&nbsp;assume everybody in a PR means well</strong>. That should be your initial starting point. The PR author is not there to deliberately push horrible code. The PR reviewer is not there to &#8220;get you&#8221; and &#8220;publicly shame you&#8221;. In the vast majority of cases, the goals of the authors and the reviewers are actually the same: to deliver good code that does what it is supposed to do.</p>



<p class="wp-block-paragraph">Keeping this in mind is a very good start.</p>



<p class="wp-block-paragraph"><strong>This does not mean you should not be vigilant&nbsp;</strong>and should not do your best to find problems as an author or reviewer. But it does mean that when first communicating, you should assume mistakes are honest, decisions had a reason, and intentions were good. It is your job to confirm this and make sure you understand the context.&nbsp;</p>



<p class="wp-block-paragraph">Only if facts later prove the opposite should your tone change accordingly. If there are serious concerns or doubts about the intentions or skills of a team member as a result of a PR review, those should be taken to the relevant line manager (but before you escalate, try to reach out to the other person via call / DM and get as much clarity as you can). They should not be discussed in the PR itself.</p>



<p class="wp-block-paragraph">Another thing to keep in mind is that PRs&nbsp;<strong>are not supposed to be personal</strong>, and they&nbsp;<strong>are supposed to be educational for both sides</strong>. People get very emotionally invested in their work and get defensive quickly. Try to avoid this. See if there are things you can learn from the ongoing discussion and become a better engineer. Always enter PRs (both as an author and as a reviewer) with the goal of learning something new. And remember, this is not only about author-reviewer communication. Reviewers can also learn from each other by working on the same PR. So when communicating about the PR, do not just think about the author, think about the other reviewers as well &#8211; are there things you can include to help them?</p>



<p class="wp-block-paragraph">Please remember:</p>



<ul class="wp-block-list">
<li>a team will survive a certain amount of messy code</li>



<li>but a team might not survive broken human relationships</li>
</ul>



<p class="wp-block-paragraph">As long as the intentions are good and nothing is exploding, prioritize people over code (in other words, be nice).</p>



<h2 class="wp-block-heading" id="HowtoparticipateinPRreviews,makefriendsandinfluencepeople-Communication"><span id="communication-be-kind-and-helpful">Communication: Be Kind and Helpful</span></h2>



<p class="wp-block-paragraph">A colleague <span style="box-sizing: border-box; margin: 0px; padding: 0px;">informed me of this beautiful and very simple&nbsp;<a href="https://conventionalcomments.org/" target="_blank">approach to making PR comments</a>&nbsp;much more helpful. It</span><strong> complements</strong> what I was trying to say below and makes it much more explicit and elegant.</p>



<h3 class="wp-block-heading"><span id="as-a-pr-author"><strong>As a PR Author</strong></span></h3>



<ul class="wp-block-list">
<li><strong>Review your own PR before you submit it.</strong> You might be surprised at how many things you can find yourself.&nbsp;<img decoding="async" src="https://confluence.infobip.com/s/1z7pxo/9012/5bulwo/_/images/icons/emoticons/smile.svg" alt="(smile)">&nbsp;You can even leave comments in the PR yourself for other reviewers in case you think it would provide more context.</li>
</ul>



<p class="wp-block-paragraph"><em>I added this method to gather more metrics for the issue described in GRG-543. We should probably consider some more centralized auditing/logging solution in case this becomes a frequent use case, but for now, it is good as it is, I think.</em></p>



<ul class="wp-block-list">
<li><strong>It is your responsibility to get your things reviewed.</strong> Make sure you understand how reviews are prioritized and picked up by reviewers. Do you need to ask for a review on Slack? Is there time dedicated to reviews on standups? Is there a dedicated group of reviewers? If unsure, ask the repo owners for guidance. Don&#8217;t let your PR be forgotten.</li>
</ul>



<p class="wp-block-paragraph"><em>Hi everyone! I have a new PR that is a bit urgent due to our sprint ending soon. Could you please take a look? Please get in touch with me on Slack directly if this can help us get it done more quickly. Thank you!</em></p>



<ul class="wp-block-list">
<li><strong>Provide a short PR description with some context:</strong>
<ul class="wp-block-list">
<li>Are you new to the project? Do you need help/guidance, or expect a lot of issues?</li>



<li>Do you have a preferred way of discussing the PR (e.g., a huddle, a DM exchange on Slack, Bitbucket comments)?</li>



<li>Is the PR work in progress?</li>



<li>Is the PR very urgent? If yes, why? Did it force you to take shortcuts?</li>



<li>Was performance a major factor? Was some code optimized for it?</li>



<li>Are there any follow-up tickets that will improve on the solution further?</li>



<li>Did the architecture, API, or something else change significantly?</li>



<li>Does it have dependencies on other work/teams?</li>



<li>Is there some relevant documentation you can link to?</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph"><em>Integration of the new component to display a shopping cart into the main navigation. Will be further reworked under BLAH-123 and BLERGH-456. I realize the navigation component is a bit messy, unfortunately, I did not have time to fully refactor it due to the project deadlines, so I only touched the code required for the new functionality. I will try to get back to it under BLERGH-456. Please check the Jira ticket under which this was done for complete business requirements when reviewing, they are more complex than expected, which can explain some of the possibly messy code in the addItem method. Oh and I am still a bit new to this repository, so apologies if I messed something up &#8211; please let me know if there are some guidelines/documentation that I missed!</em></p>



<ul class="wp-block-list">
<li><strong>If you cannot implement some of the suggested changes, make sure you follow up in writing</strong>, either by explaining why the change will not be implemented or by providing links to follow-up tickets/PRs where those comments will be resolved. <br>For cases where time is the limiting factor (approaching deadline, bigger suggested changes, etc.), always consider what would cost more—making the change now or postponing it (which carries its own overhead in planning, focus switching, etc.). Failure to do this can really frustrate reviewers, who dedicate time and energy to the review and then get nothing back.</li>
</ul>



<p class="wp-block-paragraph"><em>Thank you! I don&#8217;t think I will be able to make these changes under this PR since they would require more time, and there is a risk we would miss the deadline, but I think your suggestions are totally valid, and I will cover them under BRUH-789 if you don&#8217;t mind.</em></p>



<ul class="wp-block-list">
<li><strong>Always indicate if you resolved the comment.</strong> If you resolved it using a different approach than the one suggested by the reviewer, explain why.</li>
</ul>



<p class="wp-block-paragraph"><em>I managed to resolve this differently by moving the whole method to the PaprikaChipsService. It probably should have been there from the start&#8230; Thanks for the comment!</em></p>



<ul class="wp-block-list">
<li>Always thank the reviewers in comments for their time!</li>
</ul>



<p class="wp-block-paragraph"><em>Thank you!</em></p>



<h3 class="wp-block-heading"><span id="as-a-pr-reviewer"><strong>As a PR Reviewer</strong></span></h3>



<ul class="wp-block-list">
<li><strong>Before starting the review, check who the author is and what their background is.</strong> Tailor your approach based on that. A junior developer who joined a remote team 1 month ago will require a dramatically different approach than a 5-year senior who sits next to you in the office. If unsure, ping that person directly and ask.</li>
</ul>



<p class="wp-block-paragraph"><em>Hey! Nice to meet you! I just picked up your PR, but since this is the first time we will work on something together, I wonder how you would prefer to do it? We can just go through it together in a huddle if you would prefer that, or I can just leave comments in Bitbucket. I noticed this is your first PR in this repo, if you need help or something is not clear, please do not be afraid to ping me, I will try to explain if I can.</em></p>



<ul class="wp-block-list">
<li><strong>Explain why you are asking authors to change something.</strong> Provide links, context. See your comment as a possible way to share knowledge. Do not assume the author will automatically understand. Authors have various skills and seniority levels, and something that is obvious to you might be completely new to them.&nbsp;</li>
</ul>



<p class="wp-block-paragraph"><em>I <span style="box-sizing: border-box; margin: 0px; padding: 0px;"><em>su</em></span>ggest you rewrite this to use streams. Unless you need really hard-core performance (which does not seem to be the case), streams are much better for readability/maintainability.&nbsp;Check this out&nbsp;for a pretty good introduction to streams and a&nbsp;comparison to standard loops.&nbsp;</em></p>



<ul class="wp-block-list">
<li><strong>Provide specific suggestions to fix if you can.</strong> If you do, don&#8217;t forget to explain why. This is good practice even if you know the author will understand. There might be other PR reviewers who might not understand, and this can still be an education for them.</li>
</ul>



<p class="wp-block-paragraph"><em>a.b?.c instead of a.b.c.This will prevent runtime errors in case b is null, since if you look at the method above, there are cases where it can be null. See&nbsp;<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining" target="_blank" rel="noreferrer noopener">here</a>&nbsp;for details.</em></p>



<h3 class="wp-block-heading"><span id="both-author-and-reviewer"><strong>Both</strong> Author and Reviewer</span></h3>



<ul class="wp-block-list">
<li><strong>Be friendly, polite, and empathic.</strong> There is another human at the other end. Do not write anything you would not want to read yourself in your own PR. Use emoticons (but don&#8217;t overdo it). Don&#8217;t be sarcastic and don&#8217;t mock/make fun of the other person&#8217;s work. Don&#8217;t forget to also give credit if you see something cool!</li>
</ul>



<p class="wp-block-paragraph"><em>Nothing to change, I just really like how you solved this.&nbsp;<img decoding="async" src="https://confluence.infobip.com/s/1z7pxo/9012/5bulwo/_/images/icons/emoticons/smile.svg" alt="(smile)">&nbsp;Well done.</em></p>



<ul class="wp-block-list">
<li><strong>Be aware of the team&#8217;s working agreement or coding standards. </strong>Is there a Boy Scouts rule in place to always leave code in better shape than you found it? Are there specific requirements for tests, external dependencies, formatting, etc.? If unsure, ask before you start development, submit the PR, or start the review!</li>
</ul>



<p class="wp-block-paragraph"><em>Hi everyone, I&#8217;m wondering if it&#8217;s okay to include Lombok in this project. Could you please let me know? I could not find any explicit rules regarding dependencies. Thanks!</em></p>



<ul class="wp-block-list">
<li><strong>Consider reaching out to each other directly</strong> for more complex reviews, reviews with urgency, or reviews with a lot of findings,  and have a huddle/chat to avoid a lot of comments/ping-pong</li>
</ul>



<p class="wp-block-paragraph"><em>Hey! Would you have time to talk about this PR &lt;link&gt; today or tomorrow? I see there are a lot of changes, and the requirements are complex as well &#8211; discussing it in person, at least for the first round, might be easier. Thanks!</em></p>



<ul class="wp-block-list">
<li><strong>Stick to facts. </strong>If you have an opinion about why something should be done, provide links to support your statement.
<ul class="wp-block-list">
<li>For more subjective topics, be prepared for compromises. If you cannot find definite sources to support your case (this happens often in discussions about code formatting, etc.), consider just doing whatever feels easier / quicker / more friendly to the other party. Mutual respect and a good working relationship in the team are usually better than completely uniform code. If necessary, agree to follow up on a team-level meeting to reach an agreement there.</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph"><em>I don&#8217;t think we actually have an agreement about this in the team, but we should try to agree on some naming pattern for test methods. Let&#8217;s keep this as it is for now, but I will add this to the agenda for our next sync if you don&#8217;t mind. If you have any suggestions, please let me know!</em></p>



<ul class="wp-block-list">
<li><strong>Do not jump to conclusions. </strong>Respectfully ask for context and reasons. </li>
</ul>



<p class="wp-block-paragraph"><em>I am not sure why this needs to be package-private. I see you refer to it in the tests, is that why? I think they could be refactored to avoid this, but on the other hand, I am not sure it is worth the effort&#8230; Could you please provide a bit more context? We can also chat on Slack if that would be quicker. Thanks!</em></p>



<ul class="wp-block-list">
<li><strong>Be mindful of the time.</strong> Will it take you more time to argue about something, or will it be easier to just implement the change and move on?<br></li>



<li><span style="box-sizing: border-box; margin: 0px; padding: 0px;"><strong>Put the conclusion back into the PR in writing</strong>&nbsp;if you agree on something i</span>n a huddle or some other communication channel. This can help others who did not participate in the call understand what was decided and why.<br></li>



<li><strong>Be prepared to be wrong.</strong></li>
</ul>



<p class="wp-block-paragraph">And I think that&#8217;s it! Stay nice, keep a positive attitude, make friends, and write good code and the future will be bright.</p>
<p>The post <a href="https://shiftmag.dev/code-review-best-practices-5276/">How to Participate in PR Reviews, Make Friends and Influence People</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to build a palace: Building in iterations is not the same as postponing quality</title>
		<link>https://shiftmag.dev/code-quality-iterations-4910/</link>
		
		<dc:creator><![CDATA[Michal Ganzarcik]]></dc:creator>
		<pubDate>Thu, 06 Mar 2025 16:52:57 +0000</pubDate>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[code quality]]></category>
		<category><![CDATA[software quality]]></category>
		<category><![CDATA[technical debt]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=4910</guid>

					<description><![CDATA[<p>We all know that in many cases the phrase "we will improve this later" means "we will never improve this". </p>
<p>The post <a href="https://shiftmag.dev/code-quality-iterations-4910/">How to build a palace: Building in iterations is not the same as postponing quality</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-post-featured-image"><img decoding="async" width="1200" height="630" src="https://shiftmag.dev/wp-content/uploads/2025/03/software-quality.png?x94846" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2025/03/software-quality.png 1200w, https://shiftmag.dev/wp-content/uploads/2025/03/software-quality-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2025/03/software-quality-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2025/03/software-quality-768x403.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph">There is this idiom, &#8220;<a href="https://dictionary.cambridge.org/dictionary/english/it-goes-without-saying" target="_blank" rel="noreferrer noopener">It goes without saying&#8230;</a>&#8221; which basically means that something is obvious and does not need to be said. I tend to think the heading above is one of those things.</p>



<p class="wp-block-paragraph">But practice shows that maybe it isn&#8217;t, and it needs to be said once in a while. </p>



<p class="wp-block-paragraph"><span style="box-sizing: border-box; margin: 0px; padding: 0px;">Sometimes,</span> we all have planning sessions&nbsp; where we say stuff like, &#8220;Let&#8217;s do the rough implementation now, and we will add unit tests in the next iteration.&#8221; or&nbsp;&#8220;Let&#8217;s put out a quick POC and improve it later.&#8221;&nbsp;We also have sprint reviews where we say things like,&nbsp;&#8220;It is available on PROD but needs some refactoring—I created a task for it in the backlog. But we can close this one.&#8221;</p>



<p class="wp-block-paragraph">It feels very natural. We are agile; we iterate, and we improve as we go.</p>



<p class="wp-block-paragraph">All good.</p>



<h1 class="wp-block-heading" id="Buildinginiterationsisnotthesameaspostponingquality-TheMetaphor"><span id="the-metaphor">The Metaphor</span></h1>



<p class="wp-block-paragraph">And now I present to you a picture of a pile of manure, with the author of the pile included:</p>



<figure class="wp-block-image"><img decoding="async" src="https://media.licdn.com/dms/image/v2/C4E12AQELVaXFSzy_-Q/article-cover_image-shrink_600_2000/article-cover_image-shrink_600_2000/0/1520500433124?e=2147483647&amp;v=beta&amp;t=yXLa4Z9WGH2OJ3R3_hH99n2HpUlLvsaGVlDm-Mvq-eQ" alt="COW MANURE FERTILIZER"/></figure>



<p class="wp-block-paragraph">Now, how do piles of manure come to our world? A cow eats some grass and becomes very introspective and thoughtful after some time. After a couple of minutes of pondering the hard questions of life and the universe, it produces a small pile of cow feces. This cycle then repeats itself. You could say <strong>the cow is iteratively building the pile.</strong></p>



<p class="wp-block-paragraph">However, and this is quite crucial, at no point does the pile of manure transform into a gleaming palace. It stays a pile of manure.</p>



<p class="wp-block-paragraph">This example gives us our first piece of wisdom:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">By producing little shits iteratively, we do not build examples of beautiful architecture. We build piles of shit.</p>
</blockquote>



<h1 class="wp-block-heading" id="Buildinginiterationsisnotthesameaspostponingquality-ThesecondMetaphor"><span id="the-second-metaphor">The Second Metaphor</span></h1>



<p class="wp-block-paragraph">Now, this is a gleaming palace:</p>



<p class="wp-block-paragraph">How are palaces constructed? Well, you start with a lot of high-quality building blocks, from bricks to pillars and statues, which you produce over and over again and combine to end up with a palace (this is somewhat simplified, but you get the point).</p>



<p class="wp-block-paragraph">For a good and sturdy palace, not easily conquered by marauding barbarians, it is vital you maintain a standard of quality throughout the process and within every iteration. A single batch of incorrectly baked bricks in the wrong place can cause structural damage with potentially catastrophic consequences.</p>



<p class="wp-block-paragraph"><strong>This gives us our second piece of wisdom:</strong></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">To build a solid palace, stick to a quality standard every time you deliver a brick.</p>
</blockquote>



<p class="wp-block-paragraph">I think you know where I am going with this. We all know that in many cases, the phrase &#8220;we will improve this later&#8221; means &#8220;we will never improve this.&#8221;<br><br>Creating a task for fixing technical debt&nbsp;is not the same as fixing the technical debt; however we wanted to wish the opposite. There is a good chance that every time a cow shits, the shit will stay shit and will not get improved later into a brick of gold.</p>



<h1 class="wp-block-heading" id="Buildinginiterationsisnotthesameaspostponingquality-Thepointofthearticle"><span id="the-point-of-the-article">The Point of the Article</span></h1>



<p class="wp-block-paragraph">This is why we all <strong>need to have&nbsp;definitions of done (DOD</strong>)&nbsp;and stick to them.&nbsp;</p>



<p class="wp-block-paragraph">A definition of done protects us from producing little bits of manure and forces us to actually produce proper bricks. It is completely fine not to deliver a palace in one sprint. You can just deliver a brick. But the brick must still be inspected properly, properly manufactured, of the correct shape, density, and material, and baked for the correct time and at the correct temperature.</p>



<p class="wp-block-paragraph">Or finally, to switch to a software language, it is fine to <strong>deliver a single component that does not cover the whole feature set</strong>. But the component should still be documented, covered by automated tests, with proper architecture and software design, reviewed, and have monitoring and alerting configured, etc. etc.</p>



<p class="wp-block-paragraph"><strong>What does this mean for your planning sessions?</strong></p>



<p class="wp-block-paragraph">When discussing any story, it should just never be an option to reduce the estimation by removing parts of the DOD requirements. This brings us to our last piece of wisdom.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">You should never compromise on quality when estimating and planning.</p>
</blockquote>



<p class="wp-block-paragraph">At the end of the sprint, you should not close tasks or merge / release code that does not fulfill DOD criteria either. Even if this means missing the release date. This should rarely happen if you take quality into account when estimating, but if it does, it should mean failure. (There is another point here, which is that if our stakeholders only find out we are late with something a day before the sprint ends, we are already in trouble, and there are other problems we need to solve. But that&#8217;s a story for another day.)</p>



<p class="wp-block-paragraph">This is painful. <strong>It will create immediate friction and stress.</strong> People will be angry.</p>



<p class="wp-block-paragraph"><em>&#8220;Why cannot you release this if just unit tests are missing? This is madness! You can add the tests the day after tomorrow!&#8221;</em></p>



<p class="wp-block-paragraph">Sometimes, you will add them. But often, you won&#8217;t because there will be other priorities and pressures. And the manure pile will keep growing.&nbsp;</p>



<p class="wp-block-paragraph">At some point, it will become almost impossible to deliver a palace—even if you build a proper brick once in a while, you will still throw it at the existing pile of manure, and it will just become dirty and not usable long-term.</p>



<p class="wp-block-paragraph">There is going to be no palace at the end of this story.</p>



<p class="wp-block-paragraph">Just a thoughtful cow.</p>



<figure class="wp-block-image"><img decoding="async" src="https://images.pexels.com/photos/51311/cow-calf-cattle-stock-51311.jpeg?auto=compress&amp;cs=tinysrgb&amp;w=1260&amp;h=750&amp;dpr=1" alt="Free Close-up Photo of Brown Cattle on Green Grass Stock Photo"/></figure>



<p class="wp-block-paragraph"><strong>MORE READING:</strong></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-shiftmag wp-block-embed-shiftmag"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="fm2bZajLbH"><a href="https://shiftmag.dev/the-dilemma-of-quality-versus-speed-is-false-3310/">The dilemma of quality versus speed is false</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;The dilemma of quality versus speed is false&#8221; &#8212; ShiftMag" src="https://shiftmag.dev/the-dilemma-of-quality-versus-speed-is-false-3310/embed/#?secret=OoCaKr4Loa#?secret=fm2bZajLbH" data-secret="fm2bZajLbH" width="500" height="282" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>
<p>The post <a href="https://shiftmag.dev/code-quality-iterations-4910/">How to build a palace: Building in iterations is not the same as postponing quality</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The subtle difference between pushing developers to start their engine and pushing them off a cliff</title>
		<link>https://shiftmag.dev/the-subtle-difference-between-pushing-someone-to-start-their-engine-and-pushing-them-off-a-cliff-3163/</link>
		
		<dc:creator><![CDATA[Michal Ganzarcik]]></dc:creator>
		<pubDate>Thu, 25 Apr 2024 11:49:31 +0000</pubDate>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Engineering Management]]></category>
		<category><![CDATA[Developer Productivity]]></category>
		<category><![CDATA[engineering management]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=3163</guid>

					<description><![CDATA[<p>How do you determine whether to motivate your colleague towards progress or to respect their autonomy?</p>
<p>The post <a href="https://shiftmag.dev/the-subtle-difference-between-pushing-someone-to-start-their-engine-and-pushing-them-off-a-cliff-3163/">The subtle difference between pushing developers to start their engine and pushing them off a cliff</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-post-featured-image"><img loading="lazy" decoding="async" width="1200" height="630" src="https://shiftmag.dev/wp-content/uploads/2024/04/Push-1.png?x94846" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2024/04/Push-1.png 1200w, https://shiftmag.dev/wp-content/uploads/2024/04/Push-1-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2024/04/Push-1-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2024/04/Push-1-768x403.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph"><em>You see a car parked by the side of the road. Passengers are gesticulating wildly, and you hear the engine failing to start repeatedly. “Damn, their car battery is dead! I better run and help!” you think to yourself, being the good Samaritan your mother taught you to be.</em></p>



<p class="wp-block-paragraph">Reflecting back, my career began with a <strong>slightly anarchistic approach as a software developer</strong>. I did not think much of hierarchy. I was not a fan of &#8220;corporate culture&#8221;. The idea of someone telling me what to do was alien to me.  </p>



<p class="wp-block-paragraph">Despite this attitude, I quickly moved from software development to management. One of the first things I told myself and held on to was the simple rule of &#8220;I will not tell people what to do.&#8221;&nbsp;</p>



<p class="wp-block-paragraph">It took me many years of experience to realize this slightly dogmatic approach is not always a way to go. There are valid reasons to push people to do something.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">However, like with most things in management, <strong>knowing who to push, when, and into what, is crucial for success</strong>. Misjudge the situation and the price you pay for failure can be steep indeed. </p>



<h2 class="wp-block-heading"><span id="to-push-or-not-to-push"><strong>To push or not to push?</strong></span></h2>



<p class="wp-block-paragraph"><em>Without a second thought, you break into a run. You grab the car trunk and start pushing. The people in the car look back at you in surprise, and the driver opens her mouth in a big O. &#8220;Another good deed done!&#8221; you think to yourself with satisfaction as you feel the vehicle starting to move on its own. Moments later the car and its occupants disappear as the terrain suddenly drops away. You hear a loud bang. </em> </p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Ford Explorer launched off a 300&#039; cliff" width="500" height="281" src="https://www.youtube.com/embed/B1rHGqMhomA?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p class="wp-block-paragraph">So what does it mean to push someone as a manager?</p>



<p class="wp-block-paragraph">In simple terms, it means <strong>directly asking someone to do something that they would not sign up to do by themselves</strong>. You are forcing them to get outside of their comfort zone! If you do this correctly, the benefits for the person pushed are numerous:&nbsp;</p>



<ul class="wp-block-list">
<li>They can acquire a new skill, </li>



<li>They can gain confidence and be more willing to engage in similar activities in the future, </li>



<li>They can get recognition, </li>



<li>They can eliminate internal mental barriers or dogmas, </li>



<li>They can gain a new perspective or widen their horizon, </li>



<li>Even if they ultimately fail, they can learn from the failure. </li>
</ul>



<p class="wp-block-paragraph">Your best bet for pushing someone is <strong>to identify strong points that the person has but is not aware of or is not utilizing fully</strong>. That way, you set them up for success from the get-go. But this is easier said than done.&nbsp;</p>



<p class="wp-block-paragraph">If you make a wrong decision at the wrong time, disaster can strike.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">People you push can become frustrated, even to the point of quitting their jobs. They can fail at the task you pushed them to do, sometimes with serious consequences for the project or the company. This can also lower their self-confidence and cause them to avoid this type of work in the future.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">Ultimately, <strong>they can blame you for the whole thing without learning anything</strong>. And they would not be wrong. </p>



<h2 class="wp-block-heading"><span id="get-to-know-your-colleagues">Get to know your colleagues</span></h2>



<p class="wp-block-paragraph"><em>Luckily for you, this is a time-traveling story. You rewind the clock 10 minutes back and you find yourself facing the car again. This time you do not run. You do not push. You take a few breaths and approach the car slowly. &#8220;Hey, you folks are having some problems?&#8221; you ask.</em>&nbsp;</p>



<p class="wp-block-paragraph">You need to know someone&#8217;s circumstances before you can push. Every person is different, so you do what good managers do. <strong>Get to know your colleagues</strong>! Build a relationship and trust via the time-tested framework of <a href="https://hbr.org/2022/11/make-the-most-of-your-one-on-one-meetings" target="_blank" rel="noreferrer noopener">one-on-ones</a>, working together, <a href="https://www.lean.org/lexicon-terms/gemba/" target="_blank" rel="noreferrer noopener">being present</a>, and following up. This takes time. As you go, make sure you understand what makes the other person tick. Ask yourself (and ask them!):&nbsp;</p>



<ul class="wp-block-list">
<li>What motivates them at work and in their lives? </li>



<li>Where do they feel their current limits are? </li>



<li>What are their strong and weak areas? Which ones can be improved? </li>



<li>Are there areas where the person might benefit from a new experience or perspective?</li>
</ul>



<p class="wp-block-paragraph">A relatively common occurrence during my career was <strong>working with folks who tend to avoid communication</strong> but do a good job communicating once they did do it. Another would be a colleague with strong technical skills and a natural talent for software architecture, who was for a long time unable to step outside of the shadow of a more senior team member.  </p>



<p class="wp-block-paragraph">These are great examples of people who might need a bit of encouragement or push to move to the next level of their careers. As a manager, you need to learn how to spot opportunities and take advantage of them.&nbsp;</p>



<p class="wp-block-paragraph"><em>As you ask your question, you feel the multiverse split off into several branches. In one, the driver looks at you in surprise.</em>&nbsp;</p>



<p class="wp-block-paragraph"><em>&#8220;What problems? We&#8217;ve just arrived and plan to have a picnic right here. There is a cool cliff up ahead, and we want to enjoy the view!&#8221; </em>&nbsp;</p>



<p class="wp-block-paragraph"><em>&#8220;But didn&#8217;t your car just fail to start? Do you need a push?&#8221;</em>&nbsp;</p>



<p class="wp-block-paragraph"><em>&#8220;I hit the ignition with my knee by mistake. I am way too tall for this car.&#8221;</em>&nbsp;</p>



<p class="wp-block-paragraph"><em>You nod and slowly back away. These people have it under control.</em>&nbsp;</p>



<p class="wp-block-paragraph">Sometimes, people are just OK. They are in a good place at their job and grow at their own pace. <strong>All you need to do is give them space</strong>. And sometimes, people are just not OK. The last thing they need right now is a push. Maybe they have problems in their personal lives, or they are already struggling at a new position or in a new team. Perhaps they have solid reasons why they cannot do what you are asking them to do.  </p>



<p class="wp-block-paragraph">Learn and respect.&nbsp;</p>



<h2 class="wp-block-heading"><span id="build-your-case-and-then-act"><strong>Build your case and then act</strong>&nbsp;</span></h2>



<p class="wp-block-paragraph"><em>In the other branch, the driver looks at you with relief. &#8221;Oh, thanks for stopping by! You know, today is pretty cold, and I guess our old battery could not take it anymore. A little help would be nice. We need to be in the town by noon.” And so you roll up your sleeves and get behind the trunk. It&#8217;s time to push some folks to success!</em>&nbsp;</p>



<p class="wp-block-paragraph">Once you determine you are ready to push, the next step is to <strong>build your case</strong>. You should not just out of the blue and without context shout orders at people.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">Use your 1-on-1 to explain what is going on and why their involvement might be beneficial. <strong>Explain what you see as their strengths</strong> and why you believe they have a good chance to succeed. Explain how the process will work and provide a safety net in case of failure.&nbsp;</p>



<ul class="wp-block-list">
<li>&#8220;This is as much about delivering the feature as it is about you learning the ropes. We can manage the client in case things don&#8217;t work out.&#8221; </li>



<li>&#8220;You will not be alone in this. Claire has done this before and she will be your mentor throughout the process&#8221;. </li>



<li>&#8220;Before you even start, there is a week-long workshop to give you all the basics you need.&#8221; </li>



<li>&#8220;I will have regular 1on1s with you to help out and act in case you need it.&#8221; </li>
</ul>



<p class="wp-block-paragraph">Often, as part of these conversations, <strong>the person will decide to sign up themselves</strong> and no push is needed at all! Those are the best times. But if that does not happen and you do need to give them a nudge, make sure you are direct and explain why you are picking them.&nbsp;</p>



<ul class="wp-block-list">
<li>&#8220;I believe you are the best person for this job. Not only is it the logical next step in your career, but you have all the right skills. You did a lot of work in native development and have already designed complex UI components that were well-reviewed. You will get a chance to work with seniors outside of your team and learn a lot about designing larger UI systems. The deadline is tight, but I&#8217;ve seen you work under pressure, and you always deliver.&#8221; </li>
</ul>



<p class="wp-block-paragraph">And there you have it! As with most things when working with people, the key to success is taking your time, understanding the context, communicating regularly and clearly, and being direct when needed. &nbsp;</p>



<p class="wp-block-paragraph">Good luck!&nbsp;</p>



<p class="wp-block-paragraph"><em>You watch as the car takes off and approaches the town in the distance. The sun is slowly setting behind the horizon, and you get lost in thoughts for a while until a lonely call of an eagle above drags you back to reality. Well, it&#8217;s time to get back to work. You rewind the clock a couple of millions of years back and push those early homo erectus folks to play with fire a bit more actively. After all, they have what it takes.</em> </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="512" height="512" src="https://shiftmag.dev/wp-content/uploads/2024/04/car_sunset.jpg?x94846" alt="" class="wp-image-3171" srcset="https://shiftmag.dev/wp-content/uploads/2024/04/car_sunset.jpg 512w, https://shiftmag.dev/wp-content/uploads/2024/04/car_sunset-300x300.jpg 300w, https://shiftmag.dev/wp-content/uploads/2024/04/car_sunset-150x150.jpg 150w" sizes="auto, (max-width: 512px) 100vw, 512px" /></figure>
<p>The post <a href="https://shiftmag.dev/the-subtle-difference-between-pushing-someone-to-start-their-engine-and-pushing-them-off-a-cliff-3163/">The subtle difference between pushing developers to start their engine and pushing them off a cliff</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 

Served from: shiftmag.dev @ 2026-06-11 20:35:57 by W3 Total Cache
-->