"I saw that you are a senior Java consultant for many years, which is what I want to be, too. So I thought I'd connect to you and ask what it takes to get there..."

Somebody actually sent this to me. Somebody that I've never met. Pretty cool. ๐Ÿ˜ƒ So, what's the answer?


Well, first, what sort of credentials do I have that make me feel like I can or should answer this question? And why should you give that answer any credence? (When listening to any advice, you should always consider the source. In other words, you should only take advice from someone who is doing, or has done, what you want to do.)

So - let's take a look at my LinkedIn profile. Lots of "senior"'s and "developer"'s all over the place - going back (to some degree or another) a good 15 years. And that's not at just one or two shops. There's more than a half-dozen companies represented there, with stints lasting anywhere from 4 months to 4 years.

From where you're sitting, it's completely fair to doubt that I know what I'm talking about, regardless of background. But, compiling that sort of work history (both landing and keeping those gigs) without a good amount of demonstrable technical ability would require a whole lot of faking people out.

As far as raw technical intelligence, I don't have a ton of publicly-facing evidence to put forth. I've pretty much got this blog, which isn't necessarily packed to the gills with software development genius. But, I have written a few choice posts about Hibernate, JSF, etc. that people tend to stumble upon on a fairly regular basis and find helpful.

As far as success goes, the only objective measure I can serve up is my compensation. And while I'm not comfortable putting hard numbers out there like Patrick McKenzie does, I'll simply say that when I read threads on HackerNews or Business of Software about salary and rates, I don't feel underpaid. (Of course, I always feel that there is some unrealized upward flex available for the taking, but that doesn't necessarily translate into me feeling underpaid.)


OK, so much for credentials. (You either accept them or you don't. I'm not going for a hard sell here.) Looking back at the original question, the word used is "consultant". I've read discussions in the past where the participants debate the both fine and (to them) blatantly obvious differences between consulting and, well, non-consulting. I don't believe there is a universally-agreed definition. So, for the record, I consider myself a contractor. Not a consultant. And not a freelancer.

In my mind, consulting gigs are short, specialized, and high-level. And freelance gigs are short, repeating, and low-level. What I tend to do doesn't fit either of these molds. My gigs are long(er) - months or years. My skillset is general(er) - Java, the Swiss army knife of enterprise software development. And my deliverables are mid-level(er) - typically hands-on project design and development work, but not production support or maintenance.

Frankly, what I do doesn't differ all that much from what a number of the salaried employees I work with do. The two most significant differences are 1) I get paid by the hour and 2) it's very straightforward for my client to cut me.

With that being said, my ultimate answer to the "what it takes" question applies just as equally to consulting as it does to freelancing as it does to contracting. For that matter, the applicability of my answer isn't limited to Java, or even software development.

The Answer

So enough with the build-up. What's my answer? For the most part, I've already told you. Find someone who is doing (or has done) what you want to do and follow whatever advice they have to give. That's it. Now, while that may not be entirely satisfying or even actionable, you'll find that all concrete answer(s) flow down from this high-level answer.

O-o-o-ka-a-ay. That's great, but...

Yeah, I know - "what do I do next?" Simple. Find your "someone".

Find someone you respect, at least professionally. Someone that impresses you. Someone that you'd be happy to pattern your professional self after. Solicit their advice. Listen to what they say. Learn from them. Earn their respect in return for the time they offer you.

Of course, there's a word for this practice: mentorship. But, I avoid using that term because it sounds so formal. And how does one go about being mentored anyway? Well, I can only speak from my own experience, but I'd say the best way is to do it on the job. (I realize that there are other possible options such as hackathons and co-working spaces, but I have no personal insights to share regarding them.)

Look around your office. If you don't see any mentor candidates, and if you work in a larger company, try to move between departments. If you've exhausted the possibilities at your current workplace, change companies. If you've exhausted the possibilities in your current community/town, move. I know that might sound extreme, but there's a few standard reasons in life why people choose to move. Career advancement/enrichment/satisfaction is one of them.

I suppose that you could also find a mentor online, but again, I have no advice to offer on that. I feel that it would be pretty difficult to take a purely online relationship and foster it to a sufficiently personal level where the mentor would feel the desire to go out of their way to help the... mentee. ๐Ÿ˜ƒ

Looking back on my career, I was very fortunate to find myself working (at an early point) with some sharp, seasoned contractors. I worked alongside them for a couple years. During that time, I listened to their outlooks on the software development industry, profession, and craft. They helped guide me through the transition from salaried employee to independent contractor - a transition that, to this day, I consider invaluable. It was life-changing. Those few years spent working with them, feeding on their advice, got me to where I am today. And that's what you get from a good mentor.

In order to become successful as a software contractor, you need to work with someone who is currently doing it - and soak up their advice. Every other, more-specific concrete recommendation flows down from there. With that being said, if you're looking toward me as your "someone", and you want my specific bits of advice - ask. I'm happy to write more if anyone would find it valuable.