<?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>Developer Experience Archives - ShiftMag</title>
	<atom:link href="https://shiftmag.dev/category/developer-experience/feed/" rel="self" type="application/rss+xml" />
	<link>https://shiftmag.dev/category/developer-experience/</link>
	<description>Insightful engineering content &#38; community</description>
	<lastBuildDate>Mon, 01 Jun 2026 13:41:05 +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>Developer Experience Archives - ShiftMag</title>
	<link>https://shiftmag.dev/category/developer-experience/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>We Asked 20 Developers Why They Really Got Into Tech. It Wasn&#8217;t the Money.</title>
		<link>https://shiftmag.dev/we-asked-20-developers-why-they-really-got-into-tech-it-wasnt-the-money-10101/</link>
		
		<dc:creator><![CDATA[Anastasija Uspenski]]></dc:creator>
		<pubDate>Mon, 01 Jun 2026 13:39:32 +0000</pubDate>
				<category><![CDATA[Developer Experience]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Developer Productivity]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Engineer Explains]]></category>
		<category><![CDATA[infobip]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=10101</guid>

					<description><![CDATA[<p>Twenty developers got real about their jobs: the rush of shipping something that actually works, the way a fat paycheck can make you stay longer than you probably should, and the slow death of sitting through another meeting that should've been an email.</p>
<p>The post <a href="https://shiftmag.dev/we-asked-20-developers-why-they-really-got-into-tech-it-wasnt-the-money-10101/">We Asked 20 Developers Why They Really Got Into Tech. It Wasn&#8217;t the Money.</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/2026/05/developers_answer_shiftmag.jpg?x94846" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/05/developers_answer_shiftmag.jpg 1200w, https://shiftmag.dev/wp-content/uploads/2026/05/developers_answer_shiftmag-300x158.jpg 300w, https://shiftmag.dev/wp-content/uploads/2026/05/developers_answer_shiftmag-1024x538.jpg 1024w, https://shiftmag.dev/wp-content/uploads/2026/05/developers_answer_shiftmag-768x403.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph">Ask anyone outside the industry why people go into software engineering and they&#8217;ll say: good money, remote work. Talk to the developers themselves and you get a different story.</p>



<p class="wp-block-paragraph">For most of the <a href="https://www.youtube.com/watch?v=mRWXIFC12hs" target="_blank" rel="noreferrer noopener">20 of our Infobip colleagues we interviewed</a>, it started with <strong>genuine curiosity</strong> &#8211; a need to understand how things work, then build their own. Some caught the bug in childhood, others through gaming. But the thread running through nearly every story is the same: they fell in love with the craft long before they ever thought about the salary.</p>



<p class="wp-block-paragraph"><strong>Josip Antoliš,</strong> Senior Principal Engineer, captures this sentiment:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">It felt like playing with Lego, just for older kids. It was really about building and experimenting.</p>
</blockquote>



<h2 class="wp-block-heading"><span id="if-money-is-the-only-reason-you-want-to-become-a-developer-you-won%e2%80%99t-make-it">If money is the only reason you want to become a developer, you won’t make it</span></h2>



<p class="wp-block-paragraph">Money is part of the equation, and some developers are honest about it &#8211; job security and solid pay were what first pointed them toward the field. There&#8217;s nothing wrong with that. But most will tell you it only gets you so far. </p>



<p class="wp-block-paragraph">Engineering is demanding, constantly evolving, and unforgiving to those who are just going through the motions. The developers we spoke to largely agreed: <strong>without a genuine curiosity for the craft, the motivation eventually runs dry</strong>, no matter what&#8217;s in your bank account.</p>



<p class="wp-block-paragraph"><strong>Olga Koroleva</strong>, Staff Software Engineer, explains:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"> For me, it was not money driven. I just naturally like learning new things.</p>
</blockquote>



<p class="wp-block-paragraph">Not everyone had a master plan. For some of the developers we spoke to, the path into software was <strong>less a calling and more a series of small, accidental steps</strong> like following friends into a computer science program, or stumbling onto coding in their twenties and realizing they had a knack for logical thinking and breaking problems apart.</p>



<p class="wp-block-paragraph">What matters less, it turns out, is how you got in. What keeps people thriving is the <strong>willingness to keep learning and adapting</strong> in a field that never really stands still.</p>



<p class="wp-block-paragraph">Among younger developers in particular, gaming played a surprisingly direct role &#8211; less a hobby, more an early window into how software actually works.</p>



<p class="wp-block-paragraph"><strong>Edvin Teskeredžić</strong>, Senior AI Software Engineer, remembers his Counter-Strike days:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">We used to play a lot of Counter-Strike, and to play together we had to set up servers. Later we started modifying the game, and only later realized we were actually programming.</p>
</blockquote>



<p class="wp-block-paragraph">In the end, whatever brought them to the field, most engineers find a way to grow into it. As <strong>Denis Kranjčec</strong>, Staff Engineer, puts it:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">I started programming 40 years ago, and money was fine, but it was not the only thing.</p>
</blockquote>



<h2 class="wp-block-heading"><span id="the-best-things-about-being-a-developer">The best things about being a developer</span></h2>



<p class="wp-block-paragraph">When asked what they love most about the job, the answers kept circling back to the same themes.</p>



<ul class="wp-block-list">
<li>Cracking a hard problem in a clean, elegant way</li>



<li>Shipping something that actually makes life easier for people &#8211; knowing your code is quietly doing its job out in the world</li>



<li>Those rarer moments when a tangle of complex systems finally clicks into place, and what was chaos becomes something that just works</li>
</ul>



<p class="wp-block-paragraph"><strong>Creativity and problem-solving</strong> remain central themes. As Teskeredžić puts it:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">I like solving practical problems and applying creative solutions.</p>
</blockquote>



<p class="wp-block-paragraph">Beyond the work itself, the setup matters too &#8211; remote work, autonomy, and long uninterrupted stretches to actually think. But as Olga Koroleva puts it, what really keeps people around is simpler than any perk:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The best part is staying curious.</p>
</blockquote>



<h2 class="wp-block-heading"><span id="the-not-so-good-part-of-a-developer%e2%80%99s-career">The not-so-good part of a developer’s career</span></h2>



<p class="wp-block-paragraph">Ask about the downsides and the answers get a lot shorter. One word came up more than any other: <strong>meetings</strong>. Pointless ones, mostly. The kind that could&#8217;ve been an email.</p>



<p class="wp-block-paragraph">Beyond that, developers highlighted several systemic frustrations that disrupt deep focus:</p>



<ul class="wp-block-list">
<li>Constant context-switching takes a significant mental toll.<br></li>



<li>Bureaucracy and tedious reporting often fracture the time dedicated to core engineering tasks.<br></li>



<li>Navigating undocumented legacy code and parsing ambiguous logs slows development velocity.</li>
</ul>



<p class="wp-block-paragraph">There&#8217;s also the relentless pace of change. <strong>Kristina Valjak</strong>, Engineering Lead, puts it plainly:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The speed of change means you constantly have to learn. You have to sacrifice things. It is not a job you leave at the door.</p>
</blockquote>



<p class="wp-block-paragraph">And then there&#8217;s the physical reality: long hours at a screen, tight deadlines, pressure that doesn&#8217;t let up. Even in teams doing interesting work, that combination can wear you down.</p>



<h2 class="wp-block-heading"><span id="would-they-choose-this-career-again-absolutely">Would they choose this career again? Absolutely.</span></h2>



<p class="wp-block-paragraph">When asked if they&#8217;d do it all over again, there was barely a pause. Absolutely. 100 percent. </p>



<p class="wp-block-paragraph">More pros than cons. Almost without exception, these developers would make the same choice and most believe tech still offers something few other industries can match: <strong>genuine stability and room to keep growing</strong>.</p>



<p class="wp-block-paragraph"><strong>Ivona Škorjanc</strong>, Software Engineer, remains highly optimistic:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">I would still choose it. It is exciting and I see myself growing in it.</p>
</blockquote>



<p class="wp-block-paragraph">A few said they&#8217;d have <strong>invested more in the fundamentals early on</strong> &#8211; the theory, the computer science basics that tend to get skipped in the rush to learn frameworks and ship code. But that&#8217;s a minor footnote to a bigger conclusion: this field is hard, and most of them wouldn&#8217;t trade it for anything.</p>



<p class="wp-block-paragraph">Teskeredžić offers a final, inspiring perspective on the profession:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">To me, engineers are like real-world wizards. Advanced technology is like magic, and if you can be a wizard for a career, why not.</p>
</blockquote>



<p class="wp-block-paragraph">Even the ones who occasionally miss working with their hands come back to the same answer: they&#8217;d choose this path again.</p>



<p class="wp-block-paragraph"><em>Special thanks to our fellow colleagues at Infobip, the publisher of ShiftMag!</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 title="20 Developers Get Honest About Their Work" width="500" height="281" src="https://www.youtube.com/embed/mRWXIFC12hs?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>The post <a href="https://shiftmag.dev/we-asked-20-developers-why-they-really-got-into-tech-it-wasnt-the-money-10101/">We Asked 20 Developers Why They Really Got Into Tech. It Wasn&#8217;t the Money.</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Infobip Shift 2026 Returns to Zadar, Bringing Apple and Nvidia to the Stage</title>
		<link>https://shiftmag.dev/infobip-shift-2026-returns-to-zadar-bringing-apple-and-nvidia-to-the-stage-9585/</link>
		
		<dc:creator><![CDATA[ShiftMag]]></dc:creator>
		<pubDate>Fri, 08 May 2026 11:24:24 +0000</pubDate>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Developer Experience]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[Infobip Shift 2026]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=9585</guid>

					<description><![CDATA[<p>Infobip Shift 2026, Europe’s leading developer and AI conference, will be held in Zadar from September 13 to 15, bringing together developers and engineers from around the world once again. </p>
<p>The post <a href="https://shiftmag.dev/infobip-shift-2026-returns-to-zadar-bringing-apple-and-nvidia-to-the-stage-9585/">Infobip Shift 2026 Returns to Zadar, Bringing Apple and Nvidia to the Stage</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Last year, Infobip Shift 2026 gathered <strong>5.500 attendees from 40 countries</strong>, and this September, it returns to Zadar with an even stronger focus on world-class tech, developer careers, and responsible AI. The lineup includes leading global tech companies, including NVIDIA and Apple.</p>



<p class="wp-block-paragraph">Top experts from global tech leaders will share <strong>how they build and scale some of the world’s most complex systems</strong>, with real-world lessons from production environments. </p>



<p class="wp-block-paragraph">Across multiple stages, the program features panels, workshops, and talks focused on deep technical insight and practical experience. Speakers include <a href="https://www.linkedin.com/in/katie-gamanji/" target="_blank" rel="noreferrer noopener">Katie Gamanji </a>(Apple), <a href="https://www.linkedin.com/in/igor-dmochowski/" target="_blank" rel="noreferrer noopener">Igor Dmochowski</a><strong> </strong>(NVIDIA), <a href="https://www.linkedin.com/in/svenpeters73/" target="_blank" rel="noreferrer noopener">Sven Peters</a>, <a href="https://github.com/Betta-Lyon-Delsordo" target="_blank" rel="noreferrer noopener">Bette Lyon Delsordo</a>, and many others.</p>



<h2 class="wp-block-heading"><span id="you-don%e2%80%99t-need-silicon-valley-for-world-class-tech">You don’t need silicon valley for world-class tech</span></h2>



<p class="wp-block-paragraph">Igor Dmochowski, Head of Developer Relations for Central and Eastern Europe at NVIDIA, said that Infobip Shift is already internationally recognized, and added that he is especially excited to <strong>meet local developers</strong> whose potential is increasingly visible on the global stage:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Croatia has exceptional technological talent and a strong AI community, and I’m glad to be part of an event that puts this into a global context. True tech innovation comes from connecting people and ideas, and Shift has that energy.</p>
</blockquote>



<p class="wp-block-paragraph">On the other hand, <a href="https://www.linkedin.com/in/ivanbrezakbrkan/" id="https://www.linkedin.com/in/ivanbrezakbrkan/">Ivan Brezak Brkan</a>, the Director of Developer Experience at Infobip, said that Infobip Shift is rightfully <strong>the largest tech conference in this part of Europe</strong> and one of the largest in the world. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">You don’t have to, especially in today’s conditions, travel to the other side of the world to exchange experiences with people whose technological solutions power the world. If you want to advance your career not only through knowledge but also through connections, you need to be at Shift.</p>
</blockquote>



<h2 class="wp-block-heading"><span id="no-professional-speakers-and-marketing-presentations">No professional speakers and marketing presentations</span></h2>



<p class="wp-block-paragraph">&#8220;Infobip Shift is built on two foundations: <strong>high-quality content</strong> and a <strong>relaxed atmosphere</strong> that encourages networking. We ensure strong content by carefully selecting speakers who share real-world experience from people actively working in the industry,&#8221; said <strong>Stipe Cigic</strong>, Director of the Infobip Shift, adding:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">We avoid professional speakers, marketing-driven presentations, and topics overloaded with buzzwords and hype. That has become especially challenging today, when roughly every second submitted topic is somehow related to AI. Our speakers are real developers &#8211; people whose knowledge our audience truly values.</p>
</blockquote>



<p class="wp-block-paragraph">He also said the second foundation of Shift is its relaxed, laid-back atmosphere &#8211; a vibe the team aims to create each year. It can’t be forced, but they work to make the event feel light, summery, and welcoming. That kind of atmosphere makes networking more natural and fun.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Meeting new people is the biggest opportunity for attendees. I know at least 2 projects that started from casual chats at last year’s Shift. High-quality content plus a summer vibe, that’s what makes it memorable.</p>
</blockquote>



<h2 class="wp-block-heading"><span id="knowledge-gets-you-started-networking-takes-you-further">Knowledge gets you started, networking takes you further</span></h2>



<p class="wp-block-paragraph">With increasing reports of layoffs and disruption in the global IT industry, networking is becoming even more important. Stipe says the goal is for developers to leave Shift not only with new knowledge, but also with <strong>greater confidence and reassurance in their skills, value</strong>, and future in the industry.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">I believe that, when it comes to networking and professional connections, Shift has no real competition in this part of Europe within the developer industry. A junior developer can casually grab a coffee with a senior engineer from companies like Netflix. The exchange of knowledge and experience in conversations like that is something our community rarely finds at nearby conferences.</p>
</blockquote>



<p class="wp-block-paragraph">Stipe concluded that Shift is a long-term platform developers can rely on, not just to meet peers, but also <strong>potential employers, clients, and partners</strong>. It offers many opportunities, whether for networking or simply enjoying great talks, food, and drinks under the Mediterranean sun.</p>



<h3 class="wp-block-heading"><span id="interested-in-infobip-shift-explore-what-we-have-planned">Interested in Infobip Shift? <a href="https://shift.infobip.com/" target="_blank" rel="noreferrer noopener">Explore what we have planned</a>!</span></h3>


<figure class="wp-block-post-featured-image"><img decoding="async" width="1200" height="630" src="https://shiftmag.dev/wp-content/uploads/2026/05/shift_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/2026/05/shift_1.png 1200w, https://shiftmag.dev/wp-content/uploads/2026/05/shift_1-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2026/05/shift_1-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/05/shift_1-768x403.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></figure><p>The post <a href="https://shiftmag.dev/infobip-shift-2026-returns-to-zadar-bringing-apple-and-nvidia-to-the-stage-9585/">Infobip Shift 2026 Returns to Zadar, Bringing Apple and Nvidia to the Stage</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>What 4 engineers with 10+ years of experience say about staying relevant in the AI era</title>
		<link>https://shiftmag.dev/what-4-engineers-with-10-years-of-experience-say-about-staying-relevant-in-the-ai-era-9309/</link>
		
		<dc:creator><![CDATA[Marko Crnjanski]]></dc:creator>
		<pubDate>Fri, 24 Apr 2026 13:58:54 +0000</pubDate>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Developer Experience]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[career advice]]></category>
		<category><![CDATA[development]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=9309</guid>

					<description><![CDATA[<p>I spoke with four veteran software engineers to explore how they’re approaching long-term career resilience and adapting their skills to stay effective in the field.</p>
<p>The post <a href="https://shiftmag.dev/what-4-engineers-with-10-years-of-experience-say-about-staying-relevant-in-the-ai-era-9309/">What 4 engineers with 10+ years of experience say about staying relevant in the AI era</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Let’s start with a cliché: AI has quickly become part of everyday work in tech, reshaping what it means to be a developer.</p>



<p class="wp-block-paragraph">A field that, just a few years ago, felt stable and full of opportunity now comes with more uncertainty -breaking in is harder, and <strong>staying relevant takes constant effort</strong>.</p>



<p class="wp-block-paragraph">We spoke with software engineers who have more than 10 years of experience to hear how they’re navigating these changes.</p>



<h2 class="wp-block-heading"><span id="thinking-back-on-your-career-what%e2%80%99s-helped-you-stay-relevant-as-technologies-and-trends-kept-evolving">Thinking back on your career, what’s helped you stay relevant as technologies and trends kept evolving?</span></h2>



<p class="wp-block-paragraph"><strong>Denis</strong>:<strong> </strong>&#8220;I was always looking for ways to improve my workflow, so I could spend more time on the interesting, creative parts of the job and less on repetitive, routine tasks. I focused on really understanding problems and possible solutions, which meant <strong>building deeper knowledge rather than relying on quick fixes from the internet</strong>. I read books, followed blogs, attended both live and online conferences, and learned from experienced people in the industry to get different perspectives and form my own conclusions.</p>



<p class="wp-block-paragraph">To stay relevant, I focused on real user use cases and the problems behind them, building solutions that create real value. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">I also made a point of staying close to the products, users, and solutions over time to see what actually works and what doesn’t, regardless of hype or trends.</p>
</blockquote>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="256" src="https://shiftmag.dev/wp-content/uploads/2026/04/denis-1024x256.png?x94846" alt="" class="wp-image-9339" srcset="https://shiftmag.dev/wp-content/uploads/2026/04/denis-1024x256.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/04/denis-300x75.png 300w, https://shiftmag.dev/wp-content/uploads/2026/04/denis-768x192.png 768w, https://shiftmag.dev/wp-content/uploads/2026/04/denis.png 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Working in teams and collaborating closely helped a lot, as there are always tough questions and healthy discussions that lead to better decisions in the end.&#8221;</p>



<p class="wp-block-paragraph"><strong>Marina: </strong>&#8220;Staying relevant over the years came down to <strong>curiosity and hands‑on learning</strong>. I regularly read blogs and watch online conferences to keep up with&nbsp;new technologies, but I learned the most by trying things out through small POCs. Experimenting helped me understand problems more deeply and see what really worked.&nbsp;&nbsp;</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Changing teams also played&nbsp;a big role. Working with people who had&nbsp;different backgrounds&nbsp;and experiences exposed me to new ways of thinking and pushed me to grow.&nbsp;&nbsp;</p>
</blockquote>



<p class="wp-block-paragraph">Finally, <strong>working on real products in production environments</strong> (especially in larger teams) taught me lessons you simply&nbsp;can’t&nbsp;learn alone. Collaboration, shared ownership, and learning from others helped me continuously adapt as the industry evolved.&#8221;</p>



<p class="wp-block-paragraph"><strong>Marko</strong>: &#8220;For me it&#8217;s a <strong>combination of continuous learning and a strong focus on fundamentals</strong>. I always tried to explore&nbsp;new technologies&nbsp;and different domains, but with an emphasis on really understanding the core principles behind them. That way, the knowledge stays useful even if my career moves in a different direction, and it becomes much easier to build on top of it later.</p>



<p class="wp-block-paragraph">Just like for the other guys, another important factor was working on real products running in serious production environments, especially in larger teams. <strong>Collaboration, communication, and learning from others in a shared codebase</strong> bring insights you simply can’t get when working alone. Those experiences helped me grow not only technically, but also in how I approach problems and make decisions in the long run.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">I’d&nbsp;describe myself as a cautious early adopter. I enjoy experimenting with&nbsp;new technologies, but I try to understand the fundamentals behind them first, so I can evaluate where they truly make sense and how they contribute real value rather than just following hype.</p>
</blockquote>



<p class="wp-block-paragraph">Finally, <strong>self-reflection played&nbsp;a big role</strong>.&nbsp;Regularly asking&nbsp;myself what skills&nbsp;I’m&nbsp;missing, how I can contribute more to my team or company, and then actively working towards that has led to many good long-term career decisions.&#8221;</p>



<p class="wp-block-paragraph"><strong>Mario</strong>: &#8220;Talking to other people, watching what others build, and experimenting myself plus exploring open source projects, YouTube videos, and Udemy courses on 2x speed to quickly understand what’s possible with unfamiliar tools. I also follow Hacker News and similar newsletters. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="256" src="https://shiftmag.dev/wp-content/uploads/2026/04/mario-1024x256.png?x94846" alt="" class="wp-image-9340" srcset="https://shiftmag.dev/wp-content/uploads/2026/04/mario-1024x256.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/04/mario-300x75.png 300w, https://shiftmag.dev/wp-content/uploads/2026/04/mario-768x192.png 768w, https://shiftmag.dev/wp-content/uploads/2026/04/mario.png 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">But staying relevant isn’t just about knowing what’s new; it’s about knowing what’s actually worth adopting &#8211; and when.</p>
</blockquote>



<p class="wp-block-paragraph"><strong>Understanding the high-level concepts</strong> <strong>and the problem</strong> I’m trying to solve is what allows me to pick something that looks like the right tool. After that, trying it out and <strong>getting first-hand experience</strong>: how it feels under the fingers, and whether it really solves my problem and makes my life easier &#8211; is mostly the deciding factor for me, but not the only one. If I’m doing a quick throwaway POC, I can try anything and really find the best tool.</p>



<p class="wp-block-paragraph">But if&nbsp;I&#8217;m&nbsp;working in a team environment where cognitive load is already high,&nbsp;I&#8217;m&nbsp;careful <strong>not to introduce&nbsp;new technologies&nbsp;every other day</strong> just because&nbsp;it&#8217;s&nbsp;the new cool shiny thing &#8211; even if it&nbsp;actually is&nbsp;the best tool.&nbsp;It&#8217;s&nbsp;a&nbsp;tradeoff, and one that needs careful consideration. And sometimes the best&nbsp;isn&#8217;t&nbsp;even needed &#8211; something that works is good enough.&#8221;</p>



<h2 class="wp-block-heading"><span id="in-your-opinion-is-long-term-success-more-about-being-a-deep-specialist-or-a-broad-generalist-has-your-perspective-changed-over-time">In your opinion, is long-term success more about being a deep specialist or a broad generalist? Has your perspective changed over time?</span></h2>



<p class="wp-block-paragraph"><strong>Denis</strong>: For long-term success (whatever that is),&nbsp;it&#8217;s&nbsp;generally better&nbsp;to develop <strong>M-shaped skills</strong>. That will take some time, but only with great collaboration and multiple deep&nbsp;expertise&nbsp;areas can you be innovative and versatile, bringing measurable value and not be easily replaceable.</p>



<p class="wp-block-paragraph"><strong>Marina</strong>: Earlier in my career, I believed that being a T‑shaped developer was the ideal path and I assumed that trying to learn more than one thing deeply would only lead to superficial knowledge and that focusing on a single specialization was the safest way to grow.&nbsp;Over time, my view changed.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Through real-world experience, I realized it’s possible to build strong, meaningful expertise in multiple areas without losing depth. As systems became more complex, having deeper knowledge across several domains helped me understand the bigger picture better, make better technical decisions, and collaborate more effectively with others.</p>
</blockquote>



<p class="wp-block-paragraph">Today,&nbsp;I believe long‑term success&nbsp;comes from <strong>combining depth with breadth</strong> &#8211; developing strong&nbsp;expertise&nbsp;in more than one area and continuously expanding that range as technology evolves. This flexibility has helped me stay relevant and adapt as roles and technologies have changed.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="256" src="https://shiftmag.dev/wp-content/uploads/2026/04/marina_final-1024x256.png?x94846" alt="" class="wp-image-9342" srcset="https://shiftmag.dev/wp-content/uploads/2026/04/marina_final-1024x256.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/04/marina_final-300x75.png 300w, https://shiftmag.dev/wp-content/uploads/2026/04/marina_final-768x192.png 768w, https://shiftmag.dev/wp-content/uploads/2026/04/marina_final.png 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>Mario:</strong> I wonder if&nbsp;it&#8217;s&nbsp;possible to be M-shaped <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> For a long time, I was a firm believer that T-shaped is the way to go &#8211; a broad overview, but with at least one area of genuine deep&nbsp;expertise. And I still think&nbsp;that&#8217;s&nbsp;a solid foundation for any engineer.</p>



<p class="wp-block-paragraph">But over 20+ years, curiosity kept pulling me in different directions: low-level Linux internals, networking, compilers, containers, orchestration, and large-scale distributed systems, working at different layers of the stack. And each time, I went deep enough to solve a real problem. That <strong>experience adds up over time</strong>.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Understanding the problem and figuring out which layer it needs to be solved in matters more than the technology layer itself, and then it’s about stitching everything together.</p>
</blockquote>



<p class="wp-block-paragraph">Do that long enough, across enough domains, and you naturally grow more spikes.&nbsp;So&nbsp;my view has evolved &#8211; <strong>I started as a T-shaped believer, and somewhere along the way I became something closer to M-shaped</strong>. Not by design, but by following the problems. And if you ask me what&nbsp;I&#8217;m&nbsp;an expert at specifically,&nbsp;I&#8217;d&nbsp;say solving&nbsp;problems, if&nbsp;that counts as&nbsp;expertise.&nbsp;That&#8217;s&nbsp;at least what I currently strive for.</p>



<p class="wp-block-paragraph"><strong>Marko:</strong> Today,&nbsp;I’d&nbsp;describe myself as <strong>somewhere between T-shaped and M-shaped</strong>,&nbsp;maybe N-shaped, still evolving. Early in my career, the T-shaped model made perfect sense, broad knowledge with depth in one area. Over time, as access to knowledge became easier and technologies evolved faster, I realized how valuable it is to develop depth in multiple areas</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">What ties all of this together is problem-solving. Technologies change, but problems&nbsp;remain. Being able to learn continuously, adapt, and apply concepts from one domain to&nbsp;seemingly unrelated&nbsp;problems&nbsp;becomes&nbsp;incredibly valuable over the long term.</p>
</blockquote>



<p class="wp-block-paragraph">If I were to advise myself 10 years ago or to others today, it would be to <strong>stay curious, keep learning, and surround yourself with people you can both learn from and teach</strong>. Also,&nbsp;don’t&nbsp;be afraid to broaden your horizons, look for ways to contribute beyond your narrow specialization, pick up complementary skills, and take some risks. Growth often happens outside your comfort zone.</p>



<h2 class="wp-block-heading"><span id="how-do-you-see-ai-toolsimpactinglong-term-developer-careers">How do you see AI tools&nbsp;impacting&nbsp;long-term developer careers?</span></h2>



<p class="wp-block-paragraph"><strong>Mario:</strong> AI impact is real, especially in engineering. We’re much faster at writing code, and I can smart-search unfamiliar codebases and quickly understand how things work (something that used to take a huge effort). </p>



<p class="wp-block-paragraph">But there’s a price.</p>



<p class="wp-block-paragraph"><strong>The amount of generated code is huge, yet humans still need to review, understand, and own it</strong>. AI isn’t the one waking up when something breaks. Creating PRs with AI is easy, being responsible for them is another story.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Our role has shifted to making sure code that looks ok is actually ok &#8211; fits the intended architecture, the broader system, the business rules, all the things AI isn’t aware of. The value is the same: understanding whether the code works as intended and preventing it from degrading into a ball of mud nobody can understand or fix at 3am.</p>
</blockquote>



<p class="wp-block-paragraph">What’s changed is how much harder that challenge has become with code being generated at this speed. <strong>Young developers are in a tight spot</strong> &#8211; suddenly expected to skip writing code by hand but still have the same depth of understanding.</p>



<p class="wp-block-paragraph">And I’m not sure you can skip that part. There’s something about writing code by hand, hitting a wall, debugging it yourself, and feeling the pain of it not working that builds intuition you can’t shortcut. Even if AI is faster and easier. The best advice is to learn the concepts, fundamentals, and engineering best practices that hold regardless of AI.</p>



<p class="wp-block-paragraph">You need to be able to<strong> look at AI-generated code and know whether a for loop is acceptable or a dictionary lookup fits better</strong>, that’s software engineering 101. AI can generate the code, but we still need to understand whether it actually fits.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Write as much code by hand as you can. Use AI to review it, ask for other options, and have it challenge your approach, and then actually think through the answers. That way you learn faster while still building real understanding. </p>
</blockquote>



<p class="wp-block-paragraph">And <strong>don’t skip debugging AI-generated code step by step</strong>; I do it regularly. It’s how you move from just looking at code to actually feeling it. That difference becomes obvious once you try it.</p>



<p class="wp-block-paragraph">You’ll often be surprised how much you miss just by reading &#8211; sometimes it’s &#8220;this is not how I thought it worked&#8221;, sometimes it’s &#8220;I did not expect this at all.&#8221; Both are valuable, and both come from actually stepping through it.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="256" src="https://shiftmag.dev/wp-content/uploads/2026/04/marko-1024x256.png?x94846" alt="" class="wp-image-9341" srcset="https://shiftmag.dev/wp-content/uploads/2026/04/marko-1024x256.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/04/marko-300x75.png 300w, https://shiftmag.dev/wp-content/uploads/2026/04/marko-768x192.png 768w, https://shiftmag.dev/wp-content/uploads/2026/04/marko.png 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>Marko:</strong> AI tools already have&nbsp;a huge impact&nbsp;on my daily work, from writing code and understanding codebases to reviews, idea generation, debugging, and learning new topics. Overall, I see AI as a strong positive force for developers. It significantly reduces the time spent on repetitive or low-value coding tasks and frees up more space for thinking about architecture, system design, and solving complex problems that truly matter in production.</p>



<p class="wp-block-paragraph">That said, some things won’t disappear. Understanding the problem and broader context, making architectural trade-offs, communicating well, and taking ownership are still firmly human. When something breaks at 2 a.m., it’s still engineers who make decisions and take responsibility. AI is powerful, but only as effective as the person using it.</p>



<p class="wp-block-paragraph">For junior developers, don’t skip the fundamentals. Expectations are higher than ever, but strong foundations are key for a sustainable career. The good news is that access to knowledge and AI tools is better than ever. Use AI to accelerate learning, not replace understanding. Give yourself time, build experience, and master the basics—that investment pays off for decades.</p>



<p class="wp-block-paragraph"><strong>Marina: </strong>AI tools will significantly change how developers work, but I&nbsp;don’t&nbsp;see them replacing strong engineers. Instead, they will amplify those who understand what they are building. For younger developers, <strong>the key is to learn with AI, not just watch AI work</strong>.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">It’s important to <strong>question AI output</strong>, understand why it made certain changes, and how those changes affect the system. Treat AI as a learning partner rather than a shortcut. Blindly accepting generated code can limit growth, while actively analysing and improving it builds real&nbsp;expertise.&nbsp;&nbsp;</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Younger developers should also focus heavily on architecture and system design. When you understand how systems are structured, how components interact, and what trade‑offs exist, AI becomes far more powerful.&nbsp;It’s&nbsp;much easier to ask the right questions (and get useful results) when you already understand the problem space.</p>
</blockquote>



<p class="wp-block-paragraph"><strong>Denis</strong>: <strong>AI tools have made coding skills almost irrelevant</strong>. Still, other skills and practices related to quality, such as trunk-based development, TDD, continuous delivery, modularity, cohesion, DDD, etc., are more valuable than before. </p>



<p class="wp-block-paragraph">AI tools are a <strong>powerful amplifier</strong>, and they need guidance, so software engineers with those skills will remain relevant and in demand for a long time.&nbsp;Understanding of the (business) problem and the solution&nbsp;shouldn&#8217;t&nbsp;be outsourced to the AI. Software engineers still need to understand trade-offs,&nbsp;architecture,&nbsp;and code.&nbsp;</p>



<h2 class="wp-block-heading"><span id=""><strong>&nbsp;</strong></span></h2>


<figure class="wp-block-post-featured-image"><img loading="lazy" decoding="async" width="1200" height="630" src="https://shiftmag.dev/wp-content/uploads/2026/04/shift_final.png?x94846" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/04/shift_final.png 1200w, https://shiftmag.dev/wp-content/uploads/2026/04/shift_final-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2026/04/shift_final-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/04/shift_final-768x403.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure><p>The post <a href="https://shiftmag.dev/what-4-engineers-with-10-years-of-experience-say-about-staying-relevant-in-the-ai-era-9309/">What 4 engineers with 10+ years of experience say about staying relevant in the AI era</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>42% of Code Is Now AI-Assisted!</title>
		<link>https://shiftmag.dev/state-of-code-2025-7978/</link>
		
		<dc:creator><![CDATA[Anastasija Uspenski]]></dc:creator>
		<pubDate>Thu, 12 Feb 2026 13:13:57 +0000</pubDate>
				<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Developer Experience]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[Developer Survey]]></category>
		<category><![CDATA[State of code 2025]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=7978</guid>

					<description><![CDATA[<p>That number is expected to rise to 65% within two years. Yet 96% of developers, according to this Sonar research, say they don’t fully trust AI-generated code.</p>
<p>The post <a href="https://shiftmag.dev/state-of-code-2025-7978/">42% of Code Is Now AI-Assisted!</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em><strong>AI adoption is surging, but so are concerns. See the trust data: <a href="https://shiftmag.dev/stack-overflow-survey-2025-ai-5653/">84% of developers use AI, yet 46% don&#8217;t trust the output</a>.</strong></em></p>



<p class="wp-block-paragraph">In 2025, Sonar surveyed over&nbsp;<strong>1.100 developers worldwide</strong>&nbsp;to see how software engineering is evolving. The findings show AI is now central to development – but it hasn’t made the job easier, only reshaped it.</p>



<p class="wp-block-paragraph">Developers now write code faster than ever. At the same time, they spend more time questioning, reviewing, and validating what gets shipped. Productivity has increased. Confidence has not kept pace. This tension defines the current <a href="https://www.sonarsource.com/state-of-code-developer-survey-report.pdf" target="_blank" rel="noreferrer noopener">&#8220;State of Code&#8221; research</a>.</p>



<h2 class="wp-block-heading"><span id="ai-is-no-longer-experimental-it%e2%80%99s-operational">AI is no longer experimental, it’s operational!</span></h2>



<ul class="wp-block-list">
<li>72% of developers who use AI coding tools rely on them daily</li>



<li>Developers estimate that 42% of the code they commit is AI-assisted</li>



<li>They expect that number to rise to 65% by 2027</li>
</ul>



<p class="wp-block-paragraph">AI-assisted coding has shifted from novelty to routine. Among developers who have tried AI tools, most now use them daily. <strong>Many estimate that more than 40% of the code they commit includes AI assistance</strong>. They expect that percentage to grow significantly in the next two years.</p>



<p class="wp-block-paragraph">Developers use AI across the full spectrum of work: prototypes, internal tools, customer-facing products, and even business-critical systems. AI no longer supports side experiments. It participates directly in production workflows.</p>



<p class="wp-block-paragraph"><em><strong>Instead of fighting the tool, rethink how you use it. <a href="https://shiftmag.dev/how-uber-engineers-use-ai-agents-8617/">How Uber engineers shifted from writing code with AI to assigning it work</a>: a different approach to the productivity problem.</strong></em></p>



<p class="wp-block-paragraph">This level of integration signals a structural shift in software engineering. <strong>Teams no longer ask whether to use AI. They focus on how to use it responsibly</strong>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="476" src="https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-20.53.04-1024x476.png?x94846" alt="" class="wp-image-7984" srcset="https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-20.53.04-1024x476.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-20.53.04-300x140.png 300w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-20.53.04-768x357.png 768w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-20.53.04.png 1376w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading"><span id="do-developers-trust-ai">Do developers trust AI?</span></h2>



<ul class="wp-block-list">
<li>58% use it in business-critical services</li>



<li>88% use AI for prototypes and proof-of-concept work</li>



<li>83% use it for internal production systems</li>



<li>73% integrate it into customer-facing applications</li>
</ul>



<p class="wp-block-paragraph">Developers consistently report that AI makes them faster. Most say AI helps them solve problems more efficiently and reduces time spent on repetitive tasks. Many even report increased job satisfaction because they can offload boilerplate and mechanical work.</p>



<p class="wp-block-paragraph">However, speed does not equal certainty. <strong>Nearly all developers (96%) express doubts about the reliability of AI-generated code</strong>. They acknowledge that AI often produces output that looks correct at first glance but contains subtle errors or hidden flaws. This creates a trust deficit.</p>



<p class="wp-block-paragraph">Despite this skepticism, not all developers consistently verify AI output before committing it. The pressure to ship features quickly often outweighs the discipline of thorough review. As a result, teams face a new bottleneck: verification.</p>



<p class="wp-block-paragraph"><strong>Reviewing AI-generated code frequently demands more effort than reviewing human-written code</strong>. Developers must reconstruct intent, validate assumptions, and check edge cases without knowing how the model arrived at its solution. AI compresses the time spent writing code but expands the time required to evaluate it.</p>



<p class="wp-block-paragraph">In this environment, confidence &#8211; not velocity &#8211; becomes the true measure of engineering maturity.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="472" src="https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-20.59.37-1024x472.png?x94846" alt="" class="wp-image-7987" srcset="https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-20.59.37-1024x472.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-20.59.37-300x138.png 300w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-20.59.37-768x354.png 768w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-20.59.37.png 1372w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading"><span id="ai-doesn%e2%80%99t-remove-toil-it-changes-it">AI doesn’t remove toil, it changes it!</span></h2>



<p class="wp-block-paragraph">75% believe AI reduces toil. However, time allocation data reveals a more complex picture:</p>



<ul class="wp-block-list">
<li>Developers still spend roughly 23–25% of their work week on low-value or repetitive tasks</li>



<li>This percentage remains consistent regardless of AI usage frequency</li>
</ul>



<p class="wp-block-paragraph"><strong>One of the promises of AI tools involved reducing developer toil</strong>: repetitive, frustrating tasks such as writing documentation, generating tests, or navigating poorly structured codebases. Many developers believe AI reduces certain kinds of toil. They report improvements in documentation quality, test coverage, and refactoring efficiency.</p>



<p class="wp-block-paragraph">However, the overall proportion of time developers spend on low-value work has not meaningfully decreased. Instead, AI shifts the nature of toil. Developers now spend less time writing boilerplate and more time validating AI suggestions. <strong>They spend less time drafting documentation and more time correcting generated code</strong>. Traditional frustrations have not disappeared; they have transformed.</p>



<p class="wp-block-paragraph">This dynamic challenges simplistic narratives about AI productivity gains. AI does not eliminate friction. It redistributes it.</p>



<p class="wp-block-paragraph">Teams that recognize this reality can adapt workflows accordingly. Teams that assume AI automatically saves time risk underestimating the verification cost.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="564" src="https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-21.01.51-1024x564.png?x94846" alt="" class="wp-image-7989" srcset="https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-21.01.51-1024x564.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-21.01.51-300x165.png 300w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-21.01.51-768x423.png 768w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-21.01.51.png 1370w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading"><span id="technical-debt-reduction-and-acceleration-at-once">Technical debt: reduction and acceleration at once</span></h2>



<p class="wp-block-paragraph">Positive impact:</p>



<ul class="wp-block-list">
<li>93% report at least one improvement related to technical debt</li>



<li>57% see better documentation</li>



<li>53% report improved testing or debugging</li>



<li>Nearly half report easier refactoring</li>
</ul>



<p class="wp-block-paragraph">Negative impact:</p>



<ul class="wp-block-list">
<li>88% report at least one negative consequence</li>



<li>53% say AI generates code that appears correct but is unreliable</li>



<li>40% say it produces unnecessary or duplicative code</li>
</ul>



<p class="wp-block-paragraph">AI influences technical debt in both directions. On the positive side, <strong>developers use AI to modernize legacy code, generate missing tests, improve documentation, and refactor inefficient structures.</strong> These activities reduce long-standing debt and improve maintainability.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="715" src="https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-21.06.29-1024x715.png?x94846" alt="" class="wp-image-7990" srcset="https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-21.06.29-1024x715.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-21.06.29-300x209.png 300w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-21.06.29-768x536.png 768w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-21.06.29.png 1364w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">On the negative side, AI sometimes generates redundant, overly verbose, or structurally weak code. Developers frequently encounter code that appears correct but introduces subtle reliability problems. When teams integrate such code without rigorous review, they create new debt.</p>



<p class="wp-block-paragraph"><strong>AI therefore acts as both a debt reducer and a debt accelerator</strong>. Managing this tension requires deliberate governance. Teams must treat AI contributions as first-class code changes subject to the same standards as human-written code. Automated testing, static analysis, and clear architectural principles become even more critical in this environment.</p>



<p class="wp-block-paragraph">Technical debt already ranks among developers’ top frustrations. Uncontrolled AI usage can amplify that burden rather than alleviate it.</p>



<h2 class="wp-block-heading"><span id="what-is-shadow-ai">What is shadow AI?</span></h2>



<p class="wp-block-paragraph">Most used tools:</p>



<ul class="wp-block-list">
<li>GitHub Copilot (75%)</li>



<li>ChatGPT (74%)</li>



<li>Claude (48%)</li>



<li>Google Codey/Duet (37%)</li>



<li>Cursor (31%)</li>
</ul>



<p class="wp-block-paragraph"><strong>GitHub Copilot and ChatGPT dominate AI-assisted coding usage</strong>, but developers rely on a growing ecosystem of tools. Many teams use multiple AI platforms simultaneously, selecting each for specific strengths. This fragmentation creates flexibility but introduces complexity.</p>



<p class="wp-block-paragraph">A critical risk signal:</p>



<ul class="wp-block-list">
<li>35% of developers use AI tools through personal accounts</li>



<li>52% of ChatGPT users access it outside company-managed environments</li>



<li>57% worry about exposing sensitive data</li>
</ul>



<p class="wp-block-paragraph">Developers often access AI tools through personal accounts rather than company-approved environments. This behavior reflects demand for productivity but introduces governance risks. When developers paste proprietary code into unmanaged AI systems, organizations lose visibility and control.</p>



<p class="wp-block-paragraph">Security concerns rank among the most significant worries associated with AI adoption. <strong>Developers themselves recognize the risk of exposing sensitive data</strong>.</p>



<p class="wp-block-paragraph">Organizations must respond pragmatically. Banning AI rarely works. Developers adopt tools that help them work faster. Instead, companies should provide secure, sanctioned AI environments and define clear usage guidelines. Enablement, not prohibition, produces safer outcomes.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="459" src="https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-21.14.42-1024x459.png?x94846" alt="" class="wp-image-7991" srcset="https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-21.14.42-1024x459.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-21.14.42-300x134.png 300w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-21.14.42-768x344.png 768w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-11-at-21.14.42.png 1366w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading"><span id="the-experience-divide">The experience divide</span></h2>



<p class="wp-block-paragraph"><strong>Less experienced developers</strong>:</p>



<ul class="wp-block-list">
<li>Use AI for understanding codebases</li>



<li>Rely more heavily on AI for implementation</li>



<li>Estimate a higher percentage of AI-assisted code</li>
</ul>



<p class="wp-block-paragraph"><strong>Senior developers</strong>:</p>



<ul class="wp-block-list">
<li>Use AI more selectively</li>



<li>Focus on review, optimization, and refactoring</li>



<li>Express higher skepticism</li>
</ul>



<p class="wp-block-paragraph">AI does not affect all developers equally. Less-experienced developers tend to adopt new AI tools more aggressively. They use AI to understand unfamiliar codebases, generate implementations, and explore new frameworks. For them, AI functions as both assistant and tutor.</p>



<p class="wp-block-paragraph"><strong>More experienced developers integrate AI differently</strong>. They rely on it to review code, optimize performance, and assist with maintenance tasks. Their experience enables them to identify flaws more quickly and apply AI selectively.</p>



<p class="wp-block-paragraph">Junior developers often trust AI more readily. Senior developers approach it more cautiously. This difference does not reflect competence; it reflects perspective.</p>



<p class="wp-block-paragraph">High-performing teams combine both approaches. Junior engineers introduce experimentation and speed. Senior engineers provide oversight and architectural discipline. Together, they mitigate risk while capturing gains.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="496" src="https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-12-at-10.51.24-1024x496.png?x94846" alt="" class="wp-image-7998" srcset="https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-12-at-10.51.24-1024x496.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-12-at-10.51.24-300x145.png 300w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-12-at-10.51.24-768x372.png 768w, https://shiftmag.dev/wp-content/uploads/2026/02/Screenshot-2026-02-12-at-10.51.24.png 1368w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading"><span id="what-this-means-for-engineering-teams">What this means for engineering teams?</span></h2>



<p class="wp-block-paragraph"><a href="https://www.sonarsource.com/state-of-code-developer-survey-report.pdf" target="_blank" rel="noreferrer noopener">The State of Code 2025</a> reveals a profession in transition. AI increases output but raises the bar for validation. It reduces certain manual burdens while introducing new forms of cognitive load. It offers opportunities to address legacy debt while risking new complexity.</p>



<p class="wp-block-paragraph"><strong>The central lesson does not concern speed. It concerns confidence</strong>. Developers must treat AI as a powerful collaborator that requires supervision. Engineering leaders must invest in testing infrastructure, review practices, and secure tooling environments. Organizations must acknowledge that productivity improvements depend on disciplined integration, not blind adoption.</p>



<p class="wp-block-paragraph">Developers no longer compete on how quickly they can type code. They compete on how effectively they can evaluate, refine, and ship trustworthy systems.</p>



<p class="wp-block-paragraph">The tools have changed. The responsibility has not. Teams that focus on clarity, code quality, and secure AI integration will thrive in this new environment. <strong>Teams that chase velocity without verification will accumulate invisible risk</strong>.</p>



<p class="wp-block-paragraph"></p>


<figure class="wp-block-post-featured-image"><img loading="lazy" decoding="async" width="1200" height="630" src="https://shiftmag.dev/wp-content/uploads/2026/02/SM.Naslovna.png?x94846" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/02/SM.Naslovna.png 1200w, https://shiftmag.dev/wp-content/uploads/2026/02/SM.Naslovna-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2026/02/SM.Naslovna-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/02/SM.Naslovna-768x403.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure><p>The post <a href="https://shiftmag.dev/state-of-code-2025-7978/">42% of Code Is Now AI-Assisted!</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Developers, your EGO is the real bug in the system</title>
		<link>https://shiftmag.dev/developers-your-ego-is-the-real-bug-in-the-system-7657/</link>
		
		<dc:creator><![CDATA[Ivan Kranjec]]></dc:creator>
		<pubDate>Wed, 21 Jan 2026 11:23:44 +0000</pubDate>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Developer Experience]]></category>
		<category><![CDATA[Developer Productivity]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=7657</guid>

					<description><![CDATA[<p>Software teams don’t implode because of bad code - they implode because someone really needed to win the argument about it.</p>
<p>The post <a href="https://shiftmag.dev/developers-your-ego-is-the-real-bug-in-the-system-7657/">Developers, your EGO is the real bug in the system</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/2026/01/ivan-kranjec-2.png?x94846" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/01/ivan-kranjec-2.png 1200w, https://shiftmag.dev/wp-content/uploads/2026/01/ivan-kranjec-2-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2026/01/ivan-kranjec-2-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/01/ivan-kranjec-2-768x403.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph">Picture a team arguing over whether to keep a global Redux store or roll out a context-only solution for a new React component. Minutes later, someone pushes a change that breaks the whole test suite. </p>



<p class="wp-block-paragraph">A week later, <strong>another debate erupts</strong> about whether the REST API should be versioned or use a graph-based approach. And there&#8217;s always that one Git rebase that turns a quiet sprint into a full-blown firefight.</p>



<p class="wp-block-paragraph">The line between brilliant innovation and productivity meltdown is thinner than you think &#8211; and <strong>ego is often the culprit lurking behind every heated Slack thread</strong> and passive-aggressive code comment.</p>



<h2 class="wp-block-heading" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-WhatisEgolessDevelopment?"><span id="what-is-egoless-development">What is egoless development?</span></h2>



<p class="wp-block-paragraph">Egoless development is <strong>not about surrendering conviction or becoming passive</strong>. It&#8217;s about letting the problem drive the solution, not the other way around. Gerald Weinberg, in his seminal work&nbsp;<em><a href="https://www.goodreads.com/book/show/1660754.The_Psychology_of_Computer_Programming" target="_blank" rel="noreferrer noopener">The Psychology of Computer Programming</a></em>, wrote: &#8220;The most powerful learning occurs when someone produces a better solution than you had imagined.&#8221; If your ego can&#8217;t digest a &#8220;better&#8221; or &#8220;different&#8221; answer, you have no business leading a software team.</p>



<p class="wp-block-paragraph">In practice, egoless engineering means:</p>



<ul class="wp-block-list">
<li><strong>Staying open to new ideas</strong>&nbsp;&#8211; even if they come from a junior teammate or an external library.</li>



<li><strong>Focusing on the product&#8217;s value</strong>&nbsp;&#8211; not on proving your own architectural choices.</li>



<li><strong>Accepting feedback without defensiveness</strong>&nbsp;&#8211; because every line of code is a hypothesis, not a manifesto.</li>



<li><strong>Separating self-worth from code quality</strong>&nbsp;&#8211; your value isn&#8217;t measured by how rarely your code needs revision.</li>
</ul>



<h2 class="wp-block-heading" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-HowEgoShowsUpandUnderminesEverything"><span id="how-ego-shows-up-and-undermines-everything">How ego shows up and undermines everything</span></h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-left" data-align="left"><strong>Defensive responses to feedback</strong></td><td class="has-text-align-left" data-align="left">&#8220;That was how we did it before.&#8221;</td><td class="has-text-align-left" data-align="left">Stifles incremental improvement and discourages team members from speaking up</td></tr><tr><td class="has-text-align-left" data-align="left"><strong>Not-Invented-Here (NIH) syndrome</strong></td><td class="has-text-align-left" data-align="left">&#8220;We can&#8217;t use that library; it&#8217;s not ours.&#8221;</td><td class="has-text-align-left" data-align="left">Drives tech debt, missed bugs, and stagnation while reinventing solved problems</td></tr><tr><td class="has-text-align-left" data-align="left"><strong>Micro-management</strong></td><td class="has-text-align-left" data-align="left">&#8220;I will rewrite this myself.&#8221;</td><td class="has-text-align-left" data-align="left">Silences creativity, hurts velocity, and signals distrust</td></tr><tr><td class="has-text-align-left" data-align="left"><strong>Selective listening</strong></td><td class="has-text-align-left" data-align="left">&#8220;We only care about the UI.&#8221;</td><td class="has-text-align-left" data-align="left">Neglects backend or infrastructure needs, creating systemic weaknesses</td></tr><tr><td class="has-text-align-left" data-align="left"><strong>Knowledge hoarding</strong></td><td class="has-text-align-left" data-align="left">&#8220;I&#8217;m the only one who understands this module.&#8221;</td><td class="has-text-align-left" data-align="left">Creates single points of failure and prevents team growth</td></tr><tr><td class="has-text-align-left" data-align="left"><strong>Status-driven architecture</strong></td><td class="has-text-align-left" data-align="left">&#8220;Let&#8217;s use [trendy tech] because it looks good on my resume.&#8221;</td><td class="has-text-align-left" data-align="left">Prioritizes personal branding over product needs</td></tr></tbody></table></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-Egoerodestrust,inflatestheperceptionofindividualcontribution,andturnscollaborationintoazero-sumgame.Theconsequencesrippleoutward:misseddeadlines,higherbugcounts,knowledgesilos,andultimately,alossoft">Ego erodes trust, inflates the perception of individual contribution, and turns collaboration into a zero-sum game. The consequences ripple outward: missed deadlines, higher bug counts, knowledge silos, and ultimately, a loss of team morale that drives your best people toward the exit.</p>
</blockquote>



<h2 class="wp-block-heading" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-ThePsychologyBehindCodeOwnership"><span id="the-psychology-behind-code-ownership">The psychology behind code ownership</span></h2>



<p class="wp-block-paragraph">When we write code, our brains treat it as an extension of ourselves. Neuroscience research shows that <strong>criticism of our work activates the same neural pathways as physical threats</strong>. This is why a simple &#8220;This could be refactored&#8221; comment can feel like a personal attack.</p>



<p class="wp-block-paragraph">Understanding this psychological reality helps us build better defenses:</p>



<ul class="wp-block-list">
<li><strong>Recognize the feeling</strong>&nbsp;&#8211; When defensiveness arises, pause and acknowledge it</li>



<li><strong>Reframe criticism as collaboration</strong>&nbsp;&#8211; Someone improving your code is helping you, not attacking you</li>



<li><strong>Build emotional distance</strong>&nbsp;&#8211; Use phrases like &#8220;the code&#8221; instead of &#8220;my code&#8221;</li>



<li><strong>Practice receiving feedback</strong>&nbsp;&#8211; Like any skill, gracefully accepting criticism improves with practice</li>
</ul>



<h2 class="wp-block-heading" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-Real-LifeExamples:WhenEgoDoesDamage"><span id="real-examples-of-ego-at-work">Real examples of ego at work</span></h2>



<p class="wp-block-paragraph" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-LinusTorvaldsandtheLinuxKernelCommunity">Linus Torvalds, creator of Linux, became known for a <a href="https://www.youtube.com/watch?v=JZ017D_JOPY" target="_blank" rel="noreferrer noopener">harsh communication style</a> on the <a href="https://lkml.org/">Linux Kernel Mailing List</a>, often going beyond technical feedback.</p>



<p class="wp-block-paragraph">In 2015, during the <a href="https://lkml.iu.edu/hypermail/linux/kernel/1510.3/02866.html" target="_blank" rel="noreferrer noopener">&#8220;Brain Damage&#8221; incident</a>, he dismissed a developer’s security proposal as &#8220;mindless security theater&#8221; and called it &#8220;brain damaged.&#8221; The developer stopped contributing, and the security concern became a real exploit two years later.</p>



<p class="wp-block-paragraph">The fallout? <strong>Talented contributors left</strong>, community diversity dropped, and valid concerns were ignored based on who raised them.</p>



<p class="wp-block-paragraph">After years of this, Torvalds took a break and issued a <a href="https://lkml.org/lkml/2018/9/16/167" target="_blank" rel="noreferrer noopener">public apology in 2018</a>, acknowledging that his ego had harmed the project and committing to a Code of Conduct.</p>



<p class="wp-block-paragraph" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-LinusTorvaldsandtheLinuxKernelCommunity">Even brilliant technical leaders can cause <strong>real damage when ego outweighs empathy</strong> &#8211; but egoless engineering is a conscious choice.</p>



<h2 class="wp-block-heading" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-Real-LifeExamples:EgolessCommunicationinAction">Now let&#8217;s see egoless communication in action</h2>



<p class="wp-block-paragraph">This is my own example. It was 2:37 PM when my code hit production. By 3:00 PM, our monitoring&nbsp; tool sent alerts all over and <strong>showed 50 errors</strong>. New users couldn&#8217;t sign up. Existing users couldn&#8217;t complete their profiles.</p>



<p class="wp-block-paragraph"><strong>This is where most teams spiral.</strong> Blame gets assigned. Confidence gets crushed. Someone becomes the cautionary tale.</p>



<p class="wp-block-paragraph">Not this team.</p>



<p class="wp-block-paragraph"><strong>The team lead&#8217;s first message:</strong>&nbsp;&#8220;Okay, let&#8217;s work the problem. Ivan, walk us through what happened &#8211; no judgment, just facts. Everyone else, what do we need to stabilize right now?&#8221;</p>



<p class="wp-block-paragraph"><strong>My response:</strong>&nbsp;&#8220;I skipped the integration test because I thought it was just an isolated signup flow change. Clearly, I was wrong. I can roll back immediately, then we need to figure out why our CI didn&#8217;t catch this.&#8221;</p>



<p class="wp-block-paragraph">Ten minutes later, <strong>production was stable</strong>. The retrospective didn&#8217;t focus on my mistake &#8211; it focused on <strong>the process gap</strong>. Why weren&#8217;t integration tests enforced for all changes? How could CI catch this automatically?</p>



<p class="wp-block-paragraph">System got fixed and the whole team started advocating for comprehensive testing.</p>



<h2 class="wp-block-heading" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-FromPridetoPurpose"><span id="lead-with-purpose-not-ego">Lead with purpose, not ego</span></h2>



<p class="wp-block-paragraph">The antidote to ego-driven culture is a <strong>purpose-driven mindset</strong>. Put the team first: &#8220;Ship better products. Learn together. Celebrate collective wins.&#8221;</p>



<p class="wp-block-paragraph">Adopt core values such as:</p>



<ul class="wp-block-list">
<li><strong>Open collaboration</strong>&nbsp;&#8211; Everyone&#8217;s input matters, regardless of tenure or title.</li>



<li><strong>Continuous improvement</strong>&nbsp;&#8211; No single person owns the ship; we all keep it afloat.</li>



<li><strong>Shared ownership</strong>&nbsp;&#8211; Success is a team metric, not a résumé headline.</li>



<li><strong>Blameless culture</strong>&nbsp;&#8211; Focus on systems and processes, not individual fault.</li>



<li><strong>Intellectual humility</strong>&nbsp;&#8211; &#8220;I don&#8217;t know&#8221; is a strength, not a weakness.</li>
</ul>



<p class="wp-block-paragraph">These values create a safety net that lets people experiment, fail fast, and iterate without fear of ego-related retribution.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="538" src="https://shiftmag.dev/wp-content/uploads/2026/01/ivan-kranjec-1024x538.png?x94846" alt="" class="wp-image-7704" srcset="https://shiftmag.dev/wp-content/uploads/2026/01/ivan-kranjec-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/01/ivan-kranjec-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2026/01/ivan-kranjec-768x403.png 768w, https://shiftmag.dev/wp-content/uploads/2026/01/ivan-kranjec.png 1500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Build egoless teams by swapping blame for curiosity, coffee chats for status updates, code reviews for conversations, and hero worship for shared learning, rotating ownership, and loud celebration of <em>we</em> wins.</figcaption></figure>



<h2 class="wp-block-heading" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-StrategiesforCultivatingEgolessTeams"><span id="how-to-cultivate-egoless-teams">How to cultivate egoless teams?</span></h2>



<p class="wp-block-paragraph" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-1.MorningCoffeeFeedbackSessions"><strong>1. Morning coffee feedback sessions</strong></p>



<p class="wp-block-paragraph">Schedule a quick, informal chat with each teammate once a month.</p>



<p class="wp-block-paragraph"><strong>Purpose:</strong>&nbsp;Surface concerns early, show genuine interest, reinforce the &#8220;we&#8221; narrative.</p>



<p class="wp-block-paragraph"><strong>Pro tip:</strong>&nbsp;Keep it casual &#8211; grab actual coffee, go for a walk, or just sit outside the usual meeting room environment.</p>



<p class="wp-block-paragraph" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-2.CodeReviewasConversation"><strong>2. Code review as conversation</strong></p>



<p class="wp-block-paragraph">Treat every PR as a dialogue, not a verdict.</p>



<p class="wp-block-paragraph"><strong>Instead of:</strong>&nbsp;&#8220;Why did you do that?&#8221;<br><strong>Try:</strong>&nbsp;&#8220;I&#8217;m curious about your approach to X &#8211; what tradeoffs did you consider?&#8221;</p>



<p class="wp-block-paragraph"><strong>Key practices:</strong></p>



<ul class="wp-block-list">
<li>Assume good intent always</li>



<li>Ask questions before making statements</li>



<li>Provide context for your suggestions</li>



<li>Praise the good before noting improvements</li>
</ul>



<p class="wp-block-paragraph" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-3.Process-FocusedRetrospectives"><strong>3. Process-focused retrospectives</strong></p>



<p class="wp-block-paragraph">Avoid blame, focus on improving the workflow.</p>



<p class="wp-block-paragraph"><strong>Outcome:</strong>&nbsp;The team learns to iterate on their own practices, identifying systemic issues rather than scapegoating individuals.</p>



<p class="wp-block-paragraph"><strong>Framework to try:</strong>&nbsp;Use &#8220;What went well? What could be better? What will we try next?&#8221; instead of &#8220;Who caused the production incident?&#8221;</p>



<p class="wp-block-paragraph" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-4.CelebrateTeamWins"><strong>4. Celebrate team wins</strong></p>



<p class="wp-block-paragraph">Highlight milestones that benefited the whole product, not individual heroics.</p>



<p class="wp-block-paragraph"><strong>Effect:</strong>&nbsp;Reinforces that value comes from collaboration. Consider a &#8220;Team Win Thursday&#8221; where you spotlight collaborative achievements in your all-hands.</p>



<p class="wp-block-paragraph" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-5.RotateResponsibilities"><strong>5. Rotate responsibilities</strong></p>



<p class="wp-block-paragraph">Give everyone a chance to lead a sprint, own a component, or make architectural decisions.</p>



<p class="wp-block-paragraph"><strong>Result:</strong>&nbsp;Empowers diverse viewpoints and reduces power-centered thinking. It also prevents knowledge silos and builds empathy for different roles.</p>



<p class="wp-block-paragraph" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-7.Createa&quot;LearningDebt&quot;Board"><strong>6. Create a &#8220;learning debt&#8221; board</strong></p>



<p class="wp-block-paragraph">Just like technical debt, track what the team needs to learn.</p>



<p class="wp-block-paragraph"><strong>How it works:</strong>&nbsp;Anyone can add skills or knowledge gaps. The team prioritizes learning together through lunch-and-learns, workshops, or dedicated study time. This normalizes not knowing everything.</p>



<h2 class="wp-block-heading" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-WhyPurpose-DrivenTeamsExcel"><span id="purpose-driven-teams-really-excel">Purpose-driven teams really excel</span></h2>



<p class="wp-block-paragraph">The data backs up the philosophy:</p>



<ul class="wp-block-list">
<li><strong>Faster problem solving</strong>&nbsp;&#8211; Collective knowledge surfaces solutions faster.</li>



<li><strong>Higher-quality products</strong>&nbsp;&#8211; Diverse eyes catch more bugs; studies show pair programming can reduce bugs by 15-50%.</li>



<li><strong>Happier teams</strong>&nbsp;&#8211; People feel valued beyond ego metrics.</li>



<li><strong>Lower turnover</strong>&nbsp;&#8211; People stay when they feel part of something bigger; psychological safety is the #1 predictor of team success (Google&#8217;s Project Aristotle).</li>



<li><strong>Innovation acceleration</strong>&nbsp;&#8211; When failure isn&#8217;t punished, experimentation flourishes.</li>
</ul>



<p class="wp-block-paragraph">In our own team, we&#8217;ve seen the difference. The <strong>&#8220;Misfit Days&#8221; workshops</strong> we introduced &#8211; short, daily stand-ups where anyone can bring a friction point- have slashed bug-backlog time by 35% and doubled the rate of new feature delivery. More importantly, our employee satisfaction scores jumped 28 points in six months.</p>



<h2 class="wp-block-heading" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-WarningSignsYourTeamHasanEgoProblem"><span id="warning-signs-your-team-has-an-ego-problem">Warning signs your team has an ego problem</span></h2>



<p class="wp-block-paragraph">Watch for these red flags:</p>



<ol class="wp-block-list">
<li><strong>Pull requests sit for days</strong>&nbsp;because no one wants to critique the senior dev.</li>



<li><strong>&#8220;I told you so&#8221; moments</strong>&nbsp;are celebrated instead of collective problem-solving.</li>



<li><strong>Knowledge hoarding</strong>&nbsp;where individuals protect &#8220;their&#8221; domains.</li>



<li><strong>Defensive Slack threads</strong>&nbsp;that spiral into 47-message arguments over syntax.</li>



<li><strong>Silent meetings</strong>&nbsp;where juniors don&#8217;t speak up for fear of looking stupid.</li>



<li><strong>Resume-driven development</strong>&nbsp;where tech choices prioritize personal branding.</li>



<li><strong>Hero culture</strong>&nbsp;where all-nighters and firefighting are glorified over prevention.</li>
</ol>



<p class="wp-block-paragraph">If you recognize three or more of these in your team, <strong>it&#8217;s time to intervene</strong>.</p>



<h2 class="wp-block-heading" id="DRAFT:PuttingPurposeOverPride:EgolessDevelopmentforTeams-Conclusion"><span id="what-should-i-do">What should I do?</span></h2>



<p class="wp-block-paragraph">Ego is a silent saboteur that thrives in the quiet corners of code reviews and pull-request comments. It whispers that your solution is the only solution, that criticism is an attack, that admitting uncertainty is weakness. But the best engineering teams know differently.</p>



<p class="wp-block-paragraph">By embracing egoless engineering &#8211; focusing on shared purpose, valuing every voice, and making collaboration the default &#8211; we <strong>turn potential productivity meltdowns into engines of innovation</strong>. The code improves, the products ship faster, and most importantly, people actually enjoy coming to work.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Remember: The best code you&#8217;ll ever write is the code you wrote with others. The best solution you&#8217;ll ever implement is the one that made someone else&#8217;s idea better. And the best career move you&#8217;ll ever make is building a reputation as someone who makes everyone around them better.</p>
</blockquote>



<p class="wp-block-paragraph">Starting tomorrow:</p>



<ul class="wp-block-list">
<li><strong>Implement a monthly open-feedback routine</strong>&nbsp;&#8211; Put it on the calendar now.</li>



<li><strong>Audit your code review comments</strong>&nbsp;&#8211; Are you asking questions or issuing verdicts?</li>



<li><strong>Celebrate a team win</strong>&nbsp;&#8211; Find one this week and make noise about it.</li>



<li><strong>Try one new strategy</strong>&nbsp;&#8211; Pick from the list above and experiment for a sprint.</li>
</ul>



<p class="wp-block-paragraph">Every idea is respected. Constructive feedback is not just welcome; it&#8217;s required. Success is measured by shared achievements, not individual credit.</p>



<p class="wp-block-paragraph"><a href="https://confluence.infobip.com/spaces/~ikranjec/pages/803508256/DRAFT+Putting+Purpose+Over+Pride+Egoless+Development+for+Teams"></a></p>
<p>The post <a href="https://shiftmag.dev/developers-your-ego-is-the-real-bug-in-the-system-7657/">Developers, your EGO is the real bug in the system</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How I Built a Full-Stack App in 6 Days with the Help of AI</title>
		<link>https://shiftmag.dev/how-i-built-a-full-stack-app-in-6-days-with-the-help-of-ai-7564/</link>
		
		<dc:creator><![CDATA[Nemanja Petrovic]]></dc:creator>
		<pubDate>Fri, 16 Jan 2026 11:47:46 +0000</pubDate>
				<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Developer Experience]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[full stack]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=7564</guid>

					<description><![CDATA[<p>Building an app with AI feels easy - until real users arrive. </p>
<p>The post <a href="https://shiftmag.dev/how-i-built-a-full-stack-app-in-6-days-with-the-help-of-ai-7564/">How I Built a Full-Stack App in 6 Days with the Help of AI</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I shipped an MVP in 6 days using Claude Code, but &#8220;clean&#8221; AI code hid major performance pitfalls. From N+1 queries to broken responsive design, this is why a decade of engineering experience remains the ultimate superpower when building with AI.</p>



<p class="wp-block-paragraph">By the end of 2025, I had read a lot about people building entire apps with AI, going from an idea to a product in just weeks or even days. That made me ask myself: how are they doing this?</p>



<p class="wp-block-paragraph">I have <strong>more than ten years of experience in enterprise backend development</strong>. Seeing these fast, AI-built apps sparked my curiosity. I use AI in my day-to-day work, but only for small tasks, nothing close to building a full product.</p>



<p class="wp-block-paragraph">So I thought, why not try it myself and see if it’s really possible?</p>



<p class="wp-block-paragraph">I started thinking about what I actually wanted to build, and it quickly became clear that it had to be something I’d use myself. I’m a runner and I work in enterprise, so the idea came pretty naturally: a running app, but with a twist &#8211; <strong>tracking fitness while mapping it onto a corporate-style career journey</strong>.</p>



<p class="wp-block-paragraph">That’s how RunCorp came to life.</p>



<h2 class="wp-block-heading"><span id="ai-as-a-fast-mvp-builder-and-ui-scaffold">AI as a fast MVP builder and UI scaffold</span></h2>



<p class="wp-block-paragraph">My main stack is Java and Python, but I deliberately avoided what I know best. I wanted something familiar, yet still a bit uncomfortable. For the backend, I chose<strong> Laravel</strong>, since I’ve done some freelance work with it. For mobile, I picked <strong>Flutter</strong>, even though I had never built a mobile app before.</p>



<p class="wp-block-paragraph">I bought a <strong>Claude Code subscription</strong> and started building. I quickly learned that you can’t just tell it to do something and expect a good result. That realization led me to throw away the very first thing it generated.</p>



<p class="wp-block-paragraph">What really works is<strong> using plan mode</strong>. You let the AI analyze the problem, ask you questions, and create a plan. Only after you feel happy with the plan do you let it generate code. It feels more like collaborating with a teammate than typing commands at a tool.</p>



<p class="wp-block-paragraph">The downside is that this approach<strong> burns through tokens</strong>. If you don’t want to pay for extra usage, you have to wait a few hours for the limit to reset. Even so, I managed to build a basic MVP in six days.</p>



<p class="wp-block-paragraph">I started with just the <strong>UI and mocked data</strong>. By the end of the first day, I had an app with all the MVP screens in place. You could actually &#8220;use&#8221; the app &#8211; move from screen to screen and see something -even though real functionality didn’t exist yet. Everything ran on mocked data. For this kind of work, AI proved very effective at generating basic Flutter layouts like this:</p>



<pre class="wp-block-code"><code><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">class HomeScreen</mark><mark style="background-color:rgba(0, 0, 0, 0);color:#1515ed" class="has-inline-color"> </mark>extends <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">StatelessWidget</mark></strong> { 
@override
<strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">Widget</mark></strong> build(<strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">BuildContext context</mark></strong>) {
return <mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color"><strong>Scaffold</strong></mark>(
 appBar: <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">AppBar</mark></strong>(title: <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">Text</mark></strong>(<strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">'RunCorp</mark></strong>')),
  body: <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">ListView</mark></strong>(
   padding: <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">EdgeInsets</mark></strong>.all(16), 
    children: &#91;
   <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">  Text</mark></strong>(
      '<strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">Welcome</mark></strong> back',
     style: <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">Theme.</mark></strong>of(context).textTheme.headlineSmall,
    ),
   <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color"> SizedBox</mark></strong>(height: 16),
    <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">Card</mark></strong>(
     child: <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">ListTile</mark></strong>(
      title: <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">Text</mark></strong>('<strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">Current Level</mark></strong>'), 
      subtitle: <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">Text</mark></strong>(<strong>'<mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">Senior Runner</mark>'</strong>),
      ),
     ),
    ],
   ),
  );
 }
}
</code></pre>



<p class="wp-block-paragraph">Nothing complex, but very fast.<strong> This is where AI clearly shines</strong>: it scaffolds the UI, wires screens together, and handles repetitive setup.</p>



<h2 class="wp-block-heading"><span id="outdated-libraries-and-testing-challenges">Outdated libraries and testing challenges</span></h2>



<p class="wp-block-paragraph">After that, I worked screen by screen, <strong>building front-end and back-end functionality together</strong>. I followed the same workflow every time: create a plan, answer AI questions, refine the plan, answer again, and generate code only after I felt satisfied with the plan.</p>



<p class="wp-block-paragraph">Here’s the first big problem for someone without much experience: when you use plan mode, <strong>the AI asks questions you might not know how to answer</strong>. It asks things like: do you want to use OAuth? How do you want to encrypt passwords? Do you want a separate table for user profiles, or do you want everything in one table? You have to make these decisions early. Otherwise, the AI generates something that either doesn’t work or becomes hard to change later.</p>



<p class="wp-block-paragraph">One concrete backend issue came up during the <strong>Strava integration</strong>. When I asked the AI for help with Strava authentication, it suggested an existing Laravel package.</p>



<p class="wp-block-paragraph">At first glance, the suggestion looked reasonable. But after I checked it more closely, I realized the <strong>package hadn’t received updates for several years</strong> and didn’t support the current Laravel version. It relied on outdated dependencies and failed in a modern Laravel setup.</p>



<p class="wp-block-paragraph">This example shows where AI falls short. It suggests known libraries, but it doesn’t judge whether teams still maintain them or whether they fit today’s ecosystem.</p>



<p class="wp-block-paragraph">Instead of forcing the package into the project,<strong> I implemented the Strava OAuth flow directly using Laravel’s HTTP client</strong>. The core token exchange looked like this:</p>



<pre class="wp-block-code"><code>$response = Http::asForm()-&gt;post(<mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color"><strong>'https://www.strava.com/oauth/token'</strong></mark>, &#91;.                                <mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color">  </mark>
    <mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color"><strong>'client_id'</strong></mark>	=&gt; config(<mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color"><strong>'services.strava.client_id'</strong></mark>), 
    <mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color"><strong>'client_secret'</strong></mark> =&gt; config(<mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color"><strong>'services.strava.client_secret'</strong></mark>),
    <mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color"><strong>'code'</strong></mark>	=&gt; $request-&gt;get(<mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color"><strong>'code'</strong></mark>),
    <mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color"><strong>'grant_type'</strong></mark>	=&gt; <mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color"><strong>'authorization_code'</strong></mark>,
]);

