One bottleneck at a time

Leave a comment
Growth

This month, we’re going to think about our teams, departments, and organisations as systems. Specifically, we’re going to consider how we can increase throughput and output by identifying and removing the biggest bottleneck at any given time.

This might sound obvious, but it’s surprisingly rare in practice. Most leaders spread their effort across many initiatives simultaneously, making partial progress on everything and completing nothing. The insight we’ll explore is that systems don’t work that way: there’s always one constraint that matters most, and focusing elsewhere is, at best, wasted effort.

Here’s what we’re going to cover:

  • We’ll start by looking at a pattern I call the scattered leader, which is the well-intentioned but ineffective approach of fighting on multiple fronts at once.
  • Then we’ll dig into the core insight from Eliyahu Goldratt’s The Goal and the Theory of Constraints: every system has a single primary bottleneck, and improving anything else doesn’t improve the system.
  • We’ll look at a practical example of what happens when you put your best people on unglamorous but critical work.
  • And we’ll talk about the courage required to subordinate everything else to fixing the bottleneck.

If you find this topic interesting, here are some complementary articles from the archive:

  • The beauty of constraints reframes constraints as tools rather than obstacles.
  • The contribution curve explains why hiring doesn’t instantly help, since new people are net-negative contributors initially.
  • Delegation covers how spreading knowledge reduces single points of failure.

But for now, let’s focus on bottlenecks. Let’s get going.

The scattered leader

Imagine a leader who’s looking at their organisation and seeing a lot of problems. Deployments are slow and painful, so the team avoids them. The hiring pipeline has stalled, with candidates stuck waiting for interviews. Code reviews are backing up, with PRs sitting for days before anyone looks at them. And there’s that auth system refactor that’s been on the roadmap for six months.

So they do what feels like the responsible thing: they start working on all of it. Some time spent researching CI improvements, a meeting with talent about hiring, a push to get reviews moving, leading a technical spike on the auth system. Progress is being made on everything, but nothing is getting finished.

Sound familiar?

This approach feels diligent, and it certainly looks proactive to those around you, because people and organisations tend to feel that being at capacity is the metric for success. But in an era of flattened organisations where managers are under high scrutiny, we need to focus deeply on our impact rather than our busyness.

The Great Flattening has seen companies like Microsoft, Amazon, and Meta cut management layers en masse, with middle managers making up 29% of all layoffs in 2024. In this environment, even though partial progress means saturation of your time, optimising for busyness rather than impact is going to lead to failure.

So what’s the alternative? It’s actually quite radical, because it requires you to do one thing at a time in a world that rewards the appearance of doing many things at once. It starts with thinking about your team, department, or organisation as a system with inputs and outputs, and systems have a particular property: at any given time, there is only one bottleneck that is limiting the throughput of the whole thing.

You can work on improving other parts of the system concurrently, but it won’t make any difference to the overall output. In fact, it often makes things worse by creating pile-ups of work waiting at the bottleneck. The discipline here is sequential focus: find the single biggest constraint, put all of your effort into removing it, then find the next one. It sounds simple, but it goes against every instinct we have as leaders to be seen as busy and responsive to all problems.

Finding the bottleneck

Like all good ideas, this idea isn’t new, and we can learn a lot from studying history. As mentioned in the introduction, it comes from Eliyahu Goldratt’s The Goal, a business novel from 1984 that introduced the Theory of Constraints.

The core insight is simple: every system, whether it’s a factory or a software team, has exactly one constraint that limits its overall throughput at any given time. Improving anything other than that constraint doesn’t improve the system. It just creates inventory, and inventory is bad because it creates blockages.

Goldratt outlines five focusing steps:

  1. Identify the constraint.
  2. Make sure it’s not being wasted on unnecessary work.
  3. Subordinate everything else to it.
  4. Elevate it if needed (invest to increase its capacity).
  5. Repeat.

The key insight is that this is a cycle, not a one-time fix.

Goldratt illustrates this with a factory analogy. Imagine three stations on a production line: Station A builds components at 100 units per hour, Station B assembles them at 10 units per hour, and Station C packages them at 100 units per hour. If you invest in making Station A faster, pushing it to 150 units per hour, you don’t get more output. You get a pile of components waiting at Station B. You can already see what needs to be done to improve this system.

