Career Advice for Programmers (YOW 2013)

Since I have a tendency to bang on every now and again about how we, as developers, could do better in managing our careers (for example, by creating CVs that don't suck, and by staying ahead of the curve), Dave Thomas asked me to speak for a mere 50 minutes on the subject at GOTO Aarhus, a talk I wasn't enormously happy with as there was no way to cover a lifetime of hard-fought experience in such a short time. Dave seemed to like something in it though, as he gave me the opportunity to present the topic again at YOW last December, and this time I think I managed to distill the important points into the (still ridiculously short) time allotted.

See the video here, and please give me any feedback you have.

I recognise there are many many more topics I could cover, so I'd better start making a list. Suggestions?

LinkedIn Etiquette

For no reason other than LinkedIn communications are starting to irritate me, here’s my personal LinkedIn Etiquette guide. Feel free to disagree with it all.

  1. I’m not going to accept invitations from recruiters. Not just because I’m not looking for a job (who knows what the future holds?), but because I believe it shows a lack of respect to my network to bring recruiters one step closer to being able to contact them all. It’s not about Evil or Good recruiters, but I really don’t want to make it easier for lazy recruiters to spam people I respect (caveat: there are people who are technically recruiters who I have added into my network, either because I know them personally or because they have proved their worth).
  2. If I get an invite without an introduction message from someone who’s name I don’t immediately recognise, I’m going to check out that profile to see if we have employers in common or common connections, but usually I won’t accept that invitation. I know LinkedIn makes it easy to click one button and request a connection, but I think my LinkedIn network is valuable and made up of people I know (even if I only met you once at a conference), and a short introduction reminding me of where I know you from (or why you’d like to connect) is going to help my poor, beleaguered memory.
  3. Endorsements - almost a total waste of time. People I have worked with and respect have accidentally endorsed me for things they know I’ve never worked on, simply because LinkedIn makes it too easy to click a button and endorse someone for two things they’ve already been endorsed for and a third thing which, through some LinkedIn magic algorithm, is probably related to what you’ve done before and LinkedIn hopes is only accidentally missing from your profile. If recommendations were too easy to game (and they were), endorsements are almost entirely valueless.

However, I do find LinkedIn enormously useful. I value it more than I think many others do for a few reasons:

  1. It encourages you to keep your CV/resume reasonably up to date. I personally believe everyone should do this, not because you might want to hop jobs at a moment’s notice (although it’s nice to be able to do that), but because a) it’s really difficult to remember what you did over the last 12 months, never mind a longer period - keeping your profile up to date means you can truly highlight the good stuff you’ve worked on, and b) if you’ve got nothing to add to your resume from the last 12 months, that’s a good sign that you’re not growing and your career needs a bit of love (if you think investing in your career is a Good Thing).
  2. It’s enormously useful for retaining a network of valuable contacts. This is why, in my opinion, one needs to be reasonably selective about who one adds to that network. If you were looking for a new job, for example, and you’d been selective about the recruiters you’d added to your network, those would be the first ones you’d contact, and you’d be reasonably certain of a quality service. But regardless of that, because not everyone is constantly job-seeking, if you’re looking for a specific person (for example, someone comes to interview for your company; or you’re looking for a great speaker for your conference/event; or someone approaches you about a job or an event to go to; or someone randomly e-mails you out of the blue and you’re not sure who they are) and they’re either in your network or are connected to someone in your network, you know that you either know them or someone you know knows them. That makes them a Real Human and not a spam-bot or someone who wants something from you without giving value in return.
  3. It’s not Facebook. Related to point 2, I am happy to add people I know only professionally (i.e. are not yet friends) to LinkedIn. I’m even happy to add people I don’t know personally if they don’t fall under rules 1 and 2 in the “I won’t add you if…” section. In Facebook, I have two (main) rules: I have to have met you in person (there are one or two exceptions but those are people I have known for a long time only over the interwebs); I have to have spoken to you in the last year, or want to speak to you in the next 12 months. This is for two reasons: 1) I want to keep my Facebook network relatively small so it’s more intimate, and therefore 2) I can share more personal things on there without feeling self conscious or wondering who’s going to see it. I have to be able to speak honestly on Facebook. On LinkedIn, I don’t need to be so fussy - I can add you to my network if I like you but you haven’t (yet) crossed into friendship; I can add you if I think I can be useful to you, or you to me; I can add you if I want a way to contact you (or want you to be able to contact me) but don’t have a pressing need to stay in touch frequently.

