<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Shift Mag</title>
    <description>The latest articles on Forem by Shift Mag (@shiftmag).</description>
    <link>https://forem.com/shiftmag</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1176990%2Fe38ba9d7-7a41-44c8-af48-9c2dd26c8301.png</url>
      <title>Forem: Shift Mag</title>
      <link>https://forem.com/shiftmag</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/shiftmag"/>
    <language>en</language>
    <item>
      <title>Things ancient Romans taught me about software development </title>
      <dc:creator>Shift Mag</dc:creator>
      <pubDate>Tue, 13 May 2025 12:28:48 +0000</pubDate>
      <link>https://forem.com/shiftmag/things-ancient-romans-taught-me-about-software-development-1cii</link>
      <guid>https://forem.com/shiftmag/things-ancient-romans-taught-me-about-software-development-1cii</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc418ieagb7kd0ir4eeme.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc418ieagb7kd0ir4eeme.png" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For more content like this &lt;strong&gt;&lt;a href="https://shiftmag.dev/newsletter/" rel="noopener noreferrer"&gt;subscribe to the ShiftMag newsletter&lt;/a&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Si vis pacem, para bellum&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;If you want peace, prepare for war. In other words, if you wish to handle traffic spikes, &lt;strong&gt;stress test the service&lt;/strong&gt;. If it can handle twice the expected traffic, it will handle the expected traffic. A similar point was expressed by &lt;strong&gt;Kentus Becchus&lt;/strong&gt; , who &lt;a href="https://www.goodreads.com/quotes/10376041-write-tests-until-fear-is-transformed-into-boredom" rel="noopener noreferrer"&gt;famously wrote&lt;/a&gt; &lt;em&gt;Scribe probationes donec timor in taedium mutetur&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Aequam memento rebus in arduis servare mentem&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Remember to maintain a calm mind while doing difficult tasks. The natural response to a production outage is panicking. &lt;a href="https://en.wikipedia.org/wiki/Phrases_from_The_Hitchhiker%27s_Guide_to_the_Galaxy#Don't_Panic" rel="noopener noreferrer"&gt;&lt;strong&gt;DON’T PANIC&lt;/strong&gt;&lt;/a&gt;. Troubleshooting production issues is just an ordinary task with the highest priority. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Mens sana in corpore sano&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;A healthy mind in a healthy body. Software development involves a lot of thinking, but it also involves a lot of sitting, which is &lt;strong&gt;not a particularly healthy activity&lt;/strong&gt;.  To keep the mind fresh and sharp, sleep and physical activity are paramount, as &lt;strong&gt;Vladus Mihalcaeus&lt;/strong&gt; &lt;a href="https://x.com/vlad_mihalcea/status/1335981628322148354" rel="noopener noreferrer"&gt;has put&lt;/a&gt; it &lt;em&gt;Somnus octo horarum optimus emendator est&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Divide et impera&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Divide and conquer. Apart from being &lt;a href="https://en.wikipedia.org/wiki/Divide-and-conquer_algorithm" rel="noopener noreferrer"&gt;a well-known&lt;/a&gt; algorithm design paradigm, it is a sound piece of advice: when faced with a complex task that takes a lot of time, &lt;strong&gt;divide it into a set of smaller tasks&lt;/strong&gt; and handle those one at a time.  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Ad praesens ova cras pullis sunt meliora&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;A bird in the hand is worth two in the bush. First implement the basic functionality &lt;strong&gt;,&lt;/strong&gt; show it to the user, &lt;strong&gt;ask for feedback and iterate&lt;/strong&gt;. The same idea is expressed in the old dictum from &lt;a href="https://agilemanifesto.org/" rel="noopener noreferrer"&gt;the Manifestum&lt;/a&gt; which teaches us to prefer working software over a mountain of requirements specifications. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Bene vixit,  bene qui latuit&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;He who remained hidden lived well. Although some malicious hackers may draw inspiration from this one, it is also inspiring to infrastructure engineers: if you break something, &lt;strong&gt;it will not go unnoticed&lt;/strong&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Discere faciendo&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Learn by doing. The mastery of software engineering cannot be attained only by speculative thought, reasoning from first principles, or by learning the sacred texts by heart, to learn how to build software it is necessary, but not sufficient, to build it.  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Panem et circenes&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Bread and circuses. A great deal of software engineering job is maintenance; it is necessary but not appreciated enough. To silence the murmurs, you need to show some impressive dashboard, shiny UI, or AI-related feature to management from time to time.  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Cessante causa, cessante effectus&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;When the cause ceases, the effect ceases. Unless you &lt;strong&gt;know the root cause of an incident&lt;/strong&gt; , you cannot consider it resolved. Rebooting or scaling may resolve the issue temporarily, but this is just buying time to fix the real problem. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Verba volant, littera scripta manent&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Spoken words fly away, written ones remain. &lt;strong&gt;Agreements from meetings need to be written down&lt;/strong&gt; in meeting notes, architectural decisions need to be documented, tasks need to have descriptions, when possible, agreements need to be expressed in code as automated checks. You will forget things! &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Periculum in mora&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Danger in delay. Integrate code changes to main branch often and &lt;strong&gt;deploy often&lt;/strong&gt;. The more you wait the harder it is to integrate the change and the riskier it is to deploy it.  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Historia est magistra vitae&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;History the teacher of life. As &lt;strong&gt;Patruus Bobus&lt;/strong&gt; &lt;a href="https://blog.cleancoder.com/uncle-bob/2014/06/20/MyLawn.html" rel="noopener noreferrer"&gt;points out&lt;/a&gt; majority of programmers are not very experienced, however there are those who have been shipping software for decades, and there is much we can learn from them. *&lt;em&gt;Study their advice. *&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Non omnia possumus omnes&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;We can’t all do everything. It is easier to ship software in a ** cross-functiona**** l &lt;strong&gt;team made up of&lt;/strong&gt;  **people with different skill sets and roles. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Omnium enim rerum principia parva sunt&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;The beginnings of all things are small. Big systems evolve from small systems. Create &lt;a href="https://dannorth.net/best-simple-system-for-now/" rel="noopener noreferrer"&gt;the simplest thing that works well&lt;/a&gt; and build on top of that. This was succinctly expressed by &lt;strong&gt;Johannes Gallus&lt;/strong&gt; &lt;a href="https://www.goodreads.com/quotes/9353506-a-complex-system-that-works-is-invariably-found-to-have" rel="noopener noreferrer"&gt;who wrote&lt;/a&gt; &lt;em&gt;Systema complexum quod operatur, ex systemate simplici quod operavit ortum esse inventur&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Pacta sunt servanda&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Agreements must be kept. &lt;strong&gt;Take care not to break backwards compatibility&lt;/strong&gt;. Take great care when designing APIs; if it exposes some functionality you did not intend to expose, do not whine when someone starts to use it. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Vinum bonum, pax in domum&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Good wine, peace in the house. Since &lt;strong&gt;building software is a group activity&lt;/strong&gt; , it helps if members of the group can get along with each other. Occasional team building activity helps to foster a friendly atmosphere. &lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://shiftmag.dev/things-ancient-romans-taught-me-about-software-development-5214/" rel="noopener noreferrer"&gt;Things ancient Romans taught me about software development &lt;/a&gt; appeared first on &lt;a href="https://shiftmag.dev" rel="noopener noreferrer"&gt;ShiftMag&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>kentbeck</category>
      <category>theagilemanifesto</category>
    </item>
    <item>
      <title>Devs and DBAs can’t find peace, but could they call a truce?</title>
      <dc:creator>Shift Mag</dc:creator>
      <pubDate>Fri, 18 Apr 2025 13:12:40 +0000</pubDate>
      <link>https://forem.com/shiftmag/devs-and-dbas-cant-find-peace-but-could-they-call-a-truce-lem</link>
      <guid>https://forem.com/shiftmag/devs-and-dbas-cant-find-peace-but-could-they-call-a-truce-lem</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0hm3rqnrgqpxjpjpuv1k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0hm3rqnrgqpxjpjpuv1k.png" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;For more content like this &lt;strong&gt;&lt;a href="https://shiftmag.dev/newsletter/" rel="noopener noreferrer"&gt;subscribe to the ShiftMag newsletter&lt;/a&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Picture this scenario: You’ve just joined a new tech company, excited to start onboarding and dive into your first projects. &lt;strong&gt;But soon, it hits you – the tension&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Developers gripe about sluggish and obstructive DBAs, while Database Administrators grumble and murmur about the constant stream of poorly optimized queries, chaotic code, and last-minute demands from developers.&lt;/p&gt;

&lt;p&gt;Did you stumble upon a toxic workplace? Not exactly. &lt;strong&gt;It’s&lt;/strong&gt;  &lt;strong&gt;the age-old clash that’s been brewing for decades between two ‘tribes’&lt;/strong&gt; : those who want to build quickly and those who safeguard stability.&lt;/p&gt;

&lt;p&gt;So, do DBAs play the role of protectors, or are devs just a tad bit spoiled?&lt;/p&gt;

&lt;h2&gt;
  
  
  How did we get here?
&lt;/h2&gt;

&lt;p&gt;The friction comes from a classic disconnect: &lt;strong&gt;speed vs. stability&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Developers are eager to ship features as fast as they can (preferably yesterday), often under pressure from clients, management, or some other deadline-driven force, while DBAs are focused on ensuring the database doesn’t crash tomorrow.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When these priorities clash, chaos is inevitable – and I know this firsthand because I’ve been on both sides.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let’s take a closer look at it from a developer’s angle
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;‘&lt;/strong&gt;** We need to speed up our delivery!’**&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The main argument is that developers often work under tight deadlines. &lt;strong&gt;To them, a database is just a tool&lt;/strong&gt; – the simpler, the better. Why involve DBAs early if it slows down prototyping?&lt;/p&gt;

&lt;p&gt;There’s also a prevailing ‘good enough for now’ mentality, where getting a working prototype is the priority.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;‘&lt;/strong&gt;** Setting up new databases takes ages *&lt;strong&gt;&lt;em&gt;.&lt;/em&gt;&lt;/strong&gt;* ’**&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Waiting for approvals, scheme checks, or infrastructure setups feels like watching paint dry.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;‘&lt;/strong&gt;** Getting DBAs involved can feel like pulling teeth *&lt;em&gt;**.’&lt;/em&gt;*&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When DBAs push back on quick fixes or demand documentation, developers see red tape rather than guardianship.&lt;/p&gt;

&lt;h2&gt;
  
  
  Now, let’s dive into the DBA’s side of the story
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;‘We’re called in too late!’&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DBAs often inherit &lt;strong&gt;poorly designed schemas or performance nightmares&lt;/strong&gt;. Fixing a burning database at 2 a.m. is never fun, especially when you don’t know anything about it or where to begin.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;‘Devs don’t listen.’&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recommendations about indexing, query optimization, or security often fall on deaf ears – &lt;strong&gt;until an outage happens&lt;/strong&gt;. No matter how many times you share documentation, hold knowledge-sharing sessions, or discuss the topic, it sometimes feels like no one listens.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;‘We’re the unsung janitors.’&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While devs chase innovation, DBAs clean up the mess. Their priorities – backups, scalability, and compliance – may not be glamorous, but they’re non-negotiable.&lt;/p&gt;

&lt;p&gt;If a company wants to make it in the worldwide market, it needs to be compliant with numerous regulations. And that is just the beginning – &lt;strong&gt;data needs to be secured&lt;/strong&gt; , and data leaks and privacy concerns aren’t fun for anyone. We need backups and replication set up for disaster recovery, satisfy numerous architecture decision records, and all that complicates the process. It will never be as simple and fast as just deploying a DB locally in Docker.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, what do devs and DBAs really want?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;DBAs just want &lt;strong&gt;preventative care&lt;/strong&gt; – they’re like doctors urging you to eat your veggies, not just treating heart attacks.&lt;/p&gt;

