18 June 2019

My Principles for Hiring Software Engineers

Hiring is difficult. Hiring reliable, talented software engineers is even more difficult. In fact, hiring is probably the most arduous task that managers must handle, no matter what type of business you are conducting. And, based on the topic of Marc Andreessen's famous article Why Software is Eating the World, every conceivable industry is now being dominated by companies that are adept at developing software. So, the competition for good software engineers is pretty steep right now and will remain this way for the foreseeable future.

TL;DR (too long didn't read):
  1. The candidate must have a demonstrated ability and hunger to continually learn 
  2. The candidate must be a culture fit for the environment and the people
  3. The candidate must demonstrate humility

On with the background...

Throughout my years of hiring experience that began 20+ years ago, I have learned a thing or two. I've read many articles and books about hiring in the software industry and heard many opinions on the topic. The result of my years of experience is a set of principles that I follow when hiring. But before I get to these principles, let me explain what lead me to them.

Because I'm hiring from a management standpoint, I pay attention to aspects beyond just the candidate with the best technical skills and/or qualifications. I focus on team building which encompasses a myriad of aspects far beyond just technical aptitude. For me, team building requires the consideration of many different cross-cutting aspects. Below are just a few of the skills that candidates must possess:
  • Exhibit the skills necessary for software development
  • Demonstrate the ability to constantly learn
  • Want to work as a team and collaborate closely
  • Behave like a professional 
  • Manage their own work schedule
  • Fit the culture 
  • Demonstrate empathy and humility
  • Not be an asshole
  • ...
Many of these skills can be taught and even bad habits can be broken with the right coaching, but the candidate must come through the door with some base skills intact. Let me walk through what I mean here. 

Consider trying to teach someone a complex task. First, if the complex task requires a large amount of prerequisite knowledge (like software development), then the candidate must demonstrate a certain level of technical aptitude. Let's assume they can successfully demonstrate their technical chops. Second, trying to teach someone is pointless if they are not interested in having others help them to learn or assume that they can figure it out themselves. In other words, sitting in the corner and coding away with zero communication with others is not allowed. Not only must the candidate be open to coaching and learning from others, they need to know how to learn and they must be proficient at learning. If the candidate possesses some of these base skills with the ability to learn and the willingness to be taught, then they can be brought up to speed over time. So, what I'm really looking for are some indicators of these characteristics in the candidates. These indicators are the principles that I have identified.

When I was asked some years ago to summarize these principles, I referred to them as culture-building. When building a culture, leaders must focus on the behaviors, expectations and norms that are most important for the environment and the work being done. Upon much consideration and over a long period of time, I was able to distill my hiring to the following three principles:

  1. The candidate must have a demonstrated ability and hunger to continually learn 
  2. The candidate must be a culture fit for the environment and the people
  3. The candidate must demonstrate humility
In my experience, these three principles serve as indicators for someone who might be a fit for our culture and the position on the software development team. Neither are these principles generic nor are they fool proof. You must adjust for different hiring needs. Also, we have had a few duds over the years, but our turnover rate is less than 10% which is pretty good. Such a low turnover rate is partially due to hiring well and partially due to the benefits, compensation and perks from working for a large, global company. Without these benefits, all the good hiring practices in the world won't stop your turnover rate from increasing over time. I believe that you should pay people enough that they won't go elsewhere only for more money.

These three principles serve as a litmus test for a broad set of aspects as I noted further above. Here is some explanation around these principles:

  • The candidate must have a demonstrated ability and hunger to continually learn - I have met some engineers through my career who chose to go very deep with a very narrow skill set and no interest in spending time on things outside this narrow track. Without the interest to learn new topics and, the desire to do so all the time on an on-going basis, I have watched these people never move their skill set, never stretch themselves. For some positions, this approach is necessary. But for many/most positions, given the changing landscape in technology, I have found that the best candidates are always will to make themselves uncomfortable to learn new things.
  • The candidate must be a culture fit for the environment and the people - Culture fit can mean a many different things. But, as I mentioned above, for me this term embodies the behaviors, expectations, norms, thinking, what is acceptable/unacceptable, working time, work ethic, etc. During your interviews with a candidate, I have found it to be invaluable to include folks from the team where the open position exists. Everyone should be coached to take note of both verbal and non-verbal cues from candidates. Then, assessing such cues after the interview with the entire group will oftentimes can tell a much different story. Also, the questions you ask candidates can really tell an interesting story.
  • The candidate must demonstrate humility - This one is a bit odd for some people because it delves deeper into the psychological aspects of a candidate, but it has proven to be very important over time. Anyone who has worked with people who have big egos will be able to recognize this -- the rock star developer who ignores input from others, the developer who sits in the corner coding away to his liking and everyone else be damned, the developer who has high standards for themselves but does not want to take the time coach younger or newer team members and instead chooses to chastise them, etc. When hiring for a team, you are doing team building this needs to be taken seriously. Teams of developers should operate like a team, not like a ship full of pirates. This requires the ability to empathize with teammates, to assist one another, to exhibit a compassion for others, to be respectful, to be kind and to be humble. Without these characteristics, there may be serious disagreements on a team, even if those disagreements are not vocalized.

While these principles have worked for me, they may not work for others for various reasons. In the past, I have read that people don't leave a company, they leave a manager. While this can certainly be true (I've had my fair share of bad managers), I have left numerous companies not because of my manager, but because of the culture and the processes within the company. The three principles that I have outlined above assume that your company culture and processes are helpful, useful and not problematic. If they are problematic, then as a manager you should be working toward improving them so that they are not problematic. When you the culture and/or the processes are standing in your way of good hiring, all the principles in the world will not help you.

