Stop Memorizing Commands: Use Task Runners for Common Coding Tasks

Stop Memorizing Commands: Use Task Runners for Common Coding Tasks

Ham Vocke shares a practical tip for developers juggling multiple codebases: standardize common tasks like building, testing, and formatting with task runners. He compares four approaches—bash scripts, Make, just, and mise—showing how each can provide a consistent interface across projects. The post includes code examples and highlights the benefits of muscle memory and reduced cognitive load, making it a quick win for any developer's workflow.

I don't want to remember any of this. I want to be able to say “build the code”, “lint it”, “format it”, “run migrations”, “install dependencies”.
  1. pragma_x

    > A small drawback is that just isn’t readily available on developer’s machines (unlike bash and make)

    Looking back, this was usually a substantial stumbling block for adoption of new tooling. Things have changed. All one has to do is look at what JS programmers will go through to scratch build entire toolchains on the back of npm. IMO, the bar has been moved up to allow _some_ installation friction rather than none.

    IMO, if the tool is a solid improvement and installation is a one-liner, use it and promote it loudly so it continues to get support.

  2. betree

    Historically, I did it the other way around: have some autogenerated shell commands (dev, test, pull...etc) on my local machine that detect which language the project in the current folder is using, and calls commands accordingly.

    I did it this way because, in my case, it was challenging to consolidate multiple projects across multiple organizations under a single tool.

    It's public, but I realize I haven't pushed my local updates for a while now.

    https://github.com/Betree/dev-commander

  3. chickensong

    I like to use a handful of stable shell scripts as the entry points, this way you can change the tooling under the hood without having to update related callers. E.g. you can break up with make or mise or whatever, but you don't need to update your CI. Run.sh runs, build.sh builds, etc.

  4. aleyan

    Also had this issue. I have made a meta-task runner to make discovery and running of already defined make/just/task/npm/etc task targets easier called dela[0].

    The ergonomics of running tasks are very similar to the article as you can run a task simply by typing the name of the task in your shell without saying "make" or "npm run" or whatever else that is the actual task runner. The difference is that you just have to install dela without having to change anything in the underlying project repository.

    Works really well for me!

    [0] https://github.com/aleyan/dela

  5. TekWizely

    I made a task runner inspired by make's simplicity but purpose-built for running tasks:

    Run: Task runner that helps you easily manage and invoke small scripts and wrappers.

    https://github.com/TekWizely/run

    Do you find yourself using tools like make to manage non-build-related scripts?

    Build tools are great, but they are not optimized for general script management.

    Run aims to be better at managing small scripts and wrappers, while incorporating a familiar make-like syntax.

More from this day

2026-08-03