$data = $response-&gt;json();
</code></pre>



<p class="wp-block-paragraph"><strong>A similar issue appeared on the frontend</strong>. The AI generated Flutter UI that looked great on a large simulator. Once I tested it on smaller phones, problems started to show up. Text became barely readable, layouts overflowed, and some screens turned difficult to use. A typical example looked like this:</p>



<pre class="wp-block-code"><code><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color"><strong>Text</strong></mark>(
<strong><mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color">'Weekly Distance'</mark></strong>,
<mark style="background-color:rgba(0, 0, 0, 0);color:#002afe" class="has-inline-color"><strong>style</strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color"><strong>:</strong> </mark>TextStyle(<strong><mark style="background-color:rgba(0, 0, 0, 0);color:#002afe" class="has-inline-color">fontSize</mark></strong>: <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#002afe" class="has-inline-color">24</mark></strong>),
);
</code></pre>



<p class="wp-block-paragraph"><strong>Hardcoded font sizes worked fine on larger screens but failed badly on smaller ones</strong>. Fixing this required a shift toward responsive design. I improved the layout by switching to theme-based typography:</p>



<pre class="wp-block-code"><code>Text(
'Weekly Distance',
style: Theme.of(<mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color"><strong>context</strong></mark>).textTheme.titleMedium,
);
 
LayoutBuilder(
<strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color"> builder</mark></strong>: (context, constraints) { 
  return Text(
   'Weekly Distance', 
  style: TextStyle(
   <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#0e087a" class="has-inline-color">fontSize</mark></strong>: constraints.maxWidth &lt; 360 ? 16 : 20,
   ),
  );
 },
);</code></pre>