In software teams, this pattern shows up everywhere: pull requests pile up waiting for review, features sit in staging for weeks waiting for QA, decisions stall because they’re waiting for leadership sign-off, and engineers are blocked because specs aren’t ready. Where you find things waiting is where you also find the bottleneck, and the question you need to ask yourself and your team is simple: what are we waiting on right now?

The deployment bottleneck

Let’s work through an example. Imagine that in your organisation, deployments are slow, painful, and risky. Because of past incidents, you’ve increased the number of manual checks and gates for every deploy, and now you’re only deploying once every two weeks. Engineers see it as a platform problem, while the platform team sees it as an engineering problem, since they need to up their quality and stop breaking things. Therefore, it sits unfixed: it’s not glamorous work, it’s not anyone’s specific responsibility, and the company is afraid of change in case things break even more.

Now imagine that you have oriented your department towards fixing bottlenecks as the most important priority, and you now recognise deployment as THE constraint. Everything else in the system is waiting on it, so you make a decision: you take some of your best engineers, the ones who would normally be working on the most exciting product features, and you put them on fixing the deployment pipeline.

This feels counterintuitive, and you’ll face resistance, because we naturally want to point our highest performers at the sexiest problems, not the ugliest ones. But constraints are often the ugliest problems, and changing this cultural instinct is part of the work of leadership, because high performers turn ugly work into beautiful work.

What happens next?

Assuming that you are offering the right empowerment and environment, your high performers bring their standards to the work. They automate the manual checks. They improve test coverage so that failures are caught earlier. They measure the length of time that it takes for pipelines to run and shave off minutes by parallelising automated tests. They make it so that anyone can deploy by just pressing a button.

Within weeks, the team is deploying multiple times a day instead of once a fortnight. Deploys become fast, reliable, and fundamentally boring. Now an interesting phenomenon occurs: the bottleneck moves elsewhere, perhaps to product specs or code review, and that’s the signal that it worked.

Now you find the next constraint and do it again.

The courage to subordinate

We mentioned subordination earlier in the five focusing steps. It means that once you’ve identified the constraint, everything else in the system must be reallocated to it. This is the justification for what we described above: taking your best engineers off feature work and pointing them at the bottleneck. Subordination gives you the framework to create that environment and defend that decision.

In practice, it means telling the fast parts of the system to slow down, or redirecting their effort towards helping the bottleneck. If your developers are producing more code than your reviewers can handle, the answer isn’t to hire more engineers immediately. It’s to have some developers stop writing new code and start helping with reviews, or building tooling that makes reviews faster.

This takes courage because it looks wrong to some company leadership. You’ll face questions: “Why isn’t our best engineer shipping features?” “Why is the team’s velocity down this sprint?” “The team looks less productive on paper.” I’ve had exactly these conversations, and the discomfort is real. You’ll need to defend the decision upward, explaining that short-term optics matter less than long-term throughput. I’ve written before about the tragedy of the common leader and the importance of long-termism in leadership. This is one of those cases.

The alternative, which is busy hands creating more inventory that piles up at the bottleneck, feels productive but achieves nothing. We’re not trying to make everyone busy. We’re trying to optimise the flow of value through the system.

Your turn

Now it’s your turn. I’d encourage you to spend five minutes thinking about your team, your department, and your company. At each level, write down what you think the biggest bottleneck is to going faster right now. Then write down what you could do actionably to fix it.

At the team level, perhaps your test suite is slow and flaky, and all of the onus is being put on the QA engineer to fix it while the other engineers don’t think it’s their problem. The action here is to have all of the engineers pivot their time to speeding up the test suite together, rather than leaving it to one person.

At the department level, perhaps your hiring pipeline has stalled, with roles open for months and not enough candidates coming through. The action here is to get everyone to step outside of their usual role. For example, all engineers could spend a morning together every week sourcing people online, both from their networks and through reachouts on LinkedIn.

At the company level, perhaps leadership sign-off on major decisions is slow, sometimes taking weeks for people to get back. The action here is to focus all effort on speeding up decisions by building a process to make sure that the most important things are shown to leadership every single day, and putting in place a 24-hour turnaround time for them to say yes, no, or to request more information.

So, what’s your bottleneck at each level? And what could you do about it? Could you start making progress on it tomorrow?

Wrapping up

The scattered leader fights every battle and wins none. The focused leader finds the single constraint and removes it, then does it again. It’s a simple discipline, but a hard one to maintain in a world that rewards busyness over impact. One bottleneck at a time: that’s all it takes.

Until next time.

Use it or lose it

