5 Things Every Software Engineer Should Try

In looking back on my career (no, I’m not that old, but I have been around long enough), there have been a few inflection points that have really helped me career-wise and they strike me as being generally applicable to software engineers/programmers who are interested in either getting better at their craft or in moving up to management or simply improve their breadth of knowledge.   I realize some of these suggestions may not be possible for you given your current work situation, especially if you are at a large company with much more rigid definitions of who can talk to customers, so don’t worry if you can’t do them all.  Also note, sometimes you may just need to ask!

Contribute to a Viable Open Source Project

Unless you live under a rock, you’ve heard about open source and you maybe even have a few small projects on Github or SourceForge.  All of that is well and good, but what I mean by “viable open source” is that you should make an attempt to contribute to a project of significant size and scope that your code has to go through a vetting process and, if accepted, will see it’s way into production in a large number of systems.  The things you’ll learn from doing this are numerous.  For me personally, it’s meant: writing better code, communicating better, more job opportunities on favorable terms, higher pay, more recognition, more understanding of other points of view and a thicker skin.  On that last point, your code will, at some point, be scrutinized and criticized.  It’s not personal (assuming you picked a good project and even if it is, try to separate yourself from it) and it’s only software.  Take it as a learning opportunity and make it better instead of getting offended.  This isn’t always easy and I know it’s something I struggle with, but I also know when I let go of ownership, the code (and me) always gets better and that’s really what matters.

As an extra bonus, from an employer standpoint, I find it much easier to hire people when they have a public track record of real code in production.  I’ll take an open source contributor over someone with comparable skills any day.

Sell Your Software

Yes, I literally mean you should go on sales calls, if possible.  In other words, I think you should put the geek in you on a shelf from time to time and have to explain what you do in plain English for others, not just your peers, to understand.  If you can’t explain what it is you do, why would anyone buy it?

Doing pre-sales has been invaluable to me as it required me to have to stand up in front of a real, living, breathing customer and explain to them why I think they should buy my software.    The first few times I did it, I was nervous as can be (no doubt exacerbated by the fact that I was working at a startup and we were just trying to get off the ground), but I made it through, got some coaching, and got better.

Selling software you wrote will give you real perspective on what you are building and why, it will also expose you to a ton of use cases and real feedback as to what is good and what is bad.  It will also humble you as well as bring you a new level of confidence.  You’ll also have a lot more respect for the people who make their living off of selling the stuff you wrote.  Additionally, you’ll also know first hand the pain of when things don’t go right in the code and make you wish you had written better tests!  Finally, in the long run, it should help you see the “big picture”.

Support Your Software

The flip side of selling your software is supporting it.  Find a way to take the first line calls to support, or at least be involved in them so that you can experience first hand the good, bad and ugly of the way people use your software.  Bug reports and escalations are one thing, hearing it first hand from a customer is yet another.  Besides the social skills needed, you’ll also need to be able to quickly get into a customer’s use case and their way of seeing your code and that will further illuminate where you are good and where you can be improved.  It also means knowing what to say and what not to say, as it is a fine line when dealing with paying customers.  As with selling, it will also give you a new found appreciation for the hard work support does to support the stuff you wrote.

Write/Train On Your Software

If you haven’t got my point yet, I’ll make it clear: I put a lot of value on engineers who can not only write the code but also communicate the how and why of that code to a variety of other people inside and outside of an organization.  By writing and training on your software, you have to explain complex technical details in a clear, concise, relatable way.  It will often highlight where things are broken from a user’s perspective, too.  I can’t tell you the number of times where, in writing or training on code I helped on, I realized, mid-sentence that the feature or functionality wasn’t quite right and I went back and fixed it.  This is especially true of API design.

Writing can also bring you more exposure and a wider audience, which feeds back into your need to take your game to the next level.  There are many, many opportunities out there to write technical content for websites and publishers.  Learn to pitch your idea (see, you are selling again!) and follow through on it and next thing you’ll know you’ll be a regular author and likely even get paid for it.

Make Some New Friends