<p class="wp-block-paragraph">The UI technically worked before &#8211; it just didn’t work well everywhere. <strong>Issues like this only show up when you test on real devices</strong>.</p>



<h2 class="wp-block-heading"><span id="when-ai-generated-code-meets-real-users">When AI-generated code meets real users</span></h2>



<p class="wp-block-paragraph">After six days, I had an app with enough functionality to be tested by someone. I asked people from my running club if they wanted to try it, and they said yes. I sent them a beta build, and 25 of them started using it. <strong>That’s when the real problems began to appear</strong>.</p>



<p class="wp-block-paragraph">After just two days, people reported that the home screen took a long time to load and that the stats screen kept crashing. That was the moment I realized this was the end of just talking with AI. I had to do what I’ve been doing for years: <strong>actually debug and review all the code</strong>.</p>



<p class="wp-block-paragraph">The AI-generated backend code looked clean. It passed basic tests and worked perfectly with small datasets, so I shipped it. <strong>But once real users arrived, reality hit hard</strong>. Requests were timing out, the stats and home pages barely loaded on mobile, database CPU spiked, and every request ran over 20 queries. Classic red flags.</p>



<p class="wp-block-paragraph">These were problems that wouldn’t have made it to production if I had written the code myself from the start. <strong>Experience teaches you where bottlenecks usually hide</strong>. AI didn’t optimize anything; it just made things work.</p>