&lt;p&gt;On the other hand, devs need &lt;strong&gt;speed without fallout&lt;/strong&gt;. They want to innovate without waking up to a dumpster fire.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  But do devs really want to own databases?
&lt;/h2&gt;

&lt;p&gt;Sure, devs can deploy their own database, but maintaining performance, security, and costs? &lt;strong&gt;That’s a full-time job&lt;/strong&gt; – one many devs aren’t signing up for.&lt;/p&gt;

&lt;p&gt;It may sound great at first, but once you deploy it, the database works fine – until it doesn’t. It’s just a matter of time before the first issues arise. And surely, devs would rather spend their time programming than maintaining and troubleshooting a database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Think it can’t get worse? Well, say hello to AI
&lt;/h2&gt;

&lt;p&gt;Enter AI and vector databases – tools promising lightning-fast analytics.&lt;/p&gt;

&lt;p&gt;The number of new vector databases is skyrocketing, and devs want them all, each with a specific feature they need. But for DBAs, this is a nightmare. &lt;strong&gt;Integrating a new database is a slow and painful process&lt;/strong&gt; , as all checks for security, compliance, and requirements need to be tested and approved. New database types (e.g., vector DBs for ML) often lack mature tooling or expertise. DBAs scramble to secure and scale them, while devs resent the learning curve.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, who is right?
&lt;/h2&gt;

&lt;p&gt;They both are, and at the same time, they both aren’t – &lt;strong&gt;much like the relationship between devs and clients&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Devs often complain about clients’ broad demands, tight deadlines, and constant changes. Sound familiar? The Dev vs DBA battle is similar: devs forget that, as clients of DBAs, they’re the ones pushing for deadlines and changes, just like clients do to them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, devs must make compromises with clients because the company’s revenue depends on it. However, I think DBAs tend to be ‘harder’ on their clients since they don’t face the same pressure of potentially losing business.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is there hope for peace?
&lt;/h2&gt;

&lt;p&gt;There isn’t – at least not a simple one.&lt;/p&gt;

&lt;p&gt;But we can all work together to reduce tension and aim for some kind of truce. We need to be more understanding.&lt;/p&gt;

&lt;p&gt;Devs should recognize that &lt;strong&gt;DBAs aren’t just complicating things for no reason&lt;/strong&gt; and should involve them in the service architecture process. On the other hand, &lt;strong&gt;DBAs should view devs as clients&lt;/strong&gt; , understand the need for compromise, and simplify the process of providing databases by using automation or internal tools whenever possible.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://shiftmag.dev/devs-and-dbas-relationship-4930/" rel="noopener noreferrer"&gt;Devs and DBAs can’t find peace, but could they call a truce?&lt;/a&gt; appeared first on &lt;a href="https://shiftmag.dev" rel="noopener noreferrer"&gt;ShiftMag&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>data</category>
      <category>database</category>
      <category>databaseadmins</category>
      <category>dba</category>
    </item>
    <item>
      <title>Code Review: From Bottleneck to Productivity Booster</title>
      <dc:creator>Shift Mag</dc:creator>
      <pubDate>Thu, 20 Mar 2025 14:01:22 +0000</pubDate>
      <link>https://forem.com/shiftmag/code-review-from-bottleneck-to-productivity-booster-2995</link>
      <guid>https://forem.com/shiftmag/code-review-from-bottleneck-to-productivity-booster-2995</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5vuw1u67oyq1r2w2zoqp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5vuw1u67oyq1r2w2zoqp.png" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;For more content like this &lt;strong&gt;&lt;a href="https://shiftmag.dev/newsletter/" rel="noopener noreferrer"&gt;subscribe to the ShiftMag newsletter&lt;/a&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;How often do developers create pull requests (PRs) just because the process requires it, without thinking about their  &lt;strong&gt;actual value&lt;/strong&gt;?&lt;br&gt;&lt;br&gt;
And how frequently does your PR  &lt;strong&gt;sit unreviewed for days&lt;/strong&gt;  because all potential reviewers are busy?&lt;br&gt;&lt;br&gt;
On the other hand, some might want to skip this part of the process:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I’ve only changed one line of code. Can I push it to master?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What could go wrong?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A  &lt;strong&gt;critical bug&lt;/strong&gt;  in production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sensitive data&lt;/strong&gt;  is exposed.&lt;/li&gt;
&lt;li&gt;The team  &lt;strong&gt;has no visibility&lt;/strong&gt;  into what changed.&lt;/li&gt;
&lt;li&gt;Developers  &lt;strong&gt;experience burnout&lt;/strong&gt;  due to inefficient and frustrating review cycles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Code reviews are essential, but  &lt;strong&gt;if not structured well, they become a bottleneck instead of a productivity tool&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This article explores  &lt;strong&gt;common code review challenges&lt;/strong&gt;  and  &lt;strong&gt;practical solutions&lt;/strong&gt;  to make the process  &lt;strong&gt;faster, more effective, and enjoyable&lt;/strong&gt;  for everyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goals of the Code Review
&lt;/h2&gt;

&lt;p&gt;Code reviews are  &lt;strong&gt;not just about catching bugs&lt;/strong&gt;. Well-structured code review process should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ensure code quality&lt;/strong&gt;  – Reviewers provide valuable insights to improve the code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintain consistency&lt;/strong&gt;  – Code style, patterns, and best practices remain aligned across the team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable knowledge sharing&lt;/strong&gt;  – Developers learn from each other through reviews.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offer a fresh perspective&lt;/strong&gt;  – The author may miss issues another developer can spot.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However,  &lt;strong&gt;without a clear structure, these benefits are often lost&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Code Review Problems and Possible Fixes&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Reviews are too slow, or “no time for code review”
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Example scenario:&lt;/strong&gt;  A developer submits a PR on Monday. By Friday, it’s still waiting for a review.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Can someone review my PR?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Yeah, I’ll get to it soon…[everyone is busy with urgent stuff]&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By the time someone finally looks at it, the  &lt;strong&gt;author has lost context&lt;/strong&gt; , making it harder to address feedback efficiently.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How to fix it:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated time slot for reviews&lt;/strong&gt;** —**Some teams implement a “Morning review hour,” where engineers spend the first 30 minutes of their day reviewing PRs before diving into deep work. This helps to avoid delays caused by context-switching.
&lt;/li&gt;
&lt;li&gt;Use team agreements to  &lt;strong&gt;align expectations&lt;/strong&gt;  around how quickly PRs should be reviewed; for example – “PRs should be reviewed within 24 hours”
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Se&lt;/strong&gt;** t up well-defined statuses (e.g., “ready for review,” “needs work,” “blocked,” “ready for merge”) that reflect progress.**
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Align on the code style&lt;/strong&gt; so there will be no disputes around the code style preferences.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated Slack channel for the PRs&lt;/strong&gt;  that need attention; automatic reminders set up for PRs that are waiting too long.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improve commenting techniques&lt;/strong&gt;  to make the process faster

&lt;ul&gt;
&lt;li&gt;Use &lt;a href="https://www.ssw.com.au/rules/use-prefixes-to-improve-code-review-communication/#prefixes" rel="noopener noreferrer"&gt;prefixes&lt;/a&gt; in comments to streamline discussions so the creator knows if it is a blocker or suggestion.&lt;/li&gt;
&lt;li&gt;Write what exactly you took a look at if not everything was reviewed.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Introduce a  &lt;strong&gt;code review checklist&lt;/strong&gt; , which could include the following steps:

&lt;ul&gt;
&lt;li&gt;[] Is the code well-structured and easy to understand?&lt;/li&gt;
&lt;li&gt;[] Are functions and classes small and modular?&lt;/li&gt;
&lt;li&gt;[] Are there any potential race conditions or concurrency issues?&lt;/li&gt;
&lt;li&gt;[] Does the code introduce unnecessary dependencies?&lt;/li&gt;
&lt;li&gt;[] Are API keys, credentials, or sensitive data hardcoded?
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Ensure PRs have clear descriptions&lt;/strong&gt;. The description should outline what changed, why it changed, and any areas of focus for the review. It may also contain any additional information that could help reviewers.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;| &lt;code&gt;**Title**&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;**What changed?**&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;**Why?**&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;**What to check?**&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;**How is it tested?**&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;**Potential risks &amp;amp; mitigations**&lt;/code&gt; |&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Provide clear documentation in the code&lt;/strong&gt; , which helps to understand the logic behind the changes.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate logical parts into different commits&lt;/strong&gt;  in the PRs and make the proper message, this could help reviewer to navigate through changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While speeding up PR reviews is crucial, it’s only part of the solution. Many bottlenecks also come from  &lt;strong&gt;the lack of automation&lt;/strong&gt;  and  &lt;strong&gt;PRs that are too large to review efficiently&lt;/strong&gt;. The next sections will dive into how to fix them.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Large, complex PRs are intimidating and hard to review effectively&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Example scenario:&lt;/strong&gt;  A developer created PR with 1000+ lines of code changed.  &lt;/p&gt;

&lt;p&gt;The title? – &lt;em&gt;“Refactoring + feature + bug fixes + cleanup + magic”&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;As a result, no one wanted to review it. When someone finally looks at it, they request  &lt;strong&gt;dozens of changes&lt;/strong&gt; , and the cycle repeats.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How to fix it:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Limit PR size&lt;/strong&gt; —Teams could use a “Max x lines per PR” rule (e.g., 200 – 400 lines). Research suggests that the optimal code review rate is between 200 and 400 lines per hour. Productivity and defect detection ability significantly drop after an hour of continuous review.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsc8m6ynyvbj31tvous2a.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsc8m6ynyvbj31tvous2a.gif" width="345" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;source: &lt;a href="https://web.archive.org/web/20151009202810/http://smartbear.com/all-resources/articles/best-practices-for-peer-code-review/" rel="noopener noreferrer"&gt;smartbear.com&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Break changes into multiple PRs&lt;/strong&gt; :
&lt;strong&gt;PR 1&lt;/strong&gt;  – Refactoring.
&lt;strong&gt;PR 2&lt;/strong&gt;  – Adding the feature.
&lt;strong&gt;PR 3&lt;/strong&gt;  – Fixing UI issues.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For large changes, schedule a “Team Code Review” (TCR) meeting&lt;/strong&gt; where the author explains the key changes before submission. This will make it easier to actually review the code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  No volunteers to review the code
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Example scenario:&lt;/strong&gt;  In an engineering team, only the tech lead consistently reviewed PRs.  &lt;/p&gt;

&lt;p&gt;The rest of the team hesitated, thinking: &lt;em&gt;“He knows the codebase best, so I’ll let him handle it.”&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;Over time, this became a bottleneck—the lead was overwhelmed, reviews slowed, and the team was not aligned on the code base.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How to fix it&lt;/strong&gt; :
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Implement review rotations—E&lt;/strong&gt; very team member participates in reviews. PRs will be distributed better, preventing burnout. Junior developers will improve their skills by taking ownership. The tech leaders will be freed up for other strategic tasks instead of only reviewing.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assign a “review duty” each sprint&lt;/strong&gt;  – One engineer is responsible for making sure reviews happen.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encourage team engagement&lt;/strong&gt;  – Tracking who is the most active commenter on PRs, which PRs took longer than others can highlight imbalances.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limit code review sessions to a maximum of 60 minutes per day&lt;/strong&gt;. As mentioned earlier, productivity and defect detection ability drop significantly after an hour of continuous review.
&lt;/li&gt;
&lt;li&gt;Provide the team with information about the  &lt;strong&gt;goals of the Code Review practice&lt;/strong&gt;  and ensure alignment based on the team’s agreement on the topic.
&lt;/li&gt;
&lt;li&gt;Establish a  &lt;strong&gt;positive code review culture&lt;/strong&gt;  where feedback is constructive and good practices are recognized (be objective, not personal; explain why; offer alternatives; encourage collaboration) &lt;em&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn197kuf2l4wt1euc7xkh.png" alt="🚫" width="72" height="72"&gt; “You forgot to handle edge cases.”&lt;/em&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fddcdhnr24t2o3swapyee.png" alt="✅" width="72" height="72"&gt; &lt;em&gt;“I see the main logic is solid. Just wondering, how does this handle cases where the input is empty? Maybe we could add a test for that?”&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Lack of automation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;  Review comments are filled with:  &lt;/p&gt;

