Part III - Physics You Can Feel

Flow, Bottlenecks, and Throughput

Imagine you’re looking at a little factory line making custom t-shirts. There are stages: design, printing, quality check, packaging, shipping.

Chapter 12 12 minute read 2,761 words

Imagine you’re looking at a little factory line making custom t - shirts. There are stages: design, printing, quality check, packaging, shipping. Orders come in, shirts flow through these stages, finished packages go out. If you walk along the line, you might see something telling: piles of half - done shirts waiting at the printing machine, while packaging is idle. That printing station is slower than the rest; it’s the bottleneck. Work accumulates there like traffic at a one - lane tunnel, limiting overall throughput (shirts per day) to the pace of printing, no matter how fast design or packaging are. This is an example of Little’s Law in action: the longer that queue and the slower the processing, the longer each item takes to get through and the fewer complete outputs over time. Now think of your team or personal workflow as a similar pipeline: ideas or tasks come in (requests, requirements) and finished work comes out (reports, products, decisions). There are often clear stages: e.g., for writing an article: research - > draft - > edit - > publish. If one stage is much slower (maybe editing), tasks pile up awaiting it and the entire process slows. Identifying and elevating the bottleneck can massively increase throughput, whereas simply speeding up already fast stages does nothing (like adding more designers when printing is the hold - up yields idle designers, no output gain). So, to optimize how work flows through your system, you need to see it as a system, not just a bunch of tasks, and find where it truly gets stuck or delayed. Then focus improvements there first. Let’s apply some simple production principles to everyday work to shorten cycle times and increase output without burning out (just by being smarter in managing flow).

Map your workflow steps and find the slow spot. Take a representative piece of work (project, recurring process, whatever fits). Draw out the stages it goes through. Keep it 5 - 7 major steps max to see the whole picture. For example, a software feature might be: 1) specification, 2) development, 3) code review, 4) testing, 5) deployment. Write down approximate average time each step takes when being worked on, and also how long work waits before or during each step (if known). E.g., specification might take 2 days, development 3 days, but maybe things sit 4 days in backlog after spec before dev picks up (a wait). Testing could itself be quick 1 day of testing, but perhaps there’s a 2 - day queue waiting for a tester to be free. Plot these if you can. Many realize the longest delays often are not the “active working” but the waiting in queue (common in multi - project environments - tasks waiting for review or waiting for stakeholder feedback, etc.). Now identify which stage has the longest combined processing+waiting time and tends to have the largest backlog of items in queue. That’s likely your bottleneck. In a small team, might be a specific person who is part of multiple flows (like every design must go through the one designer - so design stage queues up). Or it could be an external dependency like final approval from legal always slow. Choose that bottleneck stage. Focus improvement efforts mostly there: because, per Theory of Constraints, improving anywhere else won’t raise throughput; improving the constraint stage will. The bottleneck sets your throughput. For instance, if testing can only handle 4 tasks a week, the organization doesn’t finish more than 4 tasks a week even if dev could do 8. You can’t force more through than the slowest point’s capacity. So, invest energy in either expanding capacity at bottleneck (add resources or tools), or reducing its workload (maybe upstream do more to relieve it, e.g., dev writes more tests so testers have less to do). Also consider if any step is unnecessary - removing a step effectively eliminates its wait too. But ensure quality doesn’t suffer. If something is truly redundant (two approvals where one suffices), removing it increases flow.

