I Need a [Insert Tech Stack] Developer. NO YOU DON’T.

Battling to find software developers for your team or clients? Haven’t hired anyone in months and the pressure is building? This may be a thought-process game changer for you if it wasn’t common sense before.

The software development market is hot. Developers it seems are in short supply and filling positions is challenging.

Over the last few months I have been getting 2-3 Linkedin requests ,  messages and emails a week trying to get me to move jobs. This should have been flattering, but then I saw the kind of attention my peers were getting. I seem to be suffering from a mild tinge of jealousy akin to an instagram attention whore who just got upstaged by someone with more likes.

I hear stories of devs being hounded with daily calls , emails and endless Linkedin requests by recruiters and companies trying desperately to fill their open developer positions. One dev complained on his Linkedin page of being called unsolicited by a recruiter at his desk at his current employer. They literally asked the secretary to put them through , and made no secret of why they were calling. Reddit threads abound with ways to avoid recruiter “spam” , which is how developers are starting to view anyone who tries to contact them with an offer of potential employment.

Part of the reason this “shortage of developers” exists , and what I see a lot of nowadays , is the insistence of asking for a specific type of developer when recruiting. It isn’t (entirely) necessary.

Twisted Thinking

Here’s a typical advert taken line for line from a well-meaning potential employer :

“We are looking for a Mid to Senior level C# developer with around 6+ years experience particularly in MVC 5, EntityFramework and SQL. HTML5, CSS3 and jQuery are a plus.”

A C#/.Net developer you say? How about a Java one? Perhaps someone who has done C++? What about someone who’s done a bit of ruby (not rails)?  If they’re good , they will be capable of picking up Visual studio , an understanding of the .Net framework and a grasp of C# in a couple of weeks. HTML 5 is not really a skill. Javascript (jQuery is a javascript library) is something that can be picked up pretty quickly if you’ve fiddled with web stuff before and the basics of CSS most devs can grasp in a week or two.

Theres a risk that I describe moving tech stacks as more trivial than it is in reality. Maybe you won’t be perfectly competent from day one, and maybe you’ll need to do more Googling , and maybe you’ll initially be slower, but you’ll end up with just as good a result a few months down the line all things considered. Most importantly , you will not be an imaginary dev out there in the marketplace that one hopes to hire. You will be a bum in a seat producing work.

This type of thought process where complementary and “parallel” skills are considered is extremely rare for some reason. And yet , I have moved from C#/.NET to PHP to Python to Java (just a little) when duty called- and within a sensible timeframe.

It’s NOT cheaper to get a dev who “hits the ground running” anymore.

Invariably , the argument made against hiring across skillsets is cost. Companies don’t want to pay for initial ramp-up and training. They want someone to hit the ground running.

I see a major double standard with those that insist on many years of experience in their tech stack , and who complain about the lack of candidates , while at the same time spending 4-8 months on getting a candidate in and losing progress and business worth many times what they would have spent on simply getting a new hire up and running.

Example of Transitioning to Another Language in the Real World

A number of years ago ,to get an application the data it needed, I found I had to write a web scraper. (Don’t worry – it was all within the sites TOS) . A webscraper is simply a bot that goes onto the Internet and collects data from websites for later storage.

C# was not an ideal option for this , as it was a bit clunky and overbearing for the scripty nature of what was required. Python had libraries for the job that were ideal , and was more testable than C# in this case.

And so I moved over to Python. Here is a brief outline of how it went :

Day 1 What IDE? There are so many options. Don’t know which one I like best. Test them
Day 2 Why doesn’t this interpreter do what I expect out of the box? Config time.Meh
Day 3  Colons and indentation rules are annoying me now. Why can’t I have curly brackets?
Day 4 Spent time fixing a bug that turned out to be bad indentation on my part. f$#@!
Day 4 Time to import some libraries. Why doesn’t this one install? URGH
Day 7 Python doesn’t do lists as well as C#. There should be a better construct for this.
Day 10 I’m writing more and Googling less. I’m starting to get the hang of this!
Day 11 This variable didn’t produce the output I wanted. Type changed during runtime to string. Could I force this to be strictly typed?
Day 12 It feels like Python has forced a class type structure on a language that was supposed to be modular. It's a little clunky.
Day 15 It's getting easier. Python actually isn’t so bad.
Day 20 I’m at 85% productivity. This is looking up!

Hiring in the Real World

I offer hiring managers and recruiters the following bubble chart. I have attempted to place the major languages of the day in order of their layers of abstraction (read power , or how more can be accomplished with less code, while ignoring flexibility). A couple of things to note before we start an analysis of how this chart is useful :

  • It is somewhat data driven and somewhat subjective. (ie a rough guide only)
  • I may be “hating” more on PHP and Ruby than is fair
  • Assembly could refer to a number of intermediary languages.
  • Popularity is not equal to value or application suitability

Rules for hiring using the chart :

1 You can hire at the same layer of abstraction or above

2 You cannot generally move down the order of abstraction and if you do then not by much.

3 The closer the languages are to each other , the more aligned they will be and the easier it is to transition from one to another

Example of the change in thinking :

Let’s say we have a requirement for a software developer that knows Java. We could follow the usual process and traditional thinking with this ad :


Java Developer – Blah blah company has been in the game for x long and is looking for a senior java developer. You will need to be a team player , blah blah blah and have the following skills:

Competence in the following (relative to the seniority of the role):

Java Core APIs
JDBC – creating relational databases, queries and updates
OO Principles – polymorphism, inheritance, encapsulation
Debugging
JUnit/Unit Testing Framework
EJB or Spring Framework
JPA/Hibernate
RESTful Framework
Maven/ANT
GIT

And follow this process :

  1. Put out an ad for a Java developer.  5 yrs experience , Spring , EE etc required
  2. Applications trickle in. No one seems to be suitable
  3. Months go by
  4. Contracts are lost. Application development slows. New features are delayed.
  5. Urgency sets in. Someone who you wouldn’t have considered because of experience suddenly looks plausible.
  6. Salaries are reluctantly raised and the ad is put out again. No takers
  7. An average hire is made due to the pressure for a new developer now reaching fever pitch.

This doesn’t yield the results we are looking for. Lets change this up.

Our new method :


Software Developer Blah blah company has been in the game for x long and is looking for a senior java developer. You will need to be a team player , blah blah blah and have the following skills:

Competence in the following (relative to the seniority of the role):

Full stack , experience in Java , Ruby , C# , Go , C++ or other similar-level language required .

Relational database experience
OO Principles – polymorphism, inheritance, encapsulation
Debugging
Experience with a unit testing framework
Experience with a frontend framework and UI
Understanding and knowledge of REST
Experience using a command line build system
Experience using a code version control system

  1. Put out an ad for a software developer. Quadtriple the number of applications come in.
  2. Do the candidates have a solid understanding of computer science and the fundamentals of good software development? Conduct some phone interviews and pull some in for an interview
  3. Get those candidates to code in the language they are most comfortable in. Tailor each coding question or task to be doable in their language.
  4. Wrap up the interview process in 10 days. Hire the best person you can and then move on with the process of transitioning them to your tech stack

See the difference? The new ad and approach helps us cast as wide a net as possible while retaining the ability to quickly ramp up productivity. We almost always solve the problem of a lack of suitable candidates , and loss of progress and delays of business goals are minimized.

If you’re hiring developers and your ads look like the first example , then it’s time to change tack.

 

Leave a Reply

Your email address will not be published. Required fields are marked *