All the Life Changes. At Once.

I suspect that October and November 2015 will go down in the record books. I seem to have happened upon several life changes all at once. The first, and biggest of which being getting engaged. Truthfully, if you told me at this point last year I'd be writing that sentence today I would have had a good laugh at you. Secondary to that, I left my role at Elemica at the end of October and on Monday I'm starting a new position slinging code for Domino Data Lab.

With these changes I felt that this was an appropriate time to do an introspective blog post. So, here is what has been on my mind for the past week arranged in no particular order.

Leave the Team Better Off

I was at Elemica for nearly three years. Two months shy of that marker, actually. That's the longest position I've held since graduation. It was also one of those most rewarding positions I've held.

Now is the right time to make a move, but I can't help but take a bit of pause at the fact that there are some things and people I'm going to miss every day. I helped build some stuff that's pretty damn impressive. You can actually watch Arun, the VP of the Engineering Department, presenting it at Elemica's conference this year. Maybe the full impact of it doesn't translate outside the world of supply chain. If not then just trust me. It's awesome.

I'm hoping to be at Domino much longer than three years. But however long I'm there, however long I'm anywhere, I've realized that I have a responsibility to improve the team I'm on as much as I do to improve the product we're building. Whether I'm there a year or ten, I have an opportunity to improve any team I'm on.

At Elemica, that looked like being honest when I had a perspective that was contrary to the prevailing one on the team. It looked like being willing to slog through writing and rewriting Selenium tests to try and make them reliable. Sometimes it looked like taking a moment to tweak a Jenkins plugin or our Hubot. It could also look like walking someone through Lift's form handling step by step.

These are all things that are a little bit tangental to my primary goal of delivering functionality. They are, however, equally (if not more) important.

Commutes are Toxic

During my week off I've been working on passion projects. Mostly stuff like moving the Georgia General Assembly API to a free Heroku instance, working on making TravisCI build the Lift Framework snapshot releases, restructuring the finances for Crazy Goat Creative a bit, and working on a pet project that I hope to share soon.

Meanwhile I went ahead and moved into a coworking space that's not far from home. I debated a lot about actually joining a coworking space. Going to the office was formerly this incredibly depressing proposition for me. I wasn't sure whether or not I wanted to pay for one.

This week I've seen that now it's largely a non-event. On Monday I was able to leave to space, go get gas, pick up some stuff from Publix and go home. This took the same amount of time my commute home from Elemica would have taken. And guess what, I was in a much better mood at the end of it! I didn't have to sit in stop and go traffic down 400 and then on the downtown connector to get home. Regardless of the time of day I can normally get home in about 10 minutes.

Net-net: I don't think humans were designed to sit in cars. I realized that was having a huge impact on my mood and with that element removed from my regular, weekly routine I'm already much happier. Here's hoping that the sun comes out and I can start biking – and then become much healthier.

Life Things Matter

Getting engaged has been a whirlwind of an experience. That timed with DHH's Medium post "RECONSIDER" got me thinking again about the whole work/life balance thing. David said it pretty well, so I'll just quote him:

I wanted a life beyond work. Hobbies, family, and intellectual stimulation and pursuits beyond Hacker News, what the next-next-next JavaScript framework looks like, and how we can optimize our signup funnel.

I wanted to embrace the constraints of a roughly 40-hour work week and feel good about it once it was over. Not constantly thinking I owed someone more of my precious twenties and thirties. I only get those decades once, shit if I’m going to sell them to someone for a bigger buck a later day.

Minus the (what I think is a) typo at the end, this largely articulates my feelings on the matter: "Shit if I'm going to give that time away." I only get each year once and there are no do-overs.

I want to put a dent in the universe with my work. But while there will be periods of long days, I will not allow that to become a permanent lifestyle. It will be the exception to the rule and it will be time boxed and for a specific reason (e.g. "We broke the production system and it has to be fixed ASAP" or "We're backlogged and working on hiring more people or reducing scope to fix that problem."). If the day comes where I'm not holding to that standard, then I will move to rectify that as quickly as possible.

Maybe that means I'll never be a founder of a venture-backed startup or an Executive Vice President of anything. If so, I'm okay with that. My nights sitting next to Katie on the couch drinking wine and binging on How I Met Your Mother are far more precious to me than either of those distinctions.

Honestly, companies, investors, and everyone else should be encouraging that ordering of priorities. My last post was on the importance of empathy in software engineering. The truth is that if I'm building software for humans to use, I'm probably going build software more empathetically if I'm a complete, healthy human – physically, emotionally, and spiritually. At the end of the day, that translates to better software for the organization that writes my paycheck. That, in turn, translates to software that is more valuable to the customer and capable of bearing a higher price tag.

Also, I am guaranteed of one thing in this life: I will affect others. Software comes and goes. It's unlikely my name will ever be listed alongside Alan Turing for my contributions to Computer Science. But how I impact the people that fill my life is an effect that will ripple for decades. It is my responsibility to enjoy and be present with those people and impact them well. In the long term that will mean being a present husband, a present father, and a present friend. The challenge with that is that impacting people isn't something that can be put on autopilot. If I mentally check out of those relationships because work becomes too demanding I don't stop affecting those people. I start affecting them negatively.

