<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://www.battlingcomplexity.me/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.battlingcomplexity.me/" rel="alternate" type="text/html" hreflang="en-US" /><updated>2026-10-05T05:48:19+00:00</updated><id>https://www.battlingcomplexity.me/feed.xml</id><title type="html">Battling Complexity</title><subtitle>Clif&apos;s notes by Clif Render, an IT executive leading technology, security, and privacy, on pursuing simplicity in software engineering, architecture, and technology leadership.</subtitle><author><name>Clif Render</name></author><entry><title type="html">Great Architecture Serves the Business. Everything Else Is Decoration.</title><link href="https://www.battlingcomplexity.me/2026/09/great-architecture-serves-the-business/" rel="alternate" type="text/html" title="Great Architecture Serves the Business. Everything Else Is Decoration." /><published>2026-09-14T13:00:00+00:00</published><updated>2026-09-14T13:00:00+00:00</updated><id>https://www.battlingcomplexity.me/2026/09/great-architecture-serves-the-business</id><content type="html" xml:base="https://www.battlingcomplexity.me/2026/09/great-architecture-serves-the-business/"><![CDATA[<p>I’ve seen some beautiful architectures in my career. Elegant event-driven designs. Perfectly layered services. Infrastructure so automated it practically ran itself.</p>

<p>Some of them were great. Some of them were expensive mistakes. The difference had nothing to do with how elegant they were. It came down to one question: <strong>did the architecture serve the business?</strong></p>

<p>Here’s the core of what I believe about architecture: <strong>great software architecture is only great if it puts the business need first.</strong> Technical excellence matters, and I’ll come back to that. But it’s a means to an end, never the end itself.</p>

<h2 id="the-trap-of-the-technically-impressive">The trap of the technically impressive</h2>

<p>It’s easy to see how architecture drifts away from the business. Architects and engineers are rewarded, informally at least, for technical sophistication. The interesting problems are technical. The conference talks are technical. The résumé bullet points are technical.</p>

<p>So without anyone meaning to, priorities shift. Teams build for scale they’ll never reach. They adopt patterns because they’re modern, not because they fit. They spend months on a platform migration that changes nothing for a single customer.</p>

<p>Here are some signs your architecture has drifted:</p>

<ol>
  <li><strong>Nobody can explain the business reason.</strong> Ask why a system is designed the way it is. If the answers are all technical (“it’s more scalable,” “it’s the modern approach”) and none are about the business, that’s a warning.</li>
  <li><strong>The non-functional requirements are made up.</strong> Five-nines availability for an internal reporting tool. Sub-second response for a nightly batch process. If nobody in the business asked for it, someone is paying for it anyway.</li>
  <li><strong>The roadmap is all technology.</strong> If the architecture roadmap lists migrations, upgrades, and platforms, but not a single business capability, it’s a technology roadmap, not an architecture roadmap.</li>
  <li><strong>The business works around IT.</strong> Spreadsheets, shadow systems, and SaaS tools bought on a credit card are what the business does when IT isn’t meeting its needs.</li>
  <li><strong>Success is measured in technical terms.</strong> Uptime, deployments, story points. Useful, but none of them tell you whether the business is better off.</li>
</ol>

<h2 id="what-business-first-architecture-looks-like">What business-first architecture looks like</h2>

<p>Putting the business first doesn’t mean doing whatever the loudest stakeholder asks. It means the business need is the starting point and the test for every architectural decision. In practice:</p>

<p><strong>Start with the capability, not the technology.</strong> Before anyone draws a box, be able to say what the business needs to <em>do</em>, and why it matters. “We need to onboard a new customer in one day instead of two weeks” is a business need. “We need a microservices platform” is not.</p>

<p><strong>Speak the language of the business.</strong> Gregor Hohpe describes the architect’s job as <a href="/2026/06/the-software-architect-elevator/">riding the elevator</a> between the penthouse and the engine room. If you can’t explain a decision in terms of cost, risk, revenue, or customer experience, you haven’t finished making it.</p>

<p><strong>Tie every significant decision to a business driver.</strong> The <a href="/2026/04/architecture-decision-records/">Architecture Decision Records</a> I’m so fond of have a section called <em>Context</em>. Put the business reason there. If you can’t fill it in, question the decision.</p>

<p><strong>Right-size quality to the need.</strong> In <a href="/2018/11/theres-more-to-quality-than-you-think/">There’s More to Quality Than You Think</a>, I argued that quality has many dimensions. Business-first architecture means deciding how much of each one the business actually needs. A trading platform and a cafeteria menu app deserve very different answers.</p>

<p><strong>Measure outcomes.</strong> Did order processing get faster? Did the customer complaint rate drop? Did the new product launch on time? Those are the metrics that tell you whether the architecture is working.</p>

<h2 id="loyalty-to-the-business-not-the-technology">Loyalty to the business, not the technology</h2>

<p>In my 2018 post on <a href="/2018/10/what-does-an-enterprise-architect-do/">what enterprise architects do</a>, I wrote that a solution architect’s “loyalty is to the business, not to the technology.” I still believe that, and I’d extend it to everyone who designs systems.</p>

<p>That means being willing to recommend the boring option, the off-the-shelf product, or the option that doesn’t need your team at all. It means being willing to say, “We don’t need to build this.” Some of the best architecture work I’ve seen resulted in <em>less</em> technology, not more.</p>

<h2 id="business-first-is-not-business-only">Business-first is not business-only</h2>

<p>Now the other half. Putting the business first doesn’t mean ignoring technical health. Technical debt, security weaknesses, and fragile systems are business risks. They just tend to be invisible to the business until it’s too late.</p>

<p>Part of the architect’s job is to make that risk visible in business terms. Don’t say “we need to refactor the billing service.” Say “every change to billing currently takes six weeks and has caused two revenue-impacting incidents this year. Here’s what it would take to cut that to one week.” The first sentence is a technical preference. The second is a business case.</p>

<p>When architects do this well, they stop having to fight for technical investment. The business funds it, because it understands what it’s buying.</p>

<h2 id="alignment-is-the-simplest-architecture">Alignment is the simplest architecture</h2>

<p>This blog is about battling complexity, so I’ll end there. A lot of the complexity I’ve seen in enterprises comes from misalignment. Systems were built for needs that never existed, for scale that never came, or for a strategy that changed three years ago. That’s complexity with no business value behind it, and it’s the most expensive kind.</p>

<p>When architecture stays tightly focused on what the business actually needs, a lot of that complexity never gets built in the first place.</p>

<p>In 2018 I proposed a <a href="/2018/10/a-new-guiding-principle-for-application-development/">Product Manifesto</a>. Here’s a companion for architects:</p>

<blockquote>
  <p><strong>Business outcomes</strong> over technical elegance<br />
<strong>Capabilities</strong> over platforms<br />
<strong>Fit for purpose</strong> over best in class<br />
<strong>Clear trade-offs</strong> over hidden costs</p>
</blockquote>

