<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://devpg.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://devpg.com/" rel="alternate" type="text/html" /><updated>2026-04-23T12:58:47+00:00</updated><id>https://devpg.com/feed.xml</id><title type="html">André Neubauer</title><entry><title type="html">Alternating between Extremes - A Phenomenon in Software Engineering?! (Part 1)</title><link href="https://devpg.com/2024/03/12/Alternating-Extremes.html" rel="alternate" type="text/html" title="Alternating between Extremes - A Phenomenon in Software Engineering?! (Part 1)" /><published>2024-03-12T00:00:00+00:00</published><updated>2024-03-12T00:00:00+00:00</updated><id>https://devpg.com/2024/03/12/Alternating-Extremes</id><content type="html" xml:base="https://devpg.com/2024/03/12/Alternating-Extremes.html"><![CDATA[<p>Let me start with a story:
A piece of software grows and grows and becomes a monolith. Changes are taking longer and longer and maintenance is becoming more and more complex. The reason is quickly identified: The close coupling. The solution is obvious: The monolith must be split into microservices!
During the rework the focus is on ensuring that there is no more … actually any close coupling at all. Many, many microservices are emerging. After the change everything is fine. At some point you notice that handling the many microservices in your daily work is time-consuming. That’s why several services get merged into a mono-repo …</p>

<p>The story could be also about …</p>
<ul>
  <li>On-Prem → Cloud → Hybrid-cloud / Cloud-Repatriation</li>
  <li>Server-side rendering → Client-side rendering → Hybrid rendering (client-side hydration)</li>
</ul>

<p>Does this sound familiar?</p>

<p>The pattern behind this story: In software engineering - maybe not just there - we alternate between different solution approaches. But it’s not just that.</p>

<div align="center"><h1>We alternate between extremes! </h1></div>

<hr />

<p>Why is that? Speaking from my experience I see two possible reasons.</p>

<h3 id="reality-vs-theory">Reality vs. Theory</h3>
<p>We focus so much on the cause (in the example above “close coupling”) and how to fix it that we become blind to everything else. We forget that there is no free lunch … every new solution has certain characteristics. These can lead to other challenges. In the example above, it’s the complexity that arises when handling many microservices (e.g. runtime dependencies, interface compatibility). However, these downsides are on a theoretical level. So, we don’t take them into account. The real problem gets overrated, the arising but so far only theoretical problems are getting underrated.</p>

<h3 id="the-perfect-the-solution">The perfect the solution</h3>
<p>Another reason could be striving for the perfect solution. But as said above, there is no free lunch, meaning: There is no perfect solution, only an optimal one for the current situation. And since every situation changes continuously, the optimal solution changes as well.</p>

<p>Whatever it is, alternating between extremes is an expensive and lengthy undertaking. It creates high opportunity costs, requires a long-running commitment, and has an increased risk to get stopped.</p>

<hr />

<p>I will shine a light on how to do it better in the next article.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Let me start with a story: A piece of software grows and grows and becomes a monolith. Changes are taking longer and longer and maintenance is becoming more and more complex. The reason is quickly identified: The close coupling. The solution is obvious: The monolith must be split into microservices! During the rework the focus is on ensuring that there is no more … actually any close coupling at all. Many, many microservices are emerging. After the change everything is fine. At some point you notice that handling the many microservices in your daily work is time-consuming. That’s why several services get merged into a mono-repo …]]></summary></entry><entry><title type="html">The Role of an Engineering Manager</title><link href="https://devpg.com/2024/02/13/Engineering-Manager.html" rel="alternate" type="text/html" title="The Role of an Engineering Manager" /><published>2024-02-13T00:00:00+00:00</published><updated>2024-02-13T00:00:00+00:00</updated><id>https://devpg.com/2024/02/13/Engineering-Manager</id><content type="html" xml:base="https://devpg.com/2024/02/13/Engineering-Manager.html"><![CDATA[<p><strong>[… as part of Trusted Shops’ software engineering organization.]</strong></p>

<hr />

<p>In the last article I shared a fundamental principle of Trusted Shops’ software engineering organization.<a href="#1">[1]</a> It makes sense to read it first to understand one or the other aspect better.
This time it’s about the role of an Engineering Manager at Trusted Shops.</p>

<hr />