Leave a comment
Growth

This month, we’re going to continue exploring the mental models that Charlie Munger covered in Poor Charlie’s Almanack, a compendium of 11 talks given throughout his life. The book culminates in one final, bumper-sized talk that is a collection of over 20 mental models that he attributed to his success.

Last month’s article covered one of these models: “invert, always invert”, which is a method for thinking about problems by flipping them on their head and considering the worst that could happen, and then ensuring that you don’t ever make that the case. It turns out that doesn’t just work for investing but it also works well for the kinds of problems that we face in software engineering: designing resilient systems, planning rollouts, and ensuring that you have a backup plan in case something goes wrong.

This month, we’re going to look at another one of these mental models: “use it or lose it.” This mental model is becoming increasingly relevant as AI becomes more ubiquitous in our lives.

Here’s what we’re going to cover in the article:

  • We’ll start with an introduction to the use-it-or-lose-it model, looking at real examples ranging from playing an instrument to doing exercise.
  • Then we’ll cover how “use it or lose it” has affected managers for a long time, and how AI may be potentially compounding that effect.
  • We’ll then consider whether there are ways we can use AI more intentionally to potentially preserve our critical thinking skills.
  • And then, to finish, we’ll see how AI may actually be able to pave the way to us becoming broader generalists as managers, in a manner that supports our desire to be in the details and thrive in today’s flatter organizations.

So, as we begin to approach the end of 2025, let’s think about ways in which we can stay sharp in 2026 and beyond.

Practice maintains perfection

The tenet of use it or lose it is best summarized by the quote from the Polish pianist Ignacy Jan Paderewski: “If I miss one day’s practice, I notice it. If I miss two days, the critics notice it. If I miss three days, the audience notices it.”

In his 11th essay, Munger reflects, in his 80s, on what he remembers since school: effectively only that which he has used daily since then. In the world of investing, Charlie frequently used the basics of mathematics to real balance sheets, but all of the advanced calculus that he was once proficient in had long been forgotten.

A lack of daily practice leading to skill decay is a recurring theme for managers. One of the most common worries when moving into a managerial role is losing the hands-on coding skills that got them into the role in the first place.

As such, diligent managers invent ways to stay close to the details, such as pair programming, continuing code review, or carving out time to fix bugs or contribute to smaller features. However, as many of you know, this can be a challenge to maintain long term. Daily busywork work can become like gas: it expands to fill the size of the tank. As such, managers who interview for new roles often have to go into an intense period of studying to prepare for coding challenges.

However, although programming skills may diminish through underuse, managers do gain more opportunity to practice the other elements of their craft on a day to day basis, such as planning and strategy, coaching, and leading.

Accountability for one or more teams requires a continual sharpening of these skills, so the pre-AI manager could more comfortably let go of coding as it was replaced by the honing of others.

But, as more of us offload our strategic thinking and planning to AI (and I too have written plenty of material on methods to do this), there is a risk of these core cognitive managerial skills diminishing too, and as such, we need to be careful. We mustn’t become passengers in our own orgs.

The science of skill decay

We see use it or lose it in action after finishing formal education, and we also see it in exercise: cardiovascular fitness drops off rapidly if we don’t workout regularly, and muscles require regular training to maintain strength.

The same is true for our cognitive skills. A 2011 study published in Science on “The Google Effect” on memory showed that our brains optimise for where to find information, rather than the information itself. Similarly, a 2021 study found that increasing offloading behavior correlates with decreasing memory accuracy. Correlatively, a 2020 study in Nature contrasted how heavy GPS users show decline in spatial memory use, whilst London taxi drivers, i.e. those expected to have “the knowledge”, instead, show growth in that region.

Although it is too early for longterm studies on AI usage, a 2025 MIT Media Lab study showed that despite increased efficiency in students using ChatGPT compared to those that didn’t, that same group of students showed weaker neural connectivity and cognitive depth.

Interestingly, on the Dwarkesh Podcast, Andrej Karpathy explained that he programmed nanochat almost all by hand, with only some minimal tab-autocomplete as assistance. Although much of what he was building was “off the distribution curve” of what LLMs are trained on (since LLMs can be seen as a compression of the internet, and nanochat is novel work), he also stated that programming manually was the only way to truly learn, and that others wanting to learn from what he wrote should also follow the same hand-coding process.

