Someone in our office asked me an odd
question a while back. How do we chose what software to write. At first
the obvious answers came up but then it dawned on me that I was
missing the real reason.
The standard answer to that question
given by any engineer would be, “It solves some problem”. Well
duh! Of course. Do we ever write software or build something that
doesn't solve a problem? Well yeah, we do. I once had a contest
with a friend to see who could write a general solution to solve a
Rubik's cube in the smallest number of lines of code. That's harder
then it sounds. Is solving a Rubik's cube a problem? Kind of, but
not really. Solving a problem is what all engineering whether
software, hardware, or any other type of engineering is all about.
That is what makes us engineers breath!
Software's entire purpose in life is to
solve some problem. Somewhere inside software is a little hamster
running around trying to fix something, make something easier, or
just plain do something. That hamster's whole goal in life is to
make the user of that software's life easier, more productive and
just plain better. Throughout history mankind has slowly moved the
tedious jobs, the mundane from himself onto others, then machines,
the computers, and today our robots. We create those hamsters to
solve problems. So that's why we write software.
How about a business need? Do we write
software because some business process or mechanism is screaming and
yelling for a solution. Oh yeah. Just look at how many thousands
of little one off Access database or Excel spreadsheets show up
throughout most businesses. People all over a business, not just
software developers go around solving problems the best way they know
how. So, yes, I write software because a business need is saying,
“Fix me! Fix me!”.
How about when something is bugging me.
It happens all the time. Some mindless task has finally reached my
threshold of 'enough'. I'll spend the next few hours writing a
quick piece of software to never have to do that task ever again.
Because it'll make money?
Unfortunately, I still need food and shelter. Maybe someday
somebody will solve that problem but it's going to take a while.
I'd love to say we don't write software for this reason. But it
wouldn't be true. Until software engineers all have patrons, like
Leonardo DaVinci did, then we have to make money. Perhaps, someday
I'll retire, not likely, and go write software for some not for
profit entity. Oh, wait quite of number of my friends, colleagues
and I do that already. Hmm, yes, we write software because it will
make money, but once again, that's not the real reason.
Because I want to learn something? Oh
yeah! Absolutely, 1000%! I am a learning magnet. Instead of
watching TV (sorry watching Big Brother is a bit predictable), I tend
to read a book, watch a class room video, a vblog, listen to some
podcast, go read the proceedings of some conference. All those
things and several thousand other things tend inevitably to lead to
writing some piece of software or creating some hardware just to
learn something new. Not because I need it, but just because I can.
Every single, GOOD developer I know writes software at home to
learn stuff. Without exception. But that's not the real reason.
We are however getting closer to the real answer.
Ok, fine there's many reasons why I
write software. Perhaps, it will be easier to write about why I
don't write software.
There's times I or my team write
software that I just hate. It's usually something that already
exists. It's been done before. There's eighteen thousand versions
already out there. There's nothing new about it. But we have to do
it because someone is forcing us. Generally when that happens, I am
bored. It's a struggle to get up and go to work everyday. You can
see and hear it in the faces of the team too. They are not enthused.
Just plain bored. Want to kill a team? Rinse and Repeat and your
team will be bald in a few months.
There's an old story about a Cherokee
Elder that sold a necklace to a New Yorker for a dollar (ok, ok, it's
an old story). The New Yorker came back a few months later and
asked if the Elder would make and sell him one hundred of the
necklaces. The New Yorker's plan was to sell them in the city with a
huge mark up. He thought he was going to be rich! Due to the
large quantity of necklaces he was buying the New Yorker thought the
Elder would charge him much less then one dollar. “I'll sell you
them for $100 a piece.”, said the Elder. “What!”, exclaimed
the New Yorker. Calmly the Elder replied that making one necklace
was fun and required great craftsmanship, but making one hundred just
became tedious and required much more effort to keep the
craftsmanship to acceptable levels.
The exact same concepts apply in
developing software and hardware. Making one can be a proverbial
blast, making ten of the same exact piece of software. Not so much
fun! Good teams and good developers want to be stretched.
Ok, maybe I can't answer Why I don't
write software either.
But wait, isn't there a clue in those
last two ideas. And I don't believe I'm alone in this. The real
reason I write software or build hardware: It's almost euphoric.
Creativity, stretching oneself,
stretching the team, watching the look in a team member's eye when
they just came up with the solution to some problem. It's just
plain fun!
Sometimes it's debugging. Finding that
elusive little bug that's kept you and your team at bay for a week is
what I tell my wife about when I go home. Ok, she has no idea what
I'm talking about but she listens faithfully for a few minutes.
Sometimes it's in the design. Trying
to find a way to build this huge cathedral out of these 100,000
bricks is a challenge. Especially, if the bricks are the wrong size.
Other times, it's watching the silly
little robot stumble as it goes down a ramp. Ok, why did we not
think about this thing walking down a ramp? Stairs are easy.
Ramps. Hmmm.
Sometimes it's working with a great
team. A great team is perhaps the most incredible thing you can
experience after sex and religion. And on a good day of writing
software I might question one of those. You guess which one.
When a good team is in tune, no egos,
all focused on solving a difficult problem the world just vanishes!
You actually forget what time it is. You realize you are hungry
when your wife says, “Are you going to eat, supper is cold”?
Once you've lived in that environment you will spend the rest of your
days trying to get it back. It reminds me of an interview I once
saw with Buzz Aldrin. After you've walked on the moon, there's no
other place you want to be.
Sometimes, it's watching two computers
spin up and start doing the work that use to take fifty computers.
Sometimes, it's watching ten people do
the work that should have taken 100. You stand back looking at them
celebrating and think “We actually did it! That should have been
impossible. Yet it's done!”.
Sometimes it's when no one calls you to
report a trouble. The team is done with the project and is standing
around saying, “Ok, when are the trouble reports going to start
coming in. Did we flip the switch? Let's check.” Other times,
it's telling your client that you're done. And they say, “What? I
thought we were weeks away.”
Once, in a while, it's scratching your
head with two other developers saying, “Ok, now how in the world
did she do that?”.
Sometimes, it's setting in a room with
twelve other developers and you suddenly realize that no one has said
a word for the last two hours. Yet somehow you've been communicating
ideas all along.
Other times, it's knock down drag out
fights at a white board. Red scribbles everywhere. Flying
erasers. Coffee shop napkins are laid out all over the floor as the
blueprints of the next industrial revolution.
That's why I write software. That's
how I choose what software to write, and what software my teams will
write. It's time to go do something cool! See you in the
trenches. Let's go have fun.
So, if you have a problem that everyone
is telling you it can't be solved or it's really tough. Give me a
call. Those are the fun ones!