<p>There’s value in the items on the right. Elegant, best-in-class platforms are wonderful things. But great architecture always values the items on the left more.</p>]]></content><author><name>Clif Render</name></author><summary type="html"><![CDATA[I’ve seen some beautiful architectures in my career. Elegant event-driven designs. Perfectly layered services. Infrastructure so automated it practically ran itself.]]></summary></entry><entry><title type="html">Platform Strategy: When Standardization Speeds You Up</title><link href="https://www.battlingcomplexity.me/2026/08/platform-strategy/" rel="alternate" type="text/html" title="Platform Strategy: When Standardization Speeds You Up" /><published>2026-08-17T13:00:00+00:00</published><updated>2026-08-17T13:00:00+00:00</updated><id>https://www.battlingcomplexity.me/2026/08/platform-strategy</id><content type="html" xml:base="https://www.battlingcomplexity.me/2026/08/platform-strategy/"><![CDATA[<p>Ask most developers what they think of enterprise standards and you’ll get a sigh. Standards are the forms you fill out, the approved list you have to pick from, and the review board that meets once a month. In most organizations, standardization feels like the opposite of innovation.</p>

<p>Gregor Hohpe’s <a href="https://architectelevator.com/book/platformstrategy/"><em>Platform Strategy: Innovation Through Harmonization</em></a> argues that it doesn’t have to be that way. Done right, a platform can standardize <em>and</em> speed teams up at the same time. Hohpe calls this the <strong>platform paradox</strong>, and the book is about how to get it right.</p>

<p>It’s the follow-up to <a href="/2026/06/the-software-architect-elevator/"><em>The Software Architect Elevator</em></a>, and like that book, it’s practical, full of memorable metaphors, and grounded in real experience. (The print edition credits Michele Danieli and Jean-François Landreau as co-authors.) It covers what platforms are, how to set a strategy for them, how to design and build them, and how to organize teams around them.</p>

<p>Here are Clif’s notes.</p>

<h2 id="the-platform-paradox">The platform paradox</h2>

<p>Traditional IT standardization works by <strong>restricting</strong>. You may use these three databases and no others. You must file a ticket to get a server. The standard reduces variety, and it slows people down in exchange for control.</p>

<p>A real platform standardizes by <strong>enabling</strong>. One of Hohpe’s examples is HTTP. It’s a strict standard, and because everyone follows it, millions of people have built things on top of it that its creators never imagined. The standard didn’t limit innovation. It made innovation possible.</p>

<p>That’s the paradox. When a platform takes care of the common, undifferentiated work, it frees teams to spend their effort where it matters. Harmonize the foundations, and you get more innovation on top, not less.</p>

<h2 id="most-platforms-arent-platforms">Most “platforms” aren’t platforms</h2>

<p>One of the most useful parts of the book is a contrast between platforms and traditional IT services. Roughly:</p>

<table>
  <thead>
    <tr>
      <th>Traditional IT service</th>
      <th>Platform</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Request it with a ticket</td>
      <td>Use it yourself, on demand</td>
    </tr>
    <tr>
      <td>Built for control</td>
      <td>Built to enable</td>
    </tr>
    <tr>
      <td>Usage is mandated</td>
      <td>Adoption is earned</td>
    </tr>
    <tr>
      <td>Resists change to stay stable</td>
      <td>Evolves continuously</td>
    </tr>
    <tr>
      <td>Becomes a bottleneck as it scales</td>
      <td>Gets better as it scales</td>
    </tr>
  </tbody>
</table>

<p>Run your own “platform” through that table. If it has a ticket queue, a mandate, and a backlog of unhappy users, it’s probably an IT service with a new name.</p>

<h2 id="fruit-basket-or-fruit-salad">Fruit basket or fruit salad?</h2>

<p>Hohpe’s most memorable image is the difference between a <strong>fruit basket</strong> and a <strong>fruit salad</strong>. A fruit basket is a bundle of separate things: here’s a source repository, a CI tool, a wiki, and a Kubernetes cluster. Good luck. A fruit salad is something new made from those ingredients, with the work of combining them already done.</p>

<p>Lots of organizations call a fruit basket a platform. They’ve bundled tools together, but every team still has to figure out how to wire them up. That’s not a platform. That’s a shopping list.</p>

<h2 id="simplify-concepts-not-parameters">Simplify concepts, not parameters</h2>

<p>This is the idea I think architects most need to hear. When teams try to “reduce cognitive load,” they often just hide settings. Default ten of the twenty parameters and call it simpler.</p>

<p>Hohpe points out that this frequently makes things <em>harder</em>. Behind each parameter is a concept. Hide half the concepts, and users are left trying to understand a system with missing pieces, like doing a jigsaw puzzle with half the pieces removed. Real simplification means building a better <strong>abstraction</strong>: a new, smaller set of concepts that actually makes sense in your domain. And the abstraction has to be honest. A platform that pretends networks never fail isn’t simple. It’s an illusion, and illusions eventually break.</p>

<p>This connects directly to <a href="/2026/02/simple-isnt-easy/">Simple Isn’t Easy</a>. Hiding complexity is easy. Removing it is simple, and much harder.</p>

<h2 id="platforms-need-a-product-mindset">Platforms need a product mindset</h2>

<p>Because adoption is earned rather than mandated, platform teams have to think like product companies. They need to know their users, prioritize ruthlessly, make trade-offs, and even market what they’ve built. A platform is an <strong>indirect value creator</strong>: it only produces value when other teams use it to build something.</p>

<p>That’s a different skill set from running infrastructure, and the book is candid that many organizations underestimate how high the bar is.</p>

<p>My favorite line in the book is a test you can apply to any platform:</p>

<blockquote>
  <p>If your users haven’t built something that surprised you, you probably didn’t build a platform.</p>
</blockquote>

<h2 id="dont-build-a-pyramid">Don’t build a pyramid</h2>

<p>Hohpe also warns against the “pyramid” approach to business platforms: a grand design where common functionality sits at the bottom and every business unit’s needs are neatly anticipated above it. It assumes you can predict what everyone will need, and you can’t. As he put it in an <a href="https://techleadjournal.dev/episodes/157/">interview about the book</a>, we stopped building pyramids thousands of years ago for good reasons. Platforms should grow from real usage, not from a master plan.</p>

<h2 id="why-this-matters-for-battling-complexity">Why this matters for battling complexity</h2>

<p>I’ve argued that every organization has a <a href="/2026/03/your-organization-has-a-complexity-budget/">complexity budget</a>, and that you should standardize the boring parts so you can spend that budget where it counts. <em>Platform Strategy</em> is the best guide I’ve found to doing that well.</p>

<p>It’s also a warning. A badly built platform is one of the biggest sources of enterprise complexity there is: one more system everyone depends on, that nobody likes, and that can’t change. It’s the “one system to rule them all” I warned about in my <a href="/2018/10/10-warning-signs-when-dealing-with-vendors/">vendor warning signs</a> post, built in-house.</p>

<p>The difference between those two outcomes is the thinking in this book.</p>

<h2 id="who-should-read-it">Who should read it</h2>

<ul>
  <li><strong>Platform and infrastructure teams</strong>, especially anyone building an internal developer platform.</li>
  <li><strong>Enterprise architects</strong> deciding what to standardize, and how.</li>
  <li><strong>IT leaders</strong> funding platform initiatives who want to know what success looks like before they spend the money.</li>
</ul>

