Growth through self-imposed limitations in creative pursuits
A less-is-more power-up for your creative projects
What would we do without our side projects? They allow us to test new stuff, experiment and learn outside of what we do in our day-to-day job. They're specially (in)famous amongst Software Developers, especially known for being easy to start and even easier to abandon.
I am at the point where I have a handful of side projects started but none of them finished, so I set out to find an extra motivation to work on them and ship at least a couple. How could I use a side project in more than one way? How could I “kill more birds” with the same project? I set out to first work on my Pomodoro Timer for Mac OSX. I've just started working on it a month ago or so, and I'm still in the middle of building it, so I figured I could start a small series of posts following the “Build in public” ethos put forward in several places, but to me the most recent reference comes from @levelsio's book Make The Indie Maker Handbook:
It means to publicly blog, vlog or in any way communicate the entire story of building your product or startup from the start. You're completely transparent about how things are going, even if things don't go so well. It's about sharing the stuff you learn from trying to build a product.”
Current status of my Pomodoro Timer App:
Let us first list out the basic reasons to work on a side project:
Learn stuff
"Scratch your own itch" i.e. build a solution to your own problems
Maybe even make some money out of it (me, the forever optimist!)
These reasons alone will be enough for many to keep the flame of motivation burning until the project is shipped, but knowing my disperse self I knew I could use some extra incentive to get to the finish line.
That's when I remembered the idea of self-imposed limits. The concept is not new, and in fact widely used in other creative areas like photography (which I am quite familiar with). It's pretty simple, really: the idea is to impose yourself a (set of) limitation(s) when setting out to create something. Most times it involves stepping out of your comfort zone, creating or building in a way you are not too familiar with, in order to force yourself to improve your skills with that technique or improve your creative output. A classic example is limiting yourself to a single fixed focal length lens for the duration of a photography outing (or whatever period of time you want), which forces you to find new creative angles and framing that fit the constrained focal length, instead of allowing yourself the extra flexibility of using a zoom lens.
I don't have a job right now so I know that at some point, sooner or later, I may need to go through the infamously archaic and dreaded tech interview process. One of the difficulties is that, at times, during the interview you are precluded from using the regular tools and frameworks available to you in your regular day-to-day and you're asked to do things with "vanilla" (bare-bones) technologies in order to showcase your expertise of the "fundamentals" — which I actually agree is a reasonable & good thing to ask: way too many SW engineers know only the high abstraction levels of the tech stack and get lost once you dig a bit into the foundations.
This is why I decided to take the hard road and build my Pomodoro App with the bare minimum libraries: just Electron
, webpack
and a few util libraries. No React
, no SASS
, no LESS
, not even jQuery
— and let me tell you, I have very fond memories of using jQuery
at the beginning of my professional career 🤣
As a front-end Software Engineer, it had been years since I had written a single line of plain vanilla JS or HTML. What about manually handling eventListeners
? Are you kidding? I hardly remembered what those were! Not to mention a host of Browser and DOM APIs I never knew existed because high-level frameworks and tools shielded me from all that low-level complexity.
Not only I re-learned a bunch of things I forgot I ever knew but, paradoxically?, I learned new things by descending the abstraction ladder instead of ascending it. Most importantly, I gained a renewed sense of appreciation and understanding for the abstraction we have: in a world were a new and "revolutionary" front-end framework is released every week, it's easy to forget that many tools actually did vastly improve our lives and made us several times more productive. Removing them from your arsenal makes their usefulness painfully obvious.
This is clearly not a rant against abstraction but a humble endorsement to occasionally going back to the basics. Abstraction is great, it allows us to build more complex things, better, faster, and in a more structured way. We wouldn't be where we are today if everyone avoided abstraction and only used "vanilla" technologies. Notwithstanding, Imposing limits on yourself during a creative pursuit, be it coding, photography or other creative endeavors, is a great way to grow, step out of your comfort zone, and find a renewed sense of appreciation for being able to create without limits.