No paycheck or dent in the universe matters if to achieve it I end up hurting the people closest to me, missing out on the beauty and the wonder that life has to offer, and breaking myself in the process.


Hopefully you've enjoyed reading this somewhat random collection of thoughts. Things are pretty exciting in my life right now and that's prompted a lot of thinking. If you made it this far, thank you for entertaining my little outlet.

Thoughts on Empathy in Engineering

I've become more and more aware recently of the importance of empathy in how I do my job. Which, in some ways, is a bit comical because if you were to list some adjectives to describe the classic stereotype of the software engineer you likely wouldn't mention "empathetic" in that list. I don't know that I would either. But, nonetheless, empathy for my users – understanding them – is increasingly important for what I do.

If I don't understand my users, their goals, and the realities of their day to day then I will build software that's frustrating for them to use. If I build software that's frustrating for them to use, then they're not going to want that software, regardless of how well it solves the problem for them. In software design we spend a good bit of time thinking about usability and how it impacts the decisions users make about what software they use. Oftentimes solving a problem isn't the hard part. Solving a problem in a way that makes the user want to buy and continue using your product is far more challenging.

I can write you a piece of software that does the same thing that Mint does in a few weeks, for example, but you probably wouldn't choose to use it over Mint because it wouldn't be solving that problem in a usable way. You would be so frustrated by how my solution works that you wouldn't use it.

This gap is becoming more important for a lot of verticals that have gotten away providing a poor user experience to users. My generation is getting older. And as we're getting older, we're moving up in the ranks of the organizations we're a part of. The number of people who grew up with iPods in their pockets will eventually take over leadership positions in organizations. As they do, the expectations they place on software their companies will purchase will increase.

Playing with new toys is fun. Whether your poison is Lift (like it is for me), React, Angular, Symphony, Rails, Sinatra, Express, Meteor, or whatever else you can name — if you want to build the best software for your users, you have to have a deep understanding of who they are, what they're doing, and why they're doing it.

Making the Case for the Cutting Edge at LambdaConf 2015

Yesterday, May 23rd, I gave my first talk ever to a conference at Lambda Conf 2015. This was a surreal experience, to be honest, and I'm immensely thankful to John and everyone else on the Lambda Conf team for giving me the opportunity to talk about our experience at Elemica with choosing Scala and Clojure as our primary tech stack.

In in interest of transparency I'll note that I honestly left the talk feeling that it didn't go so well. I want to share this because I know a lot of people who have recently got into speaking too, and maybe your first experiences were awesome. But, if you felt like it was a bit rougher than you expected then you should know you're not alone. Even with the level of preparation I put into it - which is more than I put into any of the talks I'd given at user groups before - I think my nerves got me a little bit. After the talk I had a few people come up and give me some encouraging feedback. One of which was Mike Kelland of BoldRadius, to whom I owe a public and huge thanks. I was a lot less bummed after our conversation.

But, all said, I don't think flubbed anything. I said what I came there to say, and was heard. And that's a big deal, especially for someone who primarily prefers to communicate in writing given the choice. A few parting thoughts from this experience:

  • I'm probably going to give talks for the first time at user groups in the future. Something that I'm learning through the process of starting to speak publicly is that I don't quite get an idea of how things are going to play until I give a talk to a live audience. Mostly because how I deliver something and how the audience responds becomes this cascading feedback loop. Rehearsing to myself doesn't have that quality and just doesn't give me the same amount of information with which to revise the talk in the future. So, I'm probably going to make a point to give a talk to a local user group before delivering it to a conference.
  • Soft talks can be oddballs at programming conferences. LambdaConf was a very concrete conference - in the sense that most of the talks were about concrete ideas or concepts that you could sink your teeth into at a engineering level. My talk, in contrast, was focused more on soft concepts – talking about some of the human things around the choice to pursue Scala and Clojure. In the future I'm going to try and be more contentious of that as I'm sending in proposals.
  • I, once again, have a new respect for speaking. The conference context kind of upped the ante on my respect for people who get up in front of an audience and deliver a talk. I'm going to try and be more actively encouraging to people who do that in the future, and you should too. It takes a lot out of you. Not joking. I crashed at 9pm last night. My body tried to crash at 6:30. Oof.

It was an incredibly challenging, but worthwhile, experience. This won't be the last conference talk I give. Like everything else it's an iterative process and I'm my biggest critic. And if you're interested in what I was talking about — click here to check out my slides. They're also available on the Speaking page of this site.

Finally, I enjoyed attending and meeting a bunch of other folks who are also passionate about functional programming. I got to hear a lot of great talks and meet some top-notch quality people. I got exposed to the idea of a virtual filesystem, learned a bit of Haskell and Erlang, and got to experience the beautiful - if rainy - Boulder. Looking forward to coming back next year - maybe as a speaker again if I have something to speak on and John and the team will have me. ;)

Onward and upward!