June 21, 2015

My Father

This is the first Father's Day I've experienced without my father. He was always there for me when I needed him, and he's the reason I wanted to be an engineer. I wish beyond anything else that I could tell him that, but too often I let my life get in the way.

He was always interested in whatever I was interested in. In my numerous leaps from fandom to fandom, he would share in the jokes and the adulations. We saw more movies together than I could count. We shared a love of music, even if our preferred genres weren't always compatible. I wish we had listened to more and saw more movies together.

We listened to Rush Limbaugh and Sean Hannity when I was younger, before I moved from that end of the political spectrum. He would often attempt to win me back. I wish I had listened more and engaged more with him about that.

He never got in to video games, but he always ensured I had the latest system. He would occasionally try to play one and would laugh a deep laugh at his inability to do so. Even when money was tight, he always made sure that I had a computer. He paid for my subscription to Ultima Online and later EverQuest, where I could escape to another world. Eventually, I met my wife through those worlds.

He had so many ideas on new companies to build, new ways to make money. I tried to convince him not to waste time with that. I should have been more supportive as he was to me. I know he never got over the unfortunate loss of a company earlier in his life.

Although he didn't fully understand it, he was very supportive of my struggle with bipolar. As men do, we had trouble talking about emotional issues like that. I wish I had opened up to him more.

I hope I will live a life that would have made him proud. I was very proud of him. 

January 30, 2014

Write Less Code

As I've gotten further in my career, I often find myself defaulting to writing new code to solve problems that arise. This is something I am actively trying to stop doing. Here are some things to think about to help.

Don't reinvent the wheel. Chances are, your super-unique-special-snowflake problem isn't actually that unique or special, you just think it is. A great example that I am guilty of is starting to build a web based Cron manager. I thought I needed a way for people to schedule tasks to run on a remote server that pull down code via git and run a command with some environment variables. I thought my needs were special enough that I needed to write my own: but I was wrong. I ended up just installing Jenkins and being done with it. I was then surprised with the amount of functionality baked right in to Jenkins and furthermore into its plugins.

Don't underestimate time investments. Continuing with my previous example of a web Cron, I thought it would be a simple thing to write. Maybe it would have been, but I forgot about the Long Tail - maintenance. What about when I need to grab code from SVN and execute? What about security testing? What about UI design? So on and so forth. By instead using existing tools I was able to benefit from the collective work of many others that already looked into these issues and more. Maybe they didn't solve it in exactly the same way as I would have, sure; but I didn't need to write it.

Focus on core business. At Mutual Mobile, running tasks on servers is decidedly not our core business. Why spend time writing a custom solution that may, with some luck and hard work, come close to 80% of an existing solution's capabilities when my time can be spent more wisely working on the things that are core? There are plenty of problems that are super-unique-special-snowflakes, that's what your company was formed to fix. Don't waste time on things that someone else has already solved!

It's tough as someone who lives and breathes writing code to know when not to write code. But I think it's an important skill many in our industry need to get better at. I'm working on it every day, and I think you should too.