Collating the themes above, we should be mindful of how we lean into AI as a thinking partner as managers and leaders. Although we may be hardwired to offload work and strive for efficiency, we need to be careful at not diminishing the core cognitive critical thinking skills that are at the heart of our craft. Losing our coding chops was bad enough; we don’t want to lose these skills too.

Inversion: designing an increasingly ineffective leader

Since we looked at the “invert always invert” maxim in the last article, perhaps we could call upon it here to design how we could become ineffective leaders in the current times.

So, considering what could be the worst that could happen, let’s think about how you could guarantee that you could become obsolete as a leader in 12 months:

  • Rule number one: Stop being close to the details of what you’re building; specifically, the code and the architecture that is being designed within your team. Fully delegate all of the decisions to your team, so that you rely on what people say to you in order to understand what’s going on. You pay them to do the work, so let them get on with it.
  • Rule number two: Do not use any of your time to stay on top of the latest AI developments. Instead, let your team tell you what the latest and greatest is, and don’t spend any time yourself trying out new models or tools. Why would you need to if you’re a manager?
  • Rule number three: Become a “reviewer” rather than a participant to all of the activity in your team. Let your team get on with things entirely autonomously, and simply review what is happening at meetings and also in performance reviews.
  • Rule number four: Do not regularly engage in any first principles or critical thinking, either with humans or AI. Either let your team tell you what needs to be done or fully offload decisions to AI that you have to make. After all, you have others to do the work for you.

The insight here, by looking at this through the lens of inversion, is that if you are doing all of these things, you are actively choosing obsolescence of your own impact. You are becoming a passenger, and we know that in the time of increased efficiency and flattened orgs, managers that are passengers aren’t going to last long.

Additionally, the other important insight, other than your immediate performance in your role, is that you are not engaging in any cognitively difficult activities. When you subtract practice of cognition through critical thinking and coding, then what actually is left? What is the purpose of your role, and perhaps more crucially, how do you think your skills are going to fare in the next three, five, and ten years if this is your default mode?

We need to think about how to avoid this path at all costs. And hopefully, by doing so, it will mean that not only will you be an effective manager, it will mean that there is nothing for you to lose, as per the central mental model of this article.

An antidote

Building on our inverted case, we need to offer an antidote that solves each of those four rules. This antidote should be such that it means that you can have opportunities to keep your coding skills sharp, which means you are close to the details and get to practise contributing to what your team is building in more depth, but it also gives you ample opportunity to sharpen your cognitive abilities, offloading the right work to AI.

Rule number one: a minimum effective dose of coding

We know that as managers we (mostly, there are some exceptions) cannot be on the critical path for shipping features. It typically ends up slowing the team down. However, that doesn’t mean we have to stop coding entirely. We just need to find the minimum effective dose to keep our skills alive.

There are a number of ways to do this. One is building internal tools, scripts, or prototypes that help the team but aren’t blocking production. For example, I built a brag doc generator that I could use to find the descriptions and comments from issues that I’d been contributing to on Linear, and then use a local LLM via Ollama to summarise it for me. This was a fun activity that only took me around an hour with Claude Code.

Another is pair programming with your team. This is a high-leverage activity that gets you close to the workflow (the friction of the tools, the build times, the environment quirks) without the pressure of delivering a feature solo. It keeps the “finger feel” of the craft real. It works even better remotely than it does in real life, and it helps you really see what your team is building.

And of course for those of you that love programming, there’s always the evenings and weekends for hobby projects.

Rule number two: get your hands dirty with AI

Do not outsource your understanding of frontier tools to others. Take an active and passionate interest in the tools that are reshaping our industry. As hopefully I’ve shown in previous articles that show how to improve your strategic thinking and decision-making with LLMs, AI is not just for engineers, it’s for everybody. I couldn’t work without it now. You too should become well-versed in the latest and greatest through personal hands-on experience.

Instead of just reading articles and opinions about what is best, find out for yourself. Schedule weekly “lab time” (even just one hour) to test new AI tools personally. Understand the different modes that they offer from prompting to agentic interfaces to the capabilities of the different models, and which ones work best for writing and coding and which IDE you prefer. Keep that preference up to date through constant trial and iteration. For example, what exactly is different between Antigravity and Cursor other than the fact that Antigravity has less available models? How different is Antigravity’s agent mode compared to Codex’s? Try them out and see.

Reclaim the joy of creation without the pressure of production. This is how you stay ahead of the curve, rather than having it explained to you. Additionally, when your team sees that you’re getting as stuck as they are, it only builds respect, and additionally, they’ll only be more likely to trust your judgement when it comes to deciding which tools the team should use and how.

