Photo by Buzz Andersen on Unsplash
I’m beginning to adopt an engineer’s mentality of wanting to build things because it’s fun and I’d probably learn a few things along the way.
For example, I’d recently wanted to build 2 Chrome extensions with very specific uses.
The first was something like Momentum, which morphs each new tab page into a beautiful space with a “What’s your focus today” prompt. It’d be mostly similar except for one key feature that would force you to select which task you’re about to work on before allowing you to enter anything in the address bar. I imagined it would save me a few trips into the abyss of the internet…
And the second extension was a website timer that automatically records the number of minutes you have spent on any website you choose to track and prevent you from accessing them after a preset amount of time. I wanted something like this to curb some of my indulgent behaviours (mainly on YouTube), but I know many people who would need it for other websites as well.
I had even spent about 3 hours reading the Chrome extension guides and building their tutorial apps.
I had already spent 3 hours reading and doing tutorials on building Chrome extensions
But I now realise that my prevailing mentality, which I think is typical of an engineer’s, is problematic.
“Sounds like something I’d use and it doesn’t look THAT difficult to build. And it’s probably going to be fun to build too. Let’s build it!” (the murmurs in my head)
Why problematic? Because it prevented me from doing the thing most people would do in a similar situation: search for existing extensions that do what I want to be done.
Search for existing solutions first
With a quick search, my second website timer extension idea has already been built a few times. StayFocusd and WasteNoTime both track time spent on websites automatically. WasteNoTime ended up doing exactly what I needed my own extension to do and more, so I installed it and started using it.
What would I need to build another one for?
It turns out that my mind is capable of generating a few justifications:
- Because I can, so why not?
- I would learn the ins and outs of building a Chrome extension, a skill that might come in handy in the future
- I could boast to people that I have an active extension on the Chrome web store
My monkey mind…
Let’s scrutinise these so-called justifications.
First, just because you can doesn’t mean you should. I hope President Trump heeds this wonderful piece of advice.
Second, while it’s true that I’d pick up the skill of building a Chrome extension, the fact that a replica of what I need already exists significantly diminishes the strength of this argument. Our time is limited, why make more of what has already been made? The only two exceptional cases I can think of are: (1) when the solution doesn’t exist in exactly the form you need it to be; (2) you’re thinking of building a business out of it. For me, with these two extensions, it’s neither of these things.
Also, there are literally hundreds or maybe thousands of other things you could be doing that will let you learn something that you can directly apply to your work afterwards. For me now, that something could be learning to write unit tests for React components with Jest and Enzyme, so I can set up our code base with a few tests and impart my knowledge to the team so that we might finally have some front-end tests.
Ok, onto the final point, which is building something so you can boast to people. I think this point actually subconsciously creeps into every decision we make in life, and it needs to be stared at hard and straight in the eye. I believe prestige should never be what motivates any decision, mainly because it’s unreliable and perpetuates an unhealthy obsession with attention.
Conclusion? Rather than build something, just use what’s already available if it suits your needs. If it doesn’t exist or suit your specific needs well, then build it.
- Never build stuff just because you can. It’s a logical error since you can be doing literally a million other things instead of building something that might already exist
- My mind often subconsciously values prestige too highly, and the way to tame it is to stare at it until it goes away, and it always does
- It’s good to be building something so you can learn the ins and outs of a library, framework, or other aspects of programming, but only if you can’t think of a better investment of your time
And here’s one final point to remind me most of all: don’t be too much of an engineer. It’s ultimately about who and what the tool we build serves, and not about the tool itself!