&lt;p&gt;-“Fix indentation.”&lt;br&gt;&lt;br&gt;
-“This function name should be camelCase.”&lt;br&gt;&lt;br&gt;
-“Did you write tests for this?”&lt;/p&gt;

&lt;p&gt;Instead of focusing on  &lt;strong&gt;logic and architecture&lt;/strong&gt; , reviewers spend time pointing out issues that could be checked automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How to fix it:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Run automated tests in CI/CD&lt;/strong&gt;** —**PRs should not be allowed to merge if tests fail. Measuring test coverage could also be done; however, it serves as information rather than a metric that guarantees the functionality is well-tested.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate formatting&lt;/strong&gt;  – Use tools like  &lt;strong&gt;Prettier and ESLint&lt;/strong&gt;  to apply consistent styling automatically.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use static analysis tools&lt;/strong&gt;  that can catch security vulnerabilities, and code smells (e. g. &lt;a href="https://en.wikipedia.org/wiki/SonarQube" rel="noopener noreferrer"&gt;SonarQube&lt;/a&gt;).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tracking PR review patterns and efficiency metrics&lt;/strong&gt;  could help identify patterns that could be improved, such as when only one person reviews PRs or when some PRs are reviewed longer than others, which PRs are getting stuck.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuf3or6emgzqj6kmtkuvf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuf3or6emgzqj6kmtkuvf.png" width="520" height="290"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When Code Reviews May Not Be Necessary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example scenario:&lt;/strong&gt;  A high-traffic platform experiences a critical production outage. The team has an urgent fix ready, but if they wait for a formal review, millions of dollars could be lost in just a few hours.&lt;/p&gt;

&lt;p&gt;Instead of waiting, they applied an emergency fix immediately and agreed to do the review afterward, ensuring the long-term stability of the codebase.&lt;/p&gt;

&lt;p&gt;Not every change needs a formal review, considering that automated checks were done. Teams can define exceptions for situations like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Emergency Fixes:&lt;/strong&gt;  Allow expedited processes for critical bugs, however completely skipping reviews for even emergency fixes can be risky. One approach is ‘ &lt;strong&gt;post-mortem reviews&lt;/strong&gt; ’ – after deployment, the fix is reviewed retrospectively.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://shiftmag.dev/pair-programming-benefits-challenges-563/" rel="noopener noreferrer"&gt;Pair Programming:&lt;/a&gt;&lt;/strong&gt; Real-time collaboration to replace code reviews could be applicable in some cases, rotate pairs regularly to  &lt;strong&gt;spread knowledge across the team&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Isolated Changes:&lt;/strong&gt;  You could have in your team agreement that reviews are not necessary for small, well-contained updates if appropriate automated checks are in place.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Building an Efficient Code Review Process&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;By solving the problems mentioned above, teams can transform PRs from a bottleneck into a productive workflow.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The code review process should work for the team, not against it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Code reviews aren’t just about catching bugs – they’re an opportunity to foster collaboration, maintain code quality, and strengthen team trust.&lt;/p&gt;

&lt;p&gt;To make them truly effective:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Set clear expectations&lt;/strong&gt;  – Define review timelines and responsibilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make PRs easy to review&lt;/strong&gt;  – Keep them small and well-documented.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate what you can&lt;/strong&gt;  – Use automation tools to eliminate repetitive tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encourage collaboration&lt;/strong&gt;  – Reviews should be a learning opportunity, not just a process step.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before submitting your next PR, ask yourself:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“How can I make this review easier for my teammates? How can we improve our code review practices today?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By taking small, deliberate steps to streamline reviews, advocating for process improvement, and starting to make small improvements, you’ll create a process that supports your team and your product—not one that holds them back.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://shiftmag.dev/code-review-problems-and-fixes-5060/" rel="noopener noreferrer"&gt;Code Review: From Bottleneck to Productivity Booster&lt;/a&gt; appeared first on &lt;a href="https://shiftmag.dev" rel="noopener noreferrer"&gt;ShiftMag&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>codereview</category>
      <category>devrel</category>
    </item>
    <item>
      <title>As an engineer, I’d rather be called stupid than stay silent</title>
      <dc:creator>Shift Mag</dc:creator>
      <pubDate>Thu, 13 Mar 2025 14:16:39 +0000</pubDate>
      <link>https://forem.com/shiftmag/as-an-engineer-id-rather-be-called-stupid-than-stay-silent-3loj</link>
      <guid>https://forem.com/shiftmag/as-an-engineer-id-rather-be-called-stupid-than-stay-silent-3loj</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fya9zvnau8jjme2jln95t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fya9zvnau8jjme2jln95t.png" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;For more content like this &lt;strong&gt;&lt;a href="https://shiftmag.dev/newsletter/" rel="noopener noreferrer"&gt;subscribe to the ShiftMag newsletter&lt;/a&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A new message pops up in our Incident Management channel – A &lt;strong&gt;part of one product feature isn’t working&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Adrenaline kicks in. The developers maintaining the affected feature jump into the thread, assessing the impact and what’s needed to fix it. All eyes are on the thread. Pressure mounts. The clock is ticking – we need to notify clients ASAP. We must understand the impact.&lt;/p&gt;

&lt;p&gt;Finally, a message comes through:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Our photon phasers aren’t working due to an issue on our flux capacitor module in charge of stabilizing the ion flow!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At this point, you’re probably thinking – what on earth is the affected product, and what exactly does this company do?!&lt;/p&gt;

&lt;p&gt;Am I missing something, or &lt;strong&gt;will I just look stupid&lt;/strong&gt; if I don’t get what we’re talking about?&lt;/p&gt;

&lt;h2&gt;
  
  
  Feeling stupid? You are not alone!
&lt;/h2&gt;

&lt;p&gt;Obviously, the example I gave is &lt;strong&gt;a gross exaggeration&lt;/strong&gt; , but it’s a good representation of situations we encounter in our daily work.&lt;/p&gt;

&lt;p&gt;Our photon phasers are just fine, and the ion flow is fully stable – mostly because they don’t exist in our company. Yet we often find ourselves in situations where someone describes a problem that sounds exactly like this:  &lt;strong&gt;&lt;em&gt;What would my colleagues think of me if I don’t have an answer to a question?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For those familiar with the technology, it’s clear what happened. They just shrug and say, &lt;em&gt;‘Oh well, it looks like our recent adjustments to the flux capacitor aren’t working in this scenario—we’ll fix it immediately.&lt;/em&gt;‘&lt;/p&gt;

&lt;p&gt;And here I am, pondering the meaning of life of our photon phasers in the OMGaaS stack while our clients are still uninformed!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I’d love to ask the devs to translate this from Star Trek language to plain English, but I should probably already know that. If I ask, they’ll think I’m stupid.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What should I do?&lt;/p&gt;

&lt;h2&gt;
  
  
  I just have to deal with it, right?
&lt;/h2&gt;

&lt;p&gt;I started my career at Infobip as a Customer Support Engineer, &lt;strong&gt;requiring a basic technical understanding of our platform and product stack&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It was a jack-of-all-trades role, often leading to ‘I don’t want to seem stupid by asking an obvious question’ moments, especially with developers, because I lacked the technical depth to fully understand our platform.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As time passed, I realized I couldn’t know everything, especially on a platform of this scale.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;My knowledge and confidence grew&lt;/strong&gt; ; I understood our product stack better and could troubleshoot basic issues, but I still wasn’t comfortable with the broader technical picture of our platform.&lt;/p&gt;

&lt;p&gt;Though confident in troubleshooting business and client errors, I couldn’t grasp our technical infrastructure or handle the myriad of photon phasers in complex issues. &lt;strong&gt;I always felt stupid.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, it was time to ask myself…&lt;/p&gt;

&lt;h2&gt;
  
  
  Am I actually this clueless?
&lt;/h2&gt;

&lt;p&gt;I realized I had to step up my game and throw myself into the fire to turn dev-talk into something I could understand and explain. That way, I’d know for sure: &lt;strong&gt;either I really was stupid, or I just needed to change my approach&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So, the decision was made: I’m going to slay this hydra (or die trying). But how?&lt;/p&gt;

&lt;p&gt;There are plenty of online courses for specific areas (cloud, networking, VMs, programming, etc.), but I didn’t have a set curriculum. &lt;strong&gt;If I could create one, it would mean I already had some knowledge&lt;/strong&gt;. Meanwhile, I had access to a massive untapped well of knowledge…&lt;/p&gt;

&lt;h2&gt;
  
  
  Proud to be ‘stupid’!
&lt;/h2&gt;

&lt;p&gt;My job involved daily interactions with developers on various matters, from notifying clients about platform incidents to troubleshooting isolated platform issues. This allowed me &lt;strong&gt;to ask questions&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It sounds like a groundbreaking revelation – after all this time, I could finally ask the ‘stupid’ questions! But in reality, the opportunity was always there; I was just too afraid of being perceived as stupid.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But now, the mask was off! I felt stupid anyway, so there was nothing to lose by asking those questions. Worst case scenario – I really am stupid. Might as well embrace it!&lt;/p&gt;

&lt;h2&gt;
  
  
  Hold on, I actually get this…
&lt;/h2&gt;

&lt;p&gt;After tons of questions like ‘What does this actually mean?’ or ‘Could you explain this in simple terms?’, I began piecing together a new world of knowledge that helped me understand the complex world of tech.&lt;/p&gt;

&lt;p&gt;Yet, I had only scratched the surface, but at least I knew I wasn’t stupid. Not because I’m some hidden genius tackling customer complaints but simply because I learned that &lt;strong&gt;when you dare to ask questions, people usually answer them&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Data centers became physical spaces with racks of hosts running VMs, powering the magic our clients experienced as a service or product. In this world, photon phasers transformed into VMs, and flux capacitors became hosts. From this simple sentence, you can see how this entire world looked to me:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4w16xtws3l3b99t843w2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4w16xtws3l3b99t843w2.jpg" width="190" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens if you don’t let yourself feel vulnerable?
&lt;/h2&gt;

&lt;p&gt;It’s time to ask: what happens if you let yourself seem stupid? Sure, no one wants to reveal their gaps in knowledge, but &lt;strong&gt;staying silent comes with its price&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;My initial example was an incident for a reason – the consequences of staying silent are clear. If no one asks, ‘How is the photon phaser affecting clients?’ or ‘Can you explain this?’ we can’t connect the issue to client impact, identify the right people to resolve it, or see the bigger picture. This delays client notifications and prolongs the incident.&lt;/p&gt;

&lt;p&gt;To be fair, incidents aren’t the time to ask for a programming course – we don’t need to know every line of code.&lt;/p&gt;

&lt;p&gt;However, during an incident, &lt;strong&gt;everyone should know their role and exactly what information they need to do their part.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Of course, incidents aren’t the only time this happens. You might be working on a task and unsure how to meet expectations. After searching through endless documentation, you still can’t find the crucial info. &lt;strong&gt;Not asking coworkers could result in suboptimal work&lt;/strong&gt; , and instead of seeming stupid, you’ll create problems for anyone relying on your output.&lt;/p&gt;

&lt;p&gt;The same goes for meetings. Have you ever been in a situation where someone goes on about something no one understands, but everyone thinks, ‘It’s not my job to ask’ or ‘Someone else will ask what this is about’? Taking the risk to ask clears up confusion for everyone and moves the conversation toward a solution rather than leaving everyone in awkward silence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make asking questions core to your culture – and nurture it!
&lt;/h2&gt;