<h2 id="responsibilities">Responsibilities</h2>
<p>Given the separation of “Working IN a system” and “Working ON a system”, the Engineering Manager is purely focussing on the latter.
An Engineering Manager is responsible for multiple Engineering teams. (There are no Team Leads in the software engineering organization. More on the reasoning behind this in a separate article.) The responsibilities boil down to two buckets.</p>
<ul>
  <li>Disciplinary responsibility: This is meant for all technical roles (Software Engineer, QA Engineer, etc) and mainly focuses on talent development and hiring.</li>
  <li>System responsibility, where “System” relates to the environment teams are working in: This is mainly about the continuous optimization of the setup, solving systemic issues and giving guidance where needed.
At Trusted Shops, we are not heading for a dominant disciplinary structure. Quite the opposite, we strive for servant leadership, meaning “Working ON a system” serves “Working IN a system”. The focus is on the teams and the operational work. This strengthens the customer focus and it inevitably ensures that teams become stronger and mature.</li>
</ul>

<hr />

<h2 id="engineering-manager-is-technical-role-but-with-on-a-different-flight-level">Engineering Manager is technical role but with on a different flight level</h2>
<p>Serving the engineering organization, that doesn’t mean that engineering manager is a weak role. That’s not the case. And even if coding and other hands-on technical work is explicitly out of scope of this role, it is a technical role.</p>

<p>Engineering Managers are also leading certain technical decisions, especially one-way-door decisions. This kind of decision is hard to change later and therefore requires additional attention. An example could be the introduction of a new programming language.</p>

<p>This example also gives a glimpse about the technical focus. It’s more the tactical and strategic level rather than the operational level.</p>

<hr />

<h2 id="links">Link(s)</h2>
<p><span id="1">[1]</span> <a href="/2024/02/06/Modern-Engineering-Organisation.html">Working ON a system &amp; Working IN a system</a></p>]]></content><author><name></name></author><summary type="html"><![CDATA[[… as part of Trusted Shops’ software engineering organization.]]]></summary></entry><entry><title type="html">Working ON a system &amp;amp; Working IN a system</title><link href="https://devpg.com/2024/02/06/Modern-Engineering-Organisation.html" rel="alternate" type="text/html" title="Working ON a system &amp;amp; Working IN a system" /><published>2024-02-06T00:00:00+00:00</published><updated>2024-02-06T00:00:00+00:00</updated><id>https://devpg.com/2024/02/06/Modern-Engineering-Organisation</id><content type="html" xml:base="https://devpg.com/2024/02/06/Modern-Engineering-Organisation.html"><![CDATA[<p>This article is about one fundamental principle of how software engineering is set up at Trusted Shops.</p>

<hr />

<p>As context always matters, let’s start with it:</p>
<ul>
  <li>There are roughly 130 people across all functions working on the products and services of Trusted Shops.</li>
  <li>Trusted Shops is not a startup anymore. But we are still in an evolving game, which requires us to adapt to learnings, market changes, etc.</li>
  <li>The organizational setup is guided by two pillars of the Tech Strategy: Autonomy on organizational level &amp; Empowerment and ownership on team level</li>
</ul>

<hr />

<h2 id="system-thinking-and-beyond">System-thinking and beyond</h2>
<p>Now that the context is clear(er), let’s look at the fundamental principle:</p>
<ul>
  <li>We understand our software engineering organization - actually product engineering organization - as a system. It’s composed of smaller interrelated subsystems (domains and teams) who work on different products to achieve an overall goal. (If you want to learn more about organization as system, this is a good source. <a href="#1">[1]</a>)</li>
  <li>We separate between <em>“Working on a system”</em> and <em>“Working in a system”</em>. This separation is important because both aspects have different goals and require different needs to achieve them.</li>
</ul>

<p>Many companies use their disciplinary structure to handle operational work. To illustrate this, one example are Team Leads or Head of Engineers who take technical decisions for their teams. Operational work dominated by the disciplinary structure works fine for repetitive work. But it hardly works for knowledge work. Knowledge work is about solving complex problem(s) which requires expertise, critical thinking and interpersonal skills.</p>

<h2 id="working-in-a-system">Working IN a system</h2>
<p>To address this demand we highlight the operational structure. It’s described as “Working in a system”. “Working in a system”, there are no disciplinary hierarchies. There are only individual contributors with different roles and technical responsibilities. The decisive factors are skills and experience. Cross-boundary collaboration (e.g. to manage dependencies) is handled via network approach. This means, there are direct connections between teams where needed and when needed.</p>

<h2 id="working-on-the-system">Working ON the system</h2>
<p>Working on the system is represented by the hierarchical structure. In our case these are Engineering Managers, Director Software Engineering and CTO. The goal is to provide an effective environment on all levels. This starts with the organizational setup and the hiring and the development of talents. But it’s not “people business” exclusively. It’s also about the involvement in one-way-door decisions, defining standards, applying best practice and solving systemic issues - to name a few -, always based on the mindset to measure and improve the environment. This work happens more on a tactic and strategic level. It still requires a technical background even though it contributes only indirectly to the overall success.</p>