<p>You can get it as an ebook on <a href="https://leanpub.com/platformstrategy">Leanpub</a> or in print. Read <em>The Software Architect Elevator</em> first if you haven’t. Then read this one before you build your next platform.</p>]]></content><author><name>Clif Render</name></author><summary type="html"><![CDATA[Ask most developers what they think of enterprise standards and you’ll get a sigh. Standards are the forms you fill out, the approved list you have to pick from, and the review board that meets once a month. In most organizations, standardization feels like the opposite of innovation.]]></summary></entry><entry><title type="html">AI Will Write the Code. Who Will Battle the Complexity?</title><link href="https://www.battlingcomplexity.me/2026/07/ai-will-write-the-code/" rel="alternate" type="text/html" title="AI Will Write the Code. Who Will Battle the Complexity?" /><published>2026-07-13T13:00:00+00:00</published><updated>2026-07-13T13:00:00+00:00</updated><id>https://www.battlingcomplexity.me/2026/07/ai-will-write-the-code</id><content type="html" xml:base="https://www.battlingcomplexity.me/2026/07/ai-will-write-the-code/"><![CDATA[<p>I’ll start by saying I’m not an AI skeptic. AI coding tools are remarkable, and teams that use them well are getting real, measurable gains. If you’re a technology leader and you’re not exploring them, you should be.</p>

<p>But I’ve been in this industry long enough to recognize a pattern. When something that used to be expensive suddenly becomes cheap, we make a lot more of it. That’s usually good. It isn’t always.</p>

<p>AI has made writing code dramatically cheaper. It has not made <em>understanding</em> code any cheaper. It hasn’t made operating, securing, debugging, or changing code any cheaper either. Those costs are where complexity lives, and they scale with how much code you have, not with how fast you produced it.</p>

<h2 id="how-ai-adds-complexity">How AI adds complexity</h2>

<p>None of these are hypothetical. If you’re using AI tools at any scale, you’ve probably seen most of them:</p>

<ol>
  <li><strong>More code than anyone needs.</strong> Ask an AI to solve a problem and it will often give you a complete, well-commented, thoroughly handled solution that’s three times the size of what a thoughtful engineer would have written. Every line works. A lot of the lines shouldn’t be there.</li>
  <li><strong>Duplicates instead of reuse.</strong> Generating a new helper function is faster than finding the existing one. Over time you end up with five slightly different versions of the same logic, and nobody knows which one is the real one.</li>
  <li><strong>Dependencies by default.</strong> Need to parse a date? Here’s a new library. The model doesn’t know or care about your approved technology list or your <a href="/2026/03/your-organization-has-a-complexity-budget/">complexity budget</a>.</li>
  <li><strong>Code nobody fully understands.</strong> When a developer writes code, at least one person understands it. When a developer accepts generated code they only skimmed, possibly nobody does. That’s a new kind of <a href="https://martinfowler.com/bliki/TechnicalDebtQuadrant.html">technical debt</a>, and it doesn’t show up on any report.</li>
  <li><strong>Prototypes become production faster.</strong> The “quick proof of concept” used to take two weeks, which gave someone time to ask whether it should exist. Now it takes an afternoon, and it’s in production by Friday.</li>
</ol>

<h2 id="what-still-matters-more-than-ever">What still matters (more than ever)</h2>

<p>The good news is that the principles that kept systems simple before AI still work. They just matter more now.</p>

<ul>
  <li><strong>Design before you generate.</strong> The AI is a great implementer and a poor architect. Decide on the boundaries, the interfaces, and the data ownership first. Then let the tools fill in the details. If you let the AI design by accident, you’ll get its default architecture, which is usually more of everything.</li>
  <li><strong>Review for complexity, not just correctness.</strong> The question in code review used to be, “Does this work?” Now it also has to be, “Does this need to exist?” and “Is there a smaller way?” Deleting generated code is one of the most valuable things a reviewer can do.</li>
  <li><strong>Standards are guardrails, not paperwork.</strong> Approved libraries, reference architectures, and paved paths matter more when code is cheap, because they’re how you keep a thousand fast decisions consistent. Write them down where the tools, and the people using them, can find them.</li>
  <li><strong>Lightweight documentation, especially decisions.</strong> <a href="/2026/04/architecture-decision-records/">Architecture Decision Records</a> are the perfect counterweight to AI-generated code. The code tells you <em>what</em>. Only a human can record <em>why</em>.</li>
  <li><strong>Measure the right thing.</strong> Lines of code and pull requests merged were always bad metrics. With AI they’re actively misleading. Measure delivery outcomes, change failure rates, and time-to-understand, the kinds of measures the <a href="https://dora.dev/">DORA research</a> has long pointed to.</li>
</ul>

<h2 id="a-word-on-agents">A word on agents</h2>

<p>The same goes for AI systems themselves. It’s tempting to build a fleet of autonomous agents with elaborate orchestration because the demos are impressive. Even the people building the models suggest otherwise. Anthropic’s guidance on <a href="https://www.anthropic.com/engineering/building-effective-agents">building effective agents</a> comes down to this: start with the simplest thing that works, and add complexity only when it clearly improves the result. That’s good advice for any technology. It’s nice to see it given about the newest one.</p>

<h2 id="the-job-hasnt-changed">The job hasn’t changed</h2>

<p>People keep asking me whether AI will make architects and senior engineers obsolete. I think it does the opposite. When anyone can generate code, the scarce skill is knowing what <em>not</em> to build, where the boundaries should go, and how to keep a system understandable as it grows.</p>

<p>That was always the job. AI just made it harder to ignore.</p>]]></content><author><name>Clif Render</name></author><summary type="html"><![CDATA[I’ll start by saying I’m not an AI skeptic. AI coding tools are remarkable, and teams that use them well are getting real, measurable gains. If you’re a technology leader and you’re not exploring them, you should be.]]></summary></entry><entry><title type="html">The Software Architect Elevator: The Book I Wish I’d Had in 2018</title><link href="https://www.battlingcomplexity.me/2026/06/the-software-architect-elevator/" rel="alternate" type="text/html" title="The Software Architect Elevator: The Book I Wish I’d Had in 2018" /><published>2026-06-15T13:00:00+00:00</published><updated>2026-06-15T13:00:00+00:00</updated><id>https://www.battlingcomplexity.me/2026/06/the-software-architect-elevator</id><content type="html" xml:base="https://www.battlingcomplexity.me/2026/06/the-software-architect-elevator/"><![CDATA[<p>Back in 2018, I wrote a post called <a href="/2018/10/what-does-an-enterprise-architect-do/">What Does an Enterprise Architect Do?</a>. I wrote it because nearly everyone who interviewed me for the job asked that same question. My answer was a careful list of roles and responsibilities. It was accurate. It was also a little dry.</p>

<p>Gregor Hohpe answered the same question much better, with one image: an elevator.</p>

<p>His book, <a href="https://architectelevator.com/book/"><em>The Software Architect Elevator: Redefining the Architect’s Role in the Digital Enterprise</em></a> (O’Reilly, 2020), grew out of his years as a chief architect in a large enterprise and his earlier collection, <em>37 Things One Architect Knows About IT Transformation</em>. It’s written as a series of short chapters you can read in any order, which makes it easy to pick up between meetings. If you’re an architect, an IT leader, or an executive who works with architects, it belongs on your shelf.</p>

<p>Here are Clif’s notes.</p>

<h2 id="the-big-idea-ride-the-elevator">The big idea: ride the elevator</h2>

<p>Picture your organization as a tall building. At the top is the <strong>penthouse</strong>, where executives set strategy and make investment decisions. At the bottom is the <strong>engine room</strong>, where engineers build and run the systems that make the business work. In between are a lot of floors full of middle management, process, and translation.</p>