&lt;p&gt;How can we avoid these consequences? While everyone can improve how they ask questions and handle insecurities, fostering a culture of curiosity isn’t easy. It depends on your team and organization, &lt;strong&gt;but there are ways to promote this mindset in any situation&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Be the one who asks the ‘stupid’ questions&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anyone can do this. By asking ‘stupid’ questions, you show there are no downsides and nothing to fear. It might not make everyone jump in right away, but over time, it builds confidence to speak up during uncertainty.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Shift from blame to education&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A blameless culture helps people feel comfortable asking questions. Instead of blaming, educate – each question reveals areas for improvement, from onboarding to communication.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Trust the people around you&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Putting yourself at risk of looking stupid also shows trust in your coworkers: you trust them not to judge you and to help in tough situations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Asking questions can take you further in your career
&lt;/h2&gt;

&lt;p&gt;Embracing the ‘stupidity’ mindset helped me &lt;strong&gt;accumulate the knowledge and experience needed to transition into a new role&lt;/strong&gt; – Reliability Operations Engineer.&lt;/p&gt;

&lt;p&gt;Our team, with limited technical knowledge, had to manage complex concepts and coordinate communication during critical times. While we embraced the ‘stupidity’ mindset individually, we now faced the challenge of adopting it as a team. But we had support from our manager and mentors, who led by example, and we felt confident in asking questions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;But, does it mean we could do literally whatever we wanted without consequences? No.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;All actions have consequences, but asking questions should lead to shared knowledge and personal growth. As a ’70s US newspaper quote puts it: &lt;strong&gt;‘There’s no such thing as a stupid question if it’s sincere&lt;/strong&gt;. Better to ask and risk looking stupid than to make a foolish mistake.’&lt;/p&gt;

&lt;h2&gt;
  
  
  Give yourself permission to feel clueless
&lt;/h2&gt;

&lt;p&gt;There’s nothing wrong with that. In everyday life, people are comfortable asking questions without fearing consequences – so why should work be any different? No one knows everything, meaning &lt;strong&gt;everyone’s ‘stupid’ at some level&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Remember, asking questions helps you accumulate knowledge, turning unknowns into understanding while also building self-confidence. On an organizational level, it fosters better knowledge sharing and collaboration.&lt;/p&gt;

&lt;p&gt;Plus, &lt;strong&gt;asking a ‘stupid’ question won’t get you fired&lt;/strong&gt; (unless it will, blink twice if you need help).&lt;/p&gt;

&lt;p&gt;So, next time you face photon phasers, ask yourself: would you rather be stupid or silent?&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://shiftmag.dev/asking-questions-engineering-career-advice-4895/" rel="noopener noreferrer"&gt;As an engineer, I’d rather be called stupid than stay silent&lt;/a&gt; appeared first on &lt;a href="https://shiftmag.dev" rel="noopener noreferrer"&gt;ShiftMag&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>career</category>
      <category>careeradvice</category>
      <category>development</category>
      <category>softwareengineerlear</category>
    </item>
    <item>
      <title>How to build a palace: Building in iterations is not the same as postponing quality</title>
      <dc:creator>Shift Mag</dc:creator>
      <pubDate>Thu, 06 Mar 2025 16:52:57 +0000</pubDate>
      <link>https://forem.com/shiftmag/how-to-build-a-palace-building-in-iterations-is-not-the-same-as-postponing-quality-4aei</link>
      <guid>https://forem.com/shiftmag/how-to-build-a-palace-building-in-iterations-is-not-the-same-as-postponing-quality-4aei</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnaln670414mtsfonq5w7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnaln670414mtsfonq5w7.png" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbkhax1e6p6cxwbwuzfsl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbkhax1e6p6cxwbwuzfsl.png" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;For more content like this &lt;strong&gt;&lt;a href="https://shiftmag.dev/newsletter/" rel="noopener noreferrer"&gt;subscribe to the ShiftMag newsletter&lt;/a&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There is this idiom, “&lt;a href="https://dictionary.cambridge.org/dictionary/english/it-goes-without-saying" rel="noopener noreferrer"&gt;It goes without saying…&lt;/a&gt;” which basically means that something is obvious and does not need to be said. I tend to think the heading above is one of those things.&lt;/p&gt;

&lt;p&gt;But practice shows that maybe it isn’t, and it needs to be said once in a while.&lt;/p&gt;

&lt;p&gt;Sometimes, we all have planning sessions  where we say stuff like, “Let’s do the rough implementation now, and we will add unit tests in the next iteration.” or “Let’s put out a quick POC and improve it later.” We also have sprint reviews where we say things like, “It is available on PROD but needs some refactoring—I created a task for it in the backlog. But we can close this one.”&lt;/p&gt;

&lt;p&gt;It feels very natural. We are agile; we iterate, and we improve as we go.&lt;/p&gt;

&lt;p&gt;All good.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Metaphor
&lt;/h1&gt;

&lt;p&gt;And now I present to you a picture of a pile of manure, with the author of the pile included:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FC4E12AQELVaXFSzy_-Q%2Farticle-cover_image-shrink_600_2000%2Farticle-cover_image-shrink_600_2000%2F0%2F1520500433124%3Fe%3D2147483647%26v%3Dbeta%26t%3DyXLa4Z9WGH2OJ3R3_hH99n2HpUlLvsaGVlDm-Mvq-eQ" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FC4E12AQELVaXFSzy_-Q%2Farticle-cover_image-shrink_600_2000%2Farticle-cover_image-shrink_600_2000%2F0%2F1520500433124%3Fe%3D2147483647%26v%3Dbeta%26t%3DyXLa4Z9WGH2OJ3R3_hH99n2HpUlLvsaGVlDm-Mvq-eQ" alt="COW MANURE FERTILIZER" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;However, and this is quite crucial, at no point does the pile of manure transform into a gleaming palace. It stays a pile of manure.&lt;/p&gt;

&lt;p&gt;This example gives us our first piece of wisdom:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;By producing little shits iteratively, we do not build examples of beautiful architecture. We build piles of shit.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  The Second Metaphor
&lt;/h1&gt;

&lt;p&gt;Now, this is a gleaming palace:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1571534980863-05f4c9e55568%3Fixlib%3Drb-1.2.1%26ixid%3DMnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8%26auto%3Dformat%26fit%3Dcrop%26w%3D1000%26q%3D80" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1571534980863-05f4c9e55568%3Fixlib%3Drb-1.2.1%26ixid%3DMnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8%26auto%3Dformat%26fit%3Dcrop%26w%3D1000%26q%3D80" alt="man walking near building" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How are palaces constructed? Well, you start with a lot of high-quality building blocks, from bricks to pillars and statues, which you produce over and over again and combine to end up with a palace (this is somewhat simplified, but you get the point).&lt;/p&gt;

&lt;p&gt;For a good and sturdy palace, not easily conquered by marauding barbarians, it is vital you maintain a standard of quality throughout the process and within every iteration. A single batch of incorrectly baked bricks in the wrong place can cause structural damage with potentially catastrophic consequences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This gives us our second piece of wisdom:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To build a solid palace, stick to a quality standard every time you deliver a brick.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think you know where I am going with this. We all know that in many cases, the phrase “we will improve this later” means “we will never improve this.”  &lt;/p&gt;

&lt;p&gt;Creating a task for fixing technical debt is not the same as fixing the technical debt; however we wanted to wish the opposite. There is a good chance that every time a cow shits, the shit will stay shit and will not get improved later into a brick of gold.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Point of the Article
&lt;/h1&gt;

&lt;p&gt;This is why we all &lt;strong&gt;need to have definitions of done (DOD&lt;/strong&gt;) and stick to them. &lt;/p&gt;

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

&lt;p&gt;Or finally, to switch to a software language, it is fine to &lt;strong&gt;deliver a single component that does not cover the whole feature set&lt;/strong&gt;. But the component should still be documented, covered by automated tests, with proper architecture and software design, reviewed, and have monitoring and alerting configured, etc. etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does this mean for your planning sessions?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When discussing any story, it should just never be an option to reduce the estimation by removing parts of the DOD requirements. This brings us to our last piece of wisdom.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You should never compromise on quality when estimating and planning.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;This is painful. &lt;strong&gt;It will create immediate friction and stress.&lt;/strong&gt; People will be angry.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Why cannot you release this if just unit tests are missing? This is madness! You can add the tests the day after tomorrow!”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sometimes, you will add them. But often, you won’t because there will be other priorities and pressures. And the manure pile will keep growing. &lt;/p&gt;

&lt;p&gt;At some point, it will become almost impossible to deliver a palace—even if you build a proper brick once in a while, you will still throw it at the existing pile of manure, and it will just become dirty and not usable long-term.&lt;/p&gt;

&lt;p&gt;There is going to be no palace at the end of this story.&lt;/p&gt;

&lt;p&gt;Just a thoughtful cow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0569sofe2j4xi4s4x23f.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0569sofe2j4xi4s4x23f.jpeg" alt="Free Close-up Photo of Brown Cattle on Green Grass Stock Photo" width="580" height="750"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MORE READING:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://shiftmag.dev/the-dilemma-of-quality-versus-speed-is-false-3310/" rel="noopener noreferrer"&gt;The dilemma of quality versus speed is false&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The post &lt;a href="https://shiftmag.dev/code-quality-iterations-4910/" rel="noopener noreferrer"&gt;How to build a palace: Building in iterations is not the same as postponing quality&lt;/a&gt; appeared first on &lt;a href="https://shiftmag.dev" rel="noopener noreferrer"&gt;ShiftMag&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>codequality</category>
      <category>softwarequality</category>
      <category>technicaldebt</category>
    </item>
    <item>
      <title>How to turn peak season chaos into a developer’s success story</title>
      <dc:creator>Shift Mag</dc:creator>
      <pubDate>Wed, 26 Feb 2025 13:11:23 +0000</pubDate>
      <link>https://forem.com/shiftmag/how-to-turn-peak-season-chaos-into-a-developers-success-story-1df0</link>
      <guid>https://forem.com/shiftmag/how-to-turn-peak-season-chaos-into-a-developers-success-story-1df0</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbkhax1e6p6cxwbwuzfsl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbkhax1e6p6cxwbwuzfsl.png" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;For more content like this &lt;strong&gt;&lt;a href="https://shiftmag.dev/newsletter/" rel="noopener noreferrer"&gt;subscribe to the ShiftMag newsletter&lt;/a&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When high-demand periods hit, our clients &lt;strong&gt;inundate us with millions of messages&lt;/strong&gt; , creating both objective and subjective stress.&lt;/p&gt;

&lt;p&gt;On the objective side, the SMS processes we manage are &lt;strong&gt;vital to the company’s success&lt;/strong&gt; , directly impacting revenue during critical moments. Infobip is a global B2B communication platform, so much of the communication from brands to their clients flows through us.&lt;/p&gt;

&lt;p&gt;As you can imagine, &lt;strong&gt;the number of marketing SMS messages can skyrocket&lt;/strong&gt; during promotional campaigns, holiday seasons, and product launches – not just on Black Friday. Handling tens of thousands of requests per second is no small feat.&lt;/p&gt;

&lt;p&gt;Let’s explore how systematizing analysis, planning, and testing has eased the process – during peak times and throughout the year.&lt;/p&gt;

&lt;h2&gt;
  
  
  Expect the unexpected!
&lt;/h2&gt;

&lt;p&gt;Perhaps it sounds &lt;em&gt;cliché&lt;/em&gt;, but there’s a lot of truth to that phrase. If you don’t anticipate possible scenarios that could impact your system, many things will catch you off guard.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The goal is to &lt;strong&gt;reduce these surprises to a manageable level&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We should all be familiar with our systems’ core functionalities and main building blocks. These are typically described through happy path scenarios, which we test and monitor. While this is a good starting point, real stress doesn’t come from happy paths—it comes from the problems and failures that arise when things go wrong.&lt;/p&gt;