19 September 2018

Installing PostgreSQL 9.6 on macOS 10.13.6 via MacPorts for Development Purposes

After finally receiving a new MacBook Pro with 2.9 Ghz, 6-core i9 processor and 32gb of memory, I am reinstalling all of my development tools. Not only is the big increase in resources really useful from the development point of view, but the computer is lighter and thinner as well. That being said, there are still things I do not like, such as the keyboard, the touchbar (I miss the tactile feedback from the escape key which, as a Vim user, I use constantly) and some other minor things. For my own purposes, I usually document the steps to make it easier in the future. But I also figured it might help other folks out there to achieve the same ends.


Having documented this procedure once or twice before, I'm going to keep this brief.






BTW, below are the start/stop scripts that I created for PostgreSQL:



06 September 2018

GopherCon Denver 2018

Recently I attended GopherCon 2018 in Denver and really enjoyed the whole event. There were about 1500 people there and I really learned a lot. One of my teams writes Kubernetes operators using Golang which got me into writing some Golang myself.

On the first day, we attended a workshop titled Advanced Ultimate Go that was taught by Bill Kennedy from Ardan Labs and it was excellent. Not only is Bill incredibly knowledgeable with Golang (he has years of experience not only in Golang but also in C++) but he is also an extremely good teacher. I learned a lot in a single day and I would have loved to have this class extend for another day or even two.

Coming from a background of mainly Java for 20+ years, the Java community has an amazing piece of engineering in the JVM that handles most performance related concerns for us. We design Java classes however we please and we make use of any data structures we please and never really give it a second thought simply because the JVM handles all the real mechanics for us. With Golang, this is not the case. Although Golang has garbage collection (which is really nice, I hated using malloc() and free() in C) it's very different than what JVM does. Also, in many ways, the Go language is very succinct compared to Java. Both in terms of the amount of code you must write (Golang requires a lot less boilerplate code) to the ease of deployment with Golang (you have a single binary to deploy, no dependencies or CLASSPATH to manage). That being said, I'm still not sure that I would completely switch all web development away from Java to Golang. While the Golang learning curve is a lot easier than Scala, the issue I see are the implications on performance with the code you write. Whereas with Java, while there are performance concerns, as I said above the JVM handles a tremendous amount of things under the covers so that we don't have to care nearly as much.

Having spoken at many, many conferences over the years, I was very pleasantly surprised by the number of female attendees and speakers! I saw more talks delivered by women than I saw delivered by men which was excellent! The community seemed very open and engaging to everyone which I really liked. Being in the software industry for so long, it's still shocking to me how much of it is dominated by males. Anyway, I really enjoyed the cultural and gender diversity at Golang.

There is one minor change that I would like to suggest to the organizers of the Golang conference. Many years ago, I spoke at a conference in Denmark where I first saw this. On tables next to the doors at the back of a room where talks are taking place, there are big glass bowls with three piles of Post-It size paper, each pile a different color -- red, yellow and green. As attendees exit the room, they are asked to grab a single piece of paper in the color that represents how you felt about the presentation/talk. When the talk completes and the room is empty, the conference organizers gather the papers from the bowl, tally them up and provide the stats to the speaker. It's basically like a quick rating of what attendees thought of the talk. This small system does not replace the comment cards that organizers always ask of attendees because this is how attendees elaborate on they rated the talk the way they did. Both systems of rating are important because they deliver two different but equally important types of data to the organizers and the speakers. Anyway, this my two cents.

I really enjoyed GopherCon for a variety of reasons and I would love to attend again. Since the conference I have written a lot more Golang code and the more I write the more I like it. In my mind, Golang should be the goto language for systems programming, DevOps type stuff. While it can easily handle general web development tasks, I'm not sure yet if I would drop Java in favor of Go. I guess I need to keep coding away in both.