<p>At the end the disciplinary structure is serving the operational structure. But this doesn’t mean it’s less important. The system can only unveil its potential if both complement each other.</p>

<hr />

<h2 id="links">Link(s)</h2>
<p><span id="1">[1]</span> <a href="https://management.org/organizations/systems.htm">The Common Thread: All Social Organizations as Systems</a></p>]]></content><author><name></name></author><summary type="html"><![CDATA[This article is about one fundamental principle of how software engineering is set up at Trusted Shops.]]></summary></entry><entry><title type="html">What can we learn from 37signal’s cloud repatriation?</title><link href="https://devpg.com/2024/01/07/Learnings-37signal-OnPrem.html" rel="alternate" type="text/html" title="What can we learn from 37signal’s cloud repatriation?" /><published>2024-01-07T00:00:00+00:00</published><updated>2024-01-07T00:00:00+00:00</updated><id>https://devpg.com/2024/01/07/Learnings-37signal-OnPrem</id><content type="html" xml:base="https://devpg.com/2024/01/07/Learnings-37signal-OnPrem.html"><![CDATA[<h2 id="tldr">TL;DR</h2>
<p>37signals successfully showed that cloud repatriation is feasible and has the potential for huge cost saving. Is this the way to go? No, it’s definitely not for every company but for some it can be a valid option. It “just” requires the right goal and a supportive context.</p>

<hr />

<p>In 2023 37signals left the cloud. They successfully repatriated their cloud services to on-premise servers, saving a significant amount of money without compromising on performance, reliability, or security. AND they achieved this while retaining their existing team, disproving the notion that cloud services significantly reduce operational staff requirements. Absolutely astonishing!
The entire journey is quite well summarized here (including the most frequently asked questions). <a href="#1">[1]</a></p>

<p>So what does this mean for other companies?</p>

<h2 id="shall-every-company-repatriate-cloud-services-back-to-on-premise">Shall every company repatriate cloud services back to on-premise?</h2>

<p>The specific answer to this boils down to <ins>two questions</ins>.</p>

<h3 id="1-whats-your-goal">#1: What’s your goal?</h3>
<p>This question is of key importance. It defines your focus and the single piece you want to achieve. In regard to 37signal, their only goal was cost savings. But it also could have been new products, new features or technical aspects like performance or resilience to name a few.</p>

<p>It’s important to have a clear answer because capacity is only available once. That’s why mixed goals (this and that) or vague goals (“becoming better”) do not help. Once your goal is set, you have to deal with a second question.</p>

<h3 id="2-whats-the-context-you-are-operating-in">#2: What’s the context you are operating in?</h3>
<p>Every company is different, so every context is. The context is defined by all aspects impacting the decision. It’s crucial to understand all limitations and restrictions. In regard to cloud repatriation the following aspects (among others) are of interest.</p>
<ul>
  <li>Costs: What’s your cloud cost structure? Can you afford the high upfront investments to buy servers and such?</li>
  <li>Performance: Do you have specific requirements, e.g. super low latency which require a special setup, e.g. CDN?</li>
  <li>Control, security and compliance: Are you bound to certain standards and customer agreements?</li>
  <li>Scalability: What are your realistic growth expectations? What’s the impact on infrastructure utilization?</li>
  <li>Technical expertise: Do you have the skills to take care of lower layer topics? Is your technology stack capable of running outside the cloud?</li>
  <li><em>&lt;add your individual aspects here&gt;</em></li>
</ul>

<p><strong>If you have the answers to both questions you have all the ingredients to make a proper decision.</strong></p>

<p>Even though cost saving is your only goal, this is not sufficient to justify a cloud repatriation. It also requires a supportive context, like in this example:</p>

<ul>
  <li>Cost analysis favors on-premise: There is enough cash to do upfront investments and participate from long-term cost benefits of owning hardware versus ongoing cloud service fees.</li>
  <li>Technical expertise available: The organization has or can acquire the necessary technical skills for managing on-premises infrastructure.</li>
  <li>Control and customization needs: There is a strong requirement for direct control over the hardware and software environment.</li>
  <li>Security and data sovereignty: Enhanced control over data storage and security is crucial, especially for compliance.</li>
  <li>Stable demand: The company experiences predictable, stable demand that aligns well with the capabilities of on-premises infrastructure.</li>
</ul>