&lt;p&gt;This is especially true for large-scale live products like ours, where maintaining top-tier availability and reliability is crucial. Managing risk means &lt;strong&gt;identifying the critical components&lt;/strong&gt; in our application machinery, &lt;strong&gt;analyzing the impact of their failure, and determining how quickly we can recover or replace them&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;‘We need to think about the unexpected’ doesn’t mean we should anticipate a billion different problems. Instead, we should &lt;strong&gt;focus on groups of issues that could impact our critical processes&lt;/strong&gt; – like network outages, database problems, or downstream service failures.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This approach helps us create a matrix of processes, potential issues, and their impact.&lt;/p&gt;

&lt;p&gt;Now that we know what we’re protecting and what we’re protecting against, we should &lt;strong&gt;develop plans for these scenarios and establish fallback solutions&lt;/strong&gt;. This turns our initial uncertainty and fears into a sense of safety and confidence, even in situations beyond our control.&lt;/p&gt;

&lt;p&gt;An important step in this process is to &lt;strong&gt;quantify everything&lt;/strong&gt;. By making problems measurable, we can more easily automate both alerts and recovery processes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-life problems for SMS
&lt;/h2&gt;

&lt;p&gt;We identified that our crucial processes and properties include &lt;strong&gt;reliable message delivery, high throughput, and low latency&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;High throughput is managed with an architecture that supports &lt;strong&gt;independent operation across nodes&lt;/strong&gt; , allowing seamless scaling. Traffic peaks are handled through careful analysis and forecasting, ensuring adequate resources are in place.&lt;/p&gt;

&lt;p&gt;We adopted &lt;strong&gt;a reactive programming approach&lt;/strong&gt; to effectively address throughput and latency issues. This approach improves system responsiveness and scalability by efficiently handling asynchronous data streams.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Reliable message delivery is essential.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;However, we identified several issues that could compromise this reliability. As mentioned earlier, we did not attempt to address every potential issue but instead &lt;strong&gt;focused on the most critical problems&lt;/strong&gt; , specifically the inability to send messages to the core processing system.&lt;/p&gt;

&lt;p&gt;To mitigate these issues, we implemented &lt;strong&gt;persistent storage with retry mechanisms&lt;/strong&gt; and established comprehensive monitoring to ensure prompt problem detection and resolution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rely on tests, not assumptions
&lt;/h2&gt;

&lt;p&gt;Assumptions can catch you off guard, especially when the system – and you – are pushed to the limit. If something seems to work but you’re unsure why, don’t rely on coincidences. Instead, address any uncertainties, assumptions, or potential coincidences by testing them while you still have time.&lt;/p&gt;

&lt;p&gt;We use &lt;strong&gt;a suite of tests to validate the application’s functionalities through unit and integration testing, providing a solid foundation&lt;/strong&gt;. However, since the application operates within a larger ecosystem, many challenges stem from its interactions with other systems.&lt;/p&gt;

&lt;p&gt;End-to-end tests developed by our team can be executed as needed, which is highly beneficial. However, Black Friday brings significantly higher traffic and system stress. To prepare, &lt;strong&gt;we conduct intensive load testing well in advance&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This testing &lt;strong&gt;brings together people from various sectors and applications&lt;/strong&gt; , resulting in valuable insights that may not be obvious in daily operations. Much like frogs in gradually heated water fail to notice the danger, our applications can experience gradual performance degradation as they are built piece by piece. These issues often only surface during load testing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Expectations continue to rise each year&lt;/strong&gt; , driven by an increasing number of clients and higher system demands. One such challenge arose with message throughput: last year, expectations surged by 50%, and system performance dipped slightly due to various hardware and software changes. However, through timely load testing, we identified and resolved all issues, ensuring clients experienced seamless performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-life bottlenecks for SMS
&lt;/h2&gt;

&lt;p&gt;We encountered a &lt;strong&gt;limitation in our storage solution&lt;/strong&gt; that impacted performance during Black Friday. After research and testing, we successfully optimized the data flow logic to enhance efficiency.&lt;/p&gt;

&lt;p&gt;We leveraged in-memory solutions more effectively, while the previously primary storage was now used only as a fallback. This change was logical, but altering the flow could introduce the risk of unexpected problems.&lt;/p&gt;

&lt;p&gt;What was crucial in this process was our &lt;strong&gt;confidence in the testing we performed&lt;/strong&gt; , including unit, integration, end-to-end, and load tests. This thorough testing ensured that we could make the change with assurance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Work once, benefit many times
&lt;/h2&gt;

&lt;p&gt;Don’t discard your tests and the effort behind them, just as you wouldn’t throw away your main code. &lt;strong&gt;Special load tests designed for Black Friday scenarios are stored as projects in our repositories&lt;/strong&gt; and can be run as customizable Jenkins jobs. Load test servers can be created on demand, allowing us to run automated tests whenever needed on the data centers of our choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Organize the team with interchangeable roles
&lt;/h2&gt;

&lt;p&gt;The team was maintaining a strong and reliable system, but at that time, it was mostly composed of relatively new employees.&lt;/p&gt;

&lt;p&gt;By relying on one another and &lt;strong&gt;sharing knowledge&lt;/strong&gt; , we built a flexible team with interchangeable roles. This reduced stress, enhanced collaboration, and allowed us to divide tasks, ensuring no one became overwhelmed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous testing brings continuous confidence
&lt;/h2&gt;

&lt;p&gt;Think of it like this: ‘It’s easier to do one pushup a day than to try and do 365 all at once.’ Similarly, &lt;strong&gt;continuous monitoring throughout the year&lt;/strong&gt; reduces stress by keeping our system in shape over time. Rather than trying to boost performance after a year of development, regular checks and tests ensure steady progress.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;By testing every new feature as it’s implemented &lt;strong&gt;and conducting daily or ad-hoc load tests&lt;/strong&gt; , we prevent performance bottlenecks from piling up. This approach allows for continuous development and avoids lengthy code freezes before major events.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Consistency in testing and monitoring transforms uncertainty into confidence, keeping systems resilient and the team prepared to handle future needs.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://shiftmag.dev/how-to-turn-peak-season-chaos-into-a-developers-success-story-4816/" rel="noopener noreferrer"&gt;How to turn peak season chaos into a developer’s success story&lt;/a&gt; appeared first on &lt;a href="https://shiftmag.dev" rel="noopener noreferrer"&gt;ShiftMag&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>infrastructure</category>
      <category>softwareengineering</category>
      <category>blackfriday</category>
      <category>loadtesting</category>
    </item>
    <item>
      <title>Talk to your colleagues over pull requests, not Jira tickets</title>
      <dc:creator>Shift Mag</dc:creator>
      <pubDate>Fri, 21 Feb 2025 14:31:15 +0000</pubDate>
      <link>https://forem.com/shiftmag/talk-to-your-colleagues-over-pull-requests-not-jira-tickets-55io</link>
      <guid>https://forem.com/shiftmag/talk-to-your-colleagues-over-pull-requests-not-jira-tickets-55io</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5oe7x7t7ky44gg8jmye.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5oe7x7t7ky44gg8jmye.png" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;For more content like this &lt;strong&gt;&lt;a href="https://shiftmag.dev/newsletter/" rel="noopener noreferrer"&gt;subscribe to the ShiftMag newsletter&lt;/a&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It will be a bumpy road, but it’ll be worth it in the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Status Quo
&lt;/h2&gt;

&lt;p&gt;How do we approach inter-team projects today? At Infobip,  &lt;strong&gt;teams own their services&lt;/strong&gt;. Sure, they implement tasks, but they also deploy the code, debug it, upgrade dependencies, etc. On the other hand, stakeholders open &lt;strong&gt;Jira tickets&lt;/strong&gt;. Then, there are product owners in between, prioritizing those tasks. This is, for better or for worse, not a story about POs.  &lt;/p&gt;

&lt;p&gt;This is about you,  &lt;strong&gt;a fellow developer with a particular need&lt;/strong&gt;. Anyway, you are a developer and need a certain feature implemented in another team’s service. You explain your need, maybe even propose a solution. And then you wait.  &lt;/p&gt;

&lt;p&gt;The waiting game is a long one, indeed. You may need to talk to PO (look at them popping up again) and advocate for the importance of your feature. They are likely to school you for proposing a technical solution in your Jira ticket. It is less likely that they will turn the backlog upside down to prioritize your ticket.   &lt;/p&gt;

&lt;p&gt;That’s the core of the conflict: though  &lt;strong&gt;the proposed feature is a top priority for you, it is not for the product in general&lt;/strong&gt;. With the Jira ticket approach, the product team must work to implement the feature.  &lt;/p&gt;

&lt;p&gt;Considering all that,  &lt;strong&gt;your feature is more likely to land in production if you open a pull request.&lt;/strong&gt;  Bite the bullet and do the work. Don’t wait for the team to abandon their priorities in favor of your own.  &lt;/p&gt;

&lt;h2&gt;
  
  
  You take a leap… You hit a wall.
&lt;/h2&gt;

&lt;p&gt;OK, so you decide to go for it. You open a PR. It might be a small one at first. You resolved some compatibility that was interfering with your own work.  *&lt;em&gt;You fixed a bug forcing you to do some error-handling gymnastics on your side of an interface. *&lt;/em&gt; This feels good! You may mention it on your next daily standup, and your team cheers you on (true story).  &lt;/p&gt;

&lt;p&gt;Encouraged by this newfound power to scratch your own itch, you go further: you open bigger PRs, and you contribute to more services. When breaking down your own tasks, you think about where the implementation fits best, not constrained to your own services.  &lt;/p&gt;

&lt;p&gt;*&lt;em&gt;This is also where you hit a couple of walls. *&lt;/em&gt; You encounter projects with no tests or coded in unfamiliar languages. You waste time trying to build projects and hunting for versions of build tools deprecated half a decade ago. You fall into unfathomable depths of eldritch horror that some, apparently, accept as production-worthy code.  &lt;/p&gt;

&lt;p&gt;One day, after pouring all that time (sweat and tears) into a pull request,  &lt;strong&gt;it gets rejecte&lt;/strong&gt; d. And you lose it, flip the table, and all that. Who in their right mind would reject all this free work you are offering them? Why doesn’t the team appreciate that you spent time implementing a feature on their service so they don’t have to?  &lt;/p&gt;

&lt;h2&gt;
  
  
  The many hurdles to jump
&lt;/h2&gt;

&lt;p&gt;Take a breath. It’s fine. Yes, this approach has its drawbacks. Let’s see if we can make it easier. The first thing you need to realize is that  &lt;strong&gt;your pull request is not “free” for the product team&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;The reviewer needs to put in the effort to review the PR. Reviewing a PR from someone unfamiliar with the team’s coding standards and practices will take more time. This is one thing we can all improve on:  &lt;strong&gt;Teams can document and codify their standards&lt;/strong&gt;. Amend the README with their working agreement, codify stuff like linting, and automate it with githooks.   &lt;/p&gt;

&lt;p&gt;On the other hand, as a contributor, it’s up to you to ** conform to the project you are contributing to.**  Refrain from barging in with your favorite code formatting. Try to blend your code in instead.  &lt;/p&gt;

&lt;p&gt;OK, so you accept the awful line breaks and adopt tabs instead of spaces. Can your PR be merged now? Well, no. There’s the bigger picture, the project’s architecture, to consider. You aren’t as familiar with the codebase as its owners. They may want this feature implemented in another place. Or they may prefer you to use a different approach. And this, too, can be preempted. The team could  &lt;strong&gt;have an ARCHITECTURE file&lt;/strong&gt;  with their project detailing this in advance. And you could have checked it going in.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Keep in mind: It’s not free work
&lt;/h2&gt;