<p>The problem is that the penthouse and the engine room rarely talk to each other directly. Strategy gets watered down on the way down. Technical reality gets filtered on the way up. By the time a message has passed through enough floors, both sides are making decisions based on a version of reality that isn’t quite true.</p>

<p>Hohpe’s answer is that the architect’s job is to <strong>ride the elevator</strong>. A good architect is comfortable in the engine room, close enough to the technology to know what’s real. A good architect is also comfortable in the penthouse, able to explain technology decisions in terms of business outcomes. And they move between the two often, so both floors stay connected.</p>

<p>That’s it. That’s the job. It’s the best one-sentence description of enterprise architecture I’ve come across.</p>

<h2 id="same-decision-different-language">Same decision, different language</h2>

<p>One of my favorite ideas in the book is that you describe the same decision differently on different floors. In the engine room you might say, “We’re running the database in a multi-zone configuration with standby replicas.” In the penthouse you say, “We chose to spend a bit more so that an outage won’t cost us customer data or a day of sales.”</p>

<p>Both statements are true. Neither one is dumbed down. They’re aimed at what each audience needs to decide. An architect who can only speak one of those languages is only doing half the job.</p>

<h2 id="architecture-is-selling-options">Architecture is selling options</h2>

<p>Hohpe makes a case I’ve found very useful with finance-minded executives: <strong>good architecture is like buying options.</strong> A financial option gives you the right, but not the obligation, to do something later. Architecture works the same way. A clean interface, a well-placed abstraction, or a decision to avoid lock-in costs something now, and in return gives you the ability to change direction later without starting over.</p>

<p>The value of an option goes up as uncertainty goes up. In a stable, predictable world, you don’t need many options, so you can build things simply and directly. In a fast-changing world, options are worth a lot.</p>

<p>This is a very practical way to fight complexity. Every bit of flexibility you build in costs something. So don’t add flexibility “just in case.” Add it where you’re genuinely uncertain, and be able to explain what option you’re buying and why it’s worth the price.</p>

<h2 id="speed-is-a-strategy">Speed is a strategy</h2>

<p>The book spends a lot of time on why traditional IT organizations struggle to move fast, and why that matters more than it used to. Organizations built for cost efficiency and control tend to treat change as risk to be minimized. Digital companies treat speed itself as a competitive advantage.</p>

<p>One theme I especially like is “if it hurts, do it more often.” Annual releases are painful because so much change piles up between them. Frequent, small releases are less painful because each one is small. The same goes for many things we avoid: deployments, upgrades, migrations. Avoiding them doesn’t remove the pain. It saves it up.</p>

<h2 id="organizations-are-systems-too">Organizations are systems too</h2>

<p>Hohpe treats the organization the same way he’d treat a technical system: it has structure, feedback loops, and behavior that emerges from how it’s put together. That’s why reorganizations often fail to stick and why symptoms like buggy software often have causes far from the code, such as overloaded teams or bad incentives.</p>

<p>For anyone trying to simplify an enterprise, this is a crucial insight. A lot of technical complexity is really organizational complexity in disguise. You can’t fix it with a new framework.</p>

<h2 id="why-this-book-matters-for-battling-complexity">Why this book matters for battling complexity</h2>

<p>The thread that ties all of this together is alignment. When the penthouse and the engine room are disconnected, complexity grows in the gap. Executives fund initiatives without understanding their technical cost. Engineers build sophisticated solutions to problems the business doesn’t actually have. Nobody sees the whole picture, so nobody can make it simpler.</p>

<p>An architect who rides the elevator closes that gap. They can tell leadership, “This initiative will add three new platforms we’ll have to run forever. Here’s a simpler option.” They can tell engineers, “The business doesn’t need five-nines here. Ninety-nine and a half percent will do, and it’s a much simpler design.”</p>

<p>That’s how architecture becomes a tool for simplicity instead of a source of complexity.</p>

<h2 id="who-should-read-it">Who should read it</h2>

<ul>
  <li><strong>Architects</strong>, especially new ones, or anyone who has been asked “so what exactly do you do?”</li>
  <li><strong>IT leaders and CIOs</strong> who want to get more value from their architecture teams.</li>
  <li><strong>Engineers</strong> thinking about the architect path, who want to know what the job looks like beyond diagrams.</li>
  <li><strong>Business executives</strong> who work with technology teams and want to understand how to get honest, useful answers from them.</li>
</ul>

<p>If you enjoy it, Hohpe has continued the series with <a href="https://architectelevator.com/book/platformstrategy/"><em>Platform Strategy</em></a> and <em>Cloud Strategy</em>, and he writes regularly at <a href="https://architectelevator.com/">architectelevator.com</a>. I’ll have notes on <em>Platform Strategy</em> soon.</p>]]></content><author><name>Clif Render</name></author><summary type="html"><![CDATA[Back in 2018, I wrote a post called What Does an Enterprise Architect Do?. I wrote it because nearly everyone who interviewed me for the job asked that same question. My answer was a careful list of roles and responsibilities. It was accurate. It was also a little dry.]]></summary></entry><entry><title type="html">The Leader’s Most Underrated Tool Is Subtraction</title><link href="https://www.battlingcomplexity.me/2026/05/the-leaders-most-underrated-tool-is-subtraction/" rel="alternate" type="text/html" title="The Leader’s Most Underrated Tool Is Subtraction" /><published>2026-05-11T13:00:00+00:00</published><updated>2026-05-11T13:00:00+00:00</updated><id>https://www.battlingcomplexity.me/2026/05/the-leaders-most-underrated-tool-is-subtraction</id><content type="html" xml:base="https://www.battlingcomplexity.me/2026/05/the-leaders-most-underrated-tool-is-subtraction/"><![CDATA[<p>Look at how technology leaders usually get recognized. They launched an initiative. They stood up a new team. They brought in a new platform. They added a process to make sure “that never happens again.”</p>

<p>Now try to remember the last time a leader was celebrated for <em>removing</em> something.</p>

<p>It’s rare, and that’s a problem. Organizations are very good at adding and very bad at subtracting, so complexity only grows in one direction. Each addition makes sense. Taken together, they bury the teams that have to live with them.</p>

<h2 id="why-we-add">Why we add</h2>

<p>The bias toward adding isn’t a character flaw. It’s built into how organizations work:</p>

<ol>
  <li><strong>Adding is visible. Subtracting is invisible.</strong> A new platform gets a launch announcement. A retired platform gets nothing, even though it may have freed up more capacity.</li>
  <li><strong>Adding feels safe.</strong> After an incident, adding a check, an approval, or a review step feels responsible. Taking one away feels reckless, even when the step never caught anything.</li>
  <li><strong>Adding is someone’s project. Removing is nobody’s.</strong> New things come with budgets and sponsors. Retiring old things comes with risk and no reward.</li>
  <li><strong>Every addition has a constituency.</strong> Someone fought for that process, that tool, that report. Removing it means a conversation nobody wants to have.</li>
</ol>

<h2 id="what-subtraction-looks-like">What subtraction looks like</h2>

<p>Subtraction isn’t just turning off servers. Here are places leaders can take things away:</p>