<p>37signal had very likely a comparable context back then. They had the money, the skills, the stable demand, etc. So they decided for a repatriation of their cloud usage to an on-premise environment!</p>

<h2 id="finally">Finally</h2>
<p>Given the different aspects and their characteristics, for the majority the context will - most likely - not speak for a cloud repatriation  (regardless of the goal). Still, 37signal might have paved the way for more companies to leave the cloud.</p>

<hr />

<h2 id="links">Link(s)</h2>
<p><span id="1">[1]</span> <a href="https://world.hey.com/dhh/the-big-cloud-exit-faq-20274010">The Big Cloud Exit FAQ</a></p>]]></content><author><name></name></author><summary type="html"><![CDATA[TL;DR 37signals successfully showed that cloud repatriation is feasible and has the potential for huge cost saving. Is this the way to go? No, it’s definitely not for every company but for some it can be a valid option. It “just” requires the right goal and a supportive context.]]></summary></entry><entry><title type="html">Is “Inner/outer loop time spent” a good metric in Software Engineering?</title><link href="https://devpg.com/2023/12/12/Inner-Outer-Loop.html" rel="alternate" type="text/html" title="Is “Inner/outer loop time spent” a good metric in Software Engineering?" /><published>2023-12-12T00:00:00+00:00</published><updated>2023-12-12T00:00:00+00:00</updated><id>https://devpg.com/2023/12/12/Inner-Outer-Loop</id><content type="html" xml:base="https://devpg.com/2023/12/12/Inner-Outer-Loop.html"><![CDATA[<p>When McKinsey stepped into the space of measuring Software Engineering productivity (and claimed <em>“<a href="https://www.mckinsey.com/industries/technology-media-and-telecommunications/our-insights/yes-you-can-measure-software-developer-productivity">Yes, you can measure software developer productivity</a>”</em>) they proposed new metrics to complete DORA and SPACE, one being “Inner/outer loop time spent”.</p>

<p>This metric isn’t new. It belongs to McKinsey’s standard toolbox to measure organizational efficiency and productivity. It differentiates between core development activities (inner loop) and supporting tasks (outer loop). The goal is to optimize the inner-outer-loop ratio. But is it a good metric for software engineering teams? Let’s dive in.</p>

<p>Based on McKinsey, the inner loop encompasses <em>“activities directly related to creating the product: coding, building, and unit testing”</em>. The outer loop includes <em>“other tasks developers must do to push their code to production: integration, integration testing, releasing, and deployment.”</em> From their standpoint <em>“maximizing the amount of time developers spend in the inner loop is desirable”</em>.</p>

<p>While I like the overall separation, I disagree with the definition/ assignment of activities to the inner/ outer loop. From my point of view all activities from building to deploying software in production belong to the inner circle. Why? Simply because otherwise there is no value! And secondly, you split apart the ownership of a team.</p>

<p>You could argue that you want to streamline efforts for testing and deployment and therefore these activities should belong to the outer loop. But reducing efforts should be done and measured by degree of automation not reduction of scope. Otherwise you deprioritize long-term effects.</p>

<p>So what’s left for the outer loop? I definitely see all surrounding activities (e.g. alignment meetings). These activities are important as well. And while automation is hard, usually there is lots of room for optimization … talking from my own experience.</p>

<p>PS: This post also got posted at <a href="https://www.linkedin.com/pulse/innerouter-loop-time-spent-good-metric-software-andr%2525C3%2525A9-neubauer-ushce%3FtrackingId=pWySU%252BmqSgubBBxDoF1rXw%253D%253D/?trackingId=pWySU%2BmqSgubBBxDoF1rXw%3D%3D">LinkedIn</a></p>]]></content><author><name></name></author><summary type="html"><![CDATA[When McKinsey stepped into the space of measuring Software Engineering productivity (and claimed “Yes, you can measure software developer productivity”) they proposed new metrics to complete DORA and SPACE, one being “Inner/outer loop time spent”.]]></summary></entry><entry><title type="html">Goodbye QA?</title><link href="https://devpg.com/2023/11/01/Goodbye-QA.html" rel="alternate" type="text/html" title="Goodbye QA?" /><published>2023-11-01T00:00:00+00:00</published><updated>2023-11-01T00:00:00+00:00</updated><id>https://devpg.com/2023/11/01/Goodbye-QA</id><content type="html" xml:base="https://devpg.com/2023/11/01/Goodbye-QA.html"><![CDATA[<p>Another year, another RIP of QA …</p>

<p>Yes, QA changed quite a lot during the last decade - btw, same as software engineering!</p>