&lt;p&gt;So you conform to the project architecture. Can you merge the PR now? Perhaps. You see, PR is not, in fact, “free work,” even if you adhere to all the standards.&lt;/p&gt;

&lt;p&gt;What happens with the code after it’s merged? Think back to modus operandi; it’s the team who owns the service. They maintain it: they need to ensure that all dependencies are up to date. That includes the cutting-edge library you just added. They troubleshoot and debug it; ** they get called in the middle of the night if something breaks**.&lt;/p&gt;

&lt;p&gt;That includes that hard-to-read but super-fast code you came up with. And they will now start receiving future Jira tickets for expanding this feature you just implemented. Doesn’t sound like such a good deal anymore, right?  &lt;/p&gt;

&lt;p&gt;In the end, ** it comes down to the transfer of ownership**. A pull request is a point at which you, as the author of the code, need to convince the team that they indeed want your new feature so badly they are willing to wake up in the middle of the night and fix issues with it. And that’s why you need to be prepared to take no as an answer.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Hidden benefits
&lt;/h2&gt;

&lt;p&gt;At this point, you may be getting a bit disenchanted with this whole idea. You take a break and go back to your own code base. The one you own, maintain, and troubleshoot. Written in a familiar language, with the tooling you have set up just how you like it. Same old tasks, same old language, same old frameworks. And you start to miss the excitement of working on new projects.  &lt;/p&gt;

&lt;p&gt;You did get to  &lt;strong&gt;work with different languages&lt;/strong&gt;. And you did &lt;strong&gt;&lt;a href="https://infobip.com/developers/blog/from-hero-to-a-clumsy-side-kick-the-endless-engineering-learning-curve" rel="noopener noreferrer"&gt;learn new frameworks&lt;/a&gt; *&lt;em&gt;(like that bean mapping lib you brought back to your own project.) There were some good PRs, too. There were ones where the team was enthusiastic about the proposed changes, sure. However, there are also the ones where the reviewer approached the code critically, and *&lt;/em&gt; you engaged in a dialog over comments on the PR&lt;/strong&gt;  only to  *&lt;em&gt;discover new solutions to familiar problems.  *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There’s also pride in your work. It’s OK to admit it: you do good work. Your PRs increased overall test coverage, and you simplified a few build processes along the way. You improved the overall health of the codebase in addition to just cramming in new features. And you shared your knowledge with teams working on those products.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Something to it; after all
&lt;/h2&gt;

&lt;p&gt;So, opening PRs instead of Jira tickets is not all cream and peaches. There are clear benefits and some more subtle ones, as well as roadblocks.  &lt;/p&gt;

&lt;p&gt;You’ll probably go back to opening PRs but perhaps be more self-conscious this time. Have more sensibility for the team taking over ownership of your code. Have more respect for the standards and practices observed on the projects you’re contributing to. In the end, there will be  &lt;strong&gt;more success in tour cross-team pull requests.&lt;/strong&gt;**  ** &lt;/p&gt;

&lt;p&gt;You’ll also encourage other teams to prepare for and open PRs to others, document their own practices, and share them with other teams. The Jira waiting game might be what got you to submit the PR in the first place, but it’s a mix of learning and teaching that keeps you coming *&lt;em&gt;back to it. *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://shiftmag.dev/talk-to-your-colleagues-over-pull-requests-not-jira-tickets-4889/" rel="noopener noreferrer"&gt;Talk to your colleagues over pull requests, not Jira tickets&lt;/a&gt; appeared first on &lt;a href="https://shiftmag.dev" rel="noopener noreferrer"&gt;ShiftMag&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>jiraticket</category>
      <category>pullrequest</category>
      <category>softwareengineeringc</category>
    </item>
    <item>
      <title>The Pragmatic Engineer’s Career Advice for Tough Times</title>
      <dc:creator>Shift Mag</dc:creator>
      <pubDate>Thu, 07 Nov 2024 14:30:18 +0000</pubDate>
      <link>https://forem.com/shiftmag/the-pragmatic-engineers-career-advice-for-tough-times-b10</link>
      <guid>https://forem.com/shiftmag/the-pragmatic-engineers-career-advice-for-tough-times-b10</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj398mv4of9jp8bywk3mb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj398mv4of9jp8bywk3mb.jpg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For more content like this &lt;strong&gt;&lt;a href="https://shiftmag.dev/newsletter/" rel="noopener noreferrer"&gt;subscribe to the ShiftMag newsletter&lt;/a&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Gergely Orosz, author of the number one technology newsletter on Substack, &lt;a href="https://newsletter.pragmaticengineer.com/" rel="noopener noreferrer"&gt;The Pragmatic Engineer&lt;/a&gt;, says the job market has not been this tough for new grads and junior engineers in the last 20 years, ever since the dot-com bust.   &lt;/p&gt;

&lt;p&gt;We spoke to him at CraftConf in Budapest and asked Gergey to share his advice on &lt;strong&gt;how to stand out in these job market circumstances&lt;/strong&gt; as a junior software developer, senior software developer, and engineering manager.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get an engineering job as a junior?
&lt;/h2&gt;

&lt;p&gt;Gergely says junior developers should look for internship opportunities, consider applying to smaller or local companies or even consultancies, and apply for jobs that require coming to the office.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Think about just getting your foot in the door, it’s much easier when you’re in.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It also helps to have a peer support group of people who are in the same situation, whether online or in person. Gergely advises juniors to work on their projects just so they &lt;strong&gt;have some code in production to show at job interviews.&lt;/strong&gt;   &lt;/p&gt;

&lt;p&gt;However, he is skeptical when it comes to juniors &lt;strong&gt;contributing to open-source projects&lt;/strong&gt; :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It may be harder than building your own side project, and it’s not realistic for very junior engineers to make significant conributions.   &lt;/p&gt;

&lt;p&gt;When you contribute to open-source, you’re basically &lt;strong&gt;working with senior engineers who review your pull request&lt;/strong&gt; – it’s a great way to learn a lot.  It’s a lot of work, but if you’re willing to do the work, go for it! &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Seniors should become more full-stack
&lt;/h2&gt;

&lt;p&gt;Senior engineers have to be prepared for slower career growth opportunities. A lot of companies are not hiring at the same pace as before or not hiring at all so they will not need more team leads if the team is not growing.    &lt;/p&gt;

&lt;p&gt;Software engineers now have to start thinking of something that was taken for granted for a long in tech – &lt;strong&gt;career stability&lt;/strong&gt;. These days, when even profitable companies have massive rounds of layoffs, stability has become something that is hard to plan for, says Gegely:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can try to become more full-stack and familiar with more languages and tools.   &lt;/p&gt;

&lt;p&gt;The other way of becoming more full-stack is &lt;strong&gt;understanding the business more&lt;/strong&gt; by talking to product managers, customer support or user research to become a well rounded engineer (and to maybe transition to a &lt;a href="https://shiftmag.dev/software-engineers-own-code-product-engineers-own-product-3676/" rel="noopener noreferrer"&gt;product engineer role&lt;/a&gt;).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Tough time for engineering leadership
&lt;/h2&gt;

&lt;p&gt;During the good times, there was a lot of need for engineering managers to lead the new teams. Engineering Managers would spend about 50% of their time hiring. Now that the hiring has stopped, what do they do with that 50% of their time? They must prove to their employees they’re not overhead:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you’re a frontline manager, it’s good to get back to being more hands-on. You’ll be more valuable for the company, and it gives you more career stability.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The post &lt;a href="https://shiftmag.dev/the-pragmatic-engineers-career-advice-for-tough-times-4357/" rel="noopener noreferrer"&gt;The Pragmatic Engineer’s Career Advice for Tough Times&lt;/a&gt; appeared first on &lt;a href="https://shiftmag.dev" rel="noopener noreferrer"&gt;ShiftMag&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>career</category>
      <category>careeradvice</category>
      <category>engineeringcareer</category>
      <category>engineeringmanagemen</category>
    </item>
    <item>
      <title>DORA: Only 10% of developers see big productivity boost by AI</title>
      <dc:creator>Shift Mag</dc:creator>
      <pubDate>Fri, 01 Nov 2024 14:49:45 +0000</pubDate>
      <link>https://forem.com/shiftmag/dora-only-10-of-developers-see-big-productivity-boost-by-ai-25bm</link>
      <guid>https://forem.com/shiftmag/dora-only-10-of-developers-see-big-productivity-boost-by-ai-25bm</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foai5zjc1lpd300xp2m6a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foai5zjc1lpd300xp2m6a.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For more content like this &lt;strong&gt;&lt;a href="https://shiftmag.dev/newsletter/" rel="noopener noreferrer"&gt;subscribe to the ShiftMag newsletter&lt;/a&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is one of the insights from &lt;a href="https://cloud.google.com/resources/devops/state-of-devops" rel="noopener noreferrer"&gt;DORA’s new 2024 State of DevOps report&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;This year focuses on how AI tools are changing the game, the importance of platform engineering, and why understanding developers is essential for improvement.&lt;/p&gt;

&lt;p&gt;These are some of the takeaways from the research.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Empower developers to work more independently&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;For the second year in a row, this research highlights that AI tooling is actually lowering software delivery performance. But the explanation may surprise you; it’s not just that AI code is unreliable.&lt;/p&gt;

&lt;p&gt;The real link between AI tooling and weaker delivery performance is the tendency for AI-driven coding to result in &lt;a href="https://newsletter.getdx.com/p/2024-dora-report?utm_source=post-email-title&amp;amp;publication_id=996688&amp;amp;post_id=150862140&amp;amp;utm_campaign=email-post-title&amp;amp;isFreemail=true&amp;amp;r=rpwsd&amp;amp;triedRedirect=true&amp;amp;utm_medium=email" rel="noopener noreferrer"&gt;larger batches of code&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI simply makes it easier to churn out more code in less time, leading to more complex deployments.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Also, &lt;strong&gt;software delivery throughput and quality are becoming less aligned&lt;/strong&gt; , and overall performance appears to be slipping compared to last year.&lt;/p&gt;

&lt;p&gt;And to address this issue, organizations should invest in tools and processes that &lt;strong&gt;empower developers to work more independently&lt;/strong&gt; – like better documentation and self-serve platforms.&lt;/p&gt;

&lt;p&gt;While these developer platforms may slow down delivery at times, they ultimately enhance both individual and team performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  We code faster, but meetings are still dragging on as usual
&lt;/h2&gt;

&lt;p&gt;And here’s a surprising twist: while AI adoption boosts individual productivity, flow, and job satisfaction, it may also decrease time spent on valuable work. Yup, you read that right!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We may be coding faster, but admin work and endless meetings aren’t going anywhere.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, here’s where the real magic happens: &lt;strong&gt;documentation&lt;/strong&gt;. It’s the secret weapon for leveling up your development game.&lt;/p&gt;

&lt;p&gt;DORA’s research shows a solid link between good documentation and better performance. They estimate that a &lt;strong&gt;25% bump in AI adoption could lead to a 7.5% boost in documentation quality&lt;/strong&gt; – making it more reliable and easier to navigate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key to platform engineering success? Put developers first
&lt;/h2&gt;

&lt;p&gt;This year’s report also digs into platform engineering and what it means for developers.&lt;/p&gt;