29 July 2018

Vacation and Hiking in Crested Butte

Last week my family and I took a week's vacation in Crested Butte to do some hiking and relaxing in the beautiful Colorado Rocky Mountains. Although we missed the Crested Butte Wildflower Festival by one week, we still enjoyed the flowers on our hikes.

As we explored the Crested Butte area and enjoyed numerous hikes, we got to spend time together as a family which I really enjoy doing. It's hard to believe that my girls are basically adults now (they are 15 and 20 years old). Bailey even got a second week of altitude camp in for her cross country training by running every day that we were there.

My in-laws even joined us with our two nephews and we all had a very relaxing time together. We even rented some paddle boards and went to Lake Irwin one day. This wasn't something that would have been very easy for me to do, so I enjoyed watching everyone experience the paddle boards for the first time in a cold mountain lake.

Crested Butte is a sleepy little mountain town with a well-known ski resort. We enjoyed hanging out in town, checking out the restaurants and shops, and also finding trails to explore all around the area, including on the ski mountain. Unfortunately, the Crested Butte ski resort was recently acquired by Vail Resorts. This means that it will be completely over-developed soon enough, everything will become too pricy and too crowded with traffic just like all the other resorts it owns. What a drag.

Later in the week, we visited a friend in Lake City and hiked Spring Creek Pass, a high mountain pass with an average grade of 7.5% at 10,901 feet. My phone told me that I climbed 50 flights of stairs that day which was quite an achievement for my withered legs. When we returned to the car, we took a photo by the trailhead sign and Janene had her arm around me and said, 'Your legs are shaking, you need to sit down.' I just chuckled and said, 'Yeah, I know.' Even so, I loved it! I am so thankful to be able to feel that exhaustion from completing a difficult hike.

23 March 2018

More Muscle Movement Discovered Recently

Recently I paid a visit to my physical therapist. I only see every 2-3 months to check in and guide me on the physical therapy work that I do on my own. She always checks out my progress to see how my body is doing and this time she found something new -- the tibialis muscles in both my legs are moving now!

The anterior tibialis muscles are what allow you to flex your feet upwards (this is called dorsal flexion). So far, I have only been able to press my feet down (this is called plantar flexion) because this is controlled by the calf muscles. But now that the anterior tibialis muscles are moving ever so slightly, I can begin to rebuild these as well. Just like my calves are taking time, these muscles will also take time to rebuild as well.

I am still working to rebuild my calf muscles and this is slow. My physical therapist reminded me that I'm not just strengthening my calves. I literally had no calf muscles left. So I am rebuilding my calves from nothing which is much more difficult. She also said that at this point, we have no idea if the calves are fully firing or not. In situations where there is nerve damage, you never know if you are getting a full squeeze from the muscle or if the whole muscle is firing yet. This makes the work much, much more difficult. She also told me that this is why most people give up.

My calves are increasing in size and strength, but they are very far from 100% functionality or strength. I still have a long way to go. But I still feel lucky to be where I'm at today with my body still healing.

04 September 2017

New Braces and Hiking in Colorado

After about a year-and-a-half of wearing my old carbon fiber AFO braces (Ankle and Foot Orthoses), I recently got a new pair of Phat Braces which are also made of carbon fiber, but have a much better warranty and are widely used by people everywhere.  The big difference between my old braces and the new Phat Braces is that the Phat Braces are taller and stiffer (but they are beginning to soften a bit). They come up my leg to right below my knee which is further than my old braces . This makes them much more stable and it which allows me to balance and walk much easier. They also have some flexible plastic that wraps around the foot (as you can see in the image to the right) which also helps to provide more stability. The biggest benefit about them so far, however, is that it did not take my body six weeks to adjust to them. The previous braces actually took six weeks for my body to adjust and I was in pain the entire time. The company that provided them told me that's just how it goes. Through that adjustment period, I had to have at least a dozen manual adjustments to the carbon fiber (e.g., heat them up, bend out here and there, etc.), probably closer to 18 or so. With the new Phat Braces, I've only had two adjustments and my body has already adjusted to them -- literally less than a week. In fact, I have had the Phat Braces two weeks now and yesterday I did my first true Colorado hike since my injury in April 2014!