Limit work - in - progress to avoid overload and long waits. WIP (work - in - progress) is how many items are started but not finished at any given time. Humans and teams have a tendency to start new things without finishing old - whether due to shifting priorities, waiting on something, or just enthusiasm for new stuff. However, high WIP means tasks sit partially done (each waiting maybe for some resource), which increases overall cycle time for each (Little’s Law: more WIP with same throughput means longer average completion time). Also, juggling many tasks is cognitively costly (friction from context switching as per previous chapters), which can ironically reduce throughput (people stretched thin, making slower progress on each). Thus, implementing explicit WIP limits per person or stage can enhance flow. For example, a rule: a developer will have at most 2 tasks in progress at once. Only when one is done can they pull a new one. If currently blocked on one, they can work the second, but not start a third - this constraint forces finishing or actively resolving blockages rather than starting endless tasks. It sounds counterproductive (“But what if they have idle time?”), but usually the idle time is minimal compared to gains from focus and shorter completion times. Similarly for team: perhaps only 3 projects can be actively in development stage at a time; others must wait in backlog. This ensures testing and deployment don’t get overwhelmed and each item flows through faster rather than all moving inch by inch. People often worry about idle capacity in non - bottleneck areas if WIP is limited. That’s okay: some slack is beneficial (like the designer might be free sometimes while code is being written - they can maintain assets, improve skills, or help someone else lightly, rather than artificially creating more design work that would just pile at dev or test). It’s like traffic metering lights on a freeway onramp - letting fewer cars in at a time reduces overall congestion and everyone gets home sooner even though some had to wait briefly to enter. Or think of restaurant: if kitchen can only handle 5 tickets at once well, the host might hold back seating too many tables at once to prevent slow service for all. So, decide a reasonable WIP limit by looking at historic capacity of stages and what context switching does. You can experiment: try limiting yourself to finishing 1 task before grabbing next for a week, see if you actually completed more overall vs having 5 half - done. It may feel uneasy at first (we like starting fresh tasks for dopamine), but if output improves, that’s objective benefit. Visual task boards (like Kanban boards) are great to implement WIP: you literally might mark on the board “Max 3 tasks in ‘In Progress’ column” and if it’s full, no one starts new tasks; they help someone finish an existing one or focus on clearing the bottleneck tasks if possible.

Feed and protect the bottleneck resource. Since the bottleneck determines throughput, it’s vital to maximize its productivity. That means ensuring it’s never starved of input and not interrupted for non - critical things. If a particular team member is the bottleneck step (e.g. a senior architect who must review designs), make sure that whenever they finish a task, another is ready and “good to go” (no missing info or dependencies) so they don’t waste time. Others can help by prepping work before it reaches bottleneck - e.g., QA writing test cases early so when code arrives, testing flows smoothly. Protecting the bottleneck means reducing how often it’s pulled off task. If a key machine or person is busy, don’t distract them with unrelated demands or extra duties if possible. Perhaps relieve them of some peripheral tasks. For instance, if the editor in a publication process is bottleneck, maybe have an assistant handle incoming communications or scheduling so the editor can focus on editing. Or implement office hours for them to take questions but otherwise let them concentrate. Another tactic: increase buffer before bottleneck - ensure a small queue of ready work is always waiting for them, but not too large (excess queue adds wait times). Some processes have a “gatekeeper” step to check that items are complete and correct before handing to bottleneck, so the bottleneck doesn’t waste time on work that will bounce back or is unclear. Also manage pace: it’s okay for non - bottleneck workers to sometimes wait rather than overproduce into a queue. For example, if code is coming to testing too fast, testers are swamped; developers might use extra time to refactor or document rather than keep pushing more code that just piles up. It’s counterintuitive but optimal to sync production to the bottleneck’s rate (this is the idea of matching throughput across stages to avoid big buildups - akin to just - in - time production). Also consider adding capacity at bottleneck if possible (e.g., cross - train another person to help in that stage, or invest in a faster machine at that station), because any improvement there raises entire system output. But such changes can be costly or not immediate, so first do the cheap improvements: reduce its wasted time (handoff delays, interruptions, rework due to poor quality input). Once you elevate one bottleneck, often another part becomes the new slower point - then you tackle that next (continuous improvement cycles).

Make queues visible to manage flow. Sometimes bottlenecks hide because work is invisible or scattered. Creating a visual representation of all items in progress and waiting at each stage (like a Kanban board or a simple spreadsheet or whiteboard columns “To Do / Doing / Done” plus perhaps sub - columns for each stage if needed) makes it immediately clear where piles are growing. If you see 20 tasks in “Awaiting Review” and only 2 in “In Development”, it’s obvious Review is the constraint. Teams can then swarm to help review if possible or at least be aware that adding new tasks into dev will just increase that queue further. It fosters a mindset: finish what’s in progress (clear the queue) before adding more. It’s much like how grocery stores open more cashier lanes when lines get too long - they are monitoring queue length. If a queue is long, instead of starting new work, perhaps reassign someone temporarily to help process that queue (if skills allow) or adjust priority. Also measure the flow: track how long it takes an item to go from start to finish on average (cycle time). If that number starts rising, it’s a sign something’s clogging more than before. Then find the cause: did incoming tasks surge beyond capacity? Did one stage slow down (maybe someone on vacation)? That leads to deliberate decisions: maybe temporarily reduce new starts (tell sales to hold off commitments, or scope fewer tasks this sprint) or allocate help. Flow optimization is often about smoothing variation: large batches or uneven arrival can overwhelm stages (think all tasks come end of month - people will be over capacity then idle other times). Try to even out work intake if possible (maybe weekly planning to maintain steady flow instead of feast/famine). Similarly, avoid starting a big batch all at once - if 10 tasks are ready for testing all on Friday, testers get huge Friday backlog. Instead, aim to finish and handoff tasks as they come, or schedule completions more steadily if you can (not always in our control, but for internal pacing, maybe intentionally stagger projects). By visualizing and adjusting, you keep flow continuous and predictable.

