After reading Jon Wellman’s piece on Tim Ferriss’s “Eliminate, Automate, Delegate” framework, I found parallels to my current work but also new ways of looking at and extending this pattern. In Tim’s words:
“Never automate something that can be eliminated, and never delegate something that can be automated or streamlined. Otherwise, you waste someone else’s time instead of your own, which now wastes your hard-earned cash.”
Eliminate
Agreed, steps and work that aren’t needed complicate and slow down any process - scrap them.
I find this to be particularly relevant when you start somewhere new or join an ongoing project - don’t be scared of questioning existing practices.
Automate
Since the inception of good-enough Large Language Models (LLMs) (up to the reader to decide when that was - or will be), automation has become a lot easier. Automation didn’t need to be complicated but still required a good chunk of focused time. Writing the program, testing it, polishing it, documenting its usage, etc. This can now all be done quite seamlessly with LLMs.
Even though it is easier now than ever, it seems like a lot of people are skipping this step and instead going straight to delegating tasks to LLMs, which has its use cases too as we will get to, but can also be a lazy shortcut that you’ll pay for later.
A simple example of such a pitfall is using LLMs for static analysis like formatting, type-checking, code style, etc. There are tools designed exactly for these purposes which will be fully reliable, faster, and cheaper. Instead of delegating this to an LLM, use one to help set up these tools and even to potentially fix the errors that these tools then inevitably find.
The tasks that are suitable for automation haven’t changed, but the work required to automate them has. Considering the time investment has become significantly smaller, I would argue that more tasks fall into this bucket than they did before.
Delegate
There are tasks that can’t be automated through deterministic programs but are suitable to be delegated to agents - when engineered correctly this wastes much less of your “hard-earned cash” and can be even more effective than delegating this to a colleague.
Building on the previous example of using type-checkers: I set up mypy for a project that we’d been
working on for some time, and this led to some 500 mypy errors. Not something any of us felt like
going through. This is also not something that can be automated in the traditional sense as these were the errors that
were left over after mypy had inferred everything it could.
Instead, I used an LLM to loop through each group of errors until none were left, or at least none that the LLM felt
confident fixing. This did require some tweaking of the prompt such as “do not use Any as a type nor
# mypy: ignore-errors annotations”, and a final human review. This still took some time but much less than it
would’ve taken manually.
One-off fixes like these aside, I have found that where LLMs really shine is with recurring tasks that are not definable through code. For example, you may want to categorize noisy data, summarize text, or map one subjective data model onto another. You can set up workflows for this where a specific agent executes this task and feeds it through the rest of the pipeline, thus practically automating this by delegating it to an agent.
Own
After applying this framework, it is likely that work will remain that doesn’t fit in any of these three buckets.
This is work that is either too complicated or unsuitable for LLMs, for whatever reason, some being:
the task is highly specialized, requires physical intervention, or involves too many stakeholders.
Alternatively, it could be that these are tasks that require human accountability and thus inherently cannot be
delegated to an LLM. For most of the repositories I work on a manual review is required before anything gets merged
into main.
In these cases it is worth investing in making these tasks clear and easy to perform such that this doesn’t become a significant bottleneck. Or, if you prefer, as per other extensions of “Eliminate, Automate, Delegate” - you can “Procrastinate”.
With how rapidly the LLM industry is developing it would be strategic to evaluate the work in these buckets, especially the last one, every quarter. What might seem silly to delegate to an agent now might be sensible, with the right harnessing, a few months from now.
That being said, there will always be work that needs a human - or is simply best done by one. Do it with pride: this is the work that you own.