So, that’s an unnecessarily deep dive into my attitude towards LinkedIn. It’s probably not going to change anyone’s behaviour, but I feel better for at least explaining why I won’t necessarily add you back - all you need to do is type in the little invitation box to explain why we should be connected.

I value my connections, and I want to see that you do too.

Staying Ahead of the Curve

I had an interesting discussion last night at the LJC developer sessions, and it’s a topic that comes up again and again:

How do I stay ahead of the curve? There are so many technologies out there, and more coming along, I can’t even keep up with Java, let alone the other JVM languages, HTML5, JavaScript frameworks, NoSQL, Big Data…. argh!

Technology, particularly development, seems to move at an ever-increasing pace. Sure, the Internet makes it a lot easier for us to get access to information than in the Olden Days, when people probably had to read papers and books, and physically meet up to share knowledge, but that just makes the sheer volume of information even more overwhelming.

So how do you keep on top of all those technologies?

You don’t.

You can’t. If you devoted yourself to learning the same way you did at university (pfff, well, theoretically you devoted yourself to learning…), you could still never master every technology out there, and every new language and framework that pops up daily. Even people who pick a technology stack that’s suitable for purpose (let’s go with the old favourite Spring/Hibernate combo) can’t read every blog post about those technologies and see every conference talk that was ever videoed. To be the best even at Just Java, you’d have to be a master of concurrency, understand garbage collection, have read all revisions of Effective Java, know every detail of all versions of Java, including all the changes coming in Java 8, be aware of all the JSRs in progress. They’d have to have read about waterfall development, the Mythical Man-Month, XP, Scrum, Lean, Programmer Anarchy, so that they could know they are working in the most effective way for the business and team they are in.

All that as well as working 40 hours a week on the day job.

So to expect to know the ins and out of all current (and maybe dated) technologies, and all upcoming ones - not knowing which are just fads and which are going to be the Next Big Thing - is impossible.

But don’t you ask candidates how they stay current when you interview them?

Yes I do. And actually it’s their willingness to at least try, and their ability to filter out and select the things to investigate or be aware of that interests me, not their deep understanding of Scala when they’re working in a Java EE environment (for example).

There are two reasons that I can think of to “stay ahead of the curve”:

  1. To be more effective in your job
  2. To get your next job

If you’re aiming for point one, it’s a little easier to filter out the noise and focus on what’s relevant. In your place of work, there are going to be hard limits on new stuff you can use. For example:

  • Your systems guys will not allow new languages, even JVM ones, in a production environment. In which case, you don’t need to worry about learning them in any detail.
  • Your company has paid a heavy subscription fee for their existing database, therefore they will not be trying out funky NoSQL solutions. Fine, you don’t have to research them.
  • You’re working on a messaging system with no UI. In which case, you can let the new JavaScript frameworks rise and fall without worrying too much about them.
  • You work for a consultancy that specialises in government work, and documentation is sacred. So, don’t worry about going to a bunch of agile/lean conferences, you probably won’t be able to sell it to your customers.

Now I’m not saying these circumstances apply to everyone. And I’m not suggesting these are necessarily the best situations to be in.
But you can look at your current position and, if you intend to stay there, it might rule out a lot of the technology/process learning that’s available.

