Thoughts, reflections, and ideas


Posted on

One of the things that I appreciate as a developer is having a consistent experience across projects. As you probably know, this is often not the case when running a project locally. Some ask you to run yarn run ios. Others prefer an executable like bin/rails server instead. This adds friction when changing when jumping between projects. Can we mitigate the friction?

This is something I'm changing in my projects with an executable called dev. All my projects have it going forward. That's the only thing I have to remember.

Since I have Ruby in most of my projects, I leverage Foreman and a Procfile to run concurrent processes. This is an example of the Procfile.dev of one of my Rails projects:

rails: bin/rails server
vite: bin/vite dev

Then all I need in the dev executable is:

#!/usr/bin/env bash

bundle exec foreman start -f Procfile.dev

It'd be great if I could have an up command too to configure the environment. However, and as you might know, configuring environments deterministically and reliably is hard. Many companies let that be a developer's responsibility. Others like Shopify have needed years to have a tool that does an incredibly good job at that. And companies like GitHub, prefer to take the development to the cloud.