<p class="wp-block-paragraph">Here’s what the <strong>AI-generated backend code got wrong</strong> all at once:</p>



<ul class="wp-block-list">
<li>No eager loading, causing N+1 queries</li>



<li>Queries running inside loops</li>



<li>Loading entire models into memory just to calculate aggregates</li>



<li>No caching at all</li>



<li>Missing database indexes</li>



<li>Recalculating values that were already stored</li>



<li>Doing heavy computation in PHP instead of letting the database handle it</li>
</ul>



<p class="wp-block-paragraph"><strong>None of these were bugs &#8211; they were experience problems</strong>.</p>



<p class="wp-block-paragraph">At that point, I had to step in and do what I’ve been doing for years: rewrite the entire statistics pipeline. Some of the key fixes were:</p>



<h3 class="wp-block-heading"><span id="eager-loading-instead-of-n1">Eager Loading Instead of N+1</span></h3>



<pre class="wp-block-code"><code><mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color">$user = $request-&gt;user()-&gt;load('profile');</mark></code></pre>



<h3 class="wp-block-heading"><span id="aggressive-response-caching">Aggressive Response Caching</span></h3>



<pre class="wp-block-code"><code><mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color">return Cache::remember("user_stats:{$user-&gt;id}", now()-&gt;endOfDay(), </mark>
<mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color">function () {
    // heavy calculations

});</mark></code></pre>