Point one suggests good places for research. For example:

  • You’re using Spring dependency injection and you don’t speak XML fluently. So you might research Spring wired up via Java and annotations, or you might look at Guice, or you might do a bit more reading around good practises in XML, or tools you can add to your IDE to make your life easier (Eclipse and IntelliJ both support XML refactoring).
  • Your Ant scripts are killing you, and you don’t know where your library jars should live. You could read a lot more about Ant, you might look into Maven, Ivy, and Gradle (hint - gradle is awesome if you don’t like programming in XML).
  • You spend all your time coercing objects into something Hibernate-shaped, and not actually delivering new functionality. Maybe you could become a Hibernate guru instead of just poking at it like most of us do, or you could investigate different persistence frameworks or mechanisms.

You get the idea. If you feel pressured to keep learning and you’re not looking for a new job, there’s plenty you can be doing within the framework of your day job. The best thing about this is that you might even be able to persuade your boss that you need to do some or all of this learning on work time, leaving you more time for your kids/spouse/drinking/XBox.

I’m really much more motivated to learn skills to find that great new job

Point two is a bit more tricky. When you’re looking for a new job, it seems like every job description contains all technologies under the sun; it seems like interviewers expect you to be an expert in all sorts of different areas; it’s impossible to tell which jobs are good and which are poor, so you apply for everything and try to learn everything to get to the interview.

Now if you’re already at the applying-for-a-new-job stage, you might not actually have time to learn everything under the sun. And if you’re still working at the current place and just looking around to see what’s out there, you might not have time to train yourself up on all those great new JavaScript frameworks while doing the day job.

How on earth do you pick which things to focus on?

Well, it’s surprisingly easy. Just pick the ones that interest you.

But what if I’m falling behind on technology X and it turns out to be The Next Big Thing?

Well, by the time it becomes the next big thing, you’ll have heard enough about it to know whether or not you care - either because it interests you or because it’s so big you should care. And by then, there will be plenty of knowledge out there (blogs, courses. conferences, books…) so you’ll be able to pick it up much easier than when it was at the embryonic stage and no-one really knew what to use it for. Java is, what, 17 years old now, and people are still starting to learn it now. No-one said you had to have coded with Java 1.0 in order to be effective in a Java 8 lambdas world. In fact, you could argue that those who learnt it early on might be less able to adjust to the current state of play.

So. Learn something because it interests you, or it’s fun, or you personally can see the value of it. Even the process of learning something new is valuable, even if the thing you learnt is not - it exercises those brain-muscles so they’re used to picking up something unfamiliar and playing with it.

But I see a thousand jobs for Scala/HTML5/<insert tech here>! Should I learn that?

Have you looked at Scala? Do you like it? Do you want to learn a whole new language? Do you want to spend the next two years of your career working in Scala? Because if you learn it to find a new job, and you do find a new Scala job, then you’re going to have to use it, and to continue to learn it. And if you don’t really give a crap about Scala, then why bother? Have you looked at the types of companies that are advertising jobs for Scala? Do you want to work there? Again, if not, don’t bother.

In our industry, particularly if you live and work in places like London, New York, Silicon Valley, there are lots of jobs, even in these Tough Economic Times. You don’t need to take any old job (unless you need a job Right Now, in which case I would advise you take Any Old Job and work on the side to find The Right Job to move to imminently).

The point is, you’re freaking out because there are all these different technologies and all these jobs that are looking for different combinations of all these different skills, and this is a Good Thing. You’ve been looking at it wrong - you think you need to be everything anyone wants, so that someone out there will pick you, like some sort of school sports team selection. But it’s not like that - the selection power is in your hands. You can wade through those millions of job postings and find the ones that interest you. You can invest in becoming skilled at the things you like, the things you enjoy, the things that scratch your intellectual itch, and you can then find a job that matches those skills. Even better, if you’re active in learning those skills, and visible at it (stack overflow, your blog, communities…), you’re going to improve your chance of getting a job in the area that fascinates you.

You don’t have to be good at everything. Just find the things that interest you, stuff you feel motivated to learn about, and then when you find a job that uses those skills, you know you’re in the right place.