Shorten cycle times by limiting queue length (Little’s Law). Little’s Law states: Work in Progress (average number of items in system) = throughput (items per time) × cycle time (time per item). Rearranged, cycle time = WIP / throughput. So for a given throughput (determined by resources, etc.), the more items in system (in process or waiting), the longer each takes on average to complete. For example, if your team finishes 5 tasks a week (throughput=5/week) and they have 15 tasks in progress at any time, the average task takes 3 weeks to finish (15/5). If you cut WIP to 10 tasks in progress (maybe by not starting new until some finish), cycle time could drop to 2 weeks average (10/5) - meaning faster delivery to clients. People sometimes see idle time or slack as waste, but counterintuitively, some slack is needed to keep flow quick: if everyone is 100% busy (high WIP in system), tasks wait in queues and cycle time soars. If you keep system ~80% loaded, flow is smoother and tasks get done faster even if occasionally someone isn’t fully occupied (like leaving some “white space” in schedule to deal with urgent issues without derailing everything). Shorter cycle time means more responsiveness and less overhead (e.g., less time spent re - remembering context on old tasks or expediting late work). So aim to keep WIP small relative to throughput capacity. If tasks start piling up (WIP grows), either throughput has reduced (maybe bottleneck slowed) or more work was started than finished (maybe due to pushing too much or something blocked). In scrum or agile, timeboxed sprints and WIP limits are essentially ways to keep WIP under control to hit known throughput. For personal use, if you have, say, 10 open projects but you realistically complete 2 per month, average project might take 5 months. If you instead had 5 open, average would be ~2.5 months (given same throughput). So sometimes saying no or deferring low - priority tasks (limiting WIP pipeline) paradoxically means you deliver overall more timely results on what you do commit to. It’s better to finish fewer things well and quick, than to start everything and finish much later or never. So trimming your to - do list to what you can actually flow helps each get done.

Practice drawing your flow and tackling one bottleneck. Take the advice literally: sketch out your current task pipeline for something like a common repeating workflow or your personal multi - project handling. Identify where is slow or backlog heavy. If it’s not obvious, track a couple items through and see where they waited or got stuck longest. Then commit to one intervention: maybe you implement a WIP limit for next week (“I will not have more than 3 active tasks on my plate”), or dedicate extra resources to the known bottleneck (if writing code is slow because only one engineer is expert, maybe schedule pair - programming or training another engineer on that area). Or if waiting for stakeholder feedback always delays you three days, plan proactively to get earlier input or schedule feedback sessions at set times (so stakeholder expects and prioritizes them). After applying change, see if tasks finish faster or queues shrink. For example, after limiting WIP, do you see items move to Done sooner? Or after adding an extra tester on Mondays, did the testing queue stay shorter? Measure small victories like “cycle time for Team, which was 10 days last month, is now 8 days on average.” Also note team morale or fire - fighting - often when flow improves, stress drops because fewer urgent backlogs and more steady progress. Celebrate that! Share the concept with colleagues: often just labeling “this step is our bottleneck” get everyone aligned to help there and not overload it. Put up a visible Kanban board or chart showing items per stage weekly to monitor improvement. It’s satisfying to literally see work flowing smoother.

With flows unclogged, your work processes become more predictable and efficient. You deliver value faster, spend less time shuffling work around or waiting, and more time actually adding value. This systemic view of work complements all the personal productivity tactics we covered: it’s not just about you individually but how work moves through context and team. Equipped with clear definitions, decision science, leverage, friction - busting, activation routines, and flow management, you’re operating like a well - tuned engine. We’ve drawn from physics analogies to optimize the mechanics of progress. Next, we’ll pivot to another realm: biological principles - homeostasis, slack, adaptation - which will teach us how to keep systems (including ourselves) stable, resilient, evolving, and energized for the long haul. After all, productivity isn’t just about sprinting hard; it’s also about sustaining performance and adapting to change. So let’s move into “Biology You Already Run,” applying our living systems’ wisdom to work and life systems for durable success.

Listen
Checking audio...