Yesterday we decided to go hiking in Evergreen, CO because we were trying to get back to the spot where I proposed to Janene 20 years ago. We thought it would be cool to go back there because later this month Janene and I will be celebrating our 20th wedding anniversary. I was a bit intimidated when we started the hike because of the elevation gain on the trail and the number of large rocks that you hike over on the trail. I did take a single arm crutch with me but it almost made things more difficult because of the angle at which you hold the arm crutch vs. the angle of the rocks on such an uphill elevation. Also, my new braces make going uphill difficult because they are still stiff, but they will soften a bit more in time. But with Janene's help, I completed the hike. Janene did make a good suggestion that instead of using an arm crutch I should consider getting some hiking poles. Because you hold them at a different angle, it could make going uphill and downhill over rocks easier for me. So, I'm going to try some out soon at REI.

Although the distance was not that great (1.7 miles), this was the most uphill/downhill I have done since my spinal cord injury 3.5 years ago -- I actually impressed myself. As proof of the level of workout for my body, my lower back and my hips were really tired after the hike and sore this morning. But I really enjoyed getting out for a hike with Janene and Bailey. So, I'm really looking forward to doing more hiking. I guess I can really start enjoying the fact that we live in Colorado again!

27 April 2017

Three Years After

Monday, April 24th marked the third anniversary of my spinal cord injury. It seems like the injury took place so long ago now and yet it has only been three years. So much has happened in my family's life in the last three years. I now have a 19-year-old who is about ready to complete her first year of college and a 14-year-old who is getting ready to enter high school in August. Through all of these experiences along this journey, I now feel like I am emerging from the other side. I believe that I have finally found peace with this whole ordeal. It has not been easy to get to this point and it's difficult to convey how hard-fought my successes continue to be. But those closest to me know, and that's what matters to me.

Gratitude

As I look back at all the photos and videos Janene has taken over this three year period, read through the Caring Bridge posts and my blog posts, the progress I have made is pretty amazing to me. Believe it or not, I actually have a lot of gratitude for the fact that this experience happened to me. Yes, I just said that I am thankful for the experience. I did not arrive at this place easily or lightly, so stop and consider that statement for a moment. After three years of pondering every aspect of this entire situation, I feel that I am a better person for it in many ways. This whole experience forced me to get myself in order and I'm now a better person for it.

From the beginning of this experience three years ago, I have been lucky enough to be surrounded by people who provided me a constant stream of positive support. From the folks I worked with at the hospitals to all of my family, friends and co-workers, the positive vibes are what have inspired me to keep going. There were also a couple of notable things that two people told me that I have hung on to that have kept me going to this day:
  • My wife Janene has always taught our girls that no matter what you're doing in life, you need to 'fake it 'til you make it'. This catchphrase helps you to feel confident and optimistic about something until you gain the necessary experience to actually feel genuinely assured that you have reached a successful point. Although she has always intended this for the benefit of our daughters, I have been able to internalize it and use it to my own benefit in my recovery. Repeating this statement in my head has taken me quite far and I continue to use it to this day. Thank you so much, Janene. I love you!
  • My friend Greg, who has had two spinal cord injuries in his life (can you believe that?!), told me something very early on in my journey, that I held in my head to help me get through the first year and beyond. He said something like, 'I know you you are not in a place where you can understand what this means yet, but you will get there in time. Just do everything you can to make it through the first year and everything will seem 1000% better. You won't be totally healed in one year, but you will feel much, much better.' Ironically, I saw Greg the week of my first year anniversary and I told him about this and he didn't even remember telling me this. I think he was quite surprised that I held on to it for so long, but it was truly a lifeline. Thank you, Greg.

Lesson Learned

I have learned a lot in three years as this experience has taught me a lot, especially the way that you handle an experience. Most importantly, I've learned that when you are faced with a horribly painful experience (emotionally, mentally, physically) that changes your life, you can choose to one of two paths:
  1. Either, you can be angry, resistant, resentful and stuck on the fact that something was taken from you. I have met plenty of people on my journey who were here and until they change their outlook, they won't be able to move on.
  2. Or, you can acknowledge that it sucks but still feel gratitude for the positive aspects and for being able to be alive to experience it all. I haven't met any people who can say that they feel thankful for their experience with a spinal cord injury, but I have read about some. It wasn't easy for me to get to this point.
And this certainly doesn't mean that I'm done. My recovery will continue for years.

On that note, singer-songwriter Ryan Adams who I have listened to for years summarizes my whole point best in the following interview:
He says it best by summarizing it this way: Pain helps us learn who we really are.

Reminders Along the Journey

Just recently, one of my colleagues from our Munich, Germany headquarters visited my office in Boulder. I have not seen this guy in person since before the accident so he was really shocked to see me walking and to see how well I am doing now. He said he was so surprised because the last he heard from me I was still in the wheelchair (the look on his face was priceless!). It's moments like this one that remind me of how far I've come and continue to drive me forward.

Thank you to everyone who has helped me in any way along this journey.