Why You Should Take Apart All Your Tools

Ian Halverson
3 min readJul 24, 2017

--

Not everyone is built with a curious, engineering mind. But for those of us that are, we can’t help taking things apart. Where others may just exist, or enjoy the moment, we’re usually off trying to figure out how something works. The giant whale tank at the aquarium, the local greenhouse irrigation system, the little rusty mechanism that allows you to extend the dining room table. We want to know why it works!

As developers and engineers, this is not only our inclination, but it is indeed a necessary function of our minds. It allows us to understand when something goes wrong, and how to fix it.

My first car purchase, a Subaru Impreza

When I was 19, I bought a rusty little Subaru Impreza on Craigslist. Despite its poor condition, I drove it for several years until it had nearly 300,000 miles! It left behind almost as many memories as it did puddles of oil. This car is what taught me to be an engineer. Almost every weekend, I was fixing something. If it made a noise, I would jack it up and spin the wheel. If it still made the noise, I would remove the wheel and spin the rotor. If it still persisted, I would remove the rotor and spin the hub. And so on, and so on… Not only did I learn to take things completely apart, but I learned to think logically about a problem, and of course the crucial skill of “Google-ing it”.

The shrine where I first learned to fine-tune my “Google-Fu”

Now when it comes to software, we may not always have the need to take everything apart. Cars get older and rustier and things start to fall off. In contrast, code doesn’t generally change unless we change it. We expect JavaScript to get compiled or interpreted properly without diving into the C++ to personally keep something from breaking. We expect to use NodeJS or the Express module without having to daily maintain their codebases. If something does go wrong, we expect a fix to be delivered with the next patch update.

So is there still value in taking things apart as a developer? Absolutely! This week, some friends and I had the opportunity to rebuild the Express module for NodeJS. We had already been using the Express module for launching some projects, and we had even been implementing some other high-level libraries and modules to get the job done. Why would we take apart something that wasn’t broken?

It is indeed a necessary function of our minds. It allows us to understand when something goes wrong, and how to fix it.

What I Learned

The Express module is a fascinating implementation. When a simple route is declared, it is dynamically “registered” with the application, and called by a single “handler” function that parses the HTTP request, and accesses the appropriate registered function. It may sound simple, but experiencing the challenge of re-creating this process and handling all its edge cases was insightful. We built our code to start up the server, handle parameterized URLs, and even register Regular Expressions in the routes!

This opportunity made me realize that even though the modern software world often means dealing with high-level abstractions and libraries, I don’t want to stop taking things apart. It’s part of being a good engineer. It will be impossible to rise up and create exciting new things if we can’t look inside the things others have built, and analyze them. There’s a huge amount of code out there, and only 24 hours in a day, but I hope I consistently find the time to take things apart and see how they work.

A developer can never stop learning, and taking things apart piece-by-piece is possibly the very best way to learn.

--

--