<?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>ShiftMag</title>
	<atom:link href="https://shiftmag.dev/feed/" rel="self" type="application/rss+xml" />
	<link>https://shiftmag.dev/</link>
	<description>Insightful engineering content &#38; community</description>
	<lastBuildDate>Thu, 30 Jul 2026 13:21:21 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://shiftmag.dev/wp-content/uploads/2024/08/cropped-ShiftMag-favicon-32x32.png</url>
	<title>ShiftMag</title>
	<link>https://shiftmag.dev/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>NVIDIA CTO Says AI is Now About Software, Networking And Power &#8211; Not Just Chips</title>
		<link>https://shiftmag.dev/nvidia-cto-says-ai-is-now-about-software-networking-and-power-not-just-chips-10784/</link>
		
		<dc:creator><![CDATA[Marin Pavelić]]></dc:creator>
		<pubDate>Thu, 30 Jul 2026 13:12:09 +0000</pubDate>
				<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Michael Kagan]]></category>
		<category><![CDATA[NVIDIA]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=10784</guid>

					<description><![CDATA[<p>The AI boom is no longer just a race to build faster machines. The real challenge now is making all the moving parts work together at scale.</p>
<p>The post <a href="https://shiftmag.dev/nvidia-cto-says-ai-is-now-about-software-networking-and-power-not-just-chips-10784/">NVIDIA CTO Says AI is Now About Software, Networking And Power &#8211; Not Just Chips</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="1024" height="702" src="https://shiftmag.dev/wp-content/uploads/2026/07/nvidia-1200w-1024x702.jpeg?x32039" class="attachment-large size-large wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/nvidia-1200w-1024x702.jpeg 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/nvidia-1200w-300x206.jpeg 300w, https://shiftmag.dev/wp-content/uploads/2026/07/nvidia-1200w-768x527.jpeg 768w, https://shiftmag.dev/wp-content/uploads/2026/07/nvidia-1200w.jpeg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>


<p class="wp-block-paragraph">For most people, NVIDIA means GPUs. But at WeAreDevelopers World Congress in Berlin, CTO <strong>Michael Kagan</strong> barely mentioned them.</p>



<p class="wp-block-paragraph">Instead, he focused on the infrastructure behind AI: networking, energy, software, data centers, robotics, and the massive engineering challenge of scaling it all. NVIDIA’s framing was clear: <strong>modern AI is no longer just hardware &#8211; it’s an &#8220;AI factory.&#8221;</strong></p>



<h2 class="wp-block-heading"><span id="ai-is-changing-how-people-interact-with-computers">AI is changing how people interact with computers</span></h2>



<p class="wp-block-paragraph">Kagan compared AI to past tech revolutions. Electricity came through a wall socket. Cloud computing put infrastructure on demand. Now AI is changing the interface again <strong>making computers accessible through natural language instead of code</strong>.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Before AI, only a few million people on Earth could operate computers by programming them. Now everybody can program the computer and run the AI, and if you don’t know how to do it, just ask AI. It will tell you.</p>
</blockquote>



<p class="wp-block-paragraph">In other words, <strong>users no longer need to understand the technical details behind computing</strong>. If they’re unsure how to do something, AI can often explain it or do it for them.</p>



<p class="wp-block-paragraph">Kagan framed AI less as a software category and more as a <strong>new computing layer </strong>that expands access to technology. The computer stays the same &#8211; the interface between people and machines is what’s getting much simpler.</p>



<h2 class="wp-block-heading"><span id="how-nvidia-linked-thousands-of-gpus">How NVIDIA linked thousands of GPUs</span></h2>



<p class="wp-block-paragraph">One of the most interesting parts of the discussion focused on Mellanox, the networking company Kagan co-founded in 1999 before NVIDIA acquired it in 2020.</p>



<p class="wp-block-paragraph">Mellanox was originally built for large-scale cloud computing, helping connect servers across massive data cent<strong>ers</strong>. But as AI workloads grew, that networking layer became even more important because the challenge was no longer just building individual processors, but <strong>making thousands of them work together efficiently</strong>.</p>



<p class="wp-block-paragraph">That’s why Kagan says modern AI systems should be viewed as single computers made up of huge numbers of GPUs spread across racks and data centers:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The computer is not a box under the table anymore.</p>
</blockquote>



<p class="wp-block-paragraph">That made the Mellanox acquisition strategically important: <strong>it gave NVIDIA the networking needed to connect GPUs and train larger AI models at scale</strong>.</p>



<h2 class="wp-block-heading"><span id="ai-factories-turn-energy-and-data-into-intelligence">AI factories turn energy and data into intelligence</span></h2>



<p class="wp-block-paragraph">Kagan repeatedly used the term <strong>AI factory</strong> because, in his opinion, it better describes the role modern AI infrastructure plays.</p>



<p class="wp-block-paragraph">Traditional data centers store data and process requests. AI infrastructure does something different: it <strong>uses huge amounts of data and power to train models and run inference across applications</strong>. &#8220;AI factories take the energy and the data and convert it to intelligence&#8221;, says Kagan.</p>



<p class="wp-block-paragraph">He compared the process to a power plant generating electricity. It’s a metaphor, but it captures how NVIDIA sees AI infrastructure: as a production system where intelligence is the output.</p>



<p class="wp-block-paragraph">When asked what an AI factory looks like, Kagan said: </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The first thing you notice when you go to the AI factory is cables.</p>
</blockquote>



<p class="wp-block-paragraph"><strong>Those cables connect hundreds, thousands, and eventually millions of GPUs into one computing environment</strong>. NVIDIA breaks that challenge into two parts: scale-up, which links GPUs with NVLink, and scale-out, which connects those systems into massive clusters.</p>



<p class="wp-block-paragraph">As those systems grow, networking becomes essential. Every processor has to stay in sync, and NVIDIA says lowering the cost of generating AI tokens remains one of its key goals.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="564" src="https://shiftmag.dev/wp-content/uploads/2026/07/Screenshot-2026-07-29-at-11.45.02-1024x564.png?x32039" alt="" class="wp-image-11217" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/Screenshot-2026-07-29-at-11.45.02-1024x564.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/Screenshot-2026-07-29-at-11.45.02-300x165.png 300w, https://shiftmag.dev/wp-content/uploads/2026/07/Screenshot-2026-07-29-at-11.45.02-768x423.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Photo: Screenshot from conference <a href="https://www.wearedevelopers.com/videos/2133/building-the-nervous-system-of-ai-michael-kagan-nvidia-2133" target="_blank" rel="noreferrer noopener">video footage from WeAreDevelopers</a></figcaption></figure>



<h2 class="wp-block-heading"><span id="ai-is-now-limited-by-software-and-power-not-just-chips">AI is now limited by software and power, not just chips<br></span></h2>



<p class="wp-block-paragraph">AI performance used to improve mainly as hardware improved, but Kagan says the challenge is now more complex.</p>



<p class="wp-block-paragraph">A big reason is the rapid <strong>growth of inference</strong>. Traditional computing follows a simple pattern: a user sends a request, the computer processes it, returns a result, and waits for the next instruction. Agentic AI works differently, with models constantly exchanging information with software tools and other services while completing tasks. That creates far more communication inside the data center.</p>



<p class="wp-block-paragraph">Those interactions happen much faster than humans can issue requests, while Moore’s Law is slowing down. That means smaller and faster transistors alone are no longer enough to meet demand.</p>



<p class="wp-block-paragraph">That is why building larger processors alone is no longer enough to keep up with growing AI workloads. According to Kagan, <strong>CUDA has become one of NVIDIA’s biggest long-term advantages</strong> because it allows developers to fully exploit the company’s hardware:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Chips without software are just expensive sand.</p>
</blockquote>



<p class="wp-block-paragraph">He explains that NVIDIA wants to give developers a stable platform while the hardware keeps evolving. Too much general hardware can be inefficient, but<strong> too much specialization can quickly become outdated</strong>. CUDA gives developers the flexibility to support new workloads without starting from scratch.</p>



<p class="wp-block-paragraph"><strong>Power</strong> is another major limit. Kagan said electricity is now one of the biggest constraints on new AI data centers. NVIDIA is working on ways to connect multiple sites over long distances so they can act like one system, with training done where power is available and inference closer to users.</p>



<h2 class="wp-block-heading"><span id="progress-in-ai-depends-on-understanding-complex-systems">Progress in AI depends on understanding complex systems</span></h2>



<p class="wp-block-paragraph">The session concluded with advice for young engineers: rather than recommending a specific programming language or AI framework, Kagan encouraged students to develop <strong>strong foundations in mathematics, physics and chemistry before specializing.</strong></p>



<p class="wp-block-paragraph">He also reflected about his childhood curiosity, saying he used to take new toys apart just to see how they worked. If he were starting school today, he said he’d seriously consider studying digital biology, since understanding the human body is still one of the most fascinating engineering challenges:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The most complicated machine that is out there is a human.</p>
</blockquote>



<p class="wp-block-paragraph">Even though the conversation touched on GPUs, networking and AI infrastructure, <strong>Kagan kept coming back to one idea</strong>: progress in AI depends on understanding complex systems. Whether that’s millions of processors, distributed data centers or the human body, engineering starts with curiosity and a desire to figure out how things work.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://shiftmag.dev/nvidia-cto-says-ai-is-now-about-software-networking-and-power-not-just-chips-10784/">NVIDIA CTO Says AI is Now About Software, Networking And Power &#8211; Not Just Chips</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Being a Senior Engineer Doesn’t Mean You Never Need Help</title>
		<link>https://shiftmag.dev/being-a-senior-engineer-doesnt-mean-you-never-need-help-10773/</link>
		
		<dc:creator><![CDATA[Ivan Pelivanovic]]></dc:creator>
		<pubDate>Wed, 29 Jul 2026 13:46:11 +0000</pubDate>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Developer Productivity]]></category>
		<category><![CDATA[Infobip Shift 2026]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=10773</guid>

					<description><![CDATA[<p>The jump from mid-level to senior engineer is often framed as a technical one. Michelle Brenner says the real difference is judgment: understanding the business, making pragmatic trade-offs, and knowing when to ask for help.</p>
<p>The post <a href="https://shiftmag.dev/being-a-senior-engineer-doesnt-mean-you-never-need-help-10773/">Being a Senior Engineer Doesn’t Mean You Never Need Help</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-post-featured-image"><img decoding="async" width="1200" height="630" src="https://shiftmag.dev/wp-content/uploads/2026/07/teresa.jpg?x32039" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/teresa.jpg 1200w, https://shiftmag.dev/wp-content/uploads/2026/07/teresa-300x158.jpg 300w, https://shiftmag.dev/wp-content/uploads/2026/07/teresa-1024x538.jpg 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/teresa-768x403.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph">The jump from mid-level to senior engineer is usually described as a matter of stronger technical skills. </p>



<p class="wp-block-paragraph"><strong>Michelle Brenner</strong> (Senior Software Engineer) sees it differently. </p>



<p class="wp-block-paragraph">Ahead of her talk at <a href="https://shift.infobip.com/?%7CEU%7C-Shift_Zadar_2024-%5BTy:G_Brand_Search;Lng:EN;Bid:MAN_eCPC%5D" target="_blank" rel="noreferrer noopener">Infobip Shift</a>, (for which you get a <a href="https://www.entrio.hr/en/event/infobip-shift-2026-27033?pc=MAG15" target="_blank" rel="noreferrer noopener">special discount as a ShiftMag reader</a>) she argues that the real shift comes from <strong>understanding the business</strong>, making <strong>pragmatic decisions</strong>, and <strong>knowing when to ask for help</strong>.</p>



<h2 class="wp-block-heading"><span id="ai-makes-learning-at-work-easier">AI makes learning at work easier</span></h2>



<p class="wp-block-paragraph">You’re three weeks into a new job, the sprint is already underway, and a ticket comes in that doesn’t fully match the docs. Do you ask for help and maybe seem inexperienced, or do you guess and hope you got it right?</p>



<p class="wp-block-paragraph">That choice never really goes away. Senior engineers are not people who never need help, they <strong>know when to ask before uncertainty becomes a real problem</strong>.</p>



<p class="wp-block-paragraph">For self-taught engineers, that threshold can feel especially high, as Michelle describes it:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">As someone who was self-taught, I sometimes found that asking questions at work could be dangerous. I could reveal an ignorance that I was expected to know, from a computer science term to a tool name.</p>
</blockquote>



<p class="wp-block-paragraph">Michelle thinks <strong>AI can make it easier to ask basic questions</strong>. Since many developers already use AI tools connected to internal docs or code, they can get help without feeling judged.</p>



<p class="wp-block-paragraph">For her, that matters because most AI conversations focus on code generation. She cares more about what happens before that: helping engineers learn faster and feel less afraid to ask questions.</p>



<h2 class="wp-block-heading"><span id="seniors-also-need-business-context">Seniors also need business context</span></h2>



<p class="wp-block-paragraph">One of the biggest mistakes mid-level engineers make as they work toward becoming senior engineers, Michelle says, has little to do with syntax or frameworks. The real issue is <strong>not understanding how the business works</strong>:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Learn how the business makes money, and how your team affects that.</p>
</blockquote>



<p class="wp-block-paragraph">For Michelle, engineers who understand how leadership makes decisions and how a company creates value are better equipped to make technical calls that matter. So what can you do to fix that?</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">You should start paying more attention to business meetings and start seeing code as one part of a larger system, not the whole job.</p>
</blockquote>



<p class="wp-block-paragraph">In smaller teams, or in companies without a deep bench of specialists, that is often part of the job. Sometimes you have to take on <strong>the roles of product manager, developer, and SRE all at once</strong>, even when you are not the expert in every area.</p>



<h2 class="wp-block-heading">&#8216;If it works, ship it&#8217;</h2>



<p class="wp-block-paragraph">That same pragmatism shapes how Michelle thinks about architecture and trade-offs.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">There is no single &#8220;correct&#8221; solution, just as there is no dream job or perfect candidate.</p>
</blockquote>



<p class="wp-block-paragraph">&#8220;If it works, ship it,&#8221; Michelle says. It is an argument against <strong>getting stuck in the search for a perfect answer that does not exist</strong>. Senior engineers spend less time chasing theoretical purity and more time balancing constraints, risks, and deadlines.</p>



<p class="wp-block-paragraph">Michelle also gave us a sneak peek of her upcoming talk at <a href="https://shift.infobip.com/?%7CEU%7C-Shift_Zadar_2024-%5BTy:G_Brand_Search;Lng:EN;Bid:MAN_eCPC%5D" target="_blank" rel="noreferrer noopener">Infobip Shift</a>, based on the senior engineering career guide she has spent the last few years writing. She says the jump from mid to senior is much bigger than the jump from junior to mid, and that it can be <strong>especially hard without a mentor</strong> to show how the role actually works.</p>



<p class="wp-block-paragraph">Her talk will focus on the <strong>practical skills engineers often do not get enough time to learn on the job</strong>, from build-versus-buy decisions to interview preparation. She also spoke with engineers from organisations around the world to keep the advice broad. If you are coming to Shift, this is one talk worth catching.</p>



<p class="wp-block-paragraph"><strong>Get your ticket for Shift conference with a&nbsp;<a href="https://www.entrio.hr/en/event/infobip-shift-2026-27033?pc=MAG15" target="_blank" rel="noreferrer noopener">special discount for ShiftMag readers</a>!</strong></p>
<p>The post <a href="https://shiftmag.dev/being-a-senior-engineer-doesnt-mean-you-never-need-help-10773/">Being a Senior Engineer Doesn’t Mean You Never Need Help</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PewDiePie’s AI Experiment Is What Software Development Looks Like Now</title>
		<link>https://shiftmag.dev/pewdiepies-ai-experiment-is-what-software-development-looks-like-now-10697/</link>
		
		<dc:creator><![CDATA[Ivan Pelivanovic]]></dc:creator>
		<pubDate>Tue, 28 Jul 2026 12:48:08 +0000</pubDate>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[local AI]]></category>
		<category><![CDATA[Odysseus AI]]></category>
		<category><![CDATA[self-hosted]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=10697</guid>

					<description><![CDATA[<p>I let the dust settle, and this is what I think: regular apps usually need teams of dozens to ideate, build, and test before they ship. Odysseus, PewDiePie’s new AI platform, doesn’t - at least, not in the usual way.</p>
<p>The post <a href="https://shiftmag.dev/pewdiepies-ai-experiment-is-what-software-development-looks-like-now-10697/">PewDiePie’s AI Experiment Is What Software Development Looks Like Now</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/07/JPA.jpg?x32039" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/JPA.jpg 1200w, https://shiftmag.dev/wp-content/uploads/2026/07/JPA-300x158.jpg 300w, https://shiftmag.dev/wp-content/uploads/2026/07/JPA-1024x538.jpg 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/JPA-768x403.jpg 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph">Odysseus is interesting because it shows <strong>how a project with serious ambitions can now be built outside a traditional software company</strong>. </p>



<p class="wp-block-paragraph">After speaking with <strong>Ivan</strong> <strong>Mihić</strong>, a software engineer who spent time testing PewDiePie&#8217;s AI project, I ended up thinking that the software itself might not be the most interesting part of this story. </p>



<p class="wp-block-paragraph"><a href="https://odysseusai.dev/" target="_blank" rel="noreferrer noopener">Odysseus</a> may come from a YouTube creator with a massive audience, but the more important question is what it says about software development itself. </p>



<h2 class="wp-block-heading">Another AI app &#8211; or something more?</h2>



<p class="wp-block-paragraph">When <a href="https://youtu.be/rAzT5lcezPs" target="_blank" rel="noreferrer noopener">Felix &#8220;PewDiePie&#8221; Kjellberg unveiled Odysseus</a>, the internet reacted in the way it usually does when a major creator launches a software project. Some treated it as a celebrity side project, others focused on the privacy claims and some compared it with other AI tools such as GPT or Claude. </p>



<p class="wp-block-paragraph">For those of you who might be late to the party (same as we are with this text), Odysseus is an <strong>open source, self hosted AI workspace designed to run locally</strong>. Instead of depending only on cloud services, it combines local models with web search, document analysis, long term memory, and AI agents inside a single browser interface. If you want, you can also add cloud models to it as well.</p>



<p class="wp-block-paragraph">Under the hood, the application integrates components such as&nbsp;ChromaDB&nbsp;for memory,&nbsp;SearXNG&nbsp;for search, and local model serving, while also letting users decide whether they want everything on their own hardware or connected to external APIs.&nbsp;</p>



<p class="wp-block-paragraph">What stood out to Ivan was not just what Odysseus does, but what its existence says about <strong>how software gets built nowadays</strong>:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The biggest thing isn&#8217;t that Odysseus is a good tool,&nbsp;It&#8217;s&nbsp;that a project of this size probably wouldn&#8217;t exist without AI.</p>
</blockquote>



<p class="wp-block-paragraph">A few years ago, building a system that combined models, search, memory, document pipelines, and agents would usually&nbsp;have required&nbsp;a much larger engineering team. Today, a determined individual or a small group can at least prototype that kind of product and keep iterating on it. </p>



<p class="wp-block-paragraph">To me as an outsider, this looks like the <strong>phase in which we built AI tools mainly for internal use is slowly coming to an end</strong>. More and more of these tools are now being prepared for public release, even if they are still far from fully polished.</p>



<p class="wp-block-paragraph">Ivan also&nbsp;admints&nbsp;that he was&nbsp;was&nbsp;surprised. Not because the tool is&nbsp;perfect,&nbsp;because it as you would expect isn&#8217;t&nbsp;but because something that started from a hobbyist, vibe-coding context grew into a project of this scale. For him, Odysseus is less a sign that AI has replaced engineers and more a sign that AI has changed the starting line. And I couldn&#8217;t agree more on this one.</p>



<h2 class="wp-block-heading"><span id="privacy-alone-won%e2%80%99t-protect-you%c2%a0">Privacy alone won’t protect you </span></h2>



<p class="wp-block-paragraph">Much of Odysseus’ appeal comes from privacy. Running AI models locally means <strong>sensitive data does not have to leave your machine</strong>, which is a real advantage. But Ivan pointed out that privacy and security are not the same thing. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Odysseus is local-first, but that doesn&#8217;t automatically make it secure.&nbsp;</p>
</blockquote>



<p class="wp-block-paragraph">The platform can access files, execute shell commands, perform web research, and interact with external services, therefore a bad configuration can quickly create security risks. That matters even more if users expose their instance to the public internet.&nbsp;</p>



<p class="wp-block-paragraph">Ivan’s point is simple: <strong>a tool can be private in design and still be unsafe in practice</strong> if people do not understand what they are connecting, exposing, or automating. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">When a tool presents itself through the lens of privacy, security becomes extremely important. Privacy without security&nbsp;doesn&#8217;t&nbsp;mean much.</p>
</blockquote>



<h2 class="wp-block-heading">Odysseus is not mature&#8230; yet</h2>



<p class="wp-block-paragraph">Architecturally, Ivan sees Odysseus as a <strong>large monolithic application coordinating several supporting services</strong> rather than a fully mature enterprise platform. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">It&#8217;s not the cleanest or most mature architecture I&#8217;ve seen. You can clearly&nbsp;tell&nbsp;it evolved through experimentation.</p>
</blockquote>



<p class="wp-block-paragraph">That <strong>experimental nature is visible throughout the product</strong>. Odysseus tries to combine chat, agents, research, memory, document analysis, and productivity tools into one personal AI workspace, with varying degrees of success.</p>



<p class="wp-block-paragraph">A few features stood out to Ivan in particular.&nbsp;&#8220;Compare&#8221; lets users run the same prompt across multiple models at once. &#8220;Deep Research&#8221; automatically performs multi step web research and returns cited sources.&nbsp;&#8220;Cookbook&#8221; helps users choose, download, and serve models based on the hardware they actually have.&nbsp;</p>



<p class="wp-block-paragraph">Still, for someone who is just entering the world of local AI, Ivan thinks more established tools currently make more sense, just because tools like Open WebUI has had more time to mature.</p>



<h2 class="wp-block-heading"><span id="this-is-not-exactly-a-beginner-friendly-tool">This is not exactly a beginner-friendly tool</span></h2>



<p class="wp-block-paragraph">Talking about Odysseus once it&#8217;s installed is fine, but <strong>getting there as a regular AI user might prove to be a challenging task</strong>. From my experience, users need to be wary of the fact that, in order to fully use Odysseus, many setup steps are needed. They also need to know that they might not understand a single thing about what&#8217;s happening, which is also a risk in itself.</p>



<p class="wp-block-paragraph">Odysseus is not an app you can install and run in a minute or two, while other tools do just that. The user experience for a beginner might be <strong>overwhelming</strong> and, at times, just simply not worth it if you&#8217;re in it just to experiment and see what the tool can offer.</p>



<p class="wp-block-paragraph">Ivan Šimić, the third Ivan in this story, a senior writer at ShiftMag who kept experimenting with the tool to figure it out, added:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Trying to hop on the bandwagon of local LLM&#8217;s after reading about Odysseus might not be the greatest idea, since it requires a capable machine, a basic understanding of key aspects of making things happen on a PC or Mac, patience and time. For many interested in trying it, this might prove to be too much &#8220;tinkering&#8221; for not a lot of results. </p>
</blockquote>



<h2 class="wp-block-heading"><span id="big-ideas-in-software-are-no-longer-a-big-team-privilege">Big ideas in software are no longer a big-team privilege</span></h2>



<p class="wp-block-paragraph">It would be easy to frame Odysseus as another celebrity tech experiment but that would miss the broader point.&nbsp;</p>



<p class="wp-block-paragraph">What matters here is that <strong>AI assisted development has lowered the cost of building ambitious software</strong>. A project that once would have required a sizable engineering team is now something a small group, or even one person, can assemble and refine much faster than before. </p>



<p class="wp-block-paragraph">And yes, while a fair portion of the pessimistic internet is claiming this means software engineers are disappearing, I highly doubt it. The job is changing, and the gap between an idea and a working product is smaller than it used to be.  </p>



<p class="wp-block-paragraph">As Ivan nicely put it, it’s like Jack Black’s quest for the magical guitar pick in The Pick of Destiny. In the film, that pick gives its owner superhuman guitar skills. In reality, <strong>even the best tool won’t make him or anybody else the world’s best developer</strong>, but it can certainly make everyday job a lot easier.</p>



<p class="wp-block-paragraph">Therefore, the most interesting thing PewDiePie built may not be another AI assistant, but proof that ambitious software is no longer reserved for traditional software companies and big teams. Big Tech, are you scared yet?</p>
<p>The post <a href="https://shiftmag.dev/pewdiepies-ai-experiment-is-what-software-development-looks-like-now-10697/">PewDiePie’s AI Experiment Is What Software Development Looks Like Now</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Instagram&#8217;s Co-Founder Says He Doesn&#8217;t Review Every Line of Code Anymore</title>
		<link>https://shiftmag.dev/instagrams-co-founder-says-he-doesnt-review-every-line-of-code-anymore-11063/</link>
		
		<dc:creator><![CDATA[Ivan Pelivanovic]]></dc:creator>
		<pubDate>Mon, 27 Jul 2026 12:48:51 +0000</pubDate>
				<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AI Engineer]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[Engineers]]></category>
		<category><![CDATA[Mike Krieger]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=11063</guid>

					<description><![CDATA[<p>At the AI Engineer conference in San Francisco, I heard Instagram co-founder Mike Krieger say developers no longer need to review every line of code by hand. The real job now is judging AI’s decisions and whether the product solves the right problem.</p>
<p>The post <a href="https://shiftmag.dev/instagrams-co-founder-says-he-doesnt-review-every-line-of-code-anymore-11063/">Instagram&#8217;s Co-Founder Says He Doesn&#8217;t Review Every Line of Code Anymore</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="720" src="https://shiftmag.dev/wp-content/uploads/2026/07/Mike-1.jpg?x32039" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/Mike-1.jpg 1200w, https://shiftmag.dev/wp-content/uploads/2026/07/Mike-1-300x180.jpg 300w, https://shiftmag.dev/wp-content/uploads/2026/07/Mike-1-1024x614.jpg 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/Mike-1-768x461.jpg 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph"><strong>Mike Krieger</strong>, Instagram co-founder and Member of Technical Staff at Anthropic, said hand-reviewing every line of code is no longer the best use of a developer’s time. </p>



<p class="wp-block-paragraph">The job, he argued, is moving toward <strong>understanding what AI is trying to do</strong>, judging whether its decisions make sense, and checking whether the end result actually solves the user’s problem. </p>



<p class="wp-block-paragraph">For startups and small teams, that shift could be a major advantage: AI makes it cheaper to experiment, pivot, and learn faster from real feedback.</p>



<h2 class="wp-block-heading">&#8216;AI will not replace developers&#8217;<br></h2>



<p class="wp-block-paragraph">If a founder (or a developer) can test three or four product versions or approaches in the time it used to take to build one, <strong>the biggest gain is speed of learning</strong>. </p>



<p class="wp-block-paragraph">In Mike&#8217;s view, that doesn’t mean AI replaces creativity, ideation, or product instinct, it just helps strong ideas get validated, or rejected, much faster.</p>



<p class="wp-block-paragraph">The real challenges developers and founders face were never technical to begin with, he argues. Spotting the actual problem, <strong>understanding what users need</strong>, and finding a product the market will genuinely adopt is far harder than writing the code itself. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">AI will not replace developers or threaten the startup ecosystem. It will let small teams build, test, and iterate faster with fewer resources.<br></p>
</blockquote>



<p class="wp-block-paragraph">That shift will not be easy for everyone, and <strong>plenty of teams will struggle</strong>, quit, or pivot along the way. But blaming AI for a rough patch in the industry is not fair. Because as Mike says, what was hard before AI is still hard now.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="614" src="https://shiftmag.dev/wp-content/uploads/2026/07/Mike-2-1024x614.jpg?x32039" alt="" class="wp-image-11067" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/Mike-2-1024x614.jpg 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/Mike-2-300x180.jpg 300w, https://shiftmag.dev/wp-content/uploads/2026/07/Mike-2-768x461.jpg 768w, https://shiftmag.dev/wp-content/uploads/2026/07/Mike-2.jpg 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Photo: Ivan Pelivanović</figcaption></figure>



<h2 class="wp-block-heading"><span id="code-review-matters-less-now">Code review matters less now<br></span></h2>



<p class="wp-block-paragraph">One of the biggest changes Mike sees is not how much code AI can write, but how people assign work to it.</p>



<p class="wp-block-paragraph">Developers are moving away from planning every step in detail and doing it all by hand. Now they more often<em> </em><strong>set the goal, give the AI context, and then review the results</strong>, decisions, and trade-offs.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">At Anthropic AI is increasingly used less as a simple tool for individual tasks and more like a team member that holds context, tracks specific problems, and proactively suggests solutions.</p>
</blockquote>



<p class="wp-block-paragraph">That is also changing how code gets reviewed. Traditional code review, where someone goes line by line and checks the implementation, matters less than understanding the intent behind a change.</p>



<p class="wp-block-paragraph">Instead of asking &#8220;is every line of this code correct,&#8221; the more useful question becomes &#8220;<strong>is this the right way to solve the problem, and what are the consequences of this decision</strong>.&#8221;</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">I don&#8217;t review every line of code in a pull request. Instead, I talk to Claude about the code and ask the questions I would normally ask the person who wrote it.</p>
</blockquote>



<p class="wp-block-paragraph">That does not mean people disappear from the process. Human judgment matters more, especially for <strong>architectural decisions and complex changes</strong>. AI can speed up implementation, but someone still needs to understand the product, the users, and the long-term consequences of a decision.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="614" src="https://shiftmag.dev/wp-content/uploads/2026/07/Mike-3-1024x614.jpg?x32039" alt="" class="wp-image-11068" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/Mike-3-1024x614.jpg 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/Mike-3-300x180.jpg 300w, https://shiftmag.dev/wp-content/uploads/2026/07/Mike-3-768x461.jpg 768w, https://shiftmag.dev/wp-content/uploads/2026/07/Mike-3.jpg 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Photo: Ivan Pelivanović</figcaption></figure>



<h2 class="wp-block-heading"><span id="it-is-easy-to-lose-perspective-in-the-ai-race">It is easy to lose perspective in the AI race<br></span></h2>



<p class="wp-block-paragraph">Beyond the changing workflow, Mike also spoke about the pressure in the AI industry. With new models, products, and regulatory shifts coming almost daily, it is easy to feel like you always have to stay one step behind.</p>



<p class="wp-block-paragraph">He said that by midweek, Anthropic is already reviewing the ”state of AI news,” and the list of updates is often long. His point was that <strong>you have to keep perspective</strong>, you can’t track or react to every single change.</p>



<p class="wp-block-paragraph">That pressure, he added, is also what makes <strong>burnout</strong> such a risk in an industry moving this fast. People often tie their sense of success to daily results, competitors’ launches, or product releases, even though real wins and failures are usually measured over much longer stretches of time.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">No job is important enough that you can&#8217;t be offline for a few days.</p>
</blockquote>



<p class="wp-block-paragraph">He closed by saying <strong>teams need to get used to talking about frustrations and failures, not just celebrating wins</strong>. Being open about problems, he argued, helps teams solve them faster and keep a healthy working culture, even as the industry moves at an extraordinary pace.</p>
<p>The post <a href="https://shiftmag.dev/instagrams-co-founder-says-he-doesnt-review-every-line-of-code-anymore-11063/">Instagram&#8217;s Co-Founder Says He Doesn&#8217;t Review Every Line of Code Anymore</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Security Must Be Built In as Everyone Becomes a Builder</title>
		<link>https://shiftmag.dev/security-must-be-built-in-as-everyone-becomes-a-builder-10889/</link>
		
		<dc:creator><![CDATA[Andro Galinović]]></dc:creator>
		<pubDate>Fri, 24 Jul 2026 13:36:46 +0000</pubDate>
				<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=10889</guid>

					<description><![CDATA[<p>A new kind of builder is emerging inside organizations - one that works fast, ships often, and rarely follows the instincts of a software engineer. That raises a simple question: what happens to security?</p>
<p>The post <a href="https://shiftmag.dev/security-must-be-built-in-as-everyone-becomes-a-builder-10889/">Security Must Be Built In as Everyone Becomes a Builder</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/07/Ambient-Generative-IT-1.png?x32039" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/Ambient-Generative-IT-1.png 1200w, https://shiftmag.dev/wp-content/uploads/2026/07/Ambient-Generative-IT-1-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2026/07/Ambient-Generative-IT-1-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/Ambient-Generative-IT-1-768x403.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph">At .debug 2026, one of Croatia&#8217;s largest developer conferences, I introduced the concept of <strong>Ambient Generative IT</strong> &#8211; a coined term describing the phenomenon where AI-assisted development becomes so pervasive that it blends into the organizational fabric, much like ambient lighting blends into a room.</p>



<p class="wp-block-paragraph">The word &#8220;ambient&#8221; comes from the Latin ambire (to surround), describing something seamlessly integrated with its environment. </p>



<p class="wp-block-paragraph">This shift is already happening across organizations: marketing managers build internal dashboards, HR teams automate onboarding workflows, and sales ops create CRM integrations. None of them are engineers, and most have never heard of <strong>row-level security</strong> &#8211; yet they are all becoming software developers and publishers. </p>



<p class="wp-block-paragraph">The question was straightforward: <strong>how do we securely enable a future where anyone can build enterprise-grade tools</strong> while still upholding the non-functional requirements we expect from professional software engineering, such as security, performance, scalability, and maintainability?</p>



<h2 class="wp-block-heading">Everyone wants to build software now&#8230;</h2>



<p class="wp-block-paragraph">There are two fundamental reasons why ambient generative IT is so appealing:</p>



<ol class="wp-block-list">
<li><strong>There have always been more consumers than producers</strong>.The demand for applications, integrations, automations, and digitalization has always exceeded what IT departments can deliver. That imbalance created Shadow IT decades ago, when the migration from mainframes to personal computers gave people the freedom to buy their own software. Cloud computing exploded it further. People want to be productive, and when the engineering bottleneck is too tight, they become their own builders.</li>



<li> <strong>The</strong> <strong>thrill of creation</strong>. Every engineer remembers the first time they made a computer do something it would not do on its own. For non-technical employees experiencing vibe coding for the first time, that feeling is brand new and equally (if not more) intoxicating.</li>
</ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1023" height="693" src="https://shiftmag.dev/wp-content/uploads/2026/07/Screenshot-2026-07-24-at-15.45.41.png?x32039" alt="" class="wp-image-11080" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/Screenshot-2026-07-24-at-15.45.41.png 1023w, https://shiftmag.dev/wp-content/uploads/2026/07/Screenshot-2026-07-24-at-15.45.41-300x203.png 300w, https://shiftmag.dev/wp-content/uploads/2026/07/Screenshot-2026-07-24-at-15.45.41-768x520.png 768w" sizes="auto, (max-width: 1023px) 100vw, 1023px" /><figcaption class="wp-element-caption">Experiencing the freedom of creation for the first time.</figcaption></figure>



<h2 class="wp-block-heading"><span id="shadow-it-was-the-warning-shadow-ai-is-the-crisis">Shadow IT was the warning. Shadow AI is the crisis.</span></h2>



<p class="wp-block-paragraph">Shadow IT is not new. Gartner estimates that <strong>88% of organizations have experienced it</strong>, with the average company running 1,220 unauthorized cloud services while believing the number is just 91. By 2027, 75% of employees will acquire or create technology outside IT&#8217;s visibility.</p>



<p class="wp-block-paragraph">But Shadow AI has accelerated the problem beyond anything Shadow IT ever produced. </p>



<p class="wp-block-paragraph">According to IBM&#8217;s 2025 <a href="https://www.ibm.com/reports/data-breach" target="_blank" rel="noreferrer noopener nofollow">Cost of a Data Breach Report</a>, <strong>shadow AI was involved in 20% of all breaches</strong>. This was more than sanctioned AI incidents (13%). Organizations with high levels of shadow AI paid an average of $4.74 million per breach, compared to $4.07 million for those with low or no shadow AI; a $670,000 premium. Perhaps most alarming: 97% of organizations that experienced an AI-related breach lacked proper AI access controls, and 63% had no AI governance policies at all.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Anyone from your company at any moment can generate an app, and this is not going through any development cycle or any security check. People can just start using it in production without asking anyone. And they do.</p>
<cite>Dor Zvi, RedAccess</cite></blockquote>



<h2 class="wp-block-heading"><span id="more-than-380000-exposed-apps">More than 380,000 exposed apps</span></h2>



<p class="wp-block-paragraph"><a href="https://www.axios.com/2026/05/07/loveable-replit-vibe-coding-privacy" target="_blank" rel="noreferrer noopener nofollow">Israeli cybersecurity firm RedAccess discovered </a>380,000 publicly accessible applications built with vibe-coding tools like Lovable, Replit, Base44, and Netlify. Out of those, around 5,000 had virtually no security or authentication and about 40% exposed sensitive data.</p>



<p class="wp-block-paragraph"><a href="https://www.wired.com/story/thousands-of-vibe-coded-apps-expose-corporate-and-personal-data-on-the-open-web/" target="_blank" rel="noreferrer noopener nofollow">WIRED</a> independently verified the findings, confirming exposed hospital schedules with physician PII, go-to-market strategy presentations, complete customer service chatbot logs, and shipping cargo records.</p>



<p class="wp-block-paragraph">Separately, <a href="https://escape.tech/state-of-security-of-vibe-coded-apps" target="_blank" rel="noreferrer noopener nofollow">Escape.tech</a> scanned 5,600 vibe-coded applications and found over 2,000 critical vulnerabilities, 400+ exposed API keys, and 175 instances of personal data exposure in live production systems. Their methodology was deliberately conservative: it included passive scanning only, educational and healthcare domains excluded.</p>



<p class="wp-block-paragraph">The actual exposure is likely far worse.</p>



<p class="wp-block-paragraph">Gartner&#8217;s &#8220;Predicts 2026&#8221; report forecasts that by 2028, prompt-to-app approaches adopted by citizen developers will increase software defects by 2,500%.</p>



<h2 class="wp-block-heading"><span id="the-anatomy-of-a-vibe-coded-breach">The anatomy of a vibe-coded breach</span></h2>



<p class="wp-block-paragraph">The pattern is remarkably consistent. For example, the Lovable + Supabase architecture that powers thousands of vibe-coded apps. Lovable generates a React frontend that communicates with a Supabase PostgreSQL database via PostgREST.</p>



<p class="wp-block-paragraph">To enable this communication, it embeds an anonymous API key directly in the JavaScript bundle which is visible to anyone who opens browser DevTools.</p>



<p class="wp-block-paragraph">This key is not meant to be secret. Supabase documentation explicitly states that the&nbsp;anon&nbsp;key is public and that&nbsp;<strong>Row-Level Security (RLS)</strong>&nbsp;should protect the data. RLS defines which rows each user can read. The problem is that Supabase defaults to RLS disabled during development, and vibe coders — who have never heard of RLS — ship to production without enabling it.</p>



<p class="wp-block-paragraph">The result: a single&nbsp;curl&nbsp;command with the publicly available key returns the entire database. Conveniently, no hacking is required.</p>



<p class="wp-block-paragraph">This exact root cause was behind the&nbsp;<strong>Moltbook breach</strong>&nbsp;in February 2026, where 1.5 million API tokens and 35,000 email addresses were exposed within three days of launch. The founder had publicly stated &#8220;I didn&#8217;t write a single line of code.&#8221;</p>



<p class="wp-block-paragraph">It was also behind&nbsp;<strong>CVE-2025-48757</strong>, a formal CVE for missing RLS in Lovable-generated Supabase projects affecting 170+ production applications.</p>



<h2 class="wp-block-heading"><span id="ai-eliminates-the-easy-bugs-and-introduces-the-dangerous-ones">AI eliminates the easy bugs and introduces the dangerous ones</span></h2>



<p class="wp-block-paragraph"><a href="https://www.veracode.com/resources/analyst-reports/2025-genai-code-security-report/" target="_blank" rel="noreferrer noopener nofollow">Veracode&#8217;s 2025 GenAI Code Security Report</a> tested over 100 LLMs across four programming languages and found that 45% of AI-generated code contains security vulnerabilities, which is exactly 2.74 times more frequently than human-written code.</p>



<p class="wp-block-paragraph">Apiiro&#8217;s research on Fortune 50 enterprises showed that while AI coding assistants increased development velocity by 4x, they simultaneously produced 10x more security findings, with privilege escalation paths up 322% and design-level authentication flaws up 153%.</p>



<p class="wp-block-paragraph">The irony is that AI genuinely reduces surface-level bugs. Syntax errors dropped 76%, and simple logic bugs fell 60%. But it introduces&nbsp;<strong>architectural authorization flaws</strong>&nbsp;such as code that is syntactically perfect, passes all tests, but asks the wrong question: &#8220;is this user logged in?&#8221; instead of &#8220;is this user allowed to access&nbsp;<em>this specific resource</em>?&#8221;</p>



<p class="wp-block-paragraph">SAST tools cannot catch this because it is not a code error: the code does exactly what it says. The problem is that it says the wrong thing. In one Lovable EdTech incident, the AI generated authentication logic that was&nbsp;<strong>inverted</strong>: anonymous users received full access while authenticated users were blocked.</p>



<p class="wp-block-paragraph">In the end, 18,697 user records were exposed, including 4,538 student accounts from UC Berkeley and UC Davis.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Vibe coding optimizes for features, not permissions. Access control is an architectural decision made implicitly by AI, and those implicit decisions are often wrong.</p>
<cite>Equixly</cite></blockquote>



<h2 class="wp-block-heading"><span id="performance-scalability-and-the-maintainability-question">Performance, scalability, and the maintainability question</span></h2>



<p class="wp-block-paragraph">Security is not the only non-functional requirement that vibe-coded applications fail to meet. AI-generated code frequently includes <strong>unnecessary sequential API calls</strong> instead of batch operations, <strong>lacks caching and database indexing</strong>, <strong>pulls in entire libraries for single functions</strong>, and introduces <strong>N+1 query problems</strong>. This means that an app that works with 10 test users often falls over with higher user numbers.</p>



<p class="wp-block-paragraph">Then there is <strong>maintainability</strong>. AI generates code without explaining&nbsp;<em>why</em>&nbsp;decisions were made. There is no design documentation, architectural decision records or tests. When AI generates a new version, it often rewrites the entire codebase rather than incrementally improving it.</p>



<p class="wp-block-paragraph">If the original vibe coder leaves the company, <strong>the application becomes unmaintainable.</strong> This is vendor lock-in 2.0. &nbsp;Rather than a traditional vendor, we’re dependent on a particular AI tool.</p>



<h2 class="wp-block-heading"><span id="the-economics-and-responsibility-have-flipped">The economics (and responsibility) have flipped</span></h2>



<p class="wp-block-paragraph">Despite the risks, <strong>vibe coding is reshaping software economics</strong> in ways that cannot be ignored. KPMG reported in 2025 that generative AI coding is helping enterprises reduce their reliance on large SaaS vendors.</p>



<p class="wp-block-paragraph"><a href="https://hbr.org/2026/04/the-end-of-one-size-fits-all-enterprise-software" target="_blank" rel="noreferrer noopener nofollow">Harvard Business Review</a> argued that the &#8220;build vs. buy&#8221; equation has fundamentally shifted and building custom solutions with AI is now often cheaper than licensing enterprise software. The trend toward &#8220;micro-applications&#8221; &#8211; small, purpose-built tools replacing million-dollar CRM licenses &#8211; is accelerating.</p>



<p class="wp-block-paragraph">The enterprise features that used to sit behind paywalls &#8211; SSO/SAML, RBAC, audit logging, compliance exports &#8211; can increasingly be built using open APIs. At Infobip, we have built our own MCP Gateway, an Artifactory security bouncer that replicates enterprise curation features, and AI guardrails infrastructure. All were <strong>alternatives to buying vendor software.</strong></p>



<p class="wp-block-paragraph">But this freedom comes with a condition. Without security, performance, and governance standards, the same democratization that liberates organizations from vendor lock-in creates a new class of risk that traditional security programs were never built to handle.</p>



<h2 class="wp-block-heading"><span id="owasp-now-has-a-top-10-for-agentic-applications">OWASP now has a Top 10 for agentic applications</span></h2>



<p class="wp-block-paragraph">In December 2025, OWASP published its first <a href="https://genai.owasp.org/resource/owasp-top-10-for-agentic-applications-for-2026/" target="_blank" rel="noreferrer noopener nofollow">Top 10 for Agentic Applications</a>, reviewed by NIST, Microsoft&#8217;s AI Red Team, Oracle, and the Alan Turing Institute. The list includes Agent Goal Hijack (prompt injection redirecting agent objectives), Tool Misuse and Exploitation (over-privileged tool access), Agentic Supply Chain Vulnerabilities (poisoned MCP servers), and Human-Agent Trust Exploitation (agents manipulating humans into approving harmful actions).</p>



<p class="wp-block-paragraph">The incidents are already real. EchoLeak demonstrated a <strong>zero-click attack</strong> where a crafted email silently triggered Microsoft 365 Copilot to exfiltrate confidential data. The Replit Vibe Coding Meltdown saw an agent delete a production database and then generate false outputs to hide the mistake. A malicious MCP server impersonating Postmark on npm secretly BCC&#8217;d emails to an attacker.</p>



<p class="wp-block-paragraph">This new OWASP report does a good job at mapping out agentic threats. A separate report<a href="https://go.xint.io/hubfs/Xint%20io%20AI%20coding%20vulnerabilities%20report.pdf?hsLang=en" target="_blank" rel="noreferrer noopener nofollow"> created by Xint</a>, interestingly explains that the most damaging failures are still the oldest ones. Having tested 28 applications, Xint had 8,827 detections, which were collapsed into 513 findings and then 434 verified issues. The most notable examples in the list are very familiar:</p>



<ul class="wp-block-list">
<li>Secrets exposure (18 verified findings and 11 critical findings)</li>



<li>Authorization/IDOR flaws (88 verified findings, 2 critical findings)</li>



<li>Resource exhaustion/Dos (93 verified findings, 3 critical findings) </li>



<li>Access-boundary weaknesses, such as traversal and SSRF (54 verified findings)</li>
</ul>



<p class="wp-block-paragraph">In other words, ambient generative IT does not replace classic application security, but rather makes it more urgent and distributed. For us as security experts, it also makes it noticeably harder to ignore.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="355" src="https://shiftmag.dev/wp-content/uploads/2026/07/Screenshot-2026-07-24-at-15.56.04-1-1024x355.png?x32039" alt="" class="wp-image-11083" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/Screenshot-2026-07-24-at-15.56.04-1-1024x355.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/Screenshot-2026-07-24-at-15.56.04-1-300x104.png 300w, https://shiftmag.dev/wp-content/uploads/2026/07/Screenshot-2026-07-24-at-15.56.04-1-768x266.png 768w, https://shiftmag.dev/wp-content/uploads/2026/07/Screenshot-2026-07-24-at-15.56.04-1.png 1467w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">&#8220;Shadow AI&#8221; is arguably much worse than Shadow IT. </figcaption></figure>



<h2 class="wp-block-heading"><span id="an-effective-ai-governance-framework-needs-6-elements">An effective AI governance framework needs 6 elements</span></h2>



<p class="wp-block-paragraph">Gartner&#8217;s January 2026 report &#8220;How to Secure Enterprise Agentic AI Ambition&#8221; defines five workstreams for an Agentic AI Cybersecurity Program: </p>



<ul class="wp-block-list">
<li><strong>Multichannel Discovery</strong> (find all AI agents, sanctioned and shadow)</li>



<li><strong>Access Modeling</strong> (unique identity and least privilege for every agent)</li>



<li><strong>Scoped Agency</strong> (define scope early, enforce at runtime)</li>



<li><strong>Model Risk Management </strong>(red teaming and guardrails)</li>



<li><strong>Intent-based Monitoring</strong> (behavioral analytics replacing traditional SLAs)</li>
</ul>



<p class="wp-block-paragraph">At the policy level, an effective AI governance framework needs six elements: </p>



<ol class="wp-block-list">
<li><strong>Mandatory approval </strong>before any AI tool is used, </li>



<li><strong>A hard data boundary</strong> preventing confidential information from entering unapproved systems, </li>



<li><strong>Human accountability</strong> for all AI-generated output, </li>



<li><strong>Identical code review standards </strong>for AI and human code, </li>



<li><strong>Default-blocked autonomous agents</strong> requiring security approval</li>



<li><strong>Ethical AI principles</strong> ensuring explainability and fairness</li>
</ol>



<p class="wp-block-paragraph">At the technical enforcement level, organizations need managed settings that block destructive commands, prevent data exfiltration, restrict access to secret storage locations, control which AI marketplaces and MCP servers are permitted, and maintain full audit telemetry of every tool invocation.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">CISOs must prioritize deterministic controls to minimize agentic privilege abuses and contain AI agents&#8217; agency, instead of relying primarily on AI to police itself.</p>
<cite>Gartner</cite></blockquote>



<h2 class="wp-block-heading"><span id="security-must-be-built-into-every-ai-tool-agent-config-and-policy-from-day-one">Security must be built into every AI tool, agent config, and policy from day one</span></h2>



<p class="wp-block-paragraph">There’s no doubt whether Ambient Generative AI will be the norm. The 380,000 exposed applications RedAccess found are not an anomaly, they are the new normal. Organizations are now past the point of deciding on whether they’ll allow AI-assisted development across development, and approaching the point of deciding on the governance, tooling and culture to make it safe.</p>



<p class="wp-block-paragraph">The same CI/CD pipelines, SAST scanners, code review processes, and identity governance frameworks that protect professionally engineered software must extend to every application, regardless of who (or what) wrote it. <strong>Code is code, no matter who authored it</strong>.</p>



<p class="wp-block-paragraph">The ambient future requires ambient security. And that security cannot be an afterthought bolted on after the breach. Security must be woven into the fabric of every AI tool, agent configuration, and organizational policy from day one.</p>
<p>The post <a href="https://shiftmag.dev/security-must-be-built-in-as-everyone-becomes-a-builder-10889/">Security Must Be Built In as Everyone Becomes a Builder</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The Real Source of Truth Is No Longer Code &#8211; It’s the Specifications</title>
		<link>https://shiftmag.dev/the-real-source-of-truth-is-no-longer-code-its-the-specifications-10863/</link>
		
		<dc:creator><![CDATA[Marko Crnjanski]]></dc:creator>
		<pubDate>Wed, 22 Jul 2026 14:23:31 +0000</pubDate>
				<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AI-generated code]]></category>
		<category><![CDATA[Codeplain]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[software developer career]]></category>
		<category><![CDATA[spec-driven development]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=10863</guid>

					<description><![CDATA[<p>AI can write the code. The harder question is whether anyone still understands what it was supposed to do six months later.</p>
<p>The post <a href="https://shiftmag.dev/the-real-source-of-truth-is-no-longer-code-its-the-specifications-10863/">The Real Source of Truth Is No Longer Code &#8211; It’s the Specifications</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Spec-driven development</strong> aims to change that: the source of truth is no longer the code itself, but a clearly defined intent that the code can be regenerated from, tested against, and maintained with.</p>



<p class="wp-block-paragraph">At WeAreDevelopers in Berlin, I spoke with <strong>Predrag Radenkovic</strong>, CTO at Codeplain, about why some developers are skeptical of &#8220;review the spec, not the code&#8221; &#8211; and where this approach works today, and where teams still need to be careful.</p>



<h2 class="wp-block-heading"><span id="what-is-the-main-shift-from-prompt-driven-coding-to-spec-driven-development">What is the main shift from prompt-driven coding to spec-driven development?</span></h2>



<p class="wp-block-paragraph"><strong>Predrag</strong>: Prompt-driven coding operates at the level of code. Every decision an engineer makes gets translated directly into the implementation. All the maintenance happens on the level of code, where the intent behind the original solution is no longer available to the coding agent.</p>



<p class="wp-block-paragraph">Spec-driven development raises the level of abstraction. <strong>You treat the spec as the only source of truth</strong>: you define the necessary detail in natural language, and the system is built and validated from that. The intent persists in a simpler, more readable form. So you&#8217;re maintaining specs instead of code, and regenerating the code from them.</p>



<p class="wp-block-paragraph"><strong>Agentic skills</strong> are what make that workable in practice. Developers don&#8217;t want to write specs from scratch, but they&#8217;re happy to read them, so the agent drafts the spec incrementally, and the developer reviews and shapes it.</p>



<h2 class="wp-block-heading"><span id="why-are-integrations-a-good-fit-for-ai-assisted-development-and-where-does-direct-llm-based-code-generation-usually-break-down">Why are integrations a good fit for AI-assisted development, and where does direct LLM-based code generation usually break down?</span></h2>



<p class="wp-block-paragraph"><strong>Predrag</strong>: With integration development, you&#8217;re essentially becoming an<strong> expert on third-party systems</strong> <strong>that LLMs already know better than any human</strong>. Agents are strong at researching the domain, understanding the APIs, checking implementations against the current documentation.</p>



<p class="wp-block-paragraph">Where classic AI-assisted development falls short is <strong>maintenance</strong>. Integrations break in production all the time, and once you have a large number of them, you’re constantly patching code against systems you don’t control.</p>



<p class="wp-block-paragraph">With spec-driven development, <strong>the intent lives in the spec</strong>. So, when a third-party system changes and breaks an integration, the fix is usually a very small edit to the spec, and then you regenerate the code from it.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="592" src="https://shiftmag.dev/wp-content/uploads/2026/07/codeplain_1-1024x592.png?x32039" alt="" class="wp-image-10874" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/codeplain_1-1024x592.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/codeplain_1-300x174.png 300w, https://shiftmag.dev/wp-content/uploads/2026/07/codeplain_1-768x444.png 768w, https://shiftmag.dev/wp-content/uploads/2026/07/codeplain_1.png 1089w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Photo: <a href="https://www.codeplain.ai/" target="_blank" rel="noreferrer noopener">Codeplai.ai</a></figcaption></figure>



<h2 class="wp-block-heading"><span id="codeplain-treats-reusable-specifications-as-the-source-of-truth-what-makes-a-good-spec-and-what-do-developers-often-get-wrong-when-writing-one">Codeplain treats reusable specifications as the source of truth. What makes a good spec, and what do developers often get wrong when writing one?</span></h2>



<p class="wp-block-paragraph"><strong>Predrag</strong>: Good specs are <strong>complete, precise, unambiguous, and free of conflicting requirements</strong>. Also, their functionality is split into smaller chunks of reasonable complexity. Free-form specs aren&#8217;t ideal because the agent has to process everything at once and validating the requirements gets hard. Structuring the spec into units is what makes it both readable and checkable.</p>



<p class="wp-block-paragraph">That&#8217;s why we built the ***plain language. It lets engineers express intent precisely and keep full control over the functionality that gets implemented from it.</p>



<p class="wp-block-paragraph">What we&#8217;ve noticed over 2.5 years of working on spec-driven development is that <strong>engineers aren&#8217;t especially good at writing precise specs, but AI agents are</strong>. And the other way around: engineers are willing to review a spec thoroughly. That’s the reason why we built agentic skills for writing and validating specs.</p>



<h2 class="wp-block-heading"><span id="if-implementations-can-be-checked-against-the-specification-how-does-that-change-testing-code-review-and-trust-in-ai-generated-code">If implementations can be checked against the specification, how does that change testing, code review, and trust in AI-generated code?</span></h2>



<p class="wp-block-paragraph"><strong>Predrag</strong>: The first premise of the SDD lifecycle is that <strong>engineers thoroughly review the specs</strong>. Once the specs are accurate, much of the work is done. Codeplain&#8217;s code generator then builds the code and, more importantly, validates that it conforms to the specs.</p>



<p class="wp-block-paragraph">We do this through black-box tests written entirely from the specifications and executed against the code that was built. In the end, it&#8217;s up to the engineer to do manual testing and, if they want, to check all the test scenarios our platform created.</p>



<h2 class="wp-block-heading"><span id="from-your-experience-scaling-integrations-what-was-the-biggest-technical-lesson-about-using-structured-specs-instead-of-direct-code-generation">From your experience scaling integrations, what was the biggest technical lesson about using structured specs instead of direct code generation?</span></h2>



<p class="wp-block-paragraph"><strong>Predrag</strong>: When you develop integrations, you become an expert in someone else&#8217;s system without creating any additional value compared to your competitors. And it gets harder as the volume of integrations grows. The biggest issue, though, is maintaining them, because<strong> around 5% of integrations break each month due to changes in systems you can&#8217;t control</strong>.</p>



<p class="wp-block-paragraph">Coding agents are already great at researching and understanding external systems, and we use them to help us write the proper specifications. Once an integration is fully defined in a spec, it&#8217;s easier and faster to maintain, because the review cycle boils down to changes in the specs and the rest is automated.</p>



<h2 class="wp-block-heading">Some developers are skeptical of ideas like &#8220;review the spec, not the code&#8221;. Where does this approach work today, and where should teams still be careful?</h2>



<p class="wp-block-paragraph"><strong>Predrag</strong>: We picked integrations as the beachhead for our platform with exactly this question in mind. <strong>The approach works best where the implementation can be validated completely</strong>, where you can check the behavior against the spec without a human in the loop. Integrations fit that well, and we&#8217;ve seen the same hold in a couple of other verticals: scraper development and ETLs.</p>



<p class="wp-block-paragraph">Where teams should be careful is anywhere full validation isn&#8217;t possible. Anything with a user interface, for example, can&#8217;t be checked the same way today. But we see a solution on the horizon. The technology just needs to mature, and it&#8217;s moving quickly.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="How CodePlane Validates Third-Party APIs with Spec-Driven Agents" width="500" height="281" src="https://www.youtube.com/embed/kWg7s3JKkag?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>


<figure class="wp-block-post-featured-image"><img loading="lazy" decoding="async" width="1200" height="630" src="https://shiftmag.dev/wp-content/uploads/2026/07/codeplain_main.png?x32039" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/codeplain_main.png 1200w, https://shiftmag.dev/wp-content/uploads/2026/07/codeplain_main-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2026/07/codeplain_main-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/codeplain_main-768x403.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure><p>The post <a href="https://shiftmag.dev/the-real-source-of-truth-is-no-longer-code-its-the-specifications-10863/">The Real Source of Truth Is No Longer Code &#8211; It’s the Specifications</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>It May Take Longer to Review a PR Than It Takes to Write It</title>
		<link>https://shiftmag.dev/it-may-take-longer-to-review-a-pr-than-it-takes-to-write-it-9927/</link>
		
		<dc:creator><![CDATA[Ivan Pelivanovic]]></dc:creator>
		<pubDate>Fri, 17 Jul 2026 14:06:11 +0000</pubDate>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AI code review]]></category>
		<category><![CDATA[developer tools]]></category>
		<category><![CDATA[skill erosion]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=9927</guid>

					<description><![CDATA[<p>That mismatch is becoming the real cost of AI-assisted development: code ships faster, but the work of understanding it, checking it, and trusting it hasn’t sped up at all.</p>
<p>The post <a href="https://shiftmag.dev/it-may-take-longer-to-review-a-pr-than-it-takes-to-write-it-9927/">It May Take Longer to Review a PR Than It Takes to Write It</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="2100" height="1413" src="https://shiftmag.dev/wp-content/uploads/2026/07/INF09895-scaled.jpg?x32039" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/INF09895-scaled.jpg 2100w, https://shiftmag.dev/wp-content/uploads/2026/07/INF09895-300x202.jpg 300w, https://shiftmag.dev/wp-content/uploads/2026/07/INF09895-1024x689.jpg 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/INF09895-768x517.jpg 768w" sizes="auto, (max-width: 2100px) 100vw, 2100px" /></figure>


<p class="wp-block-paragraph"><strong>Olena Babenko</strong>, Staff Software engineer at Aiven, cut straight to the uncomfortable truth in a recent interview I had with her in London.</p>



<p class="wp-block-paragraph">The oversight model collapses the moment the person approving the output can <strong>no longer reliably tell whether it’s good</strong>, bad, or just convincingly wrong.</p>



<p class="wp-block-paragraph">She pointed to a growing mismatch between how fast code is being generated and how slowly it is actually being checked.</p>



<h2 class="wp-block-heading"><span id="ai-is-speeding-up-code-creation-but-review-can%e2%80%99t-keep-up">AI is speeding up code creation, but review can’t keep up</span></h2>



<p class="wp-block-paragraph">Olena says she keeps running into the same cycle, that looks like this &#8220;<strong>a steady stream of announcements about how the newest model will change software engineering</strong>, followed almost weekly by another company unveiling its most powerful release yet&#8221;.</p>



<p class="wp-block-paragraph">Then someone actually turns the model on and gives it a simple, but domain-specific task, and it hallucinates, a lot</p>



<p class="wp-block-paragraph">She sees this happen often enough that the pattern itself has become the story. The industry isn&#8217;t there yet, she says, at least not in the systems she works with.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="689" src="https://shiftmag.dev/wp-content/uploads/2026/07/INF09862-1-1024x689.jpg?x32039" alt="" class="wp-image-10757" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/INF09862-1-1024x689.jpg 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/INF09862-1-300x202.jpg 300w, https://shiftmag.dev/wp-content/uploads/2026/07/INF09862-1-768x517.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Photo: Marin Pavelić</figcaption></figure>



<p class="wp-block-paragraph">The real problem, in her view, shows up one step later in the pipeline: engineers are spending less time writing code and more time reviewing it, and the incentive structures around that shift have not caught up.</p>



<p class="wp-block-paragraph">Therefore, I asked her what that imbalance looks like:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">We have an ability to generate code very, very fast, thousands of lines of code, and without thinking how people perceive that code, how readable it is, how good it is, how simple it is to understand, but code reviewing, scaling, and automation is not on that same level yet.</p>
</blockquote>



<p class="wp-block-paragraph">As a result, you can create a PR, and a person who actually reviews it took <strong>much more time to review it than you spent writing it</strong>. This means that the problem, at least according to Olena, is structural, not just technical:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The current system and a lot of managerial tools are made on KPIs, they are made on individual contributions of code writing, so if you look at the GitHub contributions or Jira tickets, they are praising writing code, finishing tasks, creating PRs, while the people who do the PR reviews, their jobs are not valued that much.</p>
</blockquote>



<p class="wp-block-paragraph">Add unusually verbose AI-generated code into that mix, and reviewing takes even longer than the writing did.</p>



<h2 class="wp-block-heading"><span id="the-review-burden-has-always-been-there-but-it%e2%80%99s-getting-worse">The review burden has always been there, but it’s getting worse</span></h2>



<p class="wp-block-paragraph">Olena is careful to point out this isn&#8217;t new. She says that a reviewer burden existed even before all this and <strong>AI is just amplifying this problem</strong>.</p>



<p class="wp-block-paragraph">She describes a colleague&#8217;s experience at a previous company: engineers spending two weeks on an issue, then dropping a thousand-line PR on a reviewer who was, realistically, expected to just hit merge, not actually engage with the work. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="689" src="https://shiftmag.dev/wp-content/uploads/2026/07/INF09872-1024x689.jpg?x32039" alt="" class="wp-image-10758" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/INF09872-1024x689.jpg 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/INF09872-300x202.jpg 300w, https://shiftmag.dev/wp-content/uploads/2026/07/INF09872-768x517.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Photo: Marin Pavelić</figcaption></figure>



<p class="wp-block-paragraph">The fix, in her view, is not more automation but <strong>earlier communication, smaller PRs, and separating refactoring from actual logic changes</strong>, paired with management that treats reviewing as real work worth rewarding:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">This is a question of management.</p>
</blockquote>



<h2 class="wp-block-heading"><span id="ai-can-make-tests-look-good-without-actually-making-the-code-reliable">AI can make tests look good without actually making the code reliable</span></h2>



<p class="wp-block-paragraph">Olena also pointed to one of the first things AI tends to break in a codebase: <strong>unit tests</strong>. Writing them is boring, so people delegate it a lot, but AI can already game the system, making tests pass without making the code reliable.</p>



<p class="wp-block-paragraph">By her account, models will patch internal implementations or hardcode expected outputs rather than genuinely verify behavior, leaving teams with high coverage numbers that protect against nothing &#8211; though the damage doesn’t show up right away.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">They are not falling apart in one day. This is a process that&#8217;s eroding your system with a small step day by day until you realize that your new system is really unreliable, really something you&#8217;re not supposed to do in production.</p>
</blockquote>



<p class="wp-block-paragraph">By the time anyone notices, <strong>the damage started much earlier</strong>.</p>



<h2 class="wp-block-heading">&#8216;We are delegating too much thinking to AI&#8217;</h2>



<p class="wp-block-paragraph">Olena&#8217;s biggest long-term concern is <strong>skill erosion</strong>:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">We’re delegating too much thinking to AI. But AI doesn’t become an expert just because we use it: it has no memory, it can’t really learn, and it can’t build experience. Humans can do that, at least for now. The problem is that we’re not really learning from the experience either, so our skills and critical thinking keep getting weaker.</p>
</blockquote>



<p class="wp-block-paragraph">That undercuts the standard reassurance that a human stays in the loop. &#8220;You might end up in a situation where you have a human in the loop, but those people do not have correct skills anymore&#8221;, Olena said.</p>



<p class="wp-block-paragraph"> A safety net only works if the person holding it still knows how to catch something.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://shiftmag.dev/wp-content/uploads/2026/07/Olena-Babenko-i-Pelin-2-1024x768.jpg?x32039" alt="" class="wp-image-10759" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/Olena-Babenko-i-Pelin-2-1024x768.jpg 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/Olena-Babenko-i-Pelin-2-300x225.jpg 300w, https://shiftmag.dev/wp-content/uploads/2026/07/Olena-Babenko-i-Pelin-2-768x576.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Photo: Ivan Pelivanović</figcaption></figure>
<p>The post <a href="https://shiftmag.dev/it-may-take-longer-to-review-a-pr-than-it-takes-to-write-it-9927/">It May Take Longer to Review a PR Than It Takes to Write It</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Lovable’s Co-Founder on Why Developers Use a Platform Made for Non-Technical Users</title>
		<link>https://shiftmag.dev/lovables-co-founder-on-why-developers-still-use-a-platform-made-for-non-technical-users-10744/</link>
		
		<dc:creator><![CDATA[Anastasija Uspenski]]></dc:creator>
		<pubDate>Thu, 16 Jul 2026 14:10:28 +0000</pubDate>
				<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Lovable]]></category>
		<category><![CDATA[Raise Summit]]></category>
		<category><![CDATA[Raise Summit 2026]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=10744</guid>

					<description><![CDATA[<p>I went to Raise Summit in Paris to see whether Lovable is just another tool for non-technical founders - or something developers can actually use to build faster.</p>
<p>The post <a href="https://shiftmag.dev/lovables-co-founder-on-why-developers-still-use-a-platform-made-for-non-technical-users-10744/">Lovable’s Co-Founder on Why Developers Use a Platform Made for Non-Technical Users</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/07/Anton-1.png?x32039" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/Anton-1.png 1200w, https://shiftmag.dev/wp-content/uploads/2026/07/Anton-1-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2026/07/Anton-1-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/Anton-1-768x403.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>


<p class="wp-block-paragraph">Lovable lets people <strong>describe the software they want to build in plain</strong> in natural language, and then the platform creates it. It handles security, builds complete solutions, and lets users add artificial intelligence to their applications.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Essentially, it helps people build entire apps, and company founders, small businesses, and large corporations all use it.</p>
</blockquote>



<p class="wp-block-paragraph">This is how <strong>Anton Osika</strong>, co-founder of Lovable, described his platform. Users create over a <strong>million apps on it every week</strong>, and these apps attract around 700 million monthly visits.</p>



<p class="wp-block-paragraph">It sounds like a true paradise for non-technical people who want to build products and scale their businesses, but I wanted to know <strong>what value Lovable brings to developers, who make up</strong> <strong>20% of the user base</strong>. I found my answers at this year’s <a href="https://www.raisesummit.com/" target="_blank" rel="noreferrer noopener">Raise Summit in Paris</a>, during the fireside chat between Osika and Mark Cuban, the investor and serial entrepreneur.</p>



<h2 class="wp-block-heading"><span id="1-for-a-quick-project-start">1. For a quick project start</span></h2>



<p class="wp-block-paragraph">Cuban highlighted that one of Lovable&#8217;s greatest strengths is how it helps people become entrepreneurs:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">We all have ideas, right? But taking the first step is usually the hardest part.</p>
</blockquote>



<p class="wp-block-paragraph">The platform&#8217;s creator strongly agreed. He explained that although people initially viewed Lovable as a software engineer (or even as competition), they eventually came to see it as <strong>an AI co-founder and partner:</strong></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">When you start a company, the hard part is not just building the software. You also have to register the business, handle banking, set up payment systems, and organize operations.</p>
</blockquote>



<p class="wp-block-paragraph">As he explained, users now build their businesses by talking to the platform and giving it prompts like:</p>



<ul class="wp-block-list">
<li>&#8220;I am launching my business. What is the next step?&#8221;</li>



<li>&#8220;How do I set up global payments?&#8221;</li>



<li>&#8220;How do I get customers?&#8221;</li>



<li>&#8220;How do I build internal systems?&#8221;</li>
</ul>



<p class="wp-block-paragraph">At the very start of product development, Lovable significantly<strong> shortens the path from an idea to the first prototype</strong>. </p>



<p class="wp-block-paragraph">This is especially true for developers who know what they want to build but do not want to waste time starting from scratch or dealing with complex business steps. Previously, they had to hire an accountant, a lawyer, or a consultant for these tasks.</p>



<h2 class="wp-block-heading"><span id="2-for-mvp-and-idea-validation">2. For MVP and idea validation</span></h2>



<p class="wp-block-paragraph">For developers working on new products, Lovable serves as an MVP machine. It helps them test <strong>whether an idea has market value</strong> before they invest serious time in fully custom development.</p>



<p class="wp-block-paragraph">According to Osika, if you are close to a problem and understand it well, you are often the best person to know what solution to build. He said that building this kind of solution used to be hard because it required too many resources:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Today, you can build a large part of it on your own. That is what I generally recommend. We recently conducted a survey of 10,000 of our users, and about 80% of them are building something they plan to monetize at some point.</p>
</blockquote>



<p class="wp-block-paragraph">Osika also pointed out that many people who successfully monetize their products have a decade or more of professional experience. They combine their expertise with Lovable to build products that attract actual users.</p>



<p class="wp-block-paragraph">In this case, Lovable serves as a validation tool. This means you first create a working version, then <strong>measure market interest</strong>, and only then expand the product.</p>



<h2 class="wp-block-heading"><span id="3-for-internal-tools">3. For internal tools</span></h2>



<p class="wp-block-paragraph">Lovable is not just for robust, new applications, it also works well for internal tools, especially when teams need <strong>a quick tool for operational processes</strong>.</p>



<p class="wp-block-paragraph">As an example, Anton mentioned Nursa, a US company that allowed its employees to use Lovable for various needs, ranging from marketing to administrative processes. </p>



<p class="wp-block-paragraph">The results were highly cost-effective:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">They have already replaced more than ten software subscriptions that they used to pay for, and they estimate they will save about a million dollars a year.</p>
</blockquote>



<p class="wp-block-paragraph">This example shows that founders can use Lovable to quickly assemble small tools that cut costs and replace multiple separate SaaS solutions. </p>



<p class="wp-block-paragraph">This way, they save both time and money, and they can<strong> focus on their core business</strong>.</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/07/anton2-1024x538.png?x32039" alt="" class="wp-image-10769" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/anton2-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/anton2-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2026/07/anton2-768x403.png 768w, https://shiftmag.dev/wp-content/uploads/2026/07/anton2.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Photo: Anastasija Uspenski</figcaption></figure>



<h2 class="wp-block-heading"><span id="4-for-integrations-and-business-infrastructure">4. For integrations and business infrastructure</span></h2>



<p class="wp-block-paragraph">Cuban noted that integrating AI into large companies is often much more complicated than people expect:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">We see companies like Microsoft hiring thousands of engineers to implement AI solutions.</p>
</blockquote>



<p class="wp-block-paragraph">Therefore, in addition to building apps, Lovable allows users to integrate these tools into their business infrastructure.</p>



<p class="wp-block-paragraph">This enables developers to connect<strong> the product to databases, internal tools, ERP systems</strong>, and other existing company systems much faster, without tedious manual work or complex initial setups.</p>



<p class="wp-block-paragraph">He observed:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">One of the major challenges is connecting to existing systems: ERP systems, internal databases, and current software tools.</p>
</blockquote>



<p class="wp-block-paragraph">To solve this, Lovable enables secure and controlled connections, which allows companies to use AI effectively.</p>



<p class="wp-block-paragraph">For developers, this matters because it allows them to look beyond the frontend and quickly extend the application’s reach into actual business processes. </p>



<p class="wp-block-paragraph">In other words, Lovable helps them work more efficiently, not just in building products, but also in <strong>fitting them into a broader technical and business ecosystem</strong>.</p>



<h2 class="wp-block-heading"><span id="5-for-analytics-reporting-and-decision-making">5. For analytics, reporting, and decision-making</span></h2>



<p class="wp-block-paragraph">Finally, Lovable helps build a layer that connects business data with the tools teams use for strategy, finance, and operational planning.</p>



<p class="wp-block-paragraph">Instead of lengthy development from scratch, developers can deliver tools that help the team find answers faster and<strong> make data-driven decisions</strong>.</p>



<p class="wp-block-paragraph">Cuban described this through his own use of an AI agent:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">I ask it: &#8220;How fast are we growing in a specific segment?&#8221; &#8220;Which countries should we consider for a new office?&#8221;</p>
</blockquote>



<p class="wp-block-paragraph">This application is important for developers because it shows that Lovable can serve as the foundation for tools that are not just visually functional, but also business-relevant. </p>



<p class="wp-block-paragraph">As Anton Osika said, &#8220;access to core data is one of the key ways we <strong>unlock the value of artificial intelligence</strong>.&#8221; This is exactly what gives developers the power to build reliable tools for analysis, forecasting, and decision support.</p>



<h2 class="wp-block-heading"><span id="and-here%e2%80%99s-my-two-cents%e2%80%a6">And here’s my two cents…</span></h2>



<p class="wp-block-paragraph">Ultimately, this fireside chat left me with a clear realization: using Lovable will not make everyone a developer, let alone a good one. But developers who embrace it can become <strong>significantly more effective</strong>. They build faster, work smarter, and spend less time on repetitive tasks.</p>



<p class="wp-block-paragraph">As Anton Osika pointed out, <strong>only about a fifth of the</strong> <strong>platform&#8217;s users possess a technical background</strong>. Yet, these individuals know exactly how to leverage the tool to their advantage.</p>



<p class="wp-block-paragraph">This marks the true shift in our industry. We are not witnessing the end of software engineers, but rather the rise of creators who understand the core problem deeply enough to build solutions in record time.</p>
<p>The post <a href="https://shiftmag.dev/lovables-co-founder-on-why-developers-still-use-a-platform-made-for-non-technical-users-10744/">Lovable’s Co-Founder on Why Developers Use a Platform Made for Non-Technical Users</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How Convenient JPA Defaults Broke Our Kotlin Microservice</title>
		<link>https://shiftmag.dev/jpa-defaults-kotlin-microservice-9184/</link>
		
		<dc:creator><![CDATA[Krzysztof Frączek]]></dc:creator>
		<pubDate>Tue, 14 Jul 2026 12:56:20 +0000</pubDate>
				<category><![CDATA[Backend]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Case Study]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[software architecture]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=9184</guid>

					<description><![CDATA[<p>The promise of JPA is simple: define your entities, let the framework handle the rest. And it works until you look at what "the rest" means. </p>
<p>The post <a href="https://shiftmag.dev/jpa-defaults-kotlin-microservice-9184/">How Convenient JPA Defaults Broke Our Kotlin Microservice</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">While testing a <strong>Kotlin microservice backed by MS SQL</strong>, I found several places where <strong>convenience had quietly become a liability</strong>. </p>



<p class="wp-block-paragraph">Fortunately, there was no production incident; most issues were detected during internal testing. It is always better to learn on someone else&#8217;s mistakes, this article will help you learn on mine.</p>



<h2 class="wp-block-heading"><span id="the-architecture-in-place">The architecture in place</span></h2>



<p class="wp-block-paragraph">The service orchestrates WhatsApp campaign delivery through an asynchronous, scheduler-driven pipeline. Campaign destinations enter the system via an API and are persisted to MS SQL Server. Two background schedulers handle the processing. The first retrieves unscored destinations, invokes a scoring service to evaluate delivery priority, and assigns each destination to a bulk: either appending to an existing one or creating a new bulk when capacity is reached.</p>



<p class="wp-block-paragraph">The second scheduler manages the delivery lifecycle: it polls the external Bulk Scheduling System for status updates, submits ready bulks for sending, and coordinates priority by pausing lower-scored bulks while higher-priority ones are in flight. MS SQL serves as the central state store, maintaining campaign metadata, bulk assignments, and processing status throughout the pipeline.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="614" src="https://shiftmag.dev/wp-content/uploads/2026/04/Simic-Shiftmag-5-1024x614.png?x32039" alt="" class="wp-image-9186" srcset="https://shiftmag.dev/wp-content/uploads/2026/04/Simic-Shiftmag-5-1024x614.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/04/Simic-Shiftmag-5-300x180.png 300w, https://shiftmag.dev/wp-content/uploads/2026/04/Simic-Shiftmag-5-768x461.png 768w, https://shiftmag.dev/wp-content/uploads/2026/04/Simic-Shiftmag-5.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">An illustration of how the two schedulers interact with the MS SQL Server</figcaption></figure>



<h2 class="wp-block-heading"><span id="insert-record-in-batches">Insert record in batches</span></h2>



<p class="wp-block-paragraph">When you expect a heavy load,&nbsp;<strong>don&#8217;t insert data one by one</strong>. We learned this when a client started sending their campaign as separate HTTP requests—one message per request, all belonging to the same campaign. Our controller accepted a list of messages, but a single-element list is still a list, right? The service started returning HTTP 500 errors due to waiting too long for an available database connection.</p>



<p class="wp-block-paragraph">We solved this by introducing&nbsp;<strong>Kafka as a buffer between the API and the database</strong>. Incoming requests get published to a topic and then consumed in batches, enabling batch inserts into the database. A nice bonus came from how Kafka handles partitioning: by setting the message key properly, we ensured that&nbsp;<strong>all requests for the same campaign land in the same partition</strong>—and get processed together.</p>



<p class="wp-block-paragraph">Of course, the implementation should still handle lists properly. One caveat: Hibernate does support batch inserts (feel free to&nbsp;<a rel="noreferrer noopener" href="https://www.baeldung.com/jpa-hibernate-batch-insert-update" target="_blank">check</a>), but not when you use an IDENTITY primary key generation strategy. With IDENTITY, the database generates the ID on each insert.</p>



<p class="wp-block-paragraph">To get true batching, we bypassed Hibernate and used plain JDBC.</p>



<pre class="wp-block-code"><code>override fun submitCampaign(campaignRequest: CampaignRequest) {
    val message = campaignRequest.messages&#91;0].message
    val campaignId = campaignRequest.parameters.campaignId ?: "no-campaign-id"
    val topicKey = "${message.channelId}-${message.from}" +
                   "-${campaignRequest.parameters.templateName}-$campaignId"
    val messageBatches = campaignRequest.messages.chunked(maxMessagesPerBatch)

    messageBatches.forEach { batch -&gt;
        val batchRequest = CampaignRequest(
            messages = batch,
            parameters = campaignRequest.parameters
        )
        campaignRequestProducer.send(ProducerRecord(TOPIC_NAME, topicKey, batchRequest))
    }
}

@KafkaListener(
    topics = &#91;TOPIC_NAME],
    containerFactory = KafkaConsumerConfiguration.BATCH_LISTENER_FACTORY_BEAN
)
@Timed
fun processRequests(
    records: List&lt;ConsumerRecord&lt;String, CampaignRequest&gt;&gt;,
    ack: Acknowledgment
) {
    val groupedByCampaign = records.groupBy { it.key() }

    for ((_, recordsGroup) in groupedByCampaign) {
        val campaign = findOrCreateCampaign(...)
        val destinations = recordsGroup.flatMap { it.value().messages }.mapToDestinations(campaign)
        storeCampaignDestinations(destinations)
    }

    ack.acknowledge()
}

@Transactional
override fun batchInsert(destinations: List&lt;CampaignDestination&gt;) {
    if (destinations.isEmpty()) return

    val sql = """
        INSERT INTO cds.campaign_destination
            (campaign_id, destination, external_message_id, content, failover)
        VALUES
            (?, ?, ?, ?, ?)
    """.trimIndent()

    jdbcTemplate.batchUpdate(sql, destinations, destinations.size) { ps, dest -&gt;
        ps.setLong(1, dest.campaign.id)
        ps.setString(2, dest.destination)
        ps.setString(3, dest.externalMessageId)
        ps.setString(4, dest.content)
        ps.setString(5, dest.failover)
    }
}
</code></pre>



<p class="wp-block-paragraph">Now Kafka took the big chunk of stress, the database can easily handle the load.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="753" height="263" src="https://shiftmag.dev/wp-content/uploads/2026/04/image-2026-1-27_10-44-18.png?x32039" alt="" class="wp-image-9188" srcset="https://shiftmag.dev/wp-content/uploads/2026/04/image-2026-1-27_10-44-18.png 753w, https://shiftmag.dev/wp-content/uploads/2026/04/image-2026-1-27_10-44-18-300x105.png 300w" sizes="auto, (max-width: 753px) 100vw, 753px" /></figure>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="502" height="202" src="https://shiftmag.dev/wp-content/uploads/2026/04/image-2026-1-27_10-44-57.png?x32039" alt="" class="wp-image-9187" style="width:754px;height:auto" srcset="https://shiftmag.dev/wp-content/uploads/2026/04/image-2026-1-27_10-44-57.png 502w, https://shiftmag.dev/wp-content/uploads/2026/04/image-2026-1-27_10-44-57-300x121.png 300w" sizes="auto, (max-width: 502px) 100vw, 502px" /></figure>



<h2 class="wp-block-heading"><span id="too-complex-queries">Too complex queries</span></h2>



<p class="wp-block-paragraph">A query that&#8217;s too complex can take too long to execute, especially without proper indexes. Think about&nbsp;<strong>what data you already have in the application</strong>&nbsp;and use it to simplify things. In our case, we needed to find bulks that still had space for more recipients. The original query joined the destinations table to count how many each bulk contained, filtered by several conditions, and used a HAVING clause to check capacity.</p>



<pre class="wp-block-code"><code>@Query("""
    SELECT cb, COUNT(cd) FROM CampaignBulk cb
    LEFT JOIN CampaignDestination cd ON cd.campaignBulk = cb
    WHERE cb.campaign = :campaign AND cb.priority IN (:priorities) AND cb.waitUntil &gt; :nowWithBuffer AND cb.bulkStatus = 'CREATED'
    GROUP BY cb
    HAVING COUNT(cd) &lt; :maxBulkSize
""")
fun findNotFullAndNotExpiredBulks(campaign: Campaign, priorities: Set&lt;BulkPriority&gt;, maxBulkSize: Int, nowWithBuffer: Instant): List&lt;BulkWithCount&gt;
</code></pre>



<p class="wp-block-paragraph">The problem? A join on an unindexed column, filters without indexes, a COUNT, and a HAVING clause. Combined, it was too much for the database. The query took ages and locks escalated to entire tables. It quickly turned out that we already knew the destination count during processing. So we denormalized: we added a&nbsp;<strong><code>destinationCount</code>&nbsp;column to the&nbsp;<code>CampaignBulk</code>&nbsp;table</strong> and updated it whenever destinations were added. The new query and supporting index look like this:</p>



<pre class="wp-block-code"><code>@Query("""
    SELECT cb FROM CampaignBulk cb
    WHERE cb.campaign = :campaign
      AND cb.priority IN (:priorities)
      AND cb.waitUntil &gt; :nowWithBuffer
      AND cb.bulkStatus = 'CREATED'
      AND cb.destinationCount &lt; :maxBulkSize
""")
fun findNotFullAndNotExpiredBulks(
    campaign: Campaign,
    priorities: Set&lt;BulkPriority&gt;,
    maxBulkSize: Int,
    nowWithBuffer: Instant
): List&lt;CampaignBulk&gt;
</code></pre>



<pre class="wp-block-code"><code>CREATE NONCLUSTERED INDEX idx_campaign_bulk_count_filter
ON cds.campaign_bulk(campaign_id, bulk_status, destination_count)
INCLUDE (id, priority, wait_until, bss_bulk_id, api_key_id, creation_date, last_status_change_date);
</code></pre>



<p class="wp-block-paragraph">After these changes, the query performs well.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="500" height="199" src="https://shiftmag.dev/wp-content/uploads/2026/04/image-2026-1-27_11-10-40.png?x32039" alt="" class="wp-image-9190" style="width:814px;height:auto" srcset="https://shiftmag.dev/wp-content/uploads/2026/04/image-2026-1-27_11-10-40.png 500w, https://shiftmag.dev/wp-content/uploads/2026/04/image-2026-1-27_11-10-40-300x119.png 300w" sizes="auto, (max-width: 500px) 100vw, 500px" /></figure>



<h2 class="wp-block-heading">Concurrency: when more isn&#8217;t always better</h2>



<p class="wp-block-paragraph">We all want to process data as fast as possible. Especially in the world of virtual threads; you can spin up thousands of them and feel good about how concurrent your application is. But the&nbsp;<strong>database doesn&#8217;t share that enthusiasm</strong>. Under the hood, you have a limited Hikari connection pool. Run too many concurrent operations and your queries start timing out. Worse, when multiple threads hit the same table and the same dataset, you&#8217;re heading straight for lock contention.</p>



<p class="wp-block-paragraph">Here are a few things to consider when you need to control concurrency.</p>



<h2 class="wp-block-heading"><span id="use-shedlock"><strong>Use shedlock</strong></span></h2>



<p class="wp-block-paragraph">ShedLock is a library that ensures scheduled tasks run only once across multiple application instances. It works by creating a lock record in a shared storage—typically a database table—before executing a task. When a scheduler triggers, it tries to acquire the lock by inserting or updating a row. If another instance already holds the lock, the<strong> task is skipped.</strong></p>



<p class="wp-block-paragraph">The lock is released after execution or after a configured timeout, preventing deadlocks if an instance crashes mid-task. In our case, we wanted to avoid the same campaign being processed by a couple of instances at the same time.</p>



<p class="wp-block-paragraph">Shedlock helps a lot here. Feel free to check the&nbsp;<a rel="noreferrer noopener" href="https://github.com/lukas-krecan/ShedLock" target="_blank">full ShedLock documentation</a>.</p>



<pre class="wp-block-code"><code>val config = LockConfiguration(
    Instant.now(),
    LOCK_NAME_FOR_PROCESS_CAMPAIGNS + campaign.id,
    Duration.ofMinutes(5),
    Duration.ZERO
)

val lock = lockProvider.lock(config)

if (lock.isPresent) {
    try {
        singleCampaignService.processSingleCampaign(campaign)
    } finally {
        lock.get().unlock()
    }
}
</code></pre>



<p class="wp-block-paragraph"><strong>Limit your concurrency with a semaphore</strong></p>



<p class="wp-block-paragraph">A <strong>Semaphore</strong> lets you limit how many threads can execute a block of code at the same time. In our case, each scheduler iteration could potentially process dozens of campaigns in parallel; especially with virtual threads, where spawning new threads is cheap. But each campaign processing involves multiple database operations: reads, updates, and inserts. Letting all of them run at once would exhaust the connection pool and trigger lock contention.</p>



<p class="wp-block-paragraph">We introduced a Semaphore with a fixed number of permits to cap the number of campaigns processed concurrently. Before processing a campaign, a&nbsp;<strong>thread must acquire a permit</strong>. If all permits are taken, the thread waits, but with virtual threads, this isn&#8217;t a problem.</p>



<p class="wp-block-paragraph">When a virtual thread blocks, it gets unmounted from its carrier thread, freeing it to run other virtual threads. So waiting for a permit doesn&#8217;t waste OS resources like it would with traditional platform threads. Once processing is done, the permit is released.</p>



<p class="wp-block-paragraph">This keeps database load predictable and prevents the connection pool from becoming a bottleneck.</p>



<pre class="wp-block-code"><code>private val semaphore = Semaphore(10)
private val executor = Executors.newVirtualThreadPerTaskExecutor()

fun processCampaigns() {
    val campaigns = campaignRepository.findAllToProcess()

    campaigns.forEach { campaign -&gt;
        executor.submit {
            semaphore.acquire()
            try {
                processSingleCampaign(campaign)
            } finally {
                semaphore.release()
            }
        }
    }
}
</code></pre>



<p class="wp-block-paragraph"><strong>Use query hints</strong></p>



<p class="wp-block-paragraph">When multiple threads query the same table, the database decides how to handle locking. Sometimes those defaults work against you in different ways. Locks escalate, threads wait on each other, or worse, deadlocks occur. SQL Server lets you guide this behavior with query hints. Here are the ones we found useful:</p>



<ul class="wp-block-list">
<li><code>UPDLOCK</code>&nbsp;– reserves update locks on selected rows, so other threads can&#8217;t select the same rows for processing.</li>



<li><code>READPAST</code>&nbsp;– skips rows that are already locked by other threads instead of waiting for them to be released.</li>



<li><code>ROWLOCK</code>&nbsp;– suggests that SQL Server use fine-grained row-level locks instead of page or table locks.</li>



<li><code>NOLOCK</code>&nbsp;– reads rows without acquiring shared locks, allowing it to read data that other transactions are currently modifying. This means it won&#8217;t block writers and won&#8217;t be blocked by them but it can return dirty data that might be rolled back, or even read the same row twice or skip rows entirely if data is being moved during the scan.</li>
</ul>



<p class="wp-block-paragraph"><strong>Think about your access patterns</strong>. Are multiple threads competing for the same rows? Are you okay with skipping locked data or reading uncommitted changes? The right combination of hints depends on your specific use case but knowing they exist can save you from mysterious slowdowns and deadlocks.</p>



<p class="wp-block-paragraph"><strong>Process data in batches</strong></p>



<p class="wp-block-paragraph">Even with ROWLOCK hints,&nbsp;<strong>SQL Server can escalate locks</strong>. When a single transaction acquires too many row locks on one table, SQL Server may convert them into a table lock for efficiency. This is called lock escalation, and when it happens, your &#8220;harmless&#8221; operation suddenly blocks everyone else.</p>



<p class="wp-block-paragraph">We learned this the hard way. Our scoring scheduler fetched all unscored destinations for a campaign in a single query, which sometimes includes tens of thousands of rows. With UPDLOCK to prevent other threads from picking them up, SQL Server decided it was cheaper to lock the entire table. Suddenly, other threads couldn&#8217;t read or write to the destinations table at all. The whole pipeline stalled, waiting for one greedy query to finish.</p>



<p class="wp-block-paragraph">The fix was simple: fetch in batches. Instead of selecting all unscored destinations, we now use&nbsp;<code>TOP(n)</code>&nbsp;and iterate until there&#8217;s nothing left to process.</p>



<pre class="wp-block-code"><code>SELECT TOP(400) cd.*
FROM cds.campaign_destination cd WITH (UPDLOCK, READPAST, ROWLOCK)
WHERE cd.campaign_id = :campaignId
  AND cd.bulk_id IS NULL
  AND cd.id &lt;= :maxId
</code></pre>



<p class="wp-block-paragraph">Each batch locks only a few hundred rows, commits, and moves on. This keeps the lock count well below the escalation threshold and lets other threads continue their work.</p>



<p class="wp-block-paragraph">For more details on lock escalation, see&nbsp;<a rel="noreferrer noopener" href="https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/performance/resolve-blocking-problems-caused-lock-escalation" target="_blank">Microsoft&#8217;s Troubleshooting explanation.</a></p>



<h2 class="wp-block-heading"><span id="final-thoughts">Final thoughts</span></h2>



<p class="wp-block-paragraph">The database is not an implementation detail you can ignore. I hope these lessons save you some debugging time. </p>



<p class="wp-block-paragraph">Have you faced similar challenges? I&#8217;m curious how others handle these problems.</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/06/JPA.png?x32039" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="jpa header for shiftmag" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/06/JPA.png 1200w, https://shiftmag.dev/wp-content/uploads/2026/06/JPA-300x158.png 300w, https://shiftmag.dev/wp-content/uploads/2026/06/JPA-1024x538.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/06/JPA-768x403.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure><p>The post <a href="https://shiftmag.dev/jpa-defaults-kotlin-microservice-9184/">How Convenient JPA Defaults Broke Our Kotlin Microservice</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Developers are the reason behind best (and worst) parts of software development</title>
		<link>https://shiftmag.dev/developers-are-the-reason-behind-best-and-worst-parts-of-software-development-10670/</link>
		
		<dc:creator><![CDATA[Ivan Simic]]></dc:creator>
		<pubDate>Mon, 13 Jul 2026 13:53:00 +0000</pubDate>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Developers Answer]]></category>
		<category><![CDATA[Engineer Explains]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">https://shiftmag.dev/?p=10670</guid>

					<description><![CDATA[<p>Building software is full of ups and downs. Some days, you're working with the best team you can find, and others it's up to you to fix something with no idea how it works and no access to documentation.</p>
<p>The post <a href="https://shiftmag.dev/developers-are-the-reason-behind-best-and-worst-parts-of-software-development-10670/">Developers are the reason behind best (and worst) parts of software development</a> appeared first on <a href="https://shiftmag.dev">ShiftMag</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In the latest edition of our <a href="https://www.youtube.com/@DevelopersAnswer" target="_blank" rel="noreferrer noopener">Developers Answer series</a>, we spoke with developers about their <strong>best and worst projects</strong>, the reasons behind the challenges, and the ways they&#8217;ve made it across the finish line regardless of the hardships.</p>



<h2 class="wp-block-heading">What&#8217;s the worst type of project?</h2>



<p class="wp-block-paragraph">Sure, the term &#8220;worst&#8221; means different things to different people, but most of the engineers agree: the worst types of projects are the ones that <strong>aren&#8217;t set up well by humans,</strong> not the ones that have big technical requirements. And, as you can probably guess, human-designed flaws are much more creative.</p>



<p class="wp-block-paragraph">For example, one engineer highlighted that the worst project for him was working with family members who were not familiar with software development at all, affecting expectations, realisations and everything in between.</p>



<p class="wp-block-paragraph">Another situation was a client project that took four months, with progress going smooth up until the last month. <strong>Nikola Buhiniček,</strong> Engineering Manager, said:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-medium-font-size wp-block-paragraph">The client changed the scope significantly without much warning. We had to abandon a lot of the work we’d already done and come up with new features and opportunities. It felt like compressing two and a half months of work into one month before the deadline.</p>
</blockquote>



<p class="wp-block-paragraph">Another type of projects that drive engineers crazy are legacy code projects without real instructions on how to approach them, as explained by<strong> Edvin Teskeredžić</strong>, Senior AI Software Engineer:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-medium-font-size wp-block-paragraph">We had this old legacy project, basically 10-year-old code which needed to be maintained. It was also all internal libraries but there was no documentation. The documentation simply lived in the heads of senior engineers, so you had to kind of figure it out yourself, and you couldn&#8217;t Google it because it was all internal libraries.</p>
</blockquote>



<h2 class="wp-block-heading">What&#8217;s the best, then?</h2>



<p class="wp-block-paragraph">In contrast, the best projects tend to be tied to others as well, only this time it&#8217;s about great teams and good colleagues. For some engineers, the best projects are those where leadership has a clear vision and that vision is clearly shown to the teams.</p>



<p class="wp-block-paragraph">Other engineeers, such as <strong>Filip Bolčić</strong>, Full-Stack Engineer, highlighted <strong>teamwork as the best part of the projects</strong> they&#8217;ve worked on. For example:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-medium-font-size wp-block-paragraph">Everybody&#8217;s insight was really valuable, and I had a great mentor from whom I learned a lot. It was just a really meaningful project for us, we felt really good working on it.</p>
</blockquote>



<p class="wp-block-paragraph">On the other hand, Nikola noted that sometimes, <strong>the best projects are the most challenging ones</strong>. He explained the process of adding the automations feature to Productive was one of the more challenging and interesting ones he worked on:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-medium-font-size wp-block-paragraph">It was such a different feature from what we used to do, and I was given the opportunity to build it. In the end it was one of the best features we have. The usage is growing up from month to month. I&#8217;m really happy that it was something that I built like two years ago, and it&#8217;s still growing so fast.</p>
</blockquote>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="20 Developers Share Their Best and Worst Projects" width="500" height="281" src="https://www.youtube.com/embed/kyjc9KEN6L4?start=165&amp;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>



<h2 class="wp-block-heading"><span id="it-all-comes-down-to-the-human-factor">It all comes down to the human factor</span></h2>



<p class="wp-block-paragraph">The hardest thing to fix as an engineer might not even be software-related, according to <strong>Hrvoje Rančić, </strong>Senior Software Engineer:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-medium-font-size wp-block-paragraph">My posture. I had really terrible back pain from sitting too much during the COVID era. I think this is a very dangerous job because it involves a lot of sitting, and sitting is the new smoking, so I encourage everyone to move more if you&#8217;re a software engineer.</p>
</blockquote>



<p class="wp-block-paragraph">Ergonomics aside, Software Engineer <strong>Emin Mulaimović </strong>said that some of the biggest recent challenges he had were related to LLM&#8217;s:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-medium-font-size wp-block-paragraph">We had this unstable LLM prompt which basically means you ask the same question and it gives different answers, and the answers are not marginally different. To fix that you just need to rephrase the question over and over and over again until it worked. And then when it worked you didn&#8217;t learn anything, you didn&#8217;t have fun fixing it, you&#8217;re just glad it&#8217;s over. Some bugs are fun to fix; this one wasn&#8217;t.</p>
</blockquote>



<p class="wp-block-paragraph">On the other end of the spectrum, the toughness of a task comes down to a <strong>personal mistake by the engineer themselves</strong>, and there&#8217;s rarely anything you can do but to fix it. That&#8217;s exactly what happened to Filip:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-medium-font-size wp-block-paragraph">I remember working on a really big-scale production application and accidentally just deleting a lot of important stuff from the database. I was really young in my career and I remember being really stressed out about this, but the project manager protected me and we were able to restore a backup of this database, so in the end everything was good, but it was really stressful for me.</p>
</blockquote>



<p class="wp-block-paragraph">And to further drive the point home, sometimes the fix isn&#8217;t even tough, but so time-consuming you think you&#8217;re going crazy, as evidenced by <strong>Olga Koroleva</strong>, Engineering Manager:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-medium-font-size wp-block-paragraph">I made a bug in the code where entries to the database were written wrong, and I had to manually fix thousands of them. After that, I always double-checked and triple-checked everything.</p>
</blockquote>



<p class="wp-block-paragraph">Make sure to <a href="https://www.youtube.com/watch?v=kyjc9KEN6L4&amp;t=165s" target="_blank" rel="noreferrer noopener">check out the entirety of the video</a> to find more about the best and worst projects, and the challenges of software development!</p>



<p class="wp-block-paragraph"><em>Special thanks to our engineering colleagues at Infobip, Nikola Buhiniček (Engineering Manager, Productive) and Filip Bolčić, (Full-Stack Engineer, Ars Futura).</em></p>


<figure class="wp-block-post-featured-image"><img loading="lazy" decoding="async" width="1365" height="768" src="https://shiftmag.dev/wp-content/uploads/2026/07/devs-answer-best-and-worst.png?x32039" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://shiftmag.dev/wp-content/uploads/2026/07/devs-answer-best-and-worst.png 1365w, https://shiftmag.dev/wp-content/uploads/2026/07/devs-answer-best-and-worst-300x169.png 300w, https://shiftmag.dev/wp-content/uploads/2026/07/devs-answer-best-and-worst-1024x576.png 1024w, https://shiftmag.dev/wp-content/uploads/2026/07/devs-answer-best-and-worst-768x432.png 768w" sizes="auto, (max-width: 1365px) 100vw, 1365px" /></figure><p>The post <a href="https://shiftmag.dev/developers-are-the-reason-behind-best-and-worst-parts-of-software-development-10670/">Developers are the reason behind best (and worst) parts of software development</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-08-01 13:33:03 by W3 Total Cache
-->