<ul>
  <li><strong>Meetings.</strong> Look at the recurring meetings in your organization. How many have a clear decision or output? Cancel the ones that don’t, and see who notices.</li>
  <li><strong>Approvals.</strong> I wrote in 2018 that <a href="/2018/10/is-documentation-the-great-evil/">if your approvals process takes longer than the change itself, it’s broken</a>. That’s still true. Every approval step should be able to name a problem it actually caught. If it can’t, remove it.</li>
  <li><strong>Reports.</strong> Find out who reads them. Really reads them. Stop producing the rest.</li>
  <li><strong>Priorities.</strong> If everything is a priority, nothing is. One of the most useful things a leader can say is, “We’re not doing that this quarter.”</li>
  <li><strong>Tools and platforms.</strong> Two tools that do the same job is one too many. Pick one, migrate, and retire the other completely. Don’t settle for “mostly.”</li>
  <li><strong>Features.</strong> Products gather features the way attics gather boxes. Usage data will tell you which ones nobody would miss.</li>
</ul>

<h2 id="subtract-carefully">Subtract carefully</h2>

<p>A word of caution. Before you tear something down, find out why it’s there. This is <a href="https://fs.blog/chestertons-fence/">Chesterton’s Fence</a>: don’t remove a fence until you know why someone put it up. Sometimes the annoying approval step exists because of an audit finding. Sometimes the odd integration is holding up a revenue stream. Subtraction without understanding is just another way to create risk.</p>

<p>So do the homework first. Then, once you understand why something exists and you’ve confirmed the reason no longer applies, remove it fully. Don’t leave behind a half-retired system that still needs care and feeding.</p>

<h2 id="make-subtraction-part-of-the-job">Make subtraction part of the job</h2>

<p>If you lead a technology organization, here are a few ways to make subtraction normal:</p>

<ol>
  <li><strong>Celebrate removals.</strong> Call out the team that decommissioned a system, killed a report, or simplified a process, in the same forum where you celebrate launches.</li>
  <li><strong>Pair every “add” with a “remove.”</strong> New tool? What does it replace? New process? What does it make unnecessary? If the answer is “nothing,” take a harder look.</li>
  <li><strong>Run a regular “stop doing” review.</strong> Once a quarter, ask each team what they’d stop doing if they could. You’ll be surprised how often the answer is something leadership could simply turn off.</li>
  <li><strong>Fund retirement.</strong> Decommissioning work needs real budget and real capacity, or it will lose to new features every time.</li>
</ol>

<p>Anyone can add. It takes judgment, and a bit of courage, to take away. The leaders I’ve admired most were the ones who left their organizations simpler than they found them.</p>]]></content><author><name>Clif Render</name></author><summary type="html"><![CDATA[Look at how technology leaders usually get recognized. They launched an initiative. They stood up a new team. They brought in a new platform. They added a process to make sure “that never happens again.”]]></summary></entry><entry><title type="html">Architecture Decision Records: Documentation That Isn’t Evil</title><link href="https://www.battlingcomplexity.me/2026/04/architecture-decision-records/" rel="alternate" type="text/html" title="Architecture Decision Records: Documentation That Isn’t Evil" /><published>2026-04-13T13:00:00+00:00</published><updated>2026-04-13T13:00:00+00:00</updated><id>https://www.battlingcomplexity.me/2026/04/architecture-decision-records</id><content type="html" xml:base="https://www.battlingcomplexity.me/2026/04/architecture-decision-records/"><![CDATA[<p>Back in 2018, I asked whether <a href="/2018/10/is-documentation-the-great-evil/">documentation was the great evil</a>. My answer was “maybe, but it doesn’t have to be.” Good documentation, I argued, is small, useful, and built into the way you already work.</p>

<p>If I were writing that post today, I’d spend most of it on one practice: the <strong>Architecture Decision Record</strong>, or ADR.</p>

<h2 id="what-an-adr-is">What an ADR is</h2>

<p>The idea comes from Michael Nygard’s 2011 post, <a href="https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions">Documenting Architecture Decisions</a>, and it’s almost embarrassingly simple. Every time your team makes a significant architectural decision, you write a short document, usually a page or less, that records:</p>

<ol>
  <li><strong>Title.</strong> A short name for the decision. “Use PostgreSQL for the order service.”</li>
  <li><strong>Status.</strong> Proposed, accepted, deprecated, or superseded.</li>
  <li><strong>Context.</strong> What situation forced the decision? What constraints, requirements, and forces were in play?</li>
  <li><strong>Decision.</strong> What did you decide? Stated plainly.</li>
  <li><strong>Consequences.</strong> What gets easier because of this decision, what gets harder, and what you’re accepting as a trade-off.</li>
</ol>

<p>That’s it. You store them in the code repository next to the code they describe, number them in order, and never delete them. When a decision changes, you write a new ADR that supersedes the old one.</p>

<h2 id="why-it-works">Why it works</h2>

<p>ADRs succeed where most architecture documentation fails, for a few reasons:</p>

<ul>
  <li><strong>They’re small.</strong> One decision, one page. It takes 20 or 30 minutes to write, which is about the same budget I argued for in the original documentation post.</li>
  <li><strong>They capture the <em>why</em>.</strong> Code tells you what the system does. Diagrams tell you how it’s structured. Almost nothing tells you <em>why</em> it’s that way, and the why is what new team members, auditors, and your future self need most.</li>
  <li><strong>They don’t go stale.</strong> Most documentation is a description of the current state, so it starts to rot the moment the system changes. An ADR describes a decision at a point in time. It stays true even after it’s superseded, because it records what you decided and why, then.</li>
  <li><strong>They live with the code.</strong> No file share, no wiki nobody visits. They’re reviewed in the same pull requests and versioned in the same history.</li>
  <li><strong>They slow you down just enough.</strong> Writing down the context and consequences forces you to think about them. More than one “obvious” decision has fallen apart halfway through its own ADR.</li>
</ul>

<h2 id="how-adrs-fight-complexity">How ADRs fight complexity</h2>

<p>This is the part that matters most for this blog. ADRs are one of the best tools I know for keeping complexity in check.</p>

<p><strong>They make complexity spending visible.</strong> Every new database, framework, or integration pattern should come with an ADR. Suddenly you can see your <a href="/2026/03/your-organization-has-a-complexity-budget/">complexity budget</a> being spent, one decision at a time, with a reason attached.</p>

<p><strong>They stop the same argument from coming back.</strong> How many hours has your team spent re-debating a decision made two years ago because nobody remembered why it was made? With an ADR, the conversation starts at “here’s what we knew then; has anything changed?”</p>

<p><strong>They make subtraction safer.</strong> <a href="https://fs.blog/chestertons-fence/">Chesterton’s Fence</a> says don’t remove something until you know why it’s there. ADRs are the note left on the fence.</p>

<p><strong>They pair well with AI-assisted development.</strong> When a growing share of code is written by AI tools, recording the human reasoning behind the architecture becomes more important. An ADR is also great context to give those tools, so they follow your decisions instead of quietly overriding them.</p>

<h2 id="getting-started">Getting started</h2>

<p>Don’t turn this into a program. That’s how good ideas become evil documentation. Instead:</p>

<ol>
  <li>Create a <code class="language-plaintext highlighter-rouge">docs/adr</code> folder in one repository.</li>
  <li>Write ADR 0001: “Record architecture decisions.” (Yes, the first decision is to start recording decisions. It’s tradition.)</li>
  <li>Write the next one the next time your team makes a decision someone might later ask “why?” about.</li>
  <li>Review ADRs in pull requests like any other change.</li>
</ol>

<p>If you want templates and tools, <a href="https://adr.github.io/">adr.github.io</a> has a good collection. But honestly, a Markdown file with five headings is all you need.</p>

