On tattoos and programming

I like thinking about software.  From a nitty-gritty hashing algorithm all the way to release deployment and branching strategy, I revel in considering architecture, searching for patterns and losing myself in the ever-changing sea of technology.

At my core, I’m a programmer.  I’ve been writing code since I can remember, starting with Basic on my dad’s old Trash-80 back in the early 80’s.  When I screw up, which is actually a key part of my coding process – I learn, use the backspace key, and I move on.  My life is affected only in that I spent a few extra minutes, and maybe learned a lesson I’ll hopefully be able to apply to future problems.

I’ve always been a programmer, but I’ve never been a tattoo artist.

By contrast, a tattoo artist doesn’t get to use the backspace key.  There is no ‘refactoring’ a tattoo.  Once ink has been applied to skin the decision is permanent, and the affected life belongs to someone else.  The artist’s design, decisions, and tiny movements literally etching his or her intent into another human’s life.

At best, the freedom to just throw it out and start over gives programmers the ability to try outside-the-box solutions, or solve problems with methods we don’t well understand, learning as we go.  This I think, has been software development’s greatest enabler.  With no real permanence and carrying the potential windfall of massively successful (and lucrative) products, the stakes are low and the prize is huge.

At its worst however, this disposable-design-methodology introduces an innate lack of applied value to technical solutions.  Unrecognized, this leads to poorly thought-out designs and less maintainable implementations.

FACT: The Earth’s servers are littered with proof-of-concept code that became production implementations.

There are tens of thousands of lines of unmaintainable, misunderstood, and often unreadable code carrying out financial transactions, travel plans, medical insurance claims, and top secret military correspondence.  Developers know this, because we wrote it.

It’s unfair to ask software developers to treat every line of code they write as production level.  The beauty of software is that it can be refactored.  But, we need to consider the implications of the “just fix it for now” mentality in every method we create.  What you build today can become the bedrock of a mission-critical system tomorrow.