Looking forward to 2014 (late post)

Oops! I wrote this back in December but somehow forgot to post it. It’s a bit late, but I think it still has value.

Early this year I put up my list of developer goals for 2013. Here’s a quick summary:

  1. Learn Git
    • I’ve been using Git exclusively for source control for 10 months at Wattpad. I wouldn’t classify myself as an expert just yet, but I’m very comfortable using it and most commands I use are built into my muscle memory now.
  2. Launch an app that generates money
    • While I haven’t created and launched an app of my own that charges money, earlier this year I was heavily involved in a new project at work that required integration with Stripe for processing transactions with customer cards. I’m going to consider this a 50% success.
  3. Publish some open source code
    • I haven’t actually published any code yet, but lots of time has been spent learning the tools that I would need to do so (Git, GitHub, BitBucket, Markdown).
  4. Write automated tests for most of my code
    • I write more tests for my code than I did a year ago, but I don’t think I’m at the point where I’m more likely to have tests for my code than not. At work we’re pushing very hard towards TDD, and I’d say we’re getting close. I’m confident it will get there.
  5. Find a mentor
    • 100% complete! Very early in the year through the magic of Twitter I was connected with Jeff Carouth, a PHP dev. out in Texas. We’ve had a number of online chats and even a few Skype calls to talk about various development topics. Our discussions often turned to Domain Driven Design (DDD), a concept that I was familiar with in name only, but now understand much better. I’m currently working on applying DDD to some Javascript projects that I’m working on.

Looking back at the list I’m a bit surprised to see that overall I have done decently well. Far better than in previous years where I didn’t end up touching any of my goals throughout the year.

It’s not your employer’s job to keep you at the top of your game

This past weekend I attended the TrueNorth PHP conference, hosted by the GTA PHP user group. It’s the second year that the event has been held and I attended last year as well. Based on my experience it’s a great event, and the only PHP focused conference that takes place in the Toronto area.

As with most conferences, sometimes the most insightful things come from the hallway conversations that happen outside of the scheduled talks. This conference was no different. There was one specific conversation that got my attention. I was talking to a couple of guys that were lightly complaining about how their employer doesn’t send them to any conferences, and that the were only able to come to this one because it happened to be in the neighbourhood.

My opinion on this is that as a developer, you need to take responsibility for your own professional development. Your employer hired you to perform a specific job, so as long as they are providing the tools required to get the job done and paying you your agreed salary, they’re holding up their end of the bargain. If you want to learn new skills, experiment with new technology, sharpen your saw or whatever, that’s up to you (although don’t be surprised if you later get canned if you never attempt to get better at what you do). Your company being willing to foot the bill for these things is a perk, not a term of employment. It’s a little different if there’s a course or conference that your employer asks you to attend, in this situation they have decided that there is some business benefit to be had by you attending, so I do feel they should cover your costs.

For me, my employer probably would have paid for my conference ticket to True North but I didn’t ask them to. I wanted to go because I have a strong connection to the PHP community and I knew that there was going to be the possibility for some great conversations. It’s the same reason that I watch lots of online tutorials, listen to podcasts and reach out to others on sites like Stackoverflow. I need to constantly be in a state of growth, otherwise I quickly start to feel like I’m stagnating or falling behind and that’s just not acceptable to me, and it shouldn’t be acceptable to you either.

So take ownership of you skill development, you’ll be happy that you did.

Update (Nov. 15th, 2013): So it turns out that through absolute serendipity a friend of mine that I met through the PHP mentoring community just happened to post a similar post on his blog a bit over a week before I wrote this.  I think he’s managed to distill the idea better than I have, so you should check out his post over at http://carouth.com/blog/2013/11/03/its-your-career/

My Core Values

The idea behind core values is that it’s a set of principles that guide your actions, your decisions and how you interact with others.  It’s not a new concept, although I’m pretty sure that I  heard about it most recently on the Entreleadership podcast (one that was just recently added to my list).  I spent a fair bit of time over the last couple of weeks thinking about what things I value in life, both professionally and personally and came up with the following list of core values:

Accountability – If I make a mistake, I want to own that mistake and do what needs to be done to make it right.  Conversely, I also expect others do to the same with their interactions with me.   If they make a mistake they’ll own up to it and correct it, not pass the buck by blaming it on somebody else.