<p>So, is documentation evil? Not this kind. This kind might be the most useful half hour your team spends all week.</p>]]></content><author><name>Clif Render</name></author><summary type="html"><![CDATA[Back in 2018, I asked whether documentation was the great evil. My answer was “maybe, but it doesn’t have to be.” Good documentation, I argued, is small, useful, and built into the way you already work.]]></summary></entry><entry><title type="html">Your Organization Has a Complexity Budget</title><link href="https://www.battlingcomplexity.me/2026/03/your-organization-has-a-complexity-budget/" rel="alternate" type="text/html" title="Your Organization Has a Complexity Budget" /><published>2026-03-16T13:00:00+00:00</published><updated>2026-03-16T13:00:00+00:00</updated><id>https://www.battlingcomplexity.me/2026/03/your-organization-has-a-complexity-budget</id><content type="html" xml:base="https://www.battlingcomplexity.me/2026/03/your-organization-has-a-complexity-budget/"><![CDATA[<p>Every organization has a budget for money. Most have a budget for headcount. Very few admit they have a budget for complexity, but they all do, and most are overspent.</p>

<p>Here’s what I mean. Your organization can only understand, operate, secure, and change so many things at once. Every system, integration, vendor, programming language, deployment pipeline, and “special case” uses up part of that capacity. Spend more than you have, and the effects show up somewhere else: slower delivery, more incidents, longer onboarding, and the same few people who are always on every escalation.</p>

<p>The authors of <a href="https://teamtopologies.com/">Team Topologies</a> describe this at the team level as <em>cognitive load</em>. A team can only hold so much in its head, and when you give it more, quality drops. I’d argue the same thing applies to the whole enterprise.</p>

<h2 id="how-the-budget-gets-spent">How the budget gets spent</h2>

<p>Complexity spending rarely looks like a big decision. It looks like this:</p>

<ol>
  <li><strong>A one-off exception.</strong> “We’ll run this one on a different database. It’s just one app.” Now you have two database platforms to patch, back up, monitor, and staff.</li>
  <li><strong>An acquisition that never gets integrated.</strong> You bought the company and also bought its stack, its identity provider, and its way of doing things. Five years later, you still have all of it.</li>
  <li><strong>A pilot that never ends.</strong> A proof of concept became production when nobody was looking. It has no owner, no monitoring, and three integrations.</li>
  <li><strong>A vendor product that “does everything.”</strong> It replaced two tools and added forty configuration screens nobody fully understands.</li>
  <li><strong>A reorganization.</strong> New team boundaries that don’t match the system boundaries mean every change now needs three teams to coordinate. (<a href="https://martinfowler.com/bliki/ConwaysLaw.html">Conway’s Law</a> always wins.)</li>
</ol>

<p>None of these is wrong on its own. That’s the trap. Each spend is reasonable, and the total is what hurts.</p>

<h2 id="make-the-budget-visible">Make the budget visible</h2>

<p>You can’t manage a budget you can’t see. Some practical ways to make complexity visible:</p>

<ul>
  <li><strong>Count your nouns.</strong> How many applications, databases, languages, cloud services, integration patterns, and vendors does your enterprise run? Write it down. Track it every quarter. The trend matters more than the number.</li>
  <li><strong>Map ownership.</strong> For every system, who owns it? If the answer is “nobody” or “a team that was reorganized away,” that system is spending budget without anyone accounting for it.</li>
  <li><strong>Measure time-to-understand.</strong> How long does it take a capable new engineer to make a meaningful change? That’s one of the most honest complexity metrics there is.</li>
  <li><strong>Watch your heroes.</strong> If the same three people show up on every incident bridge, they’re holding complexity in their heads that the organization hasn’t absorbed. That’s a liability, not a strength.</li>
</ul>

<h2 id="spend-on-purpose">Spend on purpose</h2>

<p>The goal isn’t zero complexity. Some complexity is the point. It’s where your competitive advantage lives. Dan McKinley’s idea of <a href="https://mcfunley.com/choose-boring-technology">innovation tokens</a> is really a complexity budget with a nicer name. You get a few. Spend them on what makes your business different, and choose boring, proven, shared solutions for everything else.</p>

<p>A few rules of thumb I’ve found useful:</p>

<ol>
  <li><strong>New things should replace old things.</strong> When you bring in a new platform, make retiring the old one part of the project. If it isn’t in scope and funded, it won’t happen.</li>
  <li><strong>Standardize the boring parts.</strong> Logging, identity, deployment, monitoring, and data integration should have one obvious, paved way. Spend your creativity elsewhere.</li>
  <li><strong>Make exceptions expensive. Not impossible, just visible.</strong> An exception should come with an owner, a reason, and a review date.</li>
  <li><strong>Budget for paying it down.</strong> Set aside real capacity every quarter for removing things. It won’t happen in leftover time, because there is no leftover time.</li>
</ol>

<h2 id="the-architects-job">The architect’s job</h2>

<p>If you’re an enterprise architect, this is your job, whether or not it’s in your job description. You’re the one person whose scope covers the whole enterprise. You can see that the budget is overspent when each individual team can only see its own line item.</p>

<p>Making that budget visible, and helping leadership spend it on purpose, may be the most valuable thing an architecture practice can do. It’s certainly more valuable than another reference architecture nobody reads.</p>]]></content><author><name>Clif Render</name></author><summary type="html"><![CDATA[Every organization has a budget for money. Most have a budget for headcount. Very few admit they have a budget for complexity, but they all do, and most are overspent.]]></summary></entry><entry><title type="html">Simple Isn’t Easy (And That’s the Point)</title><link href="https://www.battlingcomplexity.me/2026/02/simple-isnt-easy/" rel="alternate" type="text/html" title="Simple Isn’t Easy (And That’s the Point)" /><published>2026-02-09T13:00:00+00:00</published><updated>2026-02-09T13:00:00+00:00</updated><id>https://www.battlingcomplexity.me/2026/02/simple-isnt-easy</id><content type="html" xml:base="https://www.battlingcomplexity.me/2026/02/simple-isnt-easy/"><![CDATA[<p>Here’s a conversation I’ve had more times than I can count.</p>

<p>“Let’s keep it simple and just use the platform we already have.”</p>

<p>Sometimes that’s exactly the right call. But often, when you dig in, “simple” means “the thing I already know.” The platform we already have is going to be stretched, customized, and wired into places it was never meant to go. It’s easy to start with. It isn’t simple.</p>

<p>Rich Hickey made this point better than anyone in his talk <a href="https://www.infoq.com/presentations/Simple-Made-Easy/">Simple Made Easy</a>. If you haven’t watched it, stop reading and go watch it. I’ll wait.</p>

<h2 id="two-different-words">Two different words</h2>

<p>Hickey’s distinction goes like this:</p>

<ul>
  <li><strong>Simple</strong> is about <em>the thing itself</em>. Something simple does one thing and isn’t tangled up with other things. You can understand it on its own.</li>
  <li><strong>Easy</strong> is about <em>you</em>. Something easy is near at hand and familiar. You already know how to do it.</li>
</ul>

<p>Simple is objective. You can look at a design and count how many concerns are braided together. Easy is relative. What’s easy for your team may be hard for mine.</p>

<p>The trouble is that we use the words as if they meant the same thing, and in a design review that’s dangerous. “Easy” gets the credit that belongs to “simple,” and complexity sneaks in disguised as convenience.</p>