<h3 class="wp-block-heading"><span id="query-consolidation-7-queries-%e2%86%92-1">Query Consolidation (7 Queries → 1)</span></h3>



<pre class="wp-block-code"><code><mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color">$stats = DB::table('activities')

    -&gt;where('user_id', $userId)

    -&gt;selectRaw("

         SUM(distance_meters) as total_distance, </mark>
         <mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color">COUNT(DISTINCT DATE(start_at)) as active_days,
 
         SUM(CASE WHEN start_at &gt;= ? THEN distance_meters ELSE 0 END) as weekly_distance
", &#91;$weekStart])

-&gt;first();</mark></code></pre>



<h3 class="wp-block-heading"><span id="group-by-instead-of-query-loops">GROUP BY Instead of Query Loops</span></h3>



<pre class="wp-block-code"><code><mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color">-&gt;groupBy('week_num')</mark></code></pre>



<h3 class="wp-block-heading"><span id="using-stored-values-instead-of-recomputing">Using Stored Values Instead of Recomputing</span></h3>



<pre class="wp-block-code"><code><mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color">$longestStreak = $user-&gt;profile-&gt;highest_streak ?? 0;</mark></code></pre>



<h3 class="wp-block-heading"><span id="strategic-indexes">Strategic Indexes</span></h3>



<pre class="wp-block-code"><code><mark style="background-color:rgba(0, 0, 0, 0);color:#00a266" class="has-inline-color">$table-&gt;index(&#91;'user_id', 'start_at', 'distance_meters']);</mark></code></pre>



<h2 class="wp-block-heading"><span id="the-results-were-immediate">The results were immediate</span></h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Metric</strong><strong></strong></td><td><strong>Before</strong><strong></strong></td><td><strong>After</strong><strong></strong></td></tr><tr><td>Queries per request</td><td>20+</td><td>7–9</td></tr><tr><td>Response time</td><td>&gt;30s (timeout)</td><td>300–500ms</td></tr><tr><td>Cached response</td><td>N/A</td><td>10–50ms</td></tr><tr><td>Memory usage</td><td>200MB+</td><td>40–60MB</td></tr><tr><td>Timeouts</td><td>Constant</td><td>Zero</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">After these changes,<strong> the app finally felt usable in real conditions</strong>. The home screen loaded instantly, the stats screen didn’t crash, and the database handled multiple users at the same time. Experience made the difference.</p>



<p class="wp-block-paragraph">I shipped a working app quickly, but I still had to do a lot of work myself. Coding the basics &#8211; the tasks any junior developer can handle &#8211; is easy, and that’s exactly where AI excels. It can speed up development, but you need to know when to step in, what to change, what to ask, and how to plan everything properly.</p>



<p class="wp-block-paragraph"><strong>Coding isn’t even the hardest part, at least for mobile apps</strong>. You can build the app fast, but you must deploy the backend, set up servers, configure domains, and prepare everything for the app stores.</p>



<p class="wp-block-paragraph">Then comes the part no one talks about: Google Play beta testing, Apple App Store review, waiting for developer accounts and licenses to get approved, fixing small issues reviewers reject, and updating screenshots, descriptions, and privacy policies. None of this is hard, but<strong> all of it takes time</strong>.</p>



<p class="wp-block-paragraph">From the moment I started building to the moment the app went public, <strong>the process took just over a month, still very fast.</strong></p>



<p class="wp-block-paragraph">I realized that today <strong>AI becomes incredibly powerful in the hands of someone who knows what they’re doing</strong>. For experienced engineers, it can provide a huge speed boost, almost like a superpower. AI acts like a team of juniors handling repetitive work while you focus on high-level decisions.</p>



<p class="wp-block-paragraph">Someone with solid experience can now build projects that used to require a small team. Can a non-technical person build an app with AI? Yes, to some extent. They can create something that looks decent and runs, but most of the time it will start falling apart quickly.</p>



<p class="wp-block-paragraph">The main takeaway: <strong>the basics still matter</strong>. Understanding how things work under the hood makes all the difference. AI doesn’t replace experience, but it amplifies it, and that’s where it delivers real value.</p>


<figure class="wp-block-post-featured-image"><img loading="lazy" decoding="async" width="1200" height="630" src="https://shiftmag.dev/wp-content/uploads/2026/01/nemanja.png?x94846" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/01/nemanja.png 1200w, https://shiftmag.dev/wp-content/uploads/2026/01/nemanja-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2026/01/nemanja-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/01/nemanja-768x403.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure><p>The post <a href="https://shiftmag.dev/how-i-built-a-full-stack-app-in-6-days-with-the-help-of-ai-7564/">How I Built a Full-Stack App in 6 Days with the Help of AI</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tame Python Chaos With uv &#8211; The Superpower Every AI Engineer Needs</title>
		<link>https://shiftmag.dev/tame-python-chaos-with-uv-the-superpower-every-ai-engineer-needs-6051/</link>
		
		<dc:creator><![CDATA[Edvin Teskeredžić]]></dc:creator>
		<pubDate>Wed, 22 Oct 2025 13:38:44 +0000</pubDate>
				<category><![CDATA[Developer Experience]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Developer Productivity]]></category>
		<category><![CDATA[Engineer Explains]]></category>
		<category><![CDATA[pip]]></category>
		<category><![CDATA[poetry]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[uv]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=6051</guid>

					<description><![CDATA[<p>Managing Python dependencies has always been a pain point - from slow installs to version mismatches across projects. uv aims to fix that.</p>
<p>The post <a href="https://shiftmag.dev/tame-python-chaos-with-uv-the-superpower-every-ai-engineer-needs-6051/">Tame Python Chaos With uv &#8211; The Superpower Every AI Engineer Needs</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">If you’re like me, you love writing code &#8211; it’s fun and solves real problems. But too often, <strong>we end up wrestling with tooling before we can even start</strong>, especially in Python with its dreadful dependency management.</p>



<p class="wp-block-paragraph">Using <code>pip</code> is like assembling IKEA furniture without instructions. Add a single package, and suddenly you’re battling dependency conflicts, version chaos, and cryptic errors &#8211; decoding them feels like reading an ancient language.</p>



<p class="wp-block-paragraph">I can’t even run a simple script without either polluting my global environment or creating a virtual environment for a one-off script I’ll never run again.</p>



<p class="wp-block-paragraph">It&#8217;s ridiculous how something that should simplify our lives makes it more complicated, especially compared to other ecosystems. Having previously worked with Ruby and its beautiful <a href="https://guides.rubygems.org/" target="_blank" rel="noreferrer noopener">and mature gem system</a>, I felt like <strong>switching to Python downgraded my experience</strong>.</p>



<h3 class="wp-block-heading"><span id="simplifying-python-projects-with-uv">Simplifying Python projects with <code>uv</code></span></h3>



<p class="wp-block-paragraph">As engineers, we desire simple, robust, and predictable solutions. Yet here I was, praying that my environment wouldn&#8217;t implode every time I made a tiny change or &#8211; God forbid &#8211; updated a package version.</p>



<p class="wp-block-paragraph">After some search (and reading <a href="https://www.oreilly.com/library/view/hypermodern-python-tooling/9781098139575/" target="_blank" rel="noreferrer noopener">the excellent book Hypermodern Python Tooling</a>), I&#8217;ve found an alternative that solved most of my issues in one swoop:<code> uv</code> &#8211; a <strong>fast, modern, and reliable Python dependency management tool</strong>.</p>



<p class="wp-block-paragraph">It streamlined the internal process of developing Python services within our team and made us more productive. Our builds are faster, and it eliminated all the complexity we had from using many different tools.</p>



<p class="wp-block-paragraph">In this article, I&#8217;ll convince you to leave your comfort zone and switch to using <code>uv</code> as your go-to tool for everything and anything Python.</p>



<h2 class="wp-block-heading"><span id="the-hellscape-that-is-python-tooling">The hellscape that is Python tooling</span></h2>



<p class="wp-block-paragraph">In terms of tooling, entering the Python ecosystem while previously working with Ruby (and privately with Go) <strong>felt like I replaced a reliable Toyota with a carriage drawn</strong> <strong>by a malnourished horse</strong>.</p>



<p class="wp-block-paragraph">Virtual environments, <code>pip</code>, and dependency management wasted many engineering hours that we could have spent writing code (and producing actual value!).</p>



<p class="wp-block-paragraph">Spinning up a new microservice tested your patience, as the tooling tried to ruin your day with a broken package, an unreadable error message, or sluggish build times because the cache didn&#8217;t update somewhere.</p>



<h2 class="wp-block-heading">Let&#8217;s talk about real-world examples</h2>



<p class="wp-block-paragraph">Dependency management with <code>pip</code><strong> behaves unpredictably</strong>. It can&#8217;t build anything beyond the simplest dependency graph. When you work on legacy code (and you absolutely will), updating it often breaks your functionalities. You can only debug by endlessly examining the output of <code>pip freeze</code> until that command engraves itself in your brain like an ancient chant.</p>



<p class="wp-block-paragraph">The core problems come from the fact that<code> </code><strong><code>pip</code> doesn&#8217;t guarantee that two runs of installing dependencies will also install the same sub-dependencies</strong>. If you want to know more, there&#8217;s a great <a href="https://vodkat.dev/python-dependency-fustrations/" target="_blank" rel="noreferrer noopener">article</a> about this.<br><br><strong>Virtual environments devour disk space</strong>. The concept sounds great: if project A uses one version of dependency X, and project B uses another, you isolate them in virtual environments so every project keeps its source of truth. But in practice, you quickly drain your memory when running many Python services, each with its own project.</p>



<p class="wp-block-paragraph">The problem worsens with <strong>AI-based projects</strong>: in the AI space, we often use <a href="https://pytorch.org/" target="_blank" rel="noreferrer noopener">PyTorch</a> and that single dependency consumes at least 936MB for the CPU version and 1.8GB for the GPU version (numbers taken from the PyTorch forums, <a href="https://discuss.pytorch.org/t/pytorch-2-0-distribution-that-uses-cuda-only-if-available/177230?utm_source=chatgpt.com" target="_blank" rel="noreferrer noopener">here</a> and <a href="https://discuss.pytorch.org/t/large-cpu-file-size/112709?utm_source=chatgpt.com" target="_blank" rel="noreferrer noopener">here</a>). <br><br>Imagine running multiple AI projects &#8211; if we keep this up, our disk space disappears.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="614" src="https://shiftmag.dev/wp-content/uploads/2025/09/edvin1-1024x614.png?x94846" alt="" class="wp-image-6052" srcset="https://shiftmag.dev/wp-content/uploads/2025/09/edvin1-1024x614.png 1024w, https://shiftmag.dev/wp-content/uploads/2025/09/edvin1-300x180.png 300w, https://shiftmag.dev/wp-content/uploads/2025/09/edvin1-768x461.png 768w, https://shiftmag.dev/wp-content/uploads/2025/09/edvin1.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">These are just a few examples of Python’s frustrating tooling. Stick with me &#8211; we’re about to fix them all with one tool: <strong>uv</strong>.</figcaption></figure>



<h2 class="wp-block-heading"><span id="say-hi-to-uv">Say Hi to uv!</span></h2>



<p class="wp-block-paragraph">Now that we&#8217;ve established how badly Python needs better tooling, let&#8217;s look at <code>uv</code>. <br><br>What exactly is <code>uv</code>? <a href="https://docs.astral.sh/uv/" target="_blank" rel="noreferrer noopener">According to their website</a>, <code>uv </code>is a <strong>high-speed Python package and project manager written in Rust</strong>. Integrating <code>uv</code> into your workflow eliminates most of the tools you currently rely on &#8211; it directly replaces <code>pip</code>,<code> pip - tools</code>, <code>poetry</code>, and many more.</p>



<p class="wp-block-paragraph">The core design philosophy focuses on<strong> giving you one Python development tool while also delivering extreme speed</strong> (we&#8217;ll test this later). </p>



<p class="wp-block-paragraph">&#8220;Alright,&#8221; you might ask, &#8220;what can this magical tool do?&#8221; Great question! Let’s look at some of <strong>uv</strong>’s most compelling features.</p>



<h2 class="wp-block-heading"><span id="project-dependency-management">Project dependency management</span></h2>



<p class="wp-block-paragraph">Managing your Python project with <code>uv</code> is extremely simple because <strong><code>uv</code> provides first-class project support</strong> built around declarative manifests and universal lockfiles (similar to those in the JS ecosystem and Poetry).</p>



<p class="wp-block-paragraph">This setup <strong>ensures reproducible installs and fast syncs.</strong> You initialize projects with<code> uv init</code>, add and declare dependencies (e.g., <code>numpy</code> and <code>lang chain</code>), and generate fully pinned lockfiles with <code>uv lock</code>.</p>



<p class="wp-block-paragraph">After that, subsequent environment creations or updates (&#8220;syncs&#8221;) use that lockfile to reproduce identical sub-dependency graphs every time. In practice, this stops the endless back-and-forth of &#8220;works on my machine&#8221; messages via Slack.</p>



<p class="wp-block-paragraph">Unlike plain <code>pip install</code>, which can produce different sub-dependency graphs on repeated runs (creating inconsistent project environments), <code>uv lock</code> locks everything down &#8211; <strong>you won&#8217;t encounter surprises halfway through a deployment pipeline</strong>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="614" src="https://shiftmag.dev/wp-content/uploads/2025/09/Edvin2-1024x614.png?x94846" alt="" class="wp-image-6054" srcset="https://shiftmag.dev/wp-content/uploads/2025/09/Edvin2-1024x614.png 1024w, https://shiftmag.dev/wp-content/uploads/2025/09/Edvin2-300x180.png 300w, https://shiftmag.dev/wp-content/uploads/2025/09/Edvin2-768x461.png 768w, https://shiftmag.dev/wp-content/uploads/2025/09/Edvin2.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading"><span id="running-standalone-scripts">Running standalone scripts</span></h2>



<p class="wp-block-paragraph">Whipping up a quick Python script to try something out is amazing &#8211; until you need packages without standard Python. Then the experience quickly turns into <code>venv</code> juggling and ad-hoc<code> pip</code> installs.</p>



<p class="wp-block-paragraph">With <code>uv,</code> we can run <strong>standalone scripts without creating new environments</strong>: just run <code>uv</code> <code>run --with</code> <code>[your packages] script.py</code> to auto-install any dependencies to the cache and run your script. These commands install packages on the fly, and you can later lock them with <code>uv lock </code>if needed.</p>



<p class="wp-block-paragraph">You can even embed metadata into your scripts to declare dependencies and required Python versions, like so:</p>



<pre class="wp-block-code"><code># /// script
# requires-python = "&gt;=3.13"
# dependencies = &#91;
#     "langchain",
#     "typer==0.12.3",
# ]
# ///

import os
import langchain
# ... rest of your script ...</code></pre>



<p class="wp-block-paragraph">You can save this script and run it efficiently with <code>uv run script.py.</code> Thanks to uv&#8217;s speedy resolver and global cache, <strong>the script runs repeatably and in milliseconds</strong>. You can finally spend less time fighting your environment and more time doing what you actually want: writing code.</p>



<h2 class="wp-block-heading"><span id="disk-space-efficiency">Disk-Space Efficiency</span></h2>



<p class="wp-block-paragraph"><code>Uv </code>maintains a <strong>global cache of all downloaded packages</strong>. Once you fetch any version of a package (even a sub-dependency!), you never need to re-download or duplicate it across projects. By comparison, pip re-downloads wheels into each virtual environment, and Poetry duplicates caches in projects &#8211; these approaches waste massive amounts of disk space, which matters especially for AI-based projects and workflows.<br><br>To get a bit technical,<strong> <code>uv</code> keeps a single copy of each exact release in a global cache directory</strong>. Any project that needs the same version can access it via a symlink, rather than copying the entire package into the project. Beyond this cache, <code>uv </code>writes project-specific artifacts (e.g., compiled wheels) into a per-project store. Since both stores use content hashes to identify files, uv instantly detects duplicates.</p>



<p class="wp-block-paragraph">This means that if two projects depend on<strong><code> langchain-0.3.24</code>,</strong> <code>uv</code> stores that version only once.<br>The real-world impact is visible in multi-project AI workflows. As AI engineers, we often maintain and juggle multiple PyTorch-based services.</p>



<p class="wp-block-paragraph">We drastically reduce total disk usage<strong> by sharing the PyTorch wheel (approximately 1.8 GB) </strong>across various projects. As the memory footprint from dependencies shrinks, scaling up microservice-based architectures becomes more manageable.</p>



<p class="wp-block-paragraph"> This improvement is crucial for CI pipelines and developer workstations, which can run multiple microservices simultaneously.</p>



<h2 class="wp-block-heading"><span id="speed">Speed!</span></h2>



<p class="wp-block-paragraph">One of the main drawbacks of working in the AI space is the sheer size of all the packages and tools that a modern AI service uses. Installing all those dependencies takes time, <strong>slows down our CI/CD pipeline</strong>, and hampers our developer experience. </p>



<p class="wp-block-paragraph">Naturally, install speed becomes crucial in such scenarios. The makers of <code>uv</code> provide speed comparison benchmarks, testing their tool against pip and Poetry.</p>



<p class="wp-block-paragraph">Across all scenarios (warm/cold installs and warm/cold resolution), <strong><code>uv</code> outperforms pip and Poetry by orders of magnitude</strong>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="224" src="https://shiftmag.dev/wp-content/uploads/2025/09/Edvin.Final1_-1024x224.png?x94846" alt="" class="wp-image-6119" srcset="https://shiftmag.dev/wp-content/uploads/2025/09/Edvin.Final1_-1024x224.png 1024w, https://shiftmag.dev/wp-content/uploads/2025/09/Edvin.Final1_-300x66.png 300w, https://shiftmag.dev/wp-content/uploads/2025/09/Edvin.Final1_-768x168.png 768w, https://shiftmag.dev/wp-content/uploads/2025/09/Edvin.Final1_.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">These results come directly from uv&#8217;s official benchmarks. These <a href="https://github.com/astral-sh/uv/blob/main/BENCHMARKS.md" target="_blank" rel="noreferrer noopener">benchmarks</a> install <a href="https://github.com/python-trio/trio/blob/main/docs-requirements.in" target="_blank" rel="noreferrer noopener">Trio&#8217;s official dependencies</a>. Let&#8217;s see how uv&#8217;s benefits impact our developer workflow.</p>



<h2 class="wp-block-heading"><span id="comparing-uv-to-other-tools-when-building-an-ai-microservice">Comparing <code>uv</code> to other tools when building an AI microservice</span></h2>



<p class="wp-block-paragraph">To compare <code>uv </code>with other tools (in this case, <code>pip</code> and <code>poetry)</code>,<strong> </strong>we’ll walk through<strong> the common steps of building a Python application</strong> and see how much easier it is to use <code>uv</code>. The typical steps for creating a Python app include:</p>



<ul class="wp-block-list">
<li>Initializing a project</li>



<li>Adding dependencies</li>



<li>Locking/freezing your dependencies</li>



<li>Installing/syncing packages</li>



<li>Running scripts and notebooks (handy for AI/ML engineers)</li>
</ul>



<p class="wp-block-paragraph">To provide an at-a-glance comparison, we’ve summarized these steps in a table:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="466" src="https://shiftmag.dev/wp-content/uploads/2025/09/edvin3-1-1-1024x466.png?x94846" alt="" class="wp-image-6116" srcset="https://shiftmag.dev/wp-content/uploads/2025/09/edvin3-1-1-1024x466.png 1024w, https://shiftmag.dev/wp-content/uploads/2025/09/edvin3-1-1-300x137.png 300w, https://shiftmag.dev/wp-content/uploads/2025/09/edvin3-1-1-768x349.png 768w, https://shiftmag.dev/wp-content/uploads/2025/09/edvin3-1-1.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Testing Install Speed on a &#8220;real&#8221; AI microservice</h2>



<p class="wp-block-paragraph">To compare the experience of using uv with other tools like<strong><code> pip</code></strong> and<code><strong> poetry</strong></code>, let&#8217;s build a basic AI microservice. We&#8217;ll start with these dependencies:</p>



<pre class="wp-block-code"><code>fastapi==0.110.2
uvicorn&#91;standard]==0.29.0

# AI/GenAI/LLM related
transformers==4.40.1
torch==2.2.2
scipy==1.13.0
scikit-learn==1.5.0
numpy==1.26.4
sentence-transformers==2.7.0
langchain==0.1.16

# Pydantic for data validation
pydantic==2.7.1

# Async tools
httpx==0.27.0

# Background tasks and scheduling
celery==5.4.0
redis==5.0.4

# Observability (logging, tracing, monitoring)
opentelemetry-api==1.25.0
opentelemetry-sdk==1.25.0

# Environment variables
python-dotenv==1.0.1

# ORM
sqlalchemy==2.0.30


</code></pre>



<p class="wp-block-paragraph">This setup doesn’t mimic a real AI microservice; it just represents what you’d commonly find in one. We&#8217;ll create this as a Python project using three different build tools: pip, Poetry, and uv. <strong>Then, we’ll benchmark how fast these tools install the dependencies</strong>. </p>



<p class="wp-block-paragraph">We&#8217;ll use Python 3.12 for our virtual environment, which should not affect the results. In addition, we run <strong>this test on Ubuntu 22.04.5 LTS</strong>. For all tests, we perform a cold installation (no cache), followed by a warm installation (with cache).</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="224" src="https://shiftmag.dev/wp-content/uploads/2025/09/Edvin.Final2_-1024x224.png?x94846" alt="" class="wp-image-6121" srcset="https://shiftmag.dev/wp-content/uploads/2025/09/Edvin.Final2_-1024x224.png 1024w, https://shiftmag.dev/wp-content/uploads/2025/09/Edvin.Final2_-300x66.png 300w, https://shiftmag.dev/wp-content/uploads/2025/09/Edvin.Final2_-768x168.png 768w, https://shiftmag.dev/wp-content/uploads/2025/09/Edvin.Final2_.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Keep in mind that cold install times depend heavily on your network speed and bandwidth, <strong>and your ISP can throttle TCP, affecting the results</strong>.</p>



<h2 class="wp-block-heading"><span id="why-uv-wins">Why uv wins?</span></h2>



<p class="wp-block-paragraph">Swapping between multiple CLIs introduces cognitive overload &#8211; <code>uv</code> ends that. With <code>pip</code> and <code>venv</code>, you constantly toggle between Python&#8217;s <code>venv </code>module, manual requirements files, and <code>pip</code> installs.<code> Poetry </code>tries to put everything under its own umbrella, but still makes you chain together <code><strong>poetry install</strong></code> , <code><strong>poetry lock</strong></code> , and<code> <strong>poetry run</strong></code>.</p>



<p class="wp-block-paragraph">By contrast,<strong> <code>uv</code> gives you a single tool for all your needs and covers every workflow step</strong>. It just works. Under the hood, uv&#8217;s dependency resolver and global cache guarantee repeatable installs without spinning wheels or bloated environments.</p>



<p class="wp-block-paragraph">Every project shares the same content-address store, which prevents duplicate downloads and wasted disk space. </p>



<p class="wp-block-paragraph">Since <code>uv </code>builds from the ground up with modern workflows in mind, <strong>it provides first-class support for Python version management</strong> (Poetry requires a separate tool, pyenv, for this), workspaces (missing from Poetry), script metadata that turns Python files into portable executables (not supported by Poetry), and even built-in publishing capabilities.</p>



<p class="wp-block-paragraph">In short, <code>uv</code> gives you a simple, lean, and fast pipeline while simultaneously replacing the old ways of dependency management in Python.</p>



<h2 class="wp-block-heading"><code>Uv</code> in production &#8211; benefits and lessons learned</h2>



<p class="wp-block-paragraph">After careful consideration, we slowly started adopting <code>uv</code> as our go-to tool for writing new Python microservices, especially in AI. By switching to uv, <strong>we consolidated our workflow under one tool</strong> and leveraged its many benefits. The results speak for themselves: consistent, millisecond-scale installs, smaller container layers, and zero &#8220;it worked on my machine&#8221; issues across all environments.</p>



<p class="wp-block-paragraph">The benefits are measurable, too. Our average CI/CD pipeline build time dropped by half for services we migrated to <code>uv</code>. Running multiple services locally became easier because <code>uv</code> provides a global cache and symlinks to dependencies, greatly reducing disk usage.</p>



<p class="wp-block-paragraph">In addition, <code>uv.lock </code>ensures every branch and pipeline uses the same dependency graph, eliminating surprise version bumps or broken sub-dependencies. </p>



<p class="wp-block-paragraph">Finally, <strong>our cognitive workload as developers decreased significantly</strong> as we removed multiple tools from our toolchain, dramatically reducing maintenance overhead.</p>



<p class="wp-block-paragraph">After using <code>uv</code> for some time, we also discovered a few valuable tricks:</p>



<ul class="wp-block-list">
<li><strong>Cache Management</strong> &#8211; Periodically running <code>uv</code> cache prune keeps the cache directory clean by removing all unused entries.</li>



<li><strong>Accelerator Configuration</strong> &#8211; Following uv’s PyTorch integration guide lets us pin CPU vs. CUDA builds per service declaratively, avoiding manual URL overrides. This approach allows us to install CUDA-enabled PyTorch on Linux, CPU-only builds on MacOS, and even include custom flags to enable or disable GPU builds when needed.</li>
</ul>



<h2 class="wp-block-heading"><span id="you-should-give-uv-a-chance">You should give uv a chance</span></h2>



<p class="wp-block-paragraph">As we’ve seen, traditional Python tooling too often slows us down, wastes space, and forces us to hope for reproducible builds. <strong><code>Uv</code> cuts through that noise with a single, fast binary</strong> that handles every step of your workflow &#8211;<strong> </strong>from project initialization to publishing.</p>



<p class="wp-block-paragraph"><code>Uv</code> runs much faster than its competitors, and its universal lockfile guarantees deterministic builds that work everywhere, every time.</p>



<p class="wp-block-paragraph">Whether you build heavy AI pipelines, ship microservices, or maintain a monorepo filled with standalone scripts and notebooks, uv brings consistency, performance, and simplicity to your workflow. </p>



<p class="wp-block-paragraph">Stop wrestling with half-baked tools and give uv a spin today &#8211;<strong> I promise it will turn your dependency hellscape into a clean, reliable experience!</strong></p>


<figure class="wp-block-post-featured-image"><img loading="lazy" decoding="async" width="1200" height="720" src="https://shiftmag.dev/wp-content/uploads/2025/09/Edvin.naslovna-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/2025/09/Edvin.naslovna-1.png 1200w, https://shiftmag.dev/wp-content/uploads/2025/09/Edvin.naslovna-1-300x180.png 300w, https://shiftmag.dev/wp-content/uploads/2025/09/Edvin.naslovna-1-1024x614.png 1024w, https://shiftmag.dev/wp-content/uploads/2025/09/Edvin.naslovna-1-768x461.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure><p>The post <a href="https://shiftmag.dev/tame-python-chaos-with-uv-the-superpower-every-ai-engineer-needs-6051/">Tame Python Chaos With uv &#8211; The Superpower Every AI Engineer Needs</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Your Platform Might Already Be Incompatible With the Future</title>
		<link>https://shiftmag.dev/matt-biilmann-on-mastering-agentic-experience-6237/</link>
		
		<dc:creator><![CDATA[Marko Crnjanski]]></dc:creator>
		<pubDate>Fri, 26 Sep 2025 09:06:51 +0000</pubDate>
				<category><![CDATA[Developer Experience]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Agent Experience]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AX]]></category>
		<category><![CDATA[Matt Biilmann Christensen]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[Shift Conference 2025]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=6237</guid>

					<description><![CDATA[<p>Software design has always been human-centered. But in the age of AI agents, that’s starting to look like a limitation, not a virtue. The future of software is not in good UX, but in great AX.</p>
<p>The post <a href="https://shiftmag.dev/matt-biilmann-on-mastering-agentic-experience-6237/">Your Platform Might Already Be Incompatible With the Future</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">At this year’s <a href="https://shift.infobip.com/#hero" target="_blank" rel="noreferrer noopener">Infobip Shift conference</a>, <a href="https://shiftmag.dev/tag/matt-biilman/" target="_blank" rel="noreferrer noopener">Matt Biilmann Christensen</a>, co-founder and CEO of Netlify, spotlighted the next major evolution in software: <strong>agentic experience (AX)</strong>. </p>



<p class="wp-block-paragraph">He drew a clear line through past transformations — User Experience (UX) reshaped digital products in the 1990s, and Developer Experience (DX) redefined platforms in the 2010s. Matt argues that AX drives the critical design frontier in the era of AI-driven development. </p>



<p class="wp-block-paragraph"><strong>“Good DX doesn’t always mean good AX,”</strong> Matt said. Tools that feel intuitive for humans often frustrate AI agents. He urged builders to design platforms that deliver seamless human usability and strong agentic experience, allowing AI systems to interact, adapt, and create value without friction.</p>



<h2 class="wp-block-heading"><span id="redefining-the-developer-population"><strong>Redefining the Developer Population</strong></span></h2>



<p class="wp-block-paragraph">Matt opened by challenging how we define a “developer.” He reminded the audience that the industry once dismissed frontend developers as “pseudo-developers,” only later to acknowledge them as essential builders of the modern web.</p>



<p class="wp-block-paragraph">Similarly, he argued that <a href="https://shiftmag.dev/tag/ai-agents/" target="_blank" rel="noreferrer noopener">today’s AI agents</a> sit at the edge of legitimacy. <strong>With the right platforms and tooling, they could redefine development and bring billions more people into the fold</strong>.</p>



<p class="wp-block-paragraph">Matt envisioned a future not limited to millions of professional software engineers but open to as many as three billion people — anyone with technical acumen and an internet connection — who could step into development through agents.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The opportunity is not just to grow the developer market, but to redefine what development means for the &#8220;next 100 million people coming online&#8221;.</p>
</blockquote>



<h2 class="wp-block-heading"><span id="access-context-and-tools-the-three-pillars-of-ax"><strong>Access, Context, and Tools: The Three Pillars of AX</strong></span></h2>



<p class="wp-block-paragraph">Matt framed AX around three core challenges: <strong>access, context, and tools.</strong> </p>



<p class="wp-block-paragraph">Access focuses on how easily agents can interact with a product. Traditional authentication models, like OAuth scopes, often block agents that need open-ended flexibility. Matt highlighted<strong> “anonymous flows” and sandboxed environments</strong>, which let agents experiment before locking in permissions.</p>



<p class="wp-block-paragraph">Netlify, Neon, and Clerk provided clear examples of this pattern, granting limited access first and formalizing accounts only when necessary. Context ensures agents understand a product’s existence and how to use it effectively. </p>



<p class="wp-block-paragraph">Matt spotlighted “context engineering,” where structured documentation — <strong>Markdown files, MCP servers, or custom <code>.md </code>rules — feeds LLMs the information they need to generate reliable output</strong>. He also suggested that search engine optimization could evolve into Generative AI Optimization, helping models surface and apply product knowledge more accurately. </p>



<p class="wp-block-paragraph">Tools form the final pillar, shaping how agents act on information. Matt stressed that platforms must offer intuitive APIs, predictable interfaces, and robust debugging options so agents can perform reliably at scale.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="538" src="https://shiftmag.dev/wp-content/uploads/2025/09/bilman_2_-1024x538.png?x94846" alt="" class="wp-image-6247" srcset="https://shiftmag.dev/wp-content/uploads/2025/09/bilman_2_-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2025/09/bilman_2_-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2025/09/bilman_2_-768x403.png 768w, https://shiftmag.dev/wp-content/uploads/2025/09/bilman_2_.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="has-small-font-size wp-block-paragraph">For Matt, AX is not a feature or protocol but a discipline, much like UX. It requires constant observation, iteration, and empathy.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">On the other hand, tools are the interfaces through which agents interact with products. Even well-designed CLIs and APIs can fail when faced with non-human users. </p>
</blockquote>



<p class="wp-block-paragraph">Matt showed how Netlify’s CLI, long celebrated for its developer experience, repeatedly tripped up an<strong> AI coding agent during deployment</strong>. He transformed the tool into an AX-ready platform by adding a single non-interactive command — useless for most humans but ideal for agents.</p>



<h2 class="wp-block-heading"><span id="standards-and-ecosystem-shifts"><strong>Standards and Ecosystem Shifts</strong></span></h2>



<p class="wp-block-paragraph">A recurring theme in Matt&#8217;s lecture was the lack of standards around agentic experience (AX). He highlighted early frameworks like the <a href="https://shiftmag.dev/how-infobips-mcp-enables-true-agentic-ai-5220/" target="_blank" rel="noreferrer noopener">Model Context Protocol (MCP)</a> and lightweight conventions such as <code>llms.txt</code> as signals of the industry&#8217;s direction. </p>



<p class="wp-block-paragraph"><strong>Matt warned against naively exposing entire APIs to agents</strong>. He urged developers to treat MCP like a user interface for LLMs, carefully designing the minimal tools and context agents need to succeed. </p>



<p class="wp-block-paragraph">He contrasted Salesforce&#8217;s closed approach, which pushes proprietary agents while restricting integration, with HubSpot&#8217;s open strategy, which embraces MCP to give agents seamless access. The latter, Matt argued, shows how embracing AX can differentiate products in a fast-evolving ecosystem. </p>



<p class="wp-block-paragraph"><strong>For Matt, AX isn&#8217;t just a feature or protocol — it&#8217;s a discipline, like UX</strong>. It demands constant observation, iteration, and empathy, not just for human end-users but also for the agents acting on their behalf. He suggested this shift could unlock enormous economic potential by serving existing professionals and bringing entirely new demographics into web development.</p>



<p class="wp-block-paragraph">At Netlify, early investments in AX have already delivered results. Since launching these efforts a year ago, <strong>the company has seen a fivefold increase in daily signups and a sevenfold jump in paid conversions</strong>. Even more importantly, AX has empowered millions of new users with little or no coding background to become active builders on the platform.</p>



<h2 class="wp-block-heading"><span id="a-call-to-developers"><strong>A Call to Developers</strong></span></h2>



<p class="wp-block-paragraph">As AI agents take on more tasks — writing, debugging, and deploying code — the barriers to entry for development are collapsing. <strong>Skills like algorithm design and CLI expertise may lose weight</strong>, while qualities such as product sense, empathy, and domain knowledge gain importance.</p>



<p class="wp-block-paragraph"><strong>“This is an opportunity to invite so many more people into the room,”</strong> Matt said, highlighting use cases from HR teams designing surveys to marketers prototyping campaigns with AI agents.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The next generation of developers are coming, and it’s up to us to ensure the web is ready for them.</p>
</blockquote>



<p class="wp-block-paragraph">For developers, Matt delivered a clear message: just as UX and DX once drove competitive advantage, mastering <strong>agentic experience (AX)</strong> may soon decide which tools — and which companies — define the future of software.</p>



<p class="wp-block-paragraph"><strong>Want to know what else was discussed at Infobip Shift at Zadar in 2025? Find out <a href="https://shiftmag.dev/tag/shift-conference-2025/" target="_blank" rel="noreferrer noopener">here</a>!</strong></p>


<figure class="wp-block-post-featured-image"><img loading="lazy" decoding="async" width="1200" height="630" src="https://shiftmag.dev/wp-content/uploads/2025/09/bilman_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/2025/09/bilman_1_.png 1200w, https://shiftmag.dev/wp-content/uploads/2025/09/bilman_1_-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2025/09/bilman_1_-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2025/09/bilman_1_-768x403.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph"></p>
<p>The post <a href="https://shiftmag.dev/matt-biilmann-on-mastering-agentic-experience-6237/">Your Platform Might Already Be Incompatible With the Future</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The Number One Productivity Killer for Devs? Finding Information!</title>
		<link>https://shiftmag.dev/the-number-one-productivity-killer-for-devs-finding-information-5700/</link>
		
		<dc:creator><![CDATA[Antonija Bilic Arar]]></dc:creator>
		<pubDate>Fri, 22 Aug 2025 12:29:05 +0000</pubDate>
				<category><![CDATA[Developer Experience]]></category>
		<category><![CDATA[AI coding]]></category>
		<category><![CDATA[Atlassian]]></category>
		<category><![CDATA[Developer Productivity]]></category>
		<category><![CDATA[State of Developer Experience 2025]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=5700</guid>

					<description><![CDATA[<p>Developers save about 10 hours a week by using AI coding tools, but the productivity gains are then lost to organizational inefficiencies. </p>
<p>The post <a href="https://shiftmag.dev/the-number-one-productivity-killer-for-devs-finding-information-5700/">The Number One Productivity Killer for Devs? Finding Information!</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/2025/07/developer-experience.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/07/developer-experience.png 1200w, https://shiftmag.dev/wp-content/uploads/2025/07/developer-experience-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2025/07/developer-experience-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2025/07/developer-experience-768x403.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph">Tech debt is no longer the <a href="https://shiftmag.dev/developers-waste-8-hours-weekly-on-inefficiencies-like-technical-debt-3956/" target="_blank" rel="noreferrer noopener">main source of wasted time</a> and friction for developers.</p>



<p class="wp-block-paragraph">It&#8217;s also not testing or code reviews &#8211; it&#8217;s <strong>finding information</strong>, as per Atlassian’s <em><a href="https://www.atlassian.com/teams/software-development/state-of-developer-experience-2025" target="_blank" rel="noreferrer noopener">State of Developer Experience 2025</a></em> report, based on surveys of 3,500 developers and managers worldwide.<br><br>Paradoxically, 68% of developers reported that they save over 10 hours per week thanks to generative AI tools &#8211; up sharply from 46% the prior year. Yet, half of developers say they still <strong>lose more than 10 hours weekly due to organizational inefficiencies</strong>, and 90% lose at least six hours to issues like poor cross-team coordination, unclear project direction, and difficulty retrieving information.</p>



<h2 class="wp-block-heading">Coding is Just 16% of Developers&#8217; Jobs </h2>



<p class="wp-block-paragraph">Atlassian&#8217;s report noted that this is where the question of whether AI tools are truly helping developers enters the equation. <br><br>These tools primarily support developers with coding tasks, which only make up around 16% of their working week. The remainder of their time is spent on <strong>administrative work, tool-switching, documentation, and context-switching</strong>. <br><br>Another source of developer frustration where AI tools are not much help (yet) is context and clarity on what they&#8217;re building. They report wasting time getting clarifications from other teams and understanding institutional knowledge.</p>



<h2 class="wp-block-heading"><span id="leadership-does-not-understand-developers">Leadership Does Not Understand Developers</span></h2>



<p class="wp-block-paragraph">There is also a growing disconnect between software engineers and leadership. <strong>63% of developers report that leadership doesn’t truly understand their day-to-day pain points</strong>, up 19 percentage points from last year. The study argues that engineers experience friction firsthand, and leaders are more likely to see productivity gains on a dashboard and accept them as a sign of progress.</p>



<p class="wp-block-paragraph">Without alignment on what the pain points really are and what investments in developer experience actually make developers&#8217; lives easier, investments in AI tools risk becoming superficial solutions that fail to ease real friction.</p>
<p>The post <a href="https://shiftmag.dev/the-number-one-productivity-killer-for-devs-finding-information-5700/">The Number One Productivity Killer for Devs? Finding Information!</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>What Makes Developers Happy?</title>
		<link>https://shiftmag.dev/what-makes-developers-happy-5712/</link>
		
		<dc:creator><![CDATA[Antonija Bilic Arar]]></dc:creator>
		<pubDate>Wed, 13 Aug 2025 12:51:14 +0000</pubDate>
				<category><![CDATA[Developer Experience]]></category>
		<category><![CDATA[developer burnout]]></category>
		<category><![CDATA[software engineering career]]></category>
		<category><![CDATA[wellbeing]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=5712</guid>

					<description><![CDATA[<p>Software engineers want trust, recognition, and connection. </p>
<p>The post <a href="https://shiftmag.dev/what-makes-developers-happy-5712/">What Makes Developers Happy?</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/2025/07/happy-developers.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/07/happy-developers.png 1200w, https://shiftmag.dev/wp-content/uploads/2025/07/happy-developers-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2025/07/happy-developers-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2025/07/happy-developers-768x403.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph">Developers are not happy at work, and they keep letting us know. According to the Stack Overflow 2025 Developer Survey, only <a href="https://shiftmag.dev/stack-overflow-survey-2025-ai-5653/">24% of developers reported that they were happy at work</a> &#8211; a four percent increase from <a href="https://shiftmag.dev/unhappy-developers-stack-overflow-survey-3896/" target="_blank" rel="noreferrer noopener">the year before</a>.<br><br>In the same survey, developers ranked <strong>autonomy and trust</strong> as the most important factors contributing to their satisfaction, followed by competitive pay and benefits, and solving real-world problems.<br><br>A group of Swedish researchers conducted an interactive study with 15 engineers to understand what influences t<a href="https://arxiv.org/pdf/2504.01787" target="_blank" rel="noreferrer noopener">he well-being of software engineers</a>. They asked them what in their environment, on a personal as well as a team level, contributes to or takes away from their well-being.</p>



<h2 class="wp-block-heading"><span id="stress-is-everywhere">Stress is everywhere</span></h2>



<p class="wp-block-paragraph">The biggest sources of <a href="https://shiftmag.dev/developer-lifestye-jetbrains-survey-2189/" target="_blank" rel="noreferrer noopener">stress for software engineers</a> are <strong>personal life issues (62%)</strong>, <strong>high workload (53%)</strong>, and <strong>tight deadlines (46%)</strong>. But that’s not the full story. Poor tooling, social isolation, and chaotic or unstructured environments also play a role. When expectations shift constantly and communication is messy, even strong developers can get overwhelmed fast.</p>



<h2 class="wp-block-heading"><span id="developers-are-doing-their-part">Developers are doing their part</span></h2>



<p class="wp-block-paragraph">Most engineers aren’t sitting around waiting for someone to fix this. In the survey,<strong> 71% reported maintaining physical health routines</strong>, and over half said they actively manage their mental health. Exercise, hobbies, and sleep are go-to coping strategies. But they can only go so far when team dynamics and org structures keep adding pressure.</p>



<h2 class="wp-block-heading"><span id="social-connection-and-recognition-matter">Social connection and recognition matter</span></h2>



<p class="wp-block-paragraph">What really stands out is how much people rely on other people. Developers consistently pointed to <strong>social interactions</strong> &#8211; whether with teammates, friends, or family &#8211; as the backbone of their well-being. Feeling seen, supported, and appreciated isn’t a “nice to have.” It directly affects motivation and long-term engagement.</p>



<p class="wp-block-paragraph">The recognition gap is real: while 91% of developers said they felt respected in general, only 64% felt like they were being supported in their professional growth. That gap creates friction. Lack of recognition was one of the most common reasons people thought about quitting.</p>



<h2 class="wp-block-heading"><span id="what-teams-can-do">What teams can do</span></h2>



<p class="wp-block-paragraph">Investing in developer well-being doesn’t mean adding ping-pong tables or wellness webinars. It means <strong>making space for honest conversations</strong>, checking in before things hit a breaking point, and treating social connections like an asset. <br><br>Teams that build trust, celebrate wins (big or small), and offer flexibility in how people get work done tend to perform better over time. This is not because they “optimize” for productivity but because they understand that happy developers equal productive developers.<br> </p>
<p>The post <a href="https://shiftmag.dev/what-makes-developers-happy-5712/">What Makes Developers Happy?</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-05 18:09:13 by W3 Total Cache
-->