<p>Often, there is this saying that QA should be done by Software Engineers. What’s actually meant by this is a high degree of test automation. And I absolutely agree to this. However, there are two issues …</p>

<ol>
  <li>Environments with high degree of test automation in all aspects rarely exists. This means, manual QA is still required.</li>
  <li>Even if you are working in such an environment - lucky you -, you will realise that the mindset of QA Engineer and Software Engineer are very different. Coming up with good test cases is a dedicated skill.</li>
</ol>

<p>So what?</p>

<p>In my humble opinion QA will stay. It’s just the approach which changes based on your context.</p>

<p>PS: This post is a reaction on a <a href="https://www.linkedin.com/posts/raphaelabauer_qa-engineering-tech-activity-7114493753469403136-nnz3">discussion at LinkedIn</a></p>]]></content><author><name></name></author><summary type="html"><![CDATA[Another year, another RIP of QA …]]></summary></entry><entry><title type="html">The Pitfall of Platform Engineering</title><link href="https://devpg.com/2023/10/31/Pitchfall-Platform-Engineering.html" rel="alternate" type="text/html" title="The Pitfall of Platform Engineering" /><published>2023-10-31T00:00:00+00:00</published><updated>2023-10-31T00:00:00+00:00</updated><id>https://devpg.com/2023/10/31/Pitchfall-Platform-Engineering</id><content type="html" xml:base="https://devpg.com/2023/10/31/Pitchfall-Platform-Engineering.html"><![CDATA[]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Avoid veto rights in your organisation</title><link href="https://devpg.com/2023/08/16/Avoid-Vetos.html" rel="alternate" type="text/html" title="Avoid veto rights in your organisation" /><published>2023-08-16T00:00:00+00:00</published><updated>2023-08-16T00:00:00+00:00</updated><id>https://devpg.com/2023/08/16/Avoid-Vetos</id><content type="html" xml:base="https://devpg.com/2023/08/16/Avoid-Vetos.html"><![CDATA[<p>Running an organisation based on veto’ is one of the worst things you - as a manager - can tolerate. Veto means you can pull the plug anytime. It not only slows down your organisation, it also creates the uncertainty that decisions can be overruled and therefore lowers accountability and identification. It’s a lose-lose situation.</p>

<p>So, how to fix that? If you have veto rights, it’s a clear indicator that delegation of decision making/ power is broken somewhere in your system. Delegation poker is a simple but powerful - and still my favourite - tool to create transparency and alignment between different parties who’s calling which shot. It’s part of Jurgen Appelo’s Management 3.0.</p>

<p><img src="https://management30.com/wp-content/uploads/2019/02/delegation-poker-cards-4-1024x768.jpg" alt="Delegation Poker and its levels" />
<a href="https://management30.com/practice/delegation-poker/">Delegation Poker, Management 3.0 by Juren Appelo</a></p>

<p>Btw, there is no problem - as a manager - to take more decision power (and therefore delegate less) at the beginning. Delegation poker an explicit and transparency approach, which allows everyone align with.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Running an organisation based on veto’ is one of the worst things you - as a manager - can tolerate. Veto means you can pull the plug anytime. It not only slows down your organisation, it also creates the uncertainty that decisions can be overruled and therefore lowers accountability and identification. It’s a lose-lose situation.]]></summary></entry><entry><title type="html">Der Chefs von Devs Fireside Chat von Golem.de mit Matthias Schleuthner und André Neubauer</title><link href="https://devpg.com/2023/02/16/ChefsVonDevs.html" rel="alternate" type="text/html" title="Der Chefs von Devs Fireside Chat von Golem.de mit Matthias Schleuthner und André Neubauer" /><published>2023-02-16T00:00:00+00:00</published><updated>2023-02-16T00:00:00+00:00</updated><id>https://devpg.com/2023/02/16/ChefsVonDevs</id><content type="html" xml:base="https://devpg.com/2023/02/16/ChefsVonDevs.html"><![CDATA[]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">MY DATA IS BETTER THAN YOURS | Data Driven arbeiten gemeinsam mit der IT – mit André N.</title><link href="https://devpg.com/2022/12/16/MyData.html" rel="alternate" type="text/html" title="MY DATA IS BETTER THAN YOURS | Data Driven arbeiten gemeinsam mit der IT – mit André N." /><published>2022-12-16T00:00:00+00:00</published><updated>2022-12-16T00:00:00+00:00</updated><id>https://devpg.com/2022/12/16/MyData</id><content type="html" xml:base="https://devpg.com/2022/12/16/MyData.html"><![CDATA[]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry></feed>