<h2 id="where-this-shows-up">Where this shows up</h2>

<p>Once you see the distinction, you’ll see it everywhere:</p>

<ol>
  <li>
    <p><strong>The Swiss Army platform.</strong> The CRM is also the case-management system, the document repository, and the workflow engine. Each extension was easy, since the platform was already licensed and the team knew it. The result is one system tangled up with four business domains, and nobody can upgrade it without a six-month regression effort. (I called this “overloading the switchboard” in my <a href="/2018/10/10-warning-signs-when-dealing-with-vendors/">vendor warning signs</a> post.)</p>
  </li>
  <li>
    <p><strong>The shared database.</strong> Letting the new service read straight from the old service’s tables is easy. No API to build, no contract to negotiate. It’s also one of the most complicated things you can do, because now two systems are tied together through a schema neither one owns.</p>
  </li>
  <li>
    <p><strong>The framework of the month.</strong> Adopting the new framework your senior developer is excited about can feel easy. There’s lots of energy and a slick getting-started guide. But you’ve added a new concept to the portfolio that everyone after them will have to learn. Dan McKinley calls this spending an <a href="https://mcfunley.com/choose-boring-technology">innovation token</a>, and you don’t get many.</p>
  </li>
  <li>
    <p><strong>The “temporary” integration.</strong> The nightly file drop to an FTP server was the easy answer in 2014. It’s still running. It now feeds three downstream systems, and the only documentation is a comment in a cron job.</p>
  </li>
</ol>

<p>In every case the easy option was easy <em>at the start</em>, and the costs came later. Easy is something you feel during the decision. Simple is something you benefit from for years afterward.</p>

<h2 id="simple-usually-costs-more-up-front">Simple usually costs more up front</h2>

<p>This is the part people don’t like hearing. Simplicity usually costs more at the start.</p>

<p>Pulling two concerns apart means designing an interface. Building an API instead of sharing a table means agreeing on a contract. Choosing a dedicated tool over extending the platform you already have means a procurement process. Writing the small, focused module means thinking harder about where the boundaries go.</p>

<p><a href="https://www.cs.unc.edu/techreports/86-020.pdf">Fred Brooks</a> split complexity into <em>essential</em> complexity, which comes with the problem, and <em>accidental</em> complexity, which we add ourselves. Most accidental complexity comes from choosing easy over simple, over and over, one reasonable decision at a time.</p>

<h2 id="questions-to-ask-in-your-next-design-review">Questions to ask in your next design review</h2>

<p>You don’t need a new methodology for this. You need better questions:</p>

<ul>
  <li><strong>“Is this simple, or is it just familiar?”</strong> Make people say which one they mean.</li>
  <li><strong>“What is this tangled up with?”</strong> List everything the component has to know about. The shorter the list, the simpler the design.</li>
  <li><strong>“Could we explain this to a new hire in five minutes?”</strong> If not, why not? Is it the problem that’s complicated (essential), or the solution (accidental)?</li>
  <li><strong>“What does this cost in year three?”</strong> Easy choices are cheap in year one. Simple choices are cheap in year three.</li>
  <li><strong>“If we had to remove this, how hard would it be?”</strong> Simple things are easy to take out. Tangled things never leave.</li>
</ul>

<h2 id="pragmatism-still-rules">Pragmatism still rules</h2>

<p>None of this means the familiar choice is always wrong. Familiarity has real value. A team that deeply understands a boring tool will often beat a team fighting with a “better” one. Sometimes simple and easy point to the same answer, and that’s a great day.</p>

<p>The goal isn’t to reject easy. The goal is to stop letting easy pass itself off as simple. Call each one by its name, weigh them honestly, and then choose on purpose.</p>]]></content><author><name>Clif Render</name></author><summary type="html"><![CDATA[Here’s a conversation I’ve had more times than I can count.]]></summary></entry><entry><title type="html">Battling Complexity, Again</title><link href="https://www.battlingcomplexity.me/2026/01/battling-complexity-again/" rel="alternate" type="text/html" title="Battling Complexity, Again" /><published>2026-01-12T13:00:00+00:00</published><updated>2026-01-12T13:00:00+00:00</updated><id>https://www.battlingcomplexity.me/2026/01/battling-complexity-again</id><content type="html" xml:base="https://www.battlingcomplexity.me/2026/01/battling-complexity-again/"><![CDATA[<p>A few years ago I wrote a blog called Battling Complexity. It covered quality, documentation, vendors, and what enterprise architects actually do all day. Then life got busy, the original site went dark, and the articles that survived ended up on LinkedIn.</p>

<p>A lot has changed for me since then. I wrote those posts as an enterprise architect. Since then I’ve moved into IT leadership. Today I’m Vice President, Information Technology, and I lead IT, information security, and privacy for my company. That’s a different view of the same problem. As an architect, I saw complexity in the designs. Now I see it in the budget, in the risk register, in audit findings, and in the attack surface. Every system I’m responsible for has to be paid for, secured, and accounted for, and every unnecessary one makes all three jobs harder.</p>

<p>If anything, I believe in simplicity more now than I did then. So I’m bringing the blog back.</p>

<p>Here’s why. Since 2018 nearly everything about how we build technology has changed. We went all-in on the cloud. We split monoliths into microservices, and some of us are now merging them back together. Platform engineering became a job title. And now AI writes a growing share of our code. If you had told me in 2018 that I’d review pull requests written by a machine, I’d have asked which vendor was selling it. (Old habits.)</p>

<p>Through all of that, one thing hasn’t changed: <strong>complexity is still the thing that kills us.</strong></p>

<p>It doesn’t happen in a dramatic outage or a failed launch. It happens slowly. It’s the integration nobody remembers building. It’s the approval process that takes three times longer than the change. It’s the platform chosen for the conference talk instead of the problem. It’s the service that “only Dave understands,” and Dave left in 2023.</p>

<h2 id="what-i-believe">What I believe</h2>

<p>I’ll put my cards on the table. These are the ideas that run through everything I’ve written and everything I plan to write:</p>

<ol>
  <li><strong>Complexity is the default. Simplicity takes work.</strong> Systems never get simpler on their own. Every reasonable decision adds a little weight, and if nobody pushes back on purpose, it piles up.</li>
  <li><strong>The best architecture is the one your team can explain.</strong> If you need a 40-slide deck to describe how a request flows through your system, the deck isn’t the problem.</li>
  <li><strong>Quality is more than “it works.”</strong> Functionality is one dimension out of many. Maintainability, reliability, and security are what you pay for later.</li>
  <li><strong>Simple systems are safer systems.</strong> You can’t protect what you don’t understand. Every system, integration, and copy of data you don’t need is risk with no upside.</li>
  <li><strong>Leaders create complexity faster than engineers do.</strong> Every new initiative, team, tool, and reporting line adds to the load. Leaders also have the most power to take things away.</li>
  <li><strong>Pragmatism beats purity.</strong> Simplicity isn’t a religion. Sometimes the complicated answer is the right one. The goal is complexity you chose on purpose, not complexity you drifted into.</li>
</ol>

<h2 id="what-youll-find-here">What you’ll find here</h2>

<p>I’ve brought back a handful of the original articles, lightly edited, because I think they’ve held up. Vendors still show up with new-car smell and silver bullets. Developers still claim that Agile means no documentation. And most teams still test only one dimension of quality.</p>