So in fact, there is only one reason to stay ahead of the curve:

  1. Because you want to.

So it’s much easier to figure out what to spend time learning and what to ignore for now.

You don’t have to stay ahead of all the curves. You just have to stay within tolerance of your own curve.

How to make your CV Not Suck

When you’re applying for a job at LMAX, your CV (or résumé, for our American readers) usually comes through me and I decide whether to call you for a technical phone screen.

I’m going to let you into a secret.

I’m going to tell you the criteria I use when judging your CV.

Now, you could say this is a foolish thing for me to do, because now when you apply you’ll be “cheating” and writing your CV to pass these guidelines.

Good.

LMAX isn’t the only company that’s going to judge your CV based on these criteria. I firmly believe that an increase in quality of the CVs in our industry can only be A Good Thing. An increase in the quality of your CV is definitely A Good Thing for you.

Even more importantly, if I get CVs that do not pass these basic criteria, now I know you either don’t read the LMAX blogs (shame on you), or you’re not able to follow simple instructions (bodes poorly for your ability to learn within the company).

The thing that you have to keep in mind when you’re writing your CV is that the reader really does spend less than a minute reading it. It’s not fair, true. But it’s the way humans are. I’m not in HR or recruitment, I have a proper job as a software developer, and I need to get back to that as soon as I can. When I get CVs in batches of up to 12, as I regularly do, I’m not free to spend more than 10 minutes going through all of them.

The Easy Stuff

You must be able to spell

You really must. There are things called Spell Checkers and they are amazing. Some of these new-fangled pieces of software even show you your errors in this cool squiggly red underline in your document.

I’m reading your CV in Open Office, and if I see red squigglies under words that aren’t technologies or acronyms I’m going to wonder how good your attention to detail is.

You must use capital letters in the appropriate places###

It’s traditional to start a sentence with a capital. It’s also traditional to use a capital “I” not “i” when referring to oneself. We’re not 14 years old, we’re not writing an SMS to our mates. We’re applying for a proper job paying proper money.

Correct grammar is appreciated

Whether you’re a native English-speaker or not, you need to get someone else who is a native English-speaker to check the prose in your CV to see if it scans correctly. For me, it’s not about being prejudiced against you because you’re not a natural author, it’s a) attention to detail again and b) your ability to make yourself understood. If your sentence construction, choice of words or simple comma placement is off, I’ll have to read that sentence a couple of times to parse it and it’s going to trip me up and ruin my flow. I want to get a good feel for you from reading your CV, so if I stumble a few times I’m not going to feel like I connected with you.

Harder and fluffier

I don’t care which versions of Spring you’ve worked with

I know you need a checklist of technologies on your CV so it gets past the non-technical recruitment agents and get picked up via automated searches. This is a bigger problem with our industry than one I want to tackle right now. So I’ll let you off having buzzword bingo on your CV. However, your CV needs to be more than just a list of technologies you have used vaguely, or perhaps once read about.

It’s useful to me if a) you put the technology check list in a single place on your CV, b) you give an indication of your level of proficiency in that technology (novice/competent/master) or length of time you’ve used it in a commercial environment, and c) you organise them in some useful fashion - preferably the ones that are appropriate to the job you’re applying for near the top, or at least those you’re happiest with at the top. Alternatively put the checklist of technologies next to the role you used them in.

Often I will completely ignore this section because I’m more interested in your ability to learn and your passion for what you do.

I want to know about your passions

In the old days I used to fast forward to your hobbies and interests, but these days we’re encouraged not to put those on the CV in case you’re judged against them. Which seems like political correctness gone crazy, but then when you think about it you can infer a lot about a person from their hobbies and interests, and therefore you could be pre-judging them based on some criteria that is not at all associated with their ability to do the job. For example, if they have hobbies that take them all over England I might infer they have a car and can drive - OK, it’s a dumb example, but you get the idea.