Rule number three: become an active participant

Fight hard against the trope of the manager as the approver of all things. Move from being a “reviewer” to a “participant” in your team. Force yourself to ask at least one question on a PR or design doc that requires you to open the IDE, diagramming tool, or query the logs to answer.

I call this “diving down the stack.” The idea is that you try as a manager to go one or two levels deeper than your team would typically expect. It should surprise them. Again, this helps you build your confidence in what is coming out with your team (you see and care about the details) but also builds trust and respect with those that are building for you (“wow, they see and care about the details!”).

If you can’t quite find the time and space to dive down the stack technically regularly, then at least dive down the stack with logic and reasoning. There are many mental models that you can apply here to engage in productive conversations with your engineers that will improve the work that your team is doing and fundamentally ensure that you’re utilising your cognitive ability.

For example, in a previous article, the beauty of constraints, we outlined a number of techniques that you can actively wield to encourage your team to do less unnecessary work, whilst also ensuring that you are completely across the constraints, requirements and trade-offs of the work that you’re leading.

Becoming an active participant in your team sometimes means doing the things that don’t scale. However, doing the things that don’t scale is the way to be successful as a manager today. You need to understand the code that’s being shipped, the architectural decisions, the metrics, requirements, and the constraints. But the good news is, in terms of use it or lose it, if you are doing the things that don’t scale, you’re keeping yourself incredibly sharp at the same time.

Rule number four: the “thinking first” protocol

Finally, and importantly, we need to think about how we don’t offload all of our cognitive ability to AI. Whilst it’s true that there are no long-term studies about the effect of AI on our cognition, as seen by the orthogonal studies that are referenced at the top of the article, it would be wise to keep practising our cognition in the spirit of using it and not losing it.

To me, practising our cognition is about understanding what to offload and what not to offload. The way that I’ve been navigating this choice is as follows:

  • Is the task that I’m doing completely menial? Will executing and completing that task teach me nothing new? For example, tasks like cleaning data, summarising a document, or doing some research on the web where I would have had to click 40+ links on Google, and so on. If that is the case, then I can happily delegate that completely to AI and then just review the output.
  • If the task is not menial, then I always make sure that I take a first pass myself using my own cognition. This helps me arrive at an initial solution, and then I can use that as a base case to start interacting with AI as a way of critiquing and expanding my work. For example, if we needed to make some improvements to our career matrix, I wouldn’t simply dump them into a prompt and then ask it what I should do. Instead, I would take the time to read and review them myself first, come up with my own suggestions for improvement, and then use that as the starting point for prompting.

A great analogy here is working like a surgeon. Here, Geoffery Litt (referencing a theme covered in The Mythical Man-Month) argues that we should be the surgeon, making the key decisions and actions, and the AI should be the team of assistants, allowing us to delegate the grunt work.

Think about what it means to use AI like a surgeon in your own role, whether that be in coding, strategic thinking, or researching and understanding information in order to make decisions. This way you fight cognitive offloading, and instead only delegate the things that you would ideally want to automate in the first place.

Wrapping up (the presents)

We began this article by exploring the biological reality of “use it or lose it,” a principle that applies as much to our cognitive abilities as it does to our muscles. We’ve seen that there is a possibility that the “competence pacifier” of AI, if left unchecked, may accelerate the decay of the very skills that make us effective leaders: our critical thinking, our technical context, and our ability to reason from first principles.

However, the path forward isn’t to reject AI, but to use it with intent. By doing an inversion pass on what it means to be an ineffective leader, we can follow the antidotes we’ve outlined: finding your minimum effective dose of coding, getting your hands dirty with the tools, becoming an overly active participant in your team’s work, and adopting a “thinking first” protocol. By doing so, you can ensure that you are sharpening your mind rather than dulling it.

The action for you in 2026 is clear: be the surgeon, not the passenger. Engage your critical thinking explicitly before you prompt. Dive into the details. Do things as a manager that don’t scale. By doing so, you won’t just preserve your skills; you’ll evolve them, becoming a broader, deeper, and more effective leader.

We are at yet another turning point for managers. More is expected of us, and in the same way that the nature of programming is changing with AI, I also strongly believe that the nature of management is as well. However, the tools are there for you to use, but it’s up to you to make sure that you use them effectively and in a way that builds your skills, rather than dulling them.