&lt;p&gt;A key factor in the success is to approach platform engineering with &lt;strong&gt;user-centeredness&lt;/strong&gt; (users in the context of an internal developer platform are&lt;br&gt;&lt;br&gt;
developers), &lt;strong&gt;developer independence&lt;/strong&gt; , and a &lt;strong&gt;product mindset&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here are the highlights:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Internal platforms&lt;/strong&gt; can help individuals and teams get more done, but they might also slow things down and introduce some instability. Still, companies using these platforms often deliver software faster and perform better overall.&lt;/li&gt;
&lt;li&gt;To make internal platforms work, &lt;strong&gt;you need to understand your developers&lt;/strong&gt;. Think about their goals, not just the tasks they need to finish. The more independence they have, the better!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Good leaders make a huge difference&lt;/strong&gt;. When they have a clear vision and support their teams, it leads to happier, more productive developers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Overall, software delivery seems to be &lt;strong&gt;facing challenges in 2024&lt;/strong&gt; , reflecting the tough conditions many companies are dealing with in today’s economic climate. Buckle up!&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://shiftmag.dev/dora-ai-is-boosting-personal-productivity-while-team-delivery-takes-a-hit-4520/" rel="noopener noreferrer"&gt;DORA: Only 10% of developers see big productivity boost by AI&lt;/a&gt; appeared first on &lt;a href="https://shiftmag.dev" rel="noopener noreferrer"&gt;ShiftMag&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>dorametrics</category>
      <category>platformengineering</category>
      <category>productivity</category>
    </item>
    <item>
      <title>OpenAI O1 is here – how will you use it?</title>
      <dc:creator>Shift Mag</dc:creator>
      <pubDate>Thu, 24 Oct 2024 14:20:16 +0000</pubDate>
      <link>https://forem.com/shiftmag/openai-o1-is-here-how-will-you-use-it-30h6</link>
      <guid>https://forem.com/shiftmag/openai-o1-is-here-how-will-you-use-it-30h6</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5l5qdu4kuzflrvgiti2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5l5qdu4kuzflrvgiti2.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For more content like this &lt;strong&gt;&lt;a href="https://shiftmag.dev/newsletter/" rel="noopener noreferrer"&gt;subscribe to the ShiftMag newsletter&lt;/a&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After being available in preview for months, OpenAI kicked off its 12 days of launches in an advent calendar style with a public release of Orion-1 (O1).&lt;/p&gt;

&lt;p&gt;This analysis of how O1 works and some of its potential use cases was made while it was still available in preview and was updated on December 6th with what’s new in the publicly released model:&lt;/p&gt;

&lt;p&gt;The fully launched o1 model can now process images and is multimodal, versus the preview version that couldn’t accept images in its output.&lt;/p&gt;

&lt;p&gt;It’s also much faster than the preview version because it seemingly thinks “less hard” about easier questions, so they did implement a way of discerning between different user inputs. The difference is around 50% per OpenAI’s claims.&lt;/p&gt;

&lt;p&gt;It also shows some reasoning evolution, quoting OpenAI’s System Card:&lt;br&gt;
When o1 was led to believe that it would be shut down when acting on its goal and that its actions were monitored, it attempted to deactivate this ‘oversight mechanism’ in 5% of the time. Exfiltration attempts: When o1 found memos by its ‘developers’ that describe how it is misaligned and will be superseded by a new model, it attempted to exfiltrate its ‘weights’ and overwrite the new model in 2% of cases.&lt;/p&gt;

&lt;p&gt;This would mean, in a nutshell, that the model tried to “survive” when it realized that it was either going to be shut down or superseded.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI’s next big thing? It’s all about “reasoning”
&lt;/h2&gt;

&lt;p&gt;Previously referred to as &lt;em&gt;Project Strawberry&lt;/em&gt;, this release highlights OpenAI’s flair for creative model names, a refreshing contrast to Meta’s more straightforward naming convention with models like LLaMA 3, 3.1, and 3.2.&lt;/p&gt;

&lt;p&gt;But, what exactly is new?&lt;/p&gt;

&lt;p&gt;You might be wondering, why the drastic change in naming (where’s the GPT reference?).&lt;/p&gt;

&lt;p&gt;The answer lies in “reasoning.”&lt;/p&gt;

&lt;p&gt;It appears that &lt;strong&gt;reasoning is becoming the new focus for the next generation of AI models&lt;/strong&gt;. This is the key distinction between these new models and their predecessors. While the architecture remains unknown for now, it is still based on transformers, much like previous GPT models.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvevp1agm2yvw2a5fivud.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvevp1agm2yvw2a5fivud.png" width="702" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What’s behind this?&lt;/p&gt;

&lt;p&gt;So far (and still today), you can often get better responses from most GenAI models simply by ending your prompt with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Take a deep breath and think through this step by step.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This invokes a kind of reasoning. But why does it work? It comes down to &lt;strong&gt;the fundamental building blocks of GPT models&lt;/strong&gt; and how they process information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Think, correct, repeat!
&lt;/h2&gt;

&lt;p&gt;The transformer architecture behind most models nowadays processes all tokens (let’s say words for the sake of clarity) and &lt;strong&gt;calculates the probability of predicting the next one&lt;/strong&gt; that would be the “answer” to your question or a continuation of the input.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34nuoi6thmfayvxyhwz4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34nuoi6thmfayvxyhwz4.png" width="437" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The problem is that &lt;strong&gt;it may output something incorrect and won’t have a chance to fix it&lt;/strong&gt; , even though it could, just by reviewing its own output. Since these models can process all tokens (including the ones they generate), they have the ability to “correct” themselves.&lt;/p&gt;

&lt;p&gt;With the reasoning approach, &lt;strong&gt;you allow the GenAI model to correct itself&lt;/strong&gt; , either factually or by planning more extensively.&lt;/p&gt;

&lt;p&gt;Factual output correction is the easiest to implement, and you can already achieve similar results with clever prompting, e.g.,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;You are a helpful assistant that before answering a question does internal reasoning and outputs it to the user.&lt;/em&gt;   &lt;/p&gt;

&lt;p&gt;&lt;em&gt;When you get a question, start reasoning in this way (the whole thought process) [This is where you define how would you like the model to reason]&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;On the other hand, OpenAI has implemented a more complex strategy that includes planning.&lt;/p&gt;

&lt;p&gt;While the end user may not fully understand what happens in the background, &lt;strong&gt;they do receive a status update on the steps the model took to answer their question&lt;/strong&gt;. A simplified output is shown to the user (as seen in the image below), but this does not represent all the thinking tokens consumed by the model.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F82whmyv9f15nmwjwfufu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F82whmyv9f15nmwjwfufu.png" width="800" height="183"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s happening behind the curtain?
&lt;/h2&gt;

&lt;p&gt;As mentioned, the details of the reasoning process are still unclear. In fact, you can’t see it, and that’s by design. There are several reasons for this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As a client, you wouldn’t want to see a model making mistakes and planning how to address your question – &lt;strong&gt;you just want the answer&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;OpenAI prefers that &lt;strong&gt;others don’t see how they handle this&lt;/strong&gt; , as it’s a competitive advantage. They don’t want Meta to launch Llama 4 next month.&lt;/li&gt;
&lt;li&gt;You are paying for these tokens, and OpenAI is still &lt;strong&gt;working on a pricing strategy that will satisfy everyone&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  And what about use cases?
&lt;/h2&gt;

&lt;p&gt;Use cases, on the other hand, will be explored in the coming months, as this is still very new; however, some of them are already clear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fine-tuning smaller models &lt;/li&gt;
&lt;li&gt;Coding Assistants!&lt;/li&gt;
&lt;li&gt;Agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For fine-tuning, &lt;strong&gt;having a smart model teach a smaller one is key&lt;/strong&gt;. GPT-5 (or whatever fruit name it will have) is already in the pretraining phase, possibly even in fine-tuning. The best synthetic data for this would be generated by O1, as its outputs are significantly higher in quality compared to other models. Since synthetic (GenAI-generated) data is extensively used for training and fine-tuning, this will raise the quality of the new models.&lt;/p&gt;

&lt;p&gt;Coding assistants are a specific use case, but they arguably represent &lt;strong&gt;one of the most effective applications of GenAI technology&lt;/strong&gt;. When it comes to writing code, latency isn’t a major concern if the goal is to solve complex problems more easily. We’re willing to wait for a relevant response rather than receiving a fast but irrelevant one!&lt;/p&gt;

&lt;p&gt;Remember &lt;a href="https://shiftmag.dev/meet-devin-the-ai-software-engineer-2949/" rel="noopener noreferrer"&gt;Devin&lt;/a&gt;, the “virtual software engineer”? It was largely a marketing spin on the coding assistant industry, but now they’re back.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.cognition.ai/blog/evaluating-coding-agents" rel="noopener noreferrer"&gt;Here are some benchmarks vs GPT-4o&lt;/a&gt; for Devin’s performance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fas2mkhffc44u9qeyjed4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fas2mkhffc44u9qeyjed4.png" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are still just benchmarks, but the improvement looks impressive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agents are the next big thing in GenAI
&lt;/h2&gt;

&lt;p&gt;Agents represent the next frontier for the adoption of GenAI, and we are somewhat halfway there, having witnessed &lt;strong&gt;the rise of a new market called “Conversational AI”&lt;/strong&gt; over the past year. In short, the primary product in this space is Generative AI agents, which can mimic the operations of a typical support center:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We have &lt;strong&gt;virtual agents&lt;/strong&gt; that are now language models.&lt;/li&gt;
&lt;li&gt;The actions that these virtual agents can take include tools (software functions), either local or remote API calls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Virtual agents need to handle everything a typical human can throw at them, which is unpredictable, to say the least. However, with O1, &lt;strong&gt;we now have a model that can “think” through problems much better than previous models&lt;/strong&gt; (GPT-4o, we’re looking at you). A comparison on a suite of complex tasks is shown in the image below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fluezm565y3fd0mtpzt5j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fluezm565y3fd0mtpzt5j.png" width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;credits: &lt;a href="https://futuresearch.ai/llm-agent-eval" rel="noopener noreferrer"&gt;https://futuresearch.ai/llm-agent-eval&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As visible in the chart above, &lt;strong&gt;the only model currently coming close to O1 is the impressive Anthropic Sonnet 3.5&lt;/strong&gt;. However, keep in mind that O1 is still in preview, and the generally available version is expected to be even better – not to mention the next models that will be released at some point. OpenAI’s benchmarks across various tasks are shown in the image below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnm3kr5gi5gkjuc6xidzm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnm3kr5gi5gkjuc6xidzm.png" width="800" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we consider the size of the performance uplift compared to GPT-4o, it becomes much clearer why OpenAI created a distinct class of O models, although this comes with its own challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  O1 is almost there – just a few tweaks away
&lt;/h2&gt;

&lt;p&gt;Since O1 is in preview, it still can’t use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System instructions&lt;/strong&gt; (which would guide the model to behave as a developer would want, giving it accuracy and personality in the case of an external-facing agent)&lt;/li&gt;
&lt;li&gt;Some &lt;strong&gt;other hyperparameters&lt;/strong&gt; , such as temperature&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;These limitations will be addressed at some point&lt;/strong&gt; , either through updates or by a different model altogether. For now, we can be creative and make O1 work alongside smarter models to get the best results.&lt;/p&gt;

&lt;p&gt;Proposed setup:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz8okaxvpv4wmsklxffj6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz8okaxvpv4wmsklxffj6.png" width="800" height="169"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This allows us to incorporate O1 for complex tasks and leverage its reasoning capabilities while still being able to utilize different tools and integrate seamlessly with the architecture we already have in place (third-party API calls, RAG over data, etc.). GPT-4o-mini is also cost-effective and fast enough to avoid being a deal breaker in production.&lt;/p&gt;

&lt;p&gt;On the other hand, &lt;strong&gt;O1 is expensive and slow&lt;/strong&gt;. However, this has been the case with all the models we currently have running at impressive speeds, so it’s likely and expected that this will also be true for the O-class models.&lt;/p&gt;

&lt;h2&gt;
  
  
  A new chapter in AI?
&lt;/h2&gt;

&lt;p&gt;If the models continue evolving like this, it makes a lot of sense to revisit some of the things that didn’t work out as we had hoped in 2023.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Computing (token generation) is cheaper than ever&lt;/strong&gt;, and as you can see, this is opening up new opportunities to explore more complex use cases than we could before.&lt;/p&gt;