Probably the single biggest game changer for me in terms of both learning and opportunities was an explicit effort to expand my personal network.  It isn’t easy and it definitely involves “putting yourself out there”, but the rewards are often quite significant and, in hindsight, the risks are quite small.

If you haven’t networked much outside of your immediate circles, I recommend a few things.  First and foremost, the key to networking is you have to genuinely want to meet new people and you have to genuinely expect nothing to come out of it other than a new connection.  Second, make a commitment to sustain the effort for several months and beyond.  It will get easier as you get more confidence and you learn from any mistakes.  Third, be yourself, but put an emphasis on listening to others.  Fourth, and this is still my weakest, learn and remember names.  I rarely forget a face, but names often slip by if I don’t make a concerted effort to learn the person’s name.  People are rather attached to their names, so let them know you think they are important by remembering their name.

Beyond these tips, there are a number of good books on the subject.  One of my favorites is “Love is the Killer App”.  It’s a hokey title, IMO, but the advice in the book is solid and the author does a good job of presenting it.  At the end of the day, put yourself out there and learn from the feedback you get.  If you find you are getting rejected a lot, ask a trusted friend to give you real feedback on what you can improve.  When in doubt, get the other person talking.

Bonus: Find Mentors

Chances are, you already know people that you respect for their ability to handle complex problems and communicate effectively.  Odds are also good that they would be willing to share their experiences with you and give you feedback on ways you can improve.  Learn from their wins as well as their mistakes and be open to their advice.  It won’t always be right, but you should at least consider what they are saying and then make a decision.  Personally, I’ve had the good fortune to have a friend who is also an executive coach (we met serendipitously, proving the value of putting yourself out there) and a business owner.  Throughout the years, I’ve also had a number of good bosses and colleagues who have acted as mentors over the years and to whom I’m forever indebted.  To get started, ask yourself who you respect the most and then go discuss the idea with them.  You may even want to consider hiring a coach if you can’t find a friend to fill that role.

Wrapping Up

Keep in mind, that all of these things are something you can do here and there periodically.  They typically don’t require big time or monetary commitments, but they do require you to get out of your comfort zone.

Finally, I’d be interested to hear other things programmers/engineers have done to improve their career/life.  What worked for you?  What didn’t work?

Dear Delta Airlines: Help me get home sooner!

Dear Delta,

I’m a long time Delta customer (and Northwest before that).  I fly you guys a lot.  Platinum (nearly Diamond, in fact) last year.  Platinum (maybe Diamond) this year.  Gold and silver before that.  I travel a lot for work and I fly Delta almost exclusively.   I like flying Delta and I like the perks that loyalty brings.  You have always treated me well and taken care of most things for me promptly and expertly.

Having said that, I’d like to request one small change to your SkyMiles program:  Please change Same Day Standby and Same Day Confirmed to be 24 hour standby and 24 hour confirmed.  I often book flights back home for the next day (after I’m done with my business) because I am never quite sure when things will finish up work wise for me.  For instance, I’m flying home tomorrow morning instead of tonight because I thought my meetings would go late.  However, my meetings often finish early, as they did today.  You have flights home for me tonight, but I can’t take them without paying a big fee or buying a new ticket b/c it’s not the “same day”, even though my flight is less than 12 hours from now.  This is silly and annoying and is needless red tape that prevents me from being home tonight instead of tomorrow afternoon.   When you travel a lot and have a family, that difference of 12 to 20 hours, believe it or not, is often the difference between seeing your kid’s baseball game and hearing about it on the phone or catching up with your spouse before they go of to work again in person versus on the phone.

I get that you won’t always have availability, but you often do, and I know from first hand experience that it is pretty simple to for you to move tickets around as you see fit (you do it all the time) so it really can’t be a cost issue.  Plus, you only offer it to Gold or above, who are your most loyal customers.  Thus, I ask you: please help me get home sooner.



New Blog

My site was been hacked (so getting tired of WordPress).  It was rather annoying to fix, so I just nuked my whole WordPress install and I am going to start from scratch.  I have a DB backup, so I may make some attempt to restore things.  The problem is, the inserts aren’t quite the same anymore so it will take some changes to get it to work.