When faced with the decision if something is worth automating or not, the default reaction for most developers and product managers will be simple: estimating the time spent on a manual task, and comparing it with the time it would take to automate the task away. Whatever takes the least time wins. When building Offen, the decision of what to automate came up quite a few times as well, and I have realized that only looking at time spent might be a bit short-sighted.

Optimize for the ability to forget

Instead of purely optimizing for time spent, I think you can also optimize for removing mental overhead. Instead of having to do the mental bookkeeping (how do I run the build, how do I do a release or how do I update some license info) for all of these tasks you could automate them away and simply forget about the need to do something as well as its implementation details. This might not necessarily be cost-effective when looking at time factors only, but once you have actively forgotten about whatever you just automated away, it will let you think about problems you still need to solve in a more outright manner.

To give you a concrete example: Offen does need to keep track of the third-party code that is used and generate a NOTICE file to be included in the binary distribution bundle. This is something you could of course do manually: every time some dependency is added or removed (which honestly does not happen very often), you go and update that NOTICE file. Automating this is a complex task involving lots of custom scripting to iron out the multitude of problems modern dependency management brings. Yet, even though I would have never spent as much time manually updating the NOTICE file as I have spent automating this process, I have found doing it to be the right decision to make. Instead of having this backlog of mundane and simple tasks I need to do from time to time, I can solely think about what I can improve on the product. Instead of being a part-time bureaucrat, I can now be a full-time creator.

Start early on

If you make optimizing for the ability to forget your guideline, it can help you get a project off the ground really quickly. Instead of waiting for the perfect moment to set up that CI pipeline that does your builds and your releases, you start off by implementing that pipeline. Once done, you can forget about it. In case you need to know how it works, it’s there in your codebase.

Looking at the time spent is only one aspect when deciding what to automate: do not making it your only guideline.