<p>There will be new writing too, about what simplicity looks like now: how to budget for complexity, why leaders should get better at subtraction, how to write documentation that people actually read, how architecture stays tied to the business, and what happens when AI makes producing code nearly free while understanding it stays just as expensive.</p>

<p>I’m calling these posts <strong>Clif’s notes</strong>. If you’re old enough to remember the yellow-and-black study guides, you know the idea: the short version, the parts that matter, and nothing you don’t need. That seems like the right format for a blog about simplicity.</p>

<p>I’ve also put together a <a href="/reading/">reading list</a> of the people who have shaped how I think about this: Rich Hickey, Fred Brooks, Dan McKinley, Martin Fowler, Gregor Hohpe, and others. Most of what I know about simplicity, I learned by reading people who said it better than I could.</p>

<p>If any of this sounds familiar, welcome back. If it’s new to you, welcome. Let’s go make something simpler.</p>]]></content><author><name>Clif Render</name></author><summary type="html"><![CDATA[A few years ago I wrote a blog called Battling Complexity. It covered quality, documentation, vendors, and what enterprise architects actually do all day. Then life got busy, the original site went dark, and the articles that survived ended up on LinkedIn.]]></summary></entry><entry><title type="html">There’s More to Quality Than You Think</title><link href="https://www.battlingcomplexity.me/2018/11/theres-more-to-quality-than-you-think/" rel="alternate" type="text/html" title="There’s More to Quality Than You Think" /><published>2018-11-01T12:00:00+00:00</published><updated>2018-11-01T12:00:00+00:00</updated><id>https://www.battlingcomplexity.me/2018/11/theres-more-to-quality-than-you-think</id><content type="html" xml:base="https://www.battlingcomplexity.me/2018/11/theres-more-to-quality-than-you-think/"><![CDATA[<p>Whether you’re purchasing new software for your enterprise or developing it in house, quality should be a primary factor in your evaluation and acceptance process.</p>

<p>If you’re making a purchase then you have many different criteria to consider in selecting the right product. Some people look for cheap. Others look for durability. Still others, like me, look for quality. In my opinion, any time you’re looking to purchase a product or service for your enterprise, quality should be your main concern.</p>

<p>But how, exactly, do you measure quality? Thanks to the International Organization for Standardization, we do, in fact, have a way. It’s called ISO/IEC 25010:2011, or, as I like to call it, good old “Twenty-Five Ten.”</p>

<p>Twenty-Five Ten is an international standard for the evaluation of software quality. I have become a huge fan of this standard. It can be an incredibly useful tool both for evaluating software for potential purchase and for evaluating software that you develop for your own customers.</p>

<p>The standard defines quality by dividing it into eight distinct characteristics:</p>

<ol>
  <li><strong>Functionality.</strong> This characteristic is just what it seems. Does the system meet your needs? Does it do what it should do, and do it completely?</li>
  <li><strong>Efficiency.</strong> How efficient is the application? Do you have performance SLAs? If so, can this product meet them? What about transaction load? Can the application handle the number of concurrent connections and concurrent users that your organization requires? If the application requires data loads or refreshes, how long do they take to run? What kinds of impact do those batch jobs have on other applications or services?</li>
  <li><strong>Compatibility.</strong> How well does it integrate with other systems in its ecosystem? Does it have an API? If so, is the API robust and fully functional? Is operating system compatibility an issue? What about database compatibility? Does it support your preferred database platform?</li>
  <li><strong>Usability.</strong> What is its user interface like? Is it intuitive, easy to understand, attractive? How much training is required to use it? Do people pick it up easily, or is advanced training a requirement?</li>
  <li><strong>Reliability.</strong> How stable is the application? How much work will it take for the application to meet your DR requirements? Is the application fault tolerant? Load balanced? If it needs to be load balanced, can it be?</li>
  <li><strong>Security.</strong> Will the application meet your security guidelines? Is data confidentiality adequate? Are the proper auditing controls and reporting capabilities available?</li>
  <li><strong>Maintainability.</strong> How easily can it be customized for your organization? Do those customizations remain in place after upgrades? How are patches applied? Is it easy to do or hard? How are backups made? How easy is it to test the application before and after upgrades?</li>
  <li><strong>Portability.</strong> How easy is it to set up and maintain multiple environments? Can changes be easily migrated between environments? Is DevOps on your roadmap? If so, does this application support continuous delivery and automated deployments?</li>
</ol>

<h2 id="using-it-with-vendors">Using it with vendors</h2>

<p>Keep in mind that while the points above focus on determining the suitability of a vendor’s application for purchase by your organization, there are plenty of other ways to use the standard. Software vendors can maintain this information and share it proactively as an assessment of the quality of their offerings.</p>

<p>In the past I have asked potential software vendors to tell me how they maintain compliance with this standard or, if they don’t currently use it, what techniques they use that could be mapped to it. Since all of the considerations above are valid, they should be able to detail what they do to make sure that their offering addresses them.</p>

<p>In one case, a software vendor let me know that they weren’t bound by ISO standards and didn’t have to answer the question. The response I wanted to make was, “Then we don’t have to buy your product.”</p>

<p>Another vendor went to great lengths to map all of their internal practices and methodologies to these characteristics for us. In the end, they were actually quite grateful for the question, as it helped them do a better job of quantifying the quality of their product. We did end up purchasing their product and were very happy with the purchase.</p>

<p>Another potential use of these characteristics was presented to me recently when a peer was sharing the progress of their recent RFP process. They had looked at several different products and had decided on a front runner. The problem with that product, however, was that peer reviews indicated concerns with certain parts of it. The vendor claimed that the new version of the product had addressed all of those issues, and the demonstrations did seem to support their assertion. To confirm this, the purchase could be made contingent on the vendor passing an external quality assessment.</p>

<p>There are external groups that provide this type of service. One such group is <a href="https://www.it-cisq.org/">CISQ, the Consortium for IT Software Quality</a>. They have used these characteristics to build a quality certification program that includes a metrics-based assessment methodology that can give a potential purchaser peace of mind. If the vendor’s new version and processes achieved an acceptable rating then the purchase could continue and everyone would get what they want. If not, the vendor would know exactly which areas they needed to improve. Again, a win-win.</p>

<h2 id="using-it-on-your-own-teams">Using it on your own teams</h2>

<p>The use case that I find the most interesting, however, is as a quality assessment tool for internal development. Whether you are an enterprise with many separate development teams or a software vendor with a large product base to maintain, this is a tool that could undoubtedly be used to improve the quality and reliability of the output of those teams. It is your choice whether to use these characteristics as a general guideline and develop your own framework, or to purchase a product like CAST to automate the enforcement of those quality rules.</p>

<p>One final thought for you on quality. The list above gives eight primary characteristics that make up the overall quality of an application or service. Most people test only the first one: functionality. If you’re someone who is concerned with quality and yet you are among those who currently only test functionality, just think about how much you are missing.</p>

<hr />

<p><em>2026 update: ISO revised the standard as ISO/IEC 25010:2023. It now has nine characteristics. Safety was added, Usability became Interaction Capability, and Portability became Flexibility. The point of this essay still stands: if you only test functionality, you’re testing one characteristic out of nine.</em></p>]]></content><author><name>Clif Render</name></author><summary type="html"><![CDATA[Whether you’re purchasing new software for your enterprise or developing it in house, quality should be a primary factor in your evaluation and acceptance process.]]></summary></entry></feed>