Build things you understand

16 May 2026

using tools you know how to use.

I’ve been an engineer for a long time now, and I’ve come to believe that, among other responsibilities, my job is to ensure that magic does not exist. Part of what often makes engineering dull to non-engineers is that the job is literally to replace spells and mysticism with data, process, and certainty. The car must start when the keys are in the ignition, and while the driver of the car may not know how or why that works, the engineers who design that car absolutely must.

As an engineer using numerical methods to design physical hardware, I often bridge the gap between mechanical and software engineering. I must understand what it is that we’re building, but also the algorithms, theory, and software programs I use to facilitate decision- making. Because of this, I often have a unique view into both worlds.

When I started out in the field, I assumed that the engineers around me would have similar passion and energy that I did. I truly didn’t want to make my work my life, but I did want to create awesome things while I was on the clock. I quickly realized that there was a spectrum, and I fell into a particular bin on that spectrum. That’s not an indictment of others’ character - it’s just the reality that everyone has their own interests and passions and designs for their life, and others often did not share mine.

I love to understand the things I’m doing, top to bottom. My partner often becomes upset with me, saying things like “you trying to do everything yourself is so exhausting!”. I’m sure it is! It’s exhausting for me, too. It’s the way that my brain works, though; I feel a pull to diving deep and pausing progress until I truly get it, and perhaps sometimes an anxiety if I cannot at least delineate where my understanding begins and where it ends.

Recently, I attended a local conference in my field. On stage, the main presenters spent multiple hours exclaiming that the “complexity of the engineered world is growing exponentially” and crowing that their software was necessary to navigate this complexity. This is in direct contrast to my own philosophy, which is that complexity is almost always avoidable. Everywhere, engineers, lawyers, accountants, city planners, marketers, writers, you name it - all of these people are making things way more complicated than they have to be.

Sometimes, complexity is not avoidable. The world is a big place, after all! There are many different kinds of people and plants and animals and elements and biological processes and seasons and so on and on and on. But! We rely on science, medicine, engineering, law, and culture to make our lives better, better than just simply existing in the natural world. Trimming this complexity is necessary to ensure a better existence.

In engineering, we have an overabundance of complexity. We “democratize simulation”, and now every engineer has a finite element program on their desktop that they don’t know how to use and interpret. Replacing one of 30,000 parts in your car requires relying on a supply chain that spans the entire globe. Want to write a simple program to use on your computer? Sorry! You have to get permission from your OS vendor and it’ll still have to go through a web browser. Your refrigerator now has to have a screen, which sends information to your phone by way of a server in the middle of San Francisco.

This overabundance of complexity causes us to falter at a time in history where we should be better than ever at making things. We do have a sea of products to purchase, that’s true, and they often do their jobs better than products of the last century. However - today, all engineers have access to unlimited knowledge about materials, design, and manufacturing processes. Our capability for making raw materials and parts accurately is unparalleled. Yet, the devices (and especially) software around us fail all of the time.

“Exponentially increasing complexity” won’t make our world more reliable, it can only make it fail us more often. When something is complex, it is often impossible to fully understand it. When you don’t understand it, you can’t fix it or improve it. When you don’t understand it, you can’t apply it appropriately or use resources efficiently. Eventually, the foundation begins to crumble under the weight of accumulated patches and jerry-rigged fixes. Things seem fine, often for a long period of time, but eventually the skeletons start to show and it crumbles to dust.

This website and these projects have always been about my desire to cultivate my own understanding. A lot of this is about writing software to solve scientific and engineering problems. This has been absolutely critical to me developing my capabilities with my work. However, I think I started to climb that pile of complexity, and I want to take a step back. I’ve begun to write my code in C again, not because I hate the modern world, but because it facilitates that understanding. I’m usually building small things, so I can afford the time to write my own custom data structures, adjust to life without generics, and understand memory management more deeply. While I might not necessarily make a ‘better’ product every iteration, each iteration brings me much more fulfillment and helps me learn.

Engineers - please dedicate your careers to understanding the things that you make. Please fight complexity at every turn. We can make grand, magnificent, amazing, civilization-scale works, but their complexity cannot be evident at every level, otherwise they will never be complete and will never last.