<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Computers & People]]></title><description><![CDATA[thoughts on software development]]></description><link>https://computersandpeople.com/</link><image><url>https://computersandpeople.com/favicon.png</url><title>Computers &amp; People</title><link>https://computersandpeople.com/</link></image><generator>Ghost 5.88</generator><lastBuildDate>Sun, 17 May 2026 05:11:55 GMT</lastBuildDate><atom:link href="https://computersandpeople.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[As a metaphor and practice, technical debt is holding us back]]></title><description><![CDATA[<p>Ward Cunningham&#x2019;s concept of technical debt should forever be held in high esteem.  His easy-to-understand metaphor unlocked meaningful discussions on the risks and impact of technical trade-offs in software development.  It enabled the expression of ideas and concerns many technologists had previously struggled to convey.  Its positive impacts</p>]]></description><link>https://computersandpeople.com/technical-debt-is-holding-us-back/</link><guid isPermaLink="false">67f6eed3338a982708607ce1</guid><dc:creator><![CDATA[Martin Hertz]]></dc:creator><pubDate>Wed, 09 Apr 2025 22:14:25 GMT</pubDate><content:encoded><![CDATA[<p>Ward Cunningham&#x2019;s concept of technical debt should forever be held in high esteem.  His easy-to-understand metaphor unlocked meaningful discussions on the risks and impact of technical trade-offs in software development.  It enabled the expression of ideas and concerns many technologists had previously struggled to convey.  Its positive impacts over time cannot be understated.  However, the now overloaded notion of technical debt is hampering the evolution of software development practices.  Counterintuitively, technical debt is limiting the ability to understand and prioritize technical work, ultimately limiting value creation.</p>
<h3 id="metaphorical-origins">Metaphorical origins</h3>
<p>When I began my career 25 years ago, building a house was the predominant metaphor used to understand key aspects of software development.  In this analogy, stakeholders acted as the future tenants, specifying what needed to be built and at what cost.  Programmers played the role of plumbers, carpenters, electricians, and other tradespeople building the house.  Tension inevitably erupted after the initial phase of construction.  Stakeholders would be surprised and upset, perceiving the house as a money pit:</p>
<ul>
<li>A new addition requires changes to the existing housing infrastructure.  Why is rework necessary for a net new room?</li>
<li>More tenants using the house causes the floors to collapse. Why can&#x2019;t it handle a few more people inside it?</li>
<li>After a few years and many changes to the house, a seemingly simple task like hanging a picture in the living room causes the furnace to break down.<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>  Why does every change inexplicably cause unforeseen trouble?</li>
</ul>
<p>When applied to software development, the construction metaphor has many flaws.  Its biggest one is creating an expectation that once software (the house) is built, it can easily be extended, and maintenance is minimal and predictable.</p>
<p>In contrast to the construction analogy, Cunningham&#x2019;s technical debt metaphor is nearly perfect in its illustration of this core challenge of software development:</p>
<ul>
<li>Deferring technical work is like borrowing money.</li>
<li>Refactoring is like repaying the principal.</li>
<li>Slower development due to complexity is like paying interest.</li>
<li>The whole project caving under a mess is like when the big guys come around and slam your hands in the car door for not paying up. <sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></li>
</ul>
<p>This straightforward framing unlocked a broader understanding of the cost of tradeoffs and the need for maintenance when building software over an extended period.  Non-technical stakeholders and engineers benefited alike.  As I moved from senior engineer to tech lead to architect, technical debt helped me articulate why investment in technical work is critical.  Technical debt was the topic of my first conference talk; I was so excited to spread the word!</p>
<h3 id="incremental-expansion">Incremental expansion</h3>
<p>As revelatory as it was, the initial definition of technical debt was imperfect; it didn&#x2019;t account for unintentionally deferred work (caused by bad design, ignorance, etc.).  Martin Fowler addressed this by expanding the definition and providing a mental model of reckless vs. prudent and deliberate vs. inadvertent technical debt. <sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup> Fowler&#x2019;s extension of technical debt offers helpful nuance and strengthens the underlying metaphor.  The same challenge of when and how to pay down the debt applies regardless of the cause.</p>
<h3 id="explosion-of-coverage">Explosion of coverage</h3>
<p>Not all expansion of a good idea is a good thing.  A broadening of what technical debt covers occurred as awareness and understanding of it increased.  Unfortunately, this accumulating scope muddied the metaphorical waters.  One example of this inflation is an academic paper published in 2014 that identified 13 types of technical debt:</p>
<ul>
<li>Architecture debt</li>
<li>Build debt</li>
<li>Code debt</li>
<li>Defect debt</li>
<li>Design debt</li>
<li>Documentation debt</li>
<li>Infrastructure debt</li>
<li>People debt</li>
<li>Process debt</li>
<li>Requirement debt</li>
<li>Service debt</li>
<li>Test automation debt</li>
<li>Test debt</li>
</ul>
<p>It&#x2019;s easy to assume the good intentions behind this ontology. For example, infrastructure and automated tests are excellent examples of areas beyond core application code where the line between &#x201C;good enough&#x201D; and &#x201C;too much&#x201D; is highly subjective and debatable.  Applying the lens of debt to these areas makes sense so they can be revisited and potentially improved later.  However, debt categories such as &#x201C;defect,&#x201D; &#x201C;people,&#x201D; and &#x201C;requirement&#x201D; are all areas with typically well-established means to assess, track, and act upon them.  What benefit is gained from framing them as technical debt?  This overzealous application of technical debt opens the door to additional difficulties.</p>
<h3 id="organization-as-avoidance">Organization as avoidance</h3>
<p>Once an expansive definition of technical debt is established, a natural next step is to break down and organize what it encompasses.  After all, a common principle in software development is to decompose the big problems.  All the categories need to be clarified, all the instances accounted for, all the relationships between potential work identified, etc. This can certainly be helpful, but only to a degree.  Classifying and quantifying technical debt can provide rough indicators of underserved areas of a tech stack or a need to recalibrate acceptable trade-offs during development.  However, efforts to inventory technical debt can quickly become distractions and encourage busy work.  As a result, engineering organizations become like my grandfather, a carpenter and a child of the Great Depression.  He saved every screw, nail, piece of scrap wood, and old tool he came across in his work.  Organizing all his odds and ends became a second job, yet little of what he saved was ever used. Likewise, I&#x2019;ve seen too much effort spent configuring (and reconfiguring) Jira (or whatever ticket system you use) to categorize, quantify, and track technical debt &#x201C;just right.&#x201D;  Individuals and teams mistake cataloging and sorting technical debt for acting on technical work.</p>
<h3 id="categorical-infighting">Categorical infighting</h3>
<p>Going further, expansively categorized technical debt creates motivation to use categories as a primary driver for prioritization decisions.  Again, at a high level, classifying and quantifying technical debt can guide granular decisions on where improvements can be made.  Individuals and teams can be encouraged to lean in a particular direction when navigating scope compromises.  However, at a ticket-by-ticket or even project-by-project level, one type of debt will never be fundamentally more valuable than another. For example, security changes may or may not be more important than architecture updates. The details and larger context are critical to weighing the value of different types of work against each other.  Decisions driven by categorization will fail to ensure the right work is done at the right time.  When so much time and effort is invested in a complex framework to manage technical debt, limiting its influence on prioritization is challenging.</p>
<h3 id="bottom-of-the-slippery-slope">Bottom of the slippery slope</h3>
<p>Further refinement and expansion of the technical debt metaphor have snowballed to a point where it is all-inclusive.  I&#x2019;ve seen and heard firsthand the following referred to as &#x201C;technical debt&#x201D;:</p>
<ul>
<li>Foundational work required to implement a feature</li>
<li>All &#x201C;non-feature&#x201D; work</li>
</ul>
<p>It might be tempting to assume the people who over-extend the idea come from outside the engineering discipline, such as product managers or high-level executives.  However, software engineers have been just as culpable, if not more so.  Humans crave mental shortcuts, and perceiving all debt as a whole rather than a long and ever-growing list of flavors is understandable.  In the ticketing system, most people won&#x2019;t register the type of debt indicated by a drop-down.  They will simply notice that the ticket represents debt.  Paradoxically, focusing so much on decomposing technical debt incentivizes many people see it as an opaque monolith.</p>
<h3 id="no-fun">No fun</h3>
<p>When most, if not all, technical work is defined as debt, an aspect of the original metaphor becomes harmful: debt is perceived as a burdensome obligation.  It represents something that could or should be put off for a long time, if not forever.  Framing all technical work as debt defaults to it being a secondary concern to anything viewed as an investment, like features.  Technical work is assumed to be a bottom-line obligation rather than a top-line accelerator.  Classifying a large segment of potential work as debt diminishes its perceived value, especially when comparing it to &#x201C;non-debt&#x201D; work.</p>
<h3 id="mind-the-gap">Mind the gap</h3>
<p>Together, these problems with technical debt deepen the fundamental gap between the disciplines of engineering and product. Software development has long been divided into technical and non-technical (or &#x201C;feature&#x201D;) work. Separate processes are created for different roles to identify, track, and prioritize different types of work. For example, a typical pattern is the product manager stewarding &#x201C;feature&#x201D; work in cross-functional teams, with the engineering manager handling &#x201C;technical&#x201D; work.  Managing technical debt has become an engineering practice when the ultimate goal should be inclusive cross-discipline prioritization.</p>
<h3 id="don%E2%80%99t-call-the-language-police">Don&#x2019;t call the language police</h3>
<p>To address the counterproductive application of technical debt, one might be tempted to wrangle its definition closer to its original form.   Given the high risk of coming across as pedantic, I hesitate to suggest this.  &#x201C;Well, actually, technical debt means something else&#x2026;&#x201D;  Modifying language won&#x2019;t reverse the inflated notion of technical debt that has taken hold, nor will it improve our debt management processes.  More importantly, reigning in the concept of technical debt does not result in a net improvement in the gap between product and engineering.</p>
<h3 id="focus-on-value">Focus on value</h3>
<p>Moving beyond technical debt means focusing on the inherent value of technical work. As much as possible, technical work should be evaluated based on clear goals, success measurements, and solid reasoning.  Assessing technical priorities against non-technical priorities should be a direct, &#x201C;apples-to-apples&#x201D; exercise.  Although this may seem simple, I&#x2019;ve seen technical practitioners struggle to explain the value of work.  I attribute this to a lack of history with doing so.  For too long, we&#x2019;re relied on the concept of technical debt to express value for us.  Focusing on technical value requires technical practitioners to level up and for the organization to break down barriers between disciplines.</p>
<p>The emergence of technical debt was initially a boon for software development. Unfortunately, it is now getting in the way of the difficult but necessary challenge of understanding and prioritizing technical work against other potential work. The metaphor of technical debt deserves its exalted place in history.  It&#x2019;s also time to move beyond it.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>I&#x2019;m borrowing this analogy from Dean Hager, former CEO of Jamf.  He leveraged it when explaining the company&#x2019;s strategy of investing more in quality after years of focusing on top-line growth. It seemed to work well across a diverse audience.  The more metaphors, the merrier! <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
<li id="fn2" class="footnote-item"><p>I&#x2019;m taking a few liberties with the original metaphor.  (1) What many of us refer to as &#x201C;technical debt&#x201D; was initially framed as &#x201C;complexity debt&#x201D; by Cunningham.  I&#x2019;m using &#x201C;technical debt&#x201D; for simplicity.  (2)  I modified the language of the complexity debt metaphor.  Again, I did this for simplicity. <a href="#fnref2" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
<li id="fn3" class="footnote-item"><p><a href="https://martinfowler.com/bliki/TechnicalDebtQuadrant.html">https://martinfowler.com/bliki/TechnicalDebtQuadrant.html</a> <a href="#fnref3" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<hr><p>Feedback is welcome via Bluesky: <a href="https://bsky.app/profile/computersandpeople.com">@computersandpeople.com</a>.</p>]]></content:encoded></item><item><title><![CDATA[Ticket-driven development: three modern flavors of the anti-pattern]]></title><description><![CDATA[<p>A recent discussion in the <a href="https://randsinrepose.com/welcome-to-rands-leadership-slack/">Rands Leadership Slack</a> helped me frame a problematic behavior I&#x2019;ve repeatedly observed as a manager: ticket-driven development. <sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> Early in my career, when I worked at large, legacy organizations, ticket-driven development was the norm. While I&#x2019;ve observed it less and less</p>]]></description><link>https://computersandpeople.com/ticket-driven-development-three-modern-flavors-of-the-anti-pattern/</link><guid isPermaLink="false">67e2c6a0338a982708607cc3</guid><dc:creator><![CDATA[Martin Hertz]]></dc:creator><pubDate>Tue, 25 Mar 2025 15:12:21 GMT</pubDate><content:encoded><![CDATA[<p>A recent discussion in the <a href="https://randsinrepose.com/welcome-to-rands-leadership-slack/">Rands Leadership Slack</a> helped me frame a problematic behavior I&#x2019;ve repeatedly observed as a manager: ticket-driven development. <sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> Early in my career, when I worked at large, legacy organizations, ticket-driven development was the norm. While I&#x2019;ve observed it less and less as agile practices have taken hold, it can still rear its ugly head.</p>
<p>Ticket-driven software development is an approach to development in which</p>
<ul>
<li>Ticket creation and work queue (backlog) management is primarily handled by an individual or small group, usually in roles such as engineering manager, product manager, project manager, tech lead, etc.</li>
<li>Tickets defining work are picked up from a queue (or backlog) and completed by individuals with a limited say in ticket creation and queue management.<br>
Simply put, there are work creators/planners and work doers.</li>
</ul>
<p>A few of the reasons ticket-driven development is problematic:</p>
<ul>
<li>Delivering real value becomes a secondary objective to completing a ticket.  Individuals are incentivized to focus more on what is in front of them (the ticket) rather than the bigger-picture goals of the team, project, etc.  Individuals are ill-prepared to notice disconnects between tickets or issues with individual tickets.</li>
<li>In software development, designs and plans are never perfect.  The outcomes of smaller pieces of work (tickets) are critical and necessary inputs to refining the plan and design as you move forward.  Again, individuals are less able to participate in continuous refinement plans.</li>
<li>If a project doesn&#x2019;t go well, people tend to argue about ticket hygiene, discounting the many other factors impacting software delivery.<br>
Ticket-driven development directly opposes the idea of a highly engaged and self-directed team invested in continuous improvement.</li>
</ul>
<p>I&#x2019;ve come across a few different drivers for ticket-driven development.  As an engineering manager, I found that each situation required a different approach to find success.</p>
<h3 id="seeking-safety">Seeking safety</h3>
<p>In one situation, immediately after joining a new team, I realized the QA engineer was practicing ticket-driven development.  Digging deeper, it was apparent the QA engineer was overworked, was dealing with an extremely high incidence of bugs, and was worried about being singled out for allowing poor-quality work to be released.  In addition, the other team members spent significant time disagreeing, going down rabbit holes, and dealing with constantly changing priorities.   Reverting to ticket-driven development was a safety mechanism for the QA engineer.  They could avoid the drama overwhelming the rest of the team and ensure some structure in their QA work.  If something went wrong, they could blame a poorly constructed ticket.  The QA engineer was locked into their approach, hesitant to change, and adamant that they could get by just grinding through tickets.</p>
<p>Instead of addressing the ticket-driven development behavior, I focused on the upstream challenges within the team.  I worked to align the engineers and product manager on priorities and decision-making approaches.  Once there was some broader stability across the team, there was space for the QA engineer to engage in helping to define what work the team took on and how.  They successfully transitioned to a fully engaged team member, with individual tickets dictating much less of their day-to-day work.</p>
<h3 id="well-intentioned-cross-team-efficiency">Well-intentioned cross-team efficiency</h3>
<p>More recently, I supported two infrastructure engineers, who in turn supported four cross-functional delivery teams. The company&apos;s infrastructure was reasonably mature, and the engineers on the delivery teams were highly enabled, so embedding them on the delivery teams didn&apos;t make sense. The infrastructure engineers proactively guided other engineers on ideal collaboration and communication to avoid ticket-driven development. They wanted to collaborate directly with the delivery teams, not pull tickets off a queue.</p>
<p>Interestingly, software engineers on delivery teams still defaulted to a ticket-driven approach when working with the infrastructure team.  They would create tickets in the infrastructure team&#x2019;s Jira project and await a response.  An oft-repeated mantra in software development is to minimize dependencies between teams, as coordinating work across teams is challenging and perilous. Sometimes, these dependencies are unavoidable, likely due to the organization&apos;s structure. Unfortunately, a reaction to mitigating risk and avoiding overhead can be defaulting to a ticket-driven approach.  It took consistent effort by the infrastructure engineers and me to change this default behavior.</p>
<h3 id="individual-preference">Individual preference</h3>
<p>Over the years, I have worked with a handful of individuals who strongly prefer ticket-driven development within cross-functional teams. Reasons for this preference included:</p>
<ul>
<li>Collaboration with a broader team and engagement are perceived as counterproductive overhead, even in the absence of team dysfunction.</li>
<li>A strong desire to minimize their workload as much as possible in line with their job title.  They did their job well and were pleasant to work with, but they were adamant about the narrow scope of their responsibilities. (They wanted to &#x201C;clock in and clock out.&#x201D;)</li>
</ul>
<p>In one case, the individual who preferred ticket-driven development was an engineer who reported to me.  The individual was frustrating their teammates, given the outcomes of their work often misaligned with the team&#x2019;s higher goals.  The engineer pushed back against my guidance and feedback from their peers.  I coached them out of the organization, understanding they were better suited for an environment that was not team-based.</p>
<p>In another case, an automation engineer was a member of the team I supported but reported to a different manager.  My attempts to move the automation engineer beyond ticket-driven development were unsuccessful.  In hindsight, I assumed more alignment with the QA engineer&#x2019;s manager than existed. Although we agreed on the goal of highly collaborative, highly engaged, cross-functional teams, the other manager and I had different perceptions of how that ideally manifested. That manager saw the role of test automation as a &#x201C;follow-up&#x201D; activity to product development. I incorrectly and unproductively attempted to address individual behavior instead of focusing on the bigger context and aligning with the manager</p>
<p>There are cases where ticket-driven execution of work is appropriate.  A customer support organization is one example.  The danger is when this model is applied to an environment built on engaged, self-directed, cross-functional teams.  Ticket-driven development is assembly-line development or, worse, Taylorism in action.  Whether due to broader team dysfunction, well-intentioned attempts at cross-team efficiency, or personal preference, addressing the root cause of ticket-driven development is critical to mitigating it.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>A community member started the discussion by observing, &#x201C;A lot of places do ticket-based programming rather than anything agile or waterfall.&#x201D;  They explained &#x201C;ticket-based programming&#x201D; as when &#x201C;the queue is the real manager of the team. It decides what gets done next. The titled lead or manager is just a person who feeds the machine.&#x201D;  I trust this is a real problem the community member and others have encountered.  However, my challenges have been slightly different: the problem isn&#x2019;t the queue feeders but the individuals operating on the queue.  So, I&#x2019;ve tweaked the terminology to &#x201C;ticket-driven development&#x201D; and focused on the improper actors. <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<hr><p>Feedback is welcome via Bluesky: <a href="https://bsky.app/profile/computersandpeople.com">@computersandpeople.com</a>.</p>]]></content:encoded></item><item><title><![CDATA[Splitting teams?  Psychological safety is an aid, not an obstacle.]]></title><description><![CDATA[<p>In the <a href="https://randsinrepose.com/welcome-to-rands-leadership-slack/">Rands Leadership Slack</a>, a member recently asked about resolving the tension between psychological safety and the needs of the business when it came to splitting a team:</p>
<p><em>How do you balance, as an engineering manager, the trade-off between</em></p>
<ul>
<li><em>building a team that feels very psychologically safe, where everyone</em></li></ul>]]></description><link>https://computersandpeople.com/sychological-safety-and-splitting-teams/</link><guid isPermaLink="false">67cfa39d338a982708607c4a</guid><dc:creator><![CDATA[Martin Hertz]]></dc:creator><pubDate>Tue, 18 Mar 2025 16:41:00 GMT</pubDate><content:encoded><![CDATA[<p>In the <a href="https://randsinrepose.com/welcome-to-rands-leadership-slack/">Rands Leadership Slack</a>, a member recently asked about resolving the tension between psychological safety and the needs of the business when it came to splitting a team:</p>
<p><em>How do you balance, as an engineering manager, the trade-off between</em></p>
<ul>
<li><em>building a team that feels very psychologically safe, where everyone really likes to work with each other</em></li>
<li><em>the need to split the team in half to accommodate company growth, new hires, etc.</em></li>
</ul>
<p>People have expressed sadness and complaints, and no one wants to &#x201C;leave&#x201D; the existing team. How can I find a good compromise for both people and the company? Both sides are valid. Of course, the feeling of togetherness should not harm company growth, but I also don&#x2019;t want people to leave eventually.</p>
<p>I empathize with the person asking the question. In my first managerial role, the organization was growing quickly and hiring extensively. After working hard to help build some great teams, I was tasked with pulling individuals from existing teams to establish new ones. One of the teams, in particular, was upset by this news. I felt very conflicted. From this experience, I learned that it&#x2019;s important to remember that psychological safety is more about how you engage with direct reports regarding challenges and much less about shielding them from those challenges.</p>
<p>The manager who asked this question started off on the right foot by engaging with team members and hearing their input.<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> Openly addressing challenging situations and seeking input are two crucial aspects of psychological safety. Most humans feel valued when they feel listened to. In addition, discussing the changes could reveal a valid reason to change plans. In this case, disappointment is the overriding input from the team members, which does not rise to that level.</p>
<p>Psychological safety also requires candor.<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup> In this situation, the manager must explain why the change is happening (the need to grow and absorb new hires) and convey that these business objectives take precedence over team member concerns (discomfort and sadness). Shielding team members from this reality is counterproductive to psychological safety.</p>
<p>Servant leadership also plays a crucial role here. The manager feels tension between serving team members and serving the company. Nonetheless, individual benefits can and should still be maximized within the company&apos;s constraints. For example, supporting new hires presents an excellent opportunity if existing team members wish to mentor others. Additionally, are any team members interested in formally or informally leading the establishment of psychological safety in one of the new teams?</p>
<p>Finally, the adverse outcome that the manager fears, an employee leaving, should not weigh heavily on their mind. After going through some version of team splitting a few times, I&#x2019;ve seen individual feelings normalizing as people settle in with their new colleagues. If a team member cannot overcome their disappointment or adjust to the new normal, leaving may be the best choice for both them and the organization. A growing company with multiple new hires may not provide the environment they desire. They may be better suited for a smaller organization and/or one that is less prone to change.</p>
<p>While seeking compromise when splitting the team may seem like the right approach, the goal is to maximize the team members&apos; positive outcomes in the context of the constraints. Psychological safety and servant leadership provide a means to navigate the change, not a reason to avoid it.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>&#x201C;Psychological safety exists when people feel their workplace is an environment where they can speak up, offer ideas, and ask questions.&#x201D; Amy C. Edmondson, The Fearless Organization (Hoboken, New Jersey : John Wiley &amp; Sons, Inc., 2019), 52. <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
<li id="fn2" class="footnote-item"><p>&#x201C;&#x2026;key principles that build psychological safety: honesty, vulnerability, communication, and information sharing.&#x201D; Edmondson, The Fearless Organization, 254. <a href="#fnref2" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<hr><p>Feedback is welcome via Bluesky: <a href="https://bsky.app/profile/computersandpeople.com">@computersandpeople.com</a>.</p>
]]></content:encoded></item></channel></rss>