A few years back, I bought a 3d printer in a misguided attempt to solve a problem that couldn't be solved by buying a 3d printer. We named the printer Earl, in honor of the titular character from NBC's situational comedy My Name is Earl. Heady times, indeed.

I like to build things. No, scratch that. I love to build things, and a 3d-printer is a dangerous toy–ahemtool for obsessive tinkerers. For starters, you can print almost anything as long as (a) it fits on the build plate and (b) you can model it as an STL. Beyond that however, a 3d printer always seems to be in need of something.

A box of 3d-printed parts for a 3d-printer.
My box of parts: Z-brace stabilizers, feet, a fan shroud, and more.

Eventually, Earl's main board melted. Amusingly enough, we found out that the board itself was a RepRap Melzi board. Melzi. Melzi. Meltsy. Meltsy. We really should have seen that one coming. The manufacturer was a good sport about it, mind you, and sent me a replacement unit free of charge.

We named this one Earl Jr., because why not tempt fates?

Earl Jr. stopped printing a few short months later, right before the pandemic hit. It had a thermistor problem or some such 3d printing nonsense. The manufacturer replaced the replacement, upgraded me to the next model up, and included a kindly-written note to the effect of “please don't email us anymore.”

I didn't name the third printer. Seemed like a bad idea.

Over the years, I've gotten adequate at running a 3d printer. I'm definitely not great at it, and the family is too kind in finding uses for the strange little doodads that roll off the print bed. Along the way, I've noticed a few parallels between the process of 3d printing and the processes we employ in software and cloud services.

You Gotta Start Somewhere

When learning a new language or framework, there's always a “Hello World!” application to be built. Trivial as these may seem, they serve a critical purpose in the learning process — they get you started.

A good “Hello World!” application teaches you basic essential skills like:

  1. What is the smallest working program?
  2. How do we communicate with the human?
  3. Does it work?

In the 3d printing world, this is “Hello World!”:

Close-up photograph of a PLA-filament 3d-printed boat model, dubbed “Benchy,” that is often used as a stress test for printers.
Meet Benchy, the thing every 3d printer everywhere has printed at least twice.

By printing Benchy, a novice to the craft of 3d printing learns:

  1. How to slice an STL file into the gcode that the printer understands
  2. How to upload the gcode to the printer (this is harder than it looks)
  3. If the printer is properly tuned — will there be issues printing overhangs, spans, etc.?

When you're starting a new process or adopting a new tool–whether Kubernetes, a CI/CD platform, or something else–make sure you have something small, easy, dare I say trivial, to test the waters.

Plan All You Want, But Don't Forget To Hit “Print”

Frederick Brooks, oft-remembered for that Mythical Man-Month quip “adding manpower to a late software project makes it later,” also wrote about something he called Second System Effect.

The premise is that the first time we do something, we have no idea what we are doing, and so we are far more conservative in what we attempt. As we progress and improve, more complicated forms will occur to us to try. However, grasping that we are, in fact, still neophytes, those temptations are easily avoided. Yet we retain them.

We keep them out of site, somewhere safe, to try the next time.

This second is the most dangerous system a man ever designs. When he does his third and later ones, his prior experiences will confirm each other as to the general characteristics of such systems, and their differences will help identify those parts of his experience that are particular and not generalizable.

The general tendency is to over-design the second system, using all of the ideas and fills that were cautiously sidetracked on the first one.

Brooks was more interested in taming the complexity of the second system, but I have found that even in pursuit of simplicity, we can end up in a very bad place: a place of complete indecision.

In 3d printing, you can always find more things to fiddle with. How many walls should a the print have? What is the best way to orient the model? Supports, or no? Which infill pattern is best? At what percentage?

Modern technology architecture is no different. Use the cloud provider's offering or roll your own? Use off-the-shelf software (F/OSS or proprietary) or build it from scratch? Postgres or MariaDB? Kubernetes or OpenShift?

The most important decision you can make: to act.

It's Okay To Make Small Changes

The promise of micro-scale additive manufacturing at home is the ability to fashion replacement parts and environmental modifications on-demand. Armed with a design software, slicer and a printer, one can theoretically design no end of useful gadgets.

In reality, most of my “design phase” time is spent browsing Thingiverse (an online repository of shared STL design files) looking for something interesting to print.

The most useful thing I ever printed was a set of headphone hooks:


For this project, I started with the Parametric Desk Hook w/ Hole for Headphone Cable and used a freeware CAD program to modify the parameters to fit my desk.

This was an amazingly satisfying and immensely rewarding experience. The hooks are perfectly sized to the precise thickness of the desk top. The bands sit perfectly in the depth of the hook. I printed a second one to hold the other set of headphones on the other side!

These types of small modifications put me in the mind of Open Source software. Whatever software or tools you are using, don't be afraid to customize it, if only just a little bit.

Things Can Go Horribly Wrong, But Usually Won't

The 3d-printing world is awash with horror stories about runaway hot ends burning down housesbad filament spooling incidents, and other spectacular failure modes.

Photograph of the “Rooster Malfunction” while trying to print several thousand roosters, outside, in honor of the Chinese Year of the Rooster, 2017.
Has this ever happened to you while trying to print a rooster? Didn't think so.

On balance, these things don't happen nearly as often as you'd think. Stuff breaks, but it's usually something mundane and annoying, like under-extruding or layer gaps. More nuisance than catastrophe.

Heck, the worst thing that's happened in my hundreds of prints is that one time I was fiddling with the z-axis control by hand and rammed the (moving) nozzle into the build plate, etching an outline of the base layer into the aluminum.

Intuitively, we understand this. I have homeowner's insurance, but it doesn't cover the outbreak of nuclear war. That doesn't really surprise me, and it definitely doesn't keep me up at night.

However, when we plan for failure in our IT systems, we tend to give in to our flights of fancy. I have lost count of the number of times I've sat through a disaster recovery / business continuity planning workshop that didn't include at least one “but what if ALL of Amazon's regions go down AT ONCE?!”

That's not to say it never happens–I remember precisely where I was when S3 was down for a day. I was at the office, not doing much of anything, since literally everything on the Internet was broken.

You're much better off protecting against the mundane nuisances than the outright catastrophes.

Don't Touch It While It's Printing!

The most important thing I've learned from 3d printing is that once you've started something, commit. Press “print” and just walk away.

Still from ABC's situational comedy “Better Off Ted,” in which Veronic, Ted's boss passive-aggressively tells a subordinate to “Walk away, tall”

Seriously.

Fiddling with a print while it's printing is going to end badly. Every single time, without fail. Don't do it. If you can definitely, 100% tell that it isn't going to end well, your only recourse is to stop the build, pry the half-print off of the build plate, and try again.

When you put a new process in place, adopt a new tool, or release a new platform, it can be tempting to keep poking and prodding at it. To try and make it better. To “continuously improve” it.

I have found that a little bit of patience can often pay handsomely, both in terms of getting to something that is acceptably good enough faster, and in understanding precisely where the deficiencies are.

Now, if you'll excuse me, I have some filament to change out.

3d-printed replica of a Japanese Rock Garden

If You Liked That, You’ll Love These:

Building a new kind of consultancy

Building a new kind of consultancy

At Vivanti, we’re building a new type of cloud consultancy. One based on trust and empowerment. We are looking for savvy, technical people who want to forge their own path in the industry.