These days, given that I’m trying to find great team members to work with me at LMAX, I’m looking for things like: your blog; any contributions to open source software; your involvement in a Java User Group (or other extra-curricular activity). I’m not going to discard you if you don’t have any of these things, but if you do it’s definitely extra brownie points for you.

I want to know if you worship at the altar of technology, or if you’re business-value driven

Either of these things is fine - we need people who are very business-focussed and people who are rabid about technology, as well as all those in between, to build a good team. Another axis of interest is people/process - are you passionate about people, about building a good team, about helping them to deliver?

Getting a feel for where you sit on these axes is not for me to discard you, but if you look like you’re strongly in one of these camps and I feel like we need a team member to really push that area, then you stand a much better chance of getting a phone interview.

I’ll get an indication of where you are by the way you talk about your roles and your achievements. This does not help me:

Senior Developer on a web administration application. Product was implemented using JavaScript, HTML, Spring, Hibernate, JMS, and MySQL.

This is much more useful:

I was part of a team of four developers implementing a web based administration application, commissioned to enable internal users to update the settings of our reporting tool. This saved the support staff approximately 4 hours every week, as they no longer needed to manually update the database. We used agile techniques such as daily standups and weekly iterations in order to provide quick feedback to the business.

(I made both of those up, by the way, before anyone starts trying to sue me for stealing something off their CV).

Here I can see:

  1. The size of the team, and your ability to work in a team
  2. You understood the business need you were trying to fulfill
  3. You have worked in an agile environment and at least pay lip service to why you were working that way.

I don’t really care about the specific technologies you used, the fact that you mentioned web-based and database gives me enough of a feel.

Sometimes prospective employers really do stalk you

Personally I think claims that prospective employers will check every facet of your web presence are somewhat over-exaggerated. If I barely have 60 seconds to read your CV, I’m not going to check you out on Facebook, my life is too short.

However, if you claim to have written a book I will look it up on Amazon. If you have a publication or example code, I will glance at those. If you’ve worked for a company I’ve worked for in the past, I’ll look you up on LinkedIn to see if we have any common connections (or worse, to see if I should remember you and simply don’t). I’ll also use LinkedIn if your CV is not screaming yes or no, to see if there’s an extra dimension in your profile which will tip me one way or the other.

So be aware of your web presence, particularly something that is aimed at your professional image like LinkedIn, and make sure it represents you the way you want it to.

In Conclusion

This post might be simply a good way to increase my own workload - every CV I get from now on may be an automatic pass, and then I have to call all of you before I can start weeding you out.

But I don’t mind too much about that. I get concerned sometimes that good people are not getting the interviews they deserve, not just at LMAX but across the industry, because they get almost no good CV advice. Frequently the people who are the first to read CVs are agencies who are not technologists. By all means, have words on there that will make your CV appear on their search results.
But you need to put something on there for me, a real developer, because strings of keywords tell me nothing about you.

If I can improve the quality of just one person’s CV with this post, I’m happy. If I have given you that first step towards that job you really want, then that’s even better.

Are you an awesome developer?

We are hiring!

If you think we’re doing something interesting, or if you think you can help us do our thing even better, come join us.  Your boss will be the dude who wrote Continuous Delivery, you’ll get a chance to experience what Danny calls meta-Agile (or Agile Agile), and you’ll really start to care about Domain-Driven Design<img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=trissramb-20&amp;l=as2&amp;o=1&amp;a=0321125215&amp;camp=217145&amp;creative=399377&#34; style="border: none !important; margin: 0px !important;" width="1" />.

Ideally we’re after Java people, but at the heart of it we want people who are dead passionate about development.

Apply via the Stack Overflow Careers advert (you get extra brownie points if you mention my blog).

Job Hunting

I’ve learnt a lot professionally and personally during my time here in New York, but the time has come to go back “home”.

I’ll be relocating to London in September. I guess it won’t hurt to mention on here that I’ll be looking for an exciting new job when I get back there. Check out my LinkedIn profile if you are in the market for a Java tech team lead.