<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Leadership on Damian Galarza | Software Engineering &amp; AI Consulting</title><link>https://www.damiangalarza.com/tags/leadership/</link><description>Recent posts from Damian Galarza | Software Engineering &amp; AI Consulting</description><generator>Hugo</generator><language>en-us</language><managingEditor>Damian Galarza</managingEditor><atom:link href="https://www.damiangalarza.com/tags/leadership/feed.xml" rel="self" type="application/rss+xml"/><item><title>The Double-Edged Sword of Customer Obsession</title><link>https://www.damiangalarza.com/posts/2025-07-02-balancing-customer-obsession/</link><pubDate>Wed, 02 Jul 2025 00:00:00 -0400</pubDate><author>Damian Galarza</author><guid>https://www.damiangalarza.com/posts/2025-07-02-balancing-customer-obsession/</guid><description>Customer obsession can sharpen focus and drive urgency—but left unchecked, it burns out teams and breaks products. Here's how to get it right.</description><content:encoded><![CDATA[<p>I’ve worked at startups where ‘customer obsession’ was a guiding value—plastered on walls, repeated in all-hands, baked into the culture. And for good reason: it keeps teams close to the people they serve. But over time, I started to notice something else: when over-applied or misunderstood, customer obsession can quietly erode focus, morale, and long-term product thinking.</p>
<h2 id="what-makes-customer-obsession-powerful">What Makes Customer Obsession Powerful</h2>
<p>At its core, the biggest benefit of customer obsession is that it keeps teams grounded in the real needs of their users. It’s easy to get caught up in trends, internal politics, or our own biases about what we <em>think</em> customers want. Customer obsession forces us to step outside those assumptions and truly listen to the people we’re building for.</p>
<p>When building a product, it&rsquo;s easy to get lost in the weeds of features, bugs, and deadlines. Customer obsession reconnects teams to the “why” behind what they&rsquo;re building. Teams that understand the problems they’re solving build better products—and do it with urgency and clarity. This mindset must inform prioritization and long-term vision. Knowing what truly moves the needle for customers is how you build a product that lasts.</p>
<p>Customer obsession also prevents over-engineering. Often, when presented with a blank canvas, teams start to overcomplicate. I’ve been in many conversations where we were trying to solve a problem with unnecessary complexity. At one point, we debated building a rules engine to handle a dozen edge cases. But when we stepped back and asked, <em>“What’s the actual problem we’re solving?”</em>—we realized only two of those cases would realistically occur. That insight let us ship a simpler solution in weeks instead of spending months designing for hypotheticals.</p>
<p>Lastly, this mindset ensures teams aren’t building in a vacuum—hoping that customers will eventually show up. It grounds teams in real-world pain points. That’s especially critical in the early stages, when you’re still hunting for product-market fit. By staying close to the customer, teams can iterate faster and pivot more confidently.</p>
<h2 id="where-it-starts-to-break-down">Where It Starts to Break Down</h2>
<p>Customer obsession is a powerful value—but like any value, taken to the extreme, it can backfire.</p>
<p><strong>From Proactive to Reactive</strong></p>
<p>It starts when teams become reactive. When every decision is driven by the latest piece of feedback or the loudest customer voice, product development turns into a game of whack-a-mole. Instead of building toward a long-term vision, teams chase requests, patch holes, and deliver features that don’t always fit the broader strategy.</p>
<p>Over time, this leads to a fragmented product. The roadmap becomes a mirror of urgency, not insight. It’s essential to balance genuine customer needs with a strong product point of view—one that understands when to say “not yet.”</p>
<p><strong>When Teams Get Left Behind</strong></p>
<p>Customer obsession can also take a toll internally. When “the customer is always right” becomes the default, teams fall into a service posture—dropping everything to respond to asks, skipping <a href="/posts/2025-06-26-tech-debt-for-startups">tech debt</a> paydown, and deprioritizing their own needs.</p>
<p>Morale suffers. Engineers stop feeling like collaborators and start feeling like a support queue. Burnout sets in, and ironically, the quality of what gets delivered to customers declines.</p>
<p>One of my favorite mental models here is Jocko Willink’s idea of <a href="https://echelonfront.com/how-to-build-and-spend-leadership-capital/">leadership capital</a>. You earn it by building trust and making sound decisions. But when you consistently trade your team’s focus and well-being for short-term customer appeasement, you burn through that capital fast—and lose the trust that makes long-term success possible.</p>
<p>Customer empathy doesn’t mean saying yes to everything. It means understanding your customers well enough to say “not now”—and trusting your team to hold that line.</p>
<p><strong>Loudest ≠ Most Important</strong></p>
<p>Another failure mode: letting urgency override strategy. It’s easy to prioritize the enterprise client pushing for a custom workflow or the user threatening churn. But chasing the loudest voice often means overlooking quieter patterns that represent broader impact.</p>
<p>This can skew your roadmap, introduce one-off features, and erode UX consistency. You might please a few accounts, but the product loses cohesion—and the long-term vision suffers.</p>
<p>Being customer-obsessed doesn’t mean being customer-led. It means being customer-informed, and strategic about what you act on.</p>
<p><strong>When Boundaries Erode</strong></p>
<p>Especially in early-stage startups, customer obsession can blur boundaries. Every customer feels existential. Teams stretch themselves thin—responding to every fire drill, making last-minute changes, or shipping quick fixes that compromise architecture.</p>
<p>It all comes from a good place: wanting to deliver value fast. But it’s not sustainable. Deep work disappears. Strategy is replaced by scramble. And systems begin to crack under the weight of constant urgency.</p>
<p>The irony? Customers might be happy today—but missed deadlines, brittle infrastructure, and team attrition catch up quickly.</p>
<p>True customer obsession means building systems—and a team—that can serve customers not just today, but sustainably over time.</p>
<h2 id="lessons-for-founders-and-product-leaders">Lessons for Founders and Product Leaders</h2>
<p>Customer obsession isn’t inherently bad—it just needs boundaries, clarity, and intentionality. If you want it to be a healthy part of your culture, it helps to define what it actually means inside your org.</p>
<p>First: it’s not heroics. It’s not about dropping everything, skipping lunch, or jumping on Slack at 9pm to fix something that wasn’t scoped properly. Healthy customer obsession is strategic, not reactive.</p>
<p>Obsess over the right signals. Anecdotes are useful—but they’re not the whole story. Look for patterns in customer behavior, common threads across feedback, and needs that align with your product vision. One urgent email shouldn’t derail months of intentional work.</p>
<p>Balance advocacy with sustainability. Yes, we’re here to serve customers. But we can’t do that well if we burn out our teams or build systems too fragile to scale. Advocate for the customer, but protect the team.</p>
<p>And finally: empower your ICs. Engineers, designers, and PMs should feel confident saying, “This isn’t the right time,” or “Let’s solve this in a way that scales.” If customer obsession becomes a top-down directive, it stops being empathy—and starts being pressure.</p>
<p>Done right, customer obsession aligns teams around purpose. Done poorly, it erodes the very systems that serve your customers. Choose wisely. If you’re seeing signs of imbalance, you’re not alone. Let’s build better cultures — together.</p>
]]></content:encoded></item><item><title>What Is Technical Debt? A Pragmatic Guide for Startup Teams</title><link>https://www.damiangalarza.com/posts/2025-06-26-tech-debt-for-startups/</link><pubDate>Fri, 27 Jun 2025 00:00:00 -0400</pubDate><author>Damian Galarza</author><guid>https://www.damiangalarza.com/posts/2025-06-26-tech-debt-for-startups/</guid><description>Learn when tech debt is smart, when it’s dangerous, and how to manage it. A clear, startup-tested guide to technical debt from a seasoned engineering leader.</description><content:encoded><![CDATA[<p>When you hear the term &ldquo;technical debt&rdquo; or &ldquo;tech debt&rdquo; what comes to mind? Is it a necessary evil? Or a sign of poor planning? Maybe you think of it as a shortcut that will come back to haunt you later. The right answer, as with a lot of things in software engineering, is: it depends.</p>
<p>Many teams treat tech debt like a dirty word. But the truth is: it’s a trade-off — and sometimes, it’s the right one. This post explains what tech debt really is, why it exists, and how to distinguish between strategic debt and irresponsible shortcuts.</p>
<h3 id="tldr">TL;DR</h3>
<ul>
<li>Tech debt is a trade-off — not always a bad one.</li>
<li>There are three main types: intentional, unintentional, and abandoned.</li>
<li>It’s okay to incur debt strategically (e.g. MVPs, deadlines), but risky if unmanaged.</li>
<li>Make debt visible, review it regularly, and build a culture of ownership.</li>
<li>Use a simple 4-question framework to guide decisions.</li>
</ul>
<h2 id="what-is-technical-debt">What is technical debt?</h2>
<p>Ward Cunningham is one of the authors of the Agile Manifesto. He coined the term “technical debt” and described it like this</p>
<blockquote>
<p>Shipping first-time code is like going into debt. A little debt speeds development so long as it is paid back promptly with refactoring. The danger occurs when the debt is not repaid.</p></blockquote>
<p>The key here is that tech debt is a <strong>trade-off</strong>. It’s not inherently bad or good. It’s a decision to prioritize short-term speed over long-term maintainability. But if left unpaid, that debt compounds — and costs more to fix later. I&rsquo;d argue that if you don&rsquo;t have ANY tech debt, you are probably not moving fast enough. The key is to <strong>manage</strong> that debt, not eliminate it entirely. As a startup you need to be able to move fast, whether that&rsquo;s to be able to prove market viability or be first to market.</p>
<h2 id="types-of-technical-debt">Types of technical debt</h2>
<p>There are different kinds of technical debt that exist, and understanding these distinctions can help you make better decisions about when to incur it and how to manage it.</p>
<p><strong>Intentional debt</strong></p>
<p>Intentional debt is a strategic decision. One made consciously typically in order to make progress. Remember the saying that perfection is the enemy of progress? This is where that applies. It’s about making a trade-off to ship something quickly, with the plan to revisit and improve it later. For example, perhaps you are working on some new functionality and make some decisions that you know may not be performant at scale. However you also know that solving that now is not a trivial task. There&rsquo;s no sense in putting a lot of effort into trying to make something highly performant if you aren&rsquo;t even sure it will be used. You might also be guessing how it might be used. Beware of falling into the trap of over engineering something early on. Make note of the trade-offs and move on.</p>
<p><strong>Unintentional debt</strong></p>
<p>Sometimes we introduce technical debt unintentionally. This can happen when we don’t fully understand the requirements, or when the requirements change mid-development. It can also occur due to poor design decisions or lack of knowledge about best practices. Unintentional debt is often harder to manage because it’s not a conscious choice, and it can lead to unexpected complexity in the codebase.</p>
<p>One trap I often see early-stage teams fall into is chasing endless configurability. At first, it seems like a smart move — of course customers will want to tweak every knob and dial, right? But what could have been a simple feature quickly becomes a complex one. A task that should take a day or two suddenly drags on for weeks. And it doesn’t stop there. Now you have to maintain those configuration options indefinitely — even if most of them go unused. The result? A bloated, harder-to-understand codebase, and more friction every time you build something new. Suddenly, every feature comes with the question: “Should this be configurable too?”</p>
<p><strong>Abandoned debt</strong></p>
<p>Abandoned technical debt appears when parts of the codebase are forgotten, outdated, or lack documentation. This can happen when a feature is no longer used, or when the original developer leaves the team. Abandoned debt is particularly dangerous because it’s invisible — you may not even realize it exists until it causes a problem down the line.</p>
<p>The most common example of this I see is with feature flags. Feature flags are a great way to ship code quickly and test new features or provide a mechanism to iterate on work without long running feature branches. When they can become painful though is leaving them around your codebase after a feature has either been fully shipped or abandoned. Now your codebase is littered with branches controlled by feature flags. New engineers join the team and don&rsquo;t understand what feature flags are needed or not. Which branches need to actually be supported? Do I put my new feature in branch A or branch B?</p>
<h2 id="when-its-okay-to-incur-debt">When It&rsquo;s Okay to Incur Debt</h2>
<p>So if technical debt is a trade-off, when is it okay to incur it? Here are some valid scenarios:</p>
<p><strong>MVP / Speed to Market</strong></p>
<p>When you need to get a minimum viable product (MVP) out quickly to test market fit or gather user feedback. Your initial concern is to focus on delivering value, not perfection. A common example here is worrying a bit too much about refactoring code that is not yet being used by customers. If you are building a new feature that is not yet in production, it’s okay to incur some debt to get it out the door quickly. You can always refactor later once you have more information about how it will be used. This is usually a case of premature optimization as it is.</p>
<p><strong>Fixed deadlines or regulatory windows</strong></p>
<p>When you have a hard deadline to meet, such as a product launch or regulatory compliance window. In these cases, you may need to prioritize speed over long-term maintainability. For example, if a customer needs reporting to go live, you might start by running the report manually to meet the deadline — with a plan to automate it later. This allows the business to move forward, getting the new client onboard with a known task to revisit the process for reporting as a fast-follow.</p>
<p><strong>Exploring unknowns</strong></p>
<p>When you’re in a phase of rapid iteration and experimentation, such as during early-stage product development. Here, the focus is on learning and adapting quickly, rather than building a perfect solution. One of my favorite quotes is: &ldquo;You don’t refactor a prototype&rdquo; — and that’s okay. The key is to flag it as debt early and document why the trade-off was made.</p>
<p>For instance, if you’re integrating with a new external API. You may not know all the edge cases or how it will be used, so you might take some shortcuts to get it working quickly. This is okay as long as you have a plan to revisit it later, making notes along the way of the trade-offs you made and why. This way, when you do revisit it, you have context on the decisions that were made.</p>
<h2 id="when-tech-debt-becomes-dangerous">When Tech Debt Becomes Dangerous</h2>
<p>Even when tech debt is incurred intentionally, it can become dangerous if not managed properly. Here are some signs that your tech debt is becoming a problem:</p>
<p><strong>No plan to revisit</strong></p>
<p>So you&rsquo;ve balanced some trade-offs and incurred some debt, but 6 months later you still haven&rsquo;t revisited it. This is a red flag. If you don’t have a plan to pay back the debt, it will only grow over time and become harder to manage. This can come in many forms. Team members may leave. New members may not have context on why decisions were made. The codebase may change in ways that make the debt harder to pay back.</p>
<p><strong>No tests</strong></p>
<p>I personally don&rsquo;t believe skipping tests is ever a good idea nor an acceptable form of tech debt. If you find yourself skipping tests to ship faster, that’s a sign of irresponsible debt. Tests are the safety net that allows you to make changes confidently. Without them, you risk introducing bugs and making the debt even harder to manage. With AI-powered coding tools like Cursor and Claude, there’s less of an excuse than ever for skipping tests. It’s never been easier to get solid coverage quickly. I&rsquo;m not saying you need to strive for 100% code coverage of all branches of your software, but you should avoid skipping tests.</p>
<p><strong>Scaling on top of unstable foundations</strong></p>
<p>If you made some conscious trade-offs to ship quickly, but now you’re trying to scale on top of an unstable foundation, that’s a sign of irresponsible debt. You need to have a solid foundation to build on, otherwise you risk creating more problems down the line. I&rsquo;ve seen it time and time again where teams know they&rsquo;ve incurred some technical debt and all agree that &ldquo;we&rsquo;ll tackle it in the future&rdquo; only to move on to the next big product feature. The problem is that the debt never gets paid back, and the team ends up scaling on top of a shaky foundation. This can lead to performance issues, bugs, and ultimately a loss of trust from users.</p>
<h2 id="making-tech-debt-transparent-and-manageable">Making Tech Debt Transparent and Manageable</h2>
<p>One of the best ways to manage technical debt is to make it visible and transparent. There are various ways of doing this such as:</p>
<p><strong>Tooling</strong></p>
<p>One of my favorite ways to make sure that technical debt is visible is to use tooling. This can include things like tagging issues in your issue tracker, creating tickets specifically for tech debt, or using dashboards to track debt over time. The key is to make sure that everyone on the team can see the debt and understand its impact.</p>
<p><strong>Debt Reviews</strong></p>
<p>Logging technical debt in your issue tracker is only part of the solution. You also need to make sure that it’s reviewed regularly. This can be done during sprint planning, iteration planning or retrospectives, where you can discuss the debt and prioritize it alongside new features. This helps ensure that debt doesn’t get forgotten and is actively managed.</p>
<p><strong>Tackling technical debt as part of the development cycle</strong></p>
<p>One of my favorite ways to manage technical debt is to identify how you might be able to tackle it as part of product development. This can include things like refactoring code as part of a new feature, or addressing technical debt as part of a bug fix. The key is to make sure that technical debt is not treated as an afterthought, but rather as an integral part of the development process.</p>
<p><strong>Tech Debt Rotation</strong></p>
<p>Another technique I&rsquo;ve seen work well is to rotate team members through a &ldquo;tech debt&rdquo; role. This means that each team member takes turns focusing on addressing technical debt for a period of time, such as a week or two. This helps ensure that everyone on the team is aware of the debt and has a chance to contribute to addressing it. This  can also tie in well if you have an on-call rotation. The person who is on-call can split their time between handling any issues that arise as well as tackling known technical debt.</p>
<p><strong>Define thresholds</strong></p>
<p>Decide as a team when technical debt should block new features. This could be a percentage of the codebase, a number of open debt tickets, or even qualitative signals like “this module is slowing us down. The key is to have a clear threshold that everyone agrees on, so that you can avoid accumulating too much debt and ensure that it’s actively managed. Ideally, tech debt isn’t a blocker — it’s something you chip away at as part of your normal product cycle.</p>
<p><strong>Encourage a culture of ownership</strong></p>
<p>Finally, encouraging a culture of ownership can help ensure that technical debt is actively managed. This means that everyone on the team takes responsibility for managing debt, rather than leaving it to a specific person or team. It also means that team members are encouraged to speak up when they see debt that needs to be addressed, and to take action to address it.</p>
<h2 id="a-simple-decision-framework-for-tech-debt">A Simple Decision Framework for Tech Debt</h2>
<p>Ask your team:</p>
<ol>
<li>Is this debt intentional or accidental?</li>
<li>Is there a plan to address it?</li>
<li>What’s the cost of repaying later vs. the benefit of shipping now?</li>
<li>How will we track and communicate it?</li>
</ol>
<h2 id="tech-debt-as-a-strategic-lever">Tech Debt as a Strategic Lever</h2>
<p>Technical debt is not a dirty word. It’s a strategic lever that can help you move faster and deliver value to your users. The key is to manage it effectively, rather than ignoring it or treating it as an afterthought.</p>
<p>If your team is struggling to balance speed with stability, <a href="/services/">let’s talk</a>. I help startups ship quickly and build sustainably.</p>
]]></content:encoded></item></channel></rss>