Integrity - For me, integrity means not compromising my values when it’s the more convenient or profitable option.  This means that I won’t tell a customer that we’ll ship something on March 16th in order to land a contract if I already know that it isn’t going to be possible.

Honesty – There’s a lot of value in getting a straight answer from somebody.  Being honest with somebody doesn’t require you to be mean, there are constructive ways to give people feedback that isn’t necessarily positive.  I want people to come away from their interactions with me knowing that they got the truth from me, not just my assumption of what they wanted to hear.

Quality  – I want the things that I produce to be good.  If it’s a piece of software, then I’m embarrassed when somebody discovers a bug.  If it’s something physical, then I want it to feel and look like it was made well, and stand the test of time as proof.

Balance – my non-working life is very important to me, especially my family and social activities.  I’m not willing to be constantly sacrificing these things in order to work.  At the same time, I fully understand that balance isn’t uniform, there will be times where the scale is going to have to tip further to one side than the other.  As long as in the end it gets back to even then I’m ok with that.

What values drive your day-to-day life?

My ToDos for 2013 (or resolutions, if you’re into that)

I like having a roadmap, it’s a great way to focus your mind towards a goal.  Personally I find that it’s also a great way to practice brainstorming, scope management, estimation and execution.  So, here’s my list of developer type things that I plan to achieve in 2013.

  • learn git
    • I’ve used both Subversion (SVN) and Mercurial (HG) for years, and I don’t regret my time spent with either of these systems.  However, it seems that at the moment git is the cat’s ass in terms of version control, especially for open-source projects.  I have very minimal experience with git, having only really used it to check out a copy of an open-source project for use in an application that I’m working on.
  • launch an app that generates money
    • Building an application is easy, and I truly believe that anybody with access to a computer can do it.  Building an application that other people use, and are willing to pay money for, is a whole different bag of rice and requires a different set of skills.   By building something that generates actual dollars, I’ll bet exercising skills that most developers that are working at a job don’t get a chance to do, which will make me a better overall developer.
  • publish some open source code
    • As DHH just recently said on the Giant Robots Smashing into other Giant Robots podcast, “If you limit your exposure enough, anybody can be the best at anything” (or something like that).  I now strongly feel that by putting my work out there for other smarter than me people to see, I’ll become a smarter and better developer.  Or, I’ll learn that I actually am the smartest developer out there… (incredibly unlikely)
  • write automated tests for most of my code
    • 2012 clearly indicated to me that automated tests add a ton of value to a codebase, both in terms of overall design and maintainability.  For code that I now have tests for, I’m so much faster at making changes with confidence, allowing me to get more done than I have ever done before.  In 2013 I want to keep this going,  so that in the end I can get more done.
  • find a mentor
    • At GrantStream Inc. I am one of the most senior developers on the team (7 years).  In order for me to continue to grow and learn, I feel that I need to learn from developers that have both more and different experience than I do.  As a start, I’ll be adding my name to the list over at phpmentoring.org.

Do you have any developer-focused goals for 2013?  Anything you think I should add to this list for myself?  Let me know in the comments.

“We lost a lot of good men out there”

Today we lost a member of our development team. It sucks. Really.

Vince Vaughn and Owen Wilson

The team member we lost was one of those guys that I thought would be here forever, so his sudden (and unexpected) departure was a bit of a wake up call for me. It reminded me that if you have smart people, you need to keep them engaged by giving them smart people problems to solve. The strongest devs on your team aren’t just going to sit at a keyboard all day working on whatever you say just because they’re a nice guy. That will work for a little while perhaps, but eventually even the nicest of guys will start to lose interest if they’re only doing uninteresting work.

If you want your best developers to stick around for the long haul, you really need to make a conscious effort to engage them on a regular basis. This means finding interesting, challenging problems for them to work on. Sure, there’s going to be times where uninteresting work just needs to get done, but as soon as those times are over you need to unleash your people again. If you’re always busy with this boring kind of work, then your going to have serious problems someday, because its going to be almost impossible for you to keep good people onboard anyway, especially once they figure out what they’ve signed up for.

What sorts of things do you do to make sure your teams are engaged?