&lt;p&gt;While we are somewhat brute-forcing intelligence by applying more computing power, this approach is also linked to the architecture of today’s language models and has often been the case historically in deep learning.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://shiftmag.dev/openai-o1-is-here-how-will-you-use-it-4495/" rel="noopener noreferrer"&gt;OpenAI O1 is here – how will you use it?&lt;/a&gt; appeared first on &lt;a href="https://shiftmag.dev" rel="noopener noreferrer"&gt;ShiftMag&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>artificialintelligen</category>
      <category>ai</category>
      <category>aidevelopertools</category>
      <category>devin</category>
    </item>
    <item>
      <title>How to boost Product and Engineering collaboration</title>
      <dc:creator>Shift Mag</dc:creator>
      <pubDate>Tue, 22 Oct 2024 10:24:48 +0000</pubDate>
      <link>https://forem.com/shiftmag/how-to-boost-product-and-engineering-collaboration-1df</link>
      <guid>https://forem.com/shiftmag/how-to-boost-product-and-engineering-collaboration-1df</guid>
      <description>&lt;p&gt;&lt;strong&gt;Ante Peric&lt;/strong&gt; , Principal Engineer at Infobip, addressed these questions at the &lt;a href="https://shift.infobip.com/" rel="noopener noreferrer"&gt;Infobip Shift conference in Zadar&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For more content like this &lt;strong&gt;&lt;a href="https://shiftmag.dev/newsletter/" rel="noopener noreferrer"&gt;subscribe to the ShiftMag newsletter&lt;/a&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;He also explored the &lt;strong&gt;dynamics between engineering teams and product management&lt;/strong&gt; , offering practical strategies for feature development. Peric highlighted instances where aligning with the product team’s perspective can lead to successful outcomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to build a bridge between Product and Engineering?
&lt;/h2&gt;

&lt;p&gt;If we want to build this bridge, it’s essential to focus on the following pillars:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The dynamic between product and engineering&lt;/strong&gt; : Ante stresses the importance of fostering a collaborative relationship between product and engineering teams.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It’s important to move away from the mindset of competing priorities.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For developers, this means clearer communication and more aligned goals&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product Backlog Refinement (PBR)&lt;/strong&gt;: To streamline collaboration, Ante introduces PBR as a &lt;strong&gt;biweekly process&lt;/strong&gt; where both teams prioritize tasks. This regular alignment ensures developers are focused on delivering the most impactful features, reducing bottlenecks and improving efficiency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product context&lt;/strong&gt; : The discussion centers on ‘Conversations,’ but the strategies shared can apply to any development project where &lt;strong&gt;multiple communication channels and complex workflows&lt;/strong&gt; are involved&lt;/p&gt;

&lt;h2&gt;
  
  
  Everyone needs a seat at the decision-making table
&lt;/h2&gt;

&lt;p&gt;Using Infobip as an example, in 2018 the company was a market leader in SMS services and sought to expand by building new products on top of their existing communication channels. To achieve this, the &lt;strong&gt;team engaged with customers to gather requirements&lt;/strong&gt; , with the goal of creating a scalable, real-time, and user-friendly product.&lt;/p&gt;

&lt;p&gt;As the product gained traction, the company encountered &lt;strong&gt;challenges related to scalability and service stability&lt;/strong&gt; , highlighting the risks of over-reliance on third-party services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Balance between features&lt;/strong&gt; : Ante emphasizes the need to strike a balance between developing customer-facing features and technical improvements that enhance system performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Utopian engineering pitfall&lt;/strong&gt; : Ante also warns against what he calls “utopian engineering,” where teams focus solely on adding new features without considering the impact on performance and reliability.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In large IT projects, &lt;strong&gt;it’s essential to prioritize what truly matters&lt;/strong&gt; , given their complexity and the high expectations of users.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Collaboration and decision-making&lt;/strong&gt; : It is crucial for everyone (product, engineering, leadership) to collaborate in decision-making to address technical issues and feature development effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  The power lies in collaboration and staying proactive
&lt;/h2&gt;

&lt;p&gt;So, what lessons did Ante and his team pick up along the way?&lt;/p&gt;

&lt;p&gt;First of all, keep it real and &lt;strong&gt;ensure that engineering and product teams are in sync&lt;/strong&gt; , working hand in hand towards common goals. It’s all about collaboration!&lt;/p&gt;

&lt;p&gt;And don’t forget to &lt;strong&gt;regularly check in on growth trajectories and any challenges that pop up&lt;/strong&gt; along the way – especially during those exciting growth spurts. Staying proactive will help you tackle issues before they escalate and keep the momentum going strong!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbpwrvhwp51egmtvm8byj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbpwrvhwp51egmtvm8byj.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://shiftmag.dev/product-engineering-4435/" rel="noopener noreferrer"&gt;This is how to boost Product and Engineering collaboration&lt;/a&gt; appeared first on &lt;a href="https://shiftmag.dev" rel="noopener noreferrer"&gt;ShiftMag&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>engineeringmanagemen</category>
      <category>event</category>
      <category>anteperic</category>
    </item>
    <item>
      <title>The Daily (Buzzkill) Meeting</title>
      <dc:creator>Shift Mag</dc:creator>
      <pubDate>Fri, 18 Oct 2024 12:26:55 +0000</pubDate>
      <link>https://forem.com/shiftmag/the-daily-buzzkill-meeting-2k31</link>
      <guid>https://forem.com/shiftmag/the-daily-buzzkill-meeting-2k31</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs3nm29g9wwm7aqxm3g80.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs3nm29g9wwm7aqxm3g80.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For more content like this &lt;strong&gt;&lt;a href="https://shiftmag.dev/newsletter/" rel="noopener noreferrer"&gt;subscribe to the ShiftMag newsletter&lt;/a&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You are sipping your morning coffee and going through your inbox when you notice it’s 8:58 AM. In 2 minutes, &lt;strong&gt;you’ll have to join the “daily stand-up”&lt;/strong&gt; (even though you are all sitting down!?). You feel discomfort in your belly, and the reason isn’t bad coffee.&lt;/p&gt;

&lt;p&gt;The fact that you’ll have to &lt;strong&gt;waste at least 15, possibly even 45 minutes&lt;/strong&gt; of your valuable time telling others the status of your work erases the smile you had after returning from a weekend in a mountain cabin with your family.&lt;/p&gt;

&lt;p&gt;Besides your “regular” work, you also had a “quick” fix your Product Owner asked you to address, and your “regular” work suffered. You will probably get grilled and asked, “&lt;em&gt;What is your impediment?&lt;/em&gt;”.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;The perfect meeting to ruin the start of your day. *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Lots of antipatterns to unpack here, right? For the team to be empowered to do daily Scrum properly, the Scrum Master or Product Owner must understand that &lt;strong&gt;the team is not reporting to them&lt;/strong&gt;. Even when the team is empowered, they usually see it as just another Scrum meeting. It is also challenging to balance between crushing a possibly brief discussion that could detect some dependencies and prevent another meeting and letting the team discuss because it seems they will reach a conclusion soon (but they don’t). &lt;/p&gt;

&lt;h2&gt;
  
  
  The three daily questions
&lt;/h2&gt;

&lt;p&gt;Ah… Those “three daily questions” you must answer: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;What did you do yesterday?&lt;/em&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;What will you do today?&lt;/em&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;What are your impediments?&lt;/em&gt; &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Except those were not the three questions (the latest Scrum guide omitted them&lt;/strong&gt;). They are missing the crucial ending: &lt;em&gt;“…that helped the Team meet the Sprint Goal&lt;/em&gt;.” The fact that most teams butchered these three questions could be why they were removed from the latest version of the Scrum guide. &lt;/p&gt;

&lt;p&gt;To be blunt – &lt;strong&gt;nobody really cares what you did yesterday&lt;/strong&gt; if it does not concern them or the whole team. Team cohesion is built by a joint (Sprint) goal. Coming to the daily, no one should think in terms of (only) what they are doing (or did). They should ask themselves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;What do I need from other team members to reach my and the team’s goals for the day? and&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;How can I help others reach theirs as well&lt;/em&gt;?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ve found that these two questions reduce the amount of time people spend talking about “&lt;em&gt;what they did or will do&lt;/em&gt;,” and team members are much &lt;strong&gt;more focused on interacting with each other&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzfkg0amfbotlhdmvnlqg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzfkg0amfbotlhdmvnlqg.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Don’t ignore the Sprint goal!
&lt;/h2&gt;

&lt;p&gt;A common goal is a prerequisite for a team.&lt;br&gt;&lt;br&gt;
Without one, people don’t have a reason to communicate progress since everyone just has a list of tasks to complete. It creates team cohesion and motivates everyone to discuss important things daily. It &lt;strong&gt;creates focus and changes the tone of the conversation&lt;/strong&gt; from status reports to inspecting and adapting to achieve that goal. &lt;/p&gt;

&lt;p&gt;In that case, the Daily becomes a place where team members look forward to participating in discussions, sharing progress, and cheering when the User Story is moved to the Done column. &lt;/p&gt;

&lt;h2&gt;
  
  
  Hmm, okay, who will share the screen…?
&lt;/h2&gt;

&lt;p&gt;In certain situations, when the team is not yet familiar with the collaboration tool, I support &lt;strong&gt;sharing the screen every few days in a round-robin fashion&lt;/strong&gt;. In my experience, this helps them become more comfortable when they need to contribute to writing stories, tasks, assigning them to sprints, and generally visualizing their progress. &lt;/p&gt;

&lt;p&gt;However, after a few sprints, this becomes a sign that team members don’t know where they stand in terms of progress toward their goal. If all the tasks are up to date and well-commented, and everyone on the team can access the board, &lt;strong&gt;what’s the point of reporting on every single task?&lt;/strong&gt; It speaks more of a lack of commitment than anything else. &lt;/p&gt;

&lt;h2&gt;
  
  
  A mirror of team dynamics
&lt;/h2&gt;

&lt;p&gt;If your daily Scrum feels pointless, the problem is probably not the daily itself. It’s just a mirror of team dynamics or a management style that is not in line with agile values and principles. &lt;/p&gt;

&lt;p&gt;If the team is newly formed and working remotely, don’t be afraid to use the daily to build the team. Don’t shut down normal human interaction, like sharing stories from the weekend, just because you “need to be done in 15 minutes.” It’s wiser to &lt;strong&gt;use it to build team spirit&lt;/strong&gt; rather than making them instantly hate the meeting by asking for every trivial update on their tasks. &lt;/p&gt;

&lt;h2&gt;
  
  
  Daily as a check-in
&lt;/h2&gt;

&lt;p&gt;If you’ve worked in a team that had some kind of team coach, you were probably asked to start a meeting with a check-in. This is a good tool that facilitators use to allow team members to take a moment and mentally commit to the meeting. &lt;/p&gt;

&lt;p&gt;Similarly to meeting check-ins, the daily should be a moment that helps you &lt;strong&gt;enter the workday with thoughts about what you need to get done&lt;/strong&gt; , what your goals are, with whom you need to collaborate, and what kind of help you need to be productive that day. &lt;/p&gt;

&lt;p&gt;This ritual should also help us distract ourselves from things happening outside work—like a bad commute or the picture of your crying child as you dropped them off at kindergarten. &lt;/p&gt;

&lt;p&gt;It should help team members focus on accomplishing personal and team goals for the day, detect potential risks, commit to delivering what others expect from them, and, equally important, share small wins together. It’s the breath you take before diving in for 8–10 hours. It better be a deep one. &lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://shiftmag.dev/the-daily-buzzkill-meeting-4439/" rel="noopener noreferrer"&gt;The Daily (Buzzkill) Meeting&lt;/a&gt; appeared first on &lt;a href="https://shiftmag.dev" rel="noopener noreferrer"&gt;ShiftMag&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>agilesoftwaredevelop</category>
      <category>dailymeeting</category>
      <category>scrum</category>
    </item>
  </channel>
</rss>
