Published on

Tinker With Purpose

Have a Goal In Mind Before Tinkering


Photo by Sigmund on Unsplash

The word _Tinker _is defined as:

To repair, adjust, or work with something in an unskilled or experimental manner

Early in my career as a Software Engineer, I had a conversation with one of my first mentors that went something like this:

Mentor: “You’re a tinkerer, you know”

Me: “Why yes, I suppose I am”

Mentor: “Tinkering can be bad, unless you’re tinkering with purpose. If you tinker with purpose, that can be a very powerful thing”

My takeaway from this is that I should be deliberate in my tinkering, and not just tinker to tinker.

Historical Context

Like may Front-End developers, I am self taught. I’ve been playing with web technologies since the late 1990s. I can remember a time before CSS and JavaScript were even a thing. I can also remember learning to build websites by just looking at their source.

I learned by playing. Trying things and then failing, a lot! Most of the time I pushed through enough to get something working, but shortly after that I’d move on to the next thing. When I was younger I did this a lot. Over time each of these small accomplishments built on each other to form the foundations of what I know today.

Many engineers I have come in contact with have taken a similar path.

Photo by Jeff Nissen on Unsplash

Weird Gaps

One problem with this strategy of tinkering, is that it is rarely focused. I’d move from technology to technology and solve the problem of the day, but rarely took the time to zoom out and understand why or go any deeper than I needed to solve a problem. This is specifically what my mentor was getting at. This strategy resulted in, as another mentor called it: Weird Gaps. I had weird gaps in my knowledge.

I could spin up an entire Front-End build system with Gulp, but couldn’t tell you what a Stream was. I could put together a complex UI layout, but couldn’t tell you why I used float.


I’ve learned over the years that my brain retains the most information and works best when tinkering. I still tinker but I approach tinkering a bit differently today.

Instead of picking up a new library, tool, or language just for fun, I try to have a goal in mind. A Definition Of Done, if you will. When trying something new what am I trying to accomplish? How will I know if succeeded? What am I trying to learn? Here are some of my tinkerings:

  • Deploy a NextJs app to Azure using Azure DevOps pipelines, Docker, and Terraform
  • Get current crypto quotes from a crypto exchange
  • Generate detailed charts from game stats
  • Publish an npm package for a cli tool

Approaching tinkering this way, with a goal in mind, has allowed me to use my time more effectively while also continuing to enjoy messing around with new and unfamiliar things. This still leaves room for happy accidents and “just figuring it out”, but also requires a little more study. If I know I want to do X, what are the things I need to do to get there?

Photo by Marten Newhall on Unsplash


Instead of aimlessly tinkering to tinker, doing so with a goal in mind has helped me grow faster as a Software Engineer.

Do you tinker? Do you have tinkering strategies?