Aware Recruitment. Part 2: Expectations

This article is a second part about recruitment in Java world. If you haven’t read first part you can find it here.

As I promised we will cover just one topic- comparing clients and developers expectations, then I will try to show you how to look at 2 real job offers.

Deep into client expectations

If you work for IT industry for more than two years as a recruiter, you can ask yourself a question- does “regular job offer” for particular position today is different than job offer for same position a few years ago? What about expectations of known technologies, about additional tools or infrastructure?

Of course answer for this question is yes. Technologies, methodologies and tools are different now than some time ago. You can expect, that in next two years they will change again. Probably some frameworks will be still in use (in new versions), some will disappear and there will be a lot of new ones. That’s normal situation- you need to get use to it.

How to manage it? First of all try to look at Technology Radar (by Thoughtworks) every month. It’s a place where you can find usage of frameworks, technologies, platforms, tools and techniques categorized as following:

  1. Adopt -Things that showed up recently and companies should think about using them
  2. Trial – Still quite new on the market
  3. Asses – Worth exploring, quite stable position on the market
  4. Hold – Usually if company use this technology it’s the moment when they should start thinking about migration to something newer

TIP: You can click on every item in radar and check why it is in specific category.

Note that technology radar is published every month so if you can’t find specific technology it does not mean anything- it could be hold and disappear totally, it could never been there, its still to new- even for adopt category. Look at A-Z Radar – maybe you will find history of particular item there.

Every time when you see new item in your client’s expectations it’s good to check it on radar or just search for it in web. You can find out that it  can be something interesting and could be attractive for some developers.

Remember that your client have some needs and requests which cannot be easily changed. Your task is to find items that can be potentially attractive to someone among this expectations and try to emphasise them.

What drives developers?

This part is far too complicated so it has to be simplified for this article purposes. If you need to explore this topic more deeply I can suggest Jurgen Appelo’s CHAMPFROGS presentations and articles (Example herehere and here :)). In my opinion the best information about motivation can be found  there. Also I encourage you to read chapter about recruitment in Sandro Mancuso’s Software Craftsmanship book (or even whole book).

However, I can briefly describe a few major factors which developers take care about:

Projects

There are three kind of developers out there. Those who like short-term projects with fairly new technologies, those who like stable long-term projects with technologies that are known to them and those who just don’t care.

First group can be called ‘explorer type’. They want to touch as many new things as they are able to. So if you have candidate that ask you a few times about some new technologies (Adopt or Trial from Technology Radar), then probably you are dealing with the explorer. So don’t waste your time on them if you have to find someone for long term financial project in old technologies. Explorer will never take such an offer.

Second group is a ‘stable type’. They need stabilization and probably don’t have time or just don’t want to learn new things and technologies. Developers from this category want long term projects so all financial projects or public project can be attractive to them. If you looking for somebody to be a part of short-term project- they will refuse an offer.

Third group just don’t care about project they are working in. This could be result of many reasons- they just want to earn money and don’t care about they every-day job, they’re looking for something else in their next job (for example they want to try new position or they are interested in specific organization culture).

Remember that every developer can switch to another group. Someone can be an explorer type but because of any reason he or she can become stable type or vice versa. Never put any kind of label to anyone for a long term.

People

Depending on needs this point is what keeps developers on their current position (mostly). One can look for people from whom he or she can learn and almost anyone don’t hesitate to work with friends and people with similar interests 🙂

Money

Simple one 🙂 For sure it’s hard to recruit someone offering salary below current one. But if someone decided to change job and have a few options with salary that satisfies his or her expectations then its not that important to offer more than your “opponents”. Of course it also depends. If someone don’t care about projects, and don’t worry about learning and finding new friends then the only answer is cash. But also you can be sure that this kind of people will change project as soon as someone will offer them higher salary.

Also its great if you can say about minimum and maximum salary offered by client or your company for position that you are recruiting for. A lot of developers don’t even want to loose their time if they don’t know if you meet their expectations. Especially experienced developers.

Other expectations

There are a lot of expectations that can be discussed:

  1. Position – there a lot of people that can change work only because of position in the company structure. Some experienced testers wants to start as developers, some developers wants to try their chances as project leader or manager.
  2. Multicultural environment – Some developers wants to work in multi cultural organizations. Possibility of journeys is sometimes an advantage.
  3. Working hours – some developers see flexible working hours as convenient. Additionally, possibility of remote working can be a big plus.
  4. Location – Sometimes your office location is also important ;P
  5. Organization -Some devs don’t prefer to work in Agile culture, some just hate Waterfall. Some hates large companies, some don’t want to trust small ones.
  6. Benefits – In fact I don’t understand this one- but developers often asks about additional benefits in their job. So private health care, sport benefits, etc. can affect their choice.

Summary

In my opinion before you start calling any developers try to analyse factors described above. I’m pretty sure candidates will ask questions regarding these topics. Do not colourise, just give them honest answers but emphasise the advantages keeping in mind which candidate type you are dealing with.

Imagine that you receive description for senior java position. What will you do? First of all ask client about all of described expectations. Be prepared with answers. Then try to find out if client looks for developer to particular project or just for “one of company projects”. It could be hard to find senior developer for “any project”. Especially if he or she cares about projects. If you have possibility try to prepare job offer giving as much information as possible… in points. Try to simplify it as much as possible. Be concrete. You can try with some funny or unusual job offer – this may work, but remember that in the end if you look for professionals, giving all information will be the best option and will save your time in the future. You will receive CVs of candidates that are really interested in this particular position. Otherwise you will recruit 1 person per 50 meetings. Believe me you don’t need a thousand of CVs where half of them will not meet client expectations. Once again: rule is simple- be concrete and honest.

Expectations in real world job offers

Job offer 1, Java Programmer

(Some info about company)

Send your CV to us if:

  • You want to work on innovative projects
  • You want to use new technologies every day
  • You really care about continuous improvement of your skills

And:

  • You know J2EE and J2SE
  • You have strong knowledge about Oracle Weblogic, RedHat JBoss
  • You have knowledge of Spring, Hibernate
  • You know about SVN, Eclipse IDE, Ant and Maven tools,
  • You have sense of humor

You will:

  • Programming according to prepared design assumptions
  • Create, modify and comment source code
  • Solve problems in product environment
  • (Few more)

What we offer:

  • Attractive salary
  • Ability to deploy innovative solutions
  • Development of your competences

What I see here as developer at first place is some kind of lie. I see innovative projects and new technologies and then J2EE (version 1.4: November 11, 2003, after this version they change name for JEE. Now we have JEE7!). I see Ant (this one is never used in any project started in recent two years. I hope :)), I see Spring and Hibernate (Nothing fancy, just standard). Where are these new technologies?

I see that if I will go there I will have to write code according to prepared design assumptions. Let me think- we are talking about some project assumptions or they have some kind of Analyst? And I will create code– Great! (Is anywhere Java developer without possibility of writing source code?). Also there is information about Weblogic and JBoss. They are both huge application servers (JBoss is replaced now as Wildfly for community version and JBoss EAP for commercial version- probably we have to deal with old version here).

Unfortunately there is no info about particular project so this company probably is trying to hire  people for a few projects at the same time.

What in my opinion should be done here:

  1. If any of these technologies are newer- write it there please!
  2. If company use some other technologies- add it.
  3. What about databases (Hibernate suggest that there are used some sql relational db, but which one?)
  4. Don’t lie. This company is probably looking for developers in some long-term projects. Put information about stable environment!
  5. Solve problems in product environments – it means supporting existing systems. A lot of developers don’t like this kind of job. Check with client if this will be support, ask how much of support task will be assigned to new developer and if possible put this information in job offer.

Job offer 2, Junior Java Programmer

I will put only requirements here:

Requirements:

  • Commercial experience in Java/ Java SE/ Java EE software development,
  • UML knowledge,
  • Ability to design and create web applications,
  • Good knowledge of the OOP will be an advantage,
  • Practical experience with relational databases,
  • Knowledge of Application Servers WebLogic/JBoss,
  • Knowledge of Spring Web Flow, PrimeFaces, Drools, WebServices, jQuery will be an advantage

What I see here as developer:

  • Ability to design and create web applications. Seriously? That kind of points i read like “Ability to write on keyboard – one or two hands is a must”.
  • Good knowledge of the OOP will be an advantage – it means they want to hire junior. This also can suggest that company cares about design, but – not for sure.
  • UML – Too much discussion. For someone it will mean that this company stays in middle ages, for some people it will mean that this company cares about design.
  • Commercial experience in Java/ Java SE/ Java EE software development and Practical experience with relational databases – You need to have experience in Java and relational databases. Ok- simple one.

Finally in last point I can see some kind of technology stack:

  1. Spring Web Flow
  2. PrimeFaces
  3. Drools
  4. WebServices
  5. jQuery

Spring Web Flow is part of Spring MVC. PrimeFaces suggest they are using JSF (All ***Faces suggest it). There are a lot of people that hate JSF (Look here) but out there are also fans of this technology. Drools, WebServices, jQuery- this may attract someone.

As you can read client don’t expect knowledge about all technologies (we want to hire junior so that’s totally fine). Still in my opinion writing down technology stack for project could be nice addition. Let developers out there know what technologies they will be dealing with. Unfortunately sometimes expectations and “nice to have” in job offers don’t even stay close to real project requirements.

That’s it!

Please let me know if you like these series. I hope that after this chapter you will be more aware about how complicated situation is on IT market. Note that at the time your client or boss tries to get as best people as possible, developers try to find as good company and project as possible as well. Your role is to meet all those expectations.

Aware Recruitment. Part 2: Expectations

Aware recruitment. Part 1: Introduction

This article is for you if you work as a recruiter, have to find some Java developers, but have totally no idea what these buzzy words means: JDK, JPA, JSF, EJB, etc.

First of all – the topic is huge. So please note that this article doesn’t cover all answers for all questions and all technology relations. Still – it should cover basics and I hope that you feel much better while talking to developers 🙂 Please remember that I have to simplify a lot of things!

Why is this important?

When anybody starts asking you about technologies or anything tech-related it’s probably easier just answer that it’s not within your competences. But… using this approach you can lose some good candidates. Out there are a lot of similar technologies. Your client can ask to find someone with experience in Hibernate. Hibernate is just an implementation of JPA  so you can check every candidate that have JPA in CV (there are other implementations of JPA). Knowledge about these relations can boost your productivity. Lets be more aware of Java world!

Typical (simple) web application

First thing that you have to be familiar with is basic concept about what kind of developer you are looking for. Look at these terms:

  • Frontend – everything that application users can see,
  • Backend – everything what is “behind” frontend,
  • Fullstack – frontend + backend.

Frontend-Backend

Generally, creating web application, you can see 3 different blocks: frontend (basically this is a web page that user sees with buttons, links and text), backend (this part generates all data for front end and can make some other things – like sending scheduled newsletter, choose some random promotion for every day, check our daily balance and a lot more) and DB (Database – this is a place where we store all persisted data like our clients, products, invoices).

Is that all?

It looks like there is not too much to talk about. BUT in fact there is much more. Developers have their own environment with special tools to build their applications, there are a lot of infrastructure around application and around development environment as well. So if we want to hire developer we will have to check not only technologies that are connected to application. All tools that are used on daily basis by client’s team are also very important. Imagine that you want to hire an accountant and you have a perfect candidate. He have very good knowledge about current law and have experience in similar company to yours. Seems like ideal. Now imagine that this particular person has never seen a computer and any accounting software. In his previous job they do everything in old-school way on paper and he personally has never used computer so far. It could change your mind I think. And that kind of problems occur very often in software industries. Companies use very different set of tools and these tools are not always up to date.

Before we try to go deeper let’s try to describe all kind of “groups” that we will have to cover:

  1. Frontend technologies
  2. Backend technologies
  3. Databases
  4. Operating systems
  5. Infrastructure elements
  6. Building Tools and dependency management
  7. Testing libraries and frameworks
  8. Virtualization solutions
  9. Management methodologies
  10. Management systems
  11. Code Version Control Systems
  12. Continuous Integration and Continuous Delivery Solutions
  13. Other

That’s a lot. And thats why I must split this story to few articles.

 Backend overview

Basically, when we are talking about Java applications we can separate concepts by its “size” or by its purpose (please note that this is how I try to categorize them for You). When we try to categorize concepts by size we will got these 3 elements:

  • Standards – some abstract concepts or standards that developers need to obey while doing particular things. Standards are very important – if particular developer know some library that follow some standards then he or she can quite easily start working with another library that follow same standard. Some examples: JPA, JAXB, JAX-RS, JAX-WS, JMS. Need more? Look here.
  • Frameworks – big things. Imagine that frameworks are some big blocks that cover a lot of problems (In the same time they create a lot of new problems :)). Choosing one particular framework pushes developers to make specific choices within their architecture. Frameworks sometimes covers only one part of application needs, sometimes a lot of them. Examples: Spring, Play, Jersey, CXF, JUnit
  • Libraries – smallest part. You need to know what the most popular libraries are used out there, but remember that a good developer can learn using a new library within a few days. For example: Guava, Lombok, JodaTime.

If we try to categorize them by purpose, we will have something like this (don’t worry if you are not familiar by these names):

  • Endpoint services – these are elements that have to serve “answers”. Endpoint as the name suggests, is a place in the code that will give calculated answers. Imagine that you are just about to buy some books online. This application frontend will have to connect backend and get your current list of books in your basket from particular endpoint. Developer will have to create some “point” that will have to calculate this result. For example: Jersey, Struts.
  • Database services – these elements just simplify developers to work with persisted data (like orders or availability of books in our imaginary store). So every application that use a database also have to use some database services. Examples: Hibernate, MyBatis, Spring-Data
  • Middle services – these elements connects endpoints with database services. Examples: Spring-Security, EJB

Frontend overview

We have few kinds of applications today:

  1. Desktop applications – These are programs that works on your computer directly. For example Word® or Outlook®. Also Browsers are desktop applications 🙂
  2. Web Applications – Works in your browser. For example Amazon®, Gmail® or Facebook®.
  3. Mobile Applications – Apps that works on your mobile phone. There is a lot of web applications that have their own mobile apps and a lot of “only mobile” apps as well.
  4. Console Applications – Apps with very simplified user interface.
  5. No-frontend Applications – Applications that don’t have any frontend.

Desktop applications

There are a lot of technologies that are able to provide particular kind of application. For example Java desktop applications are created mostly in javaFX technology today. A few years ago Swing was the most popular library. There is also AWT– its ancestor. So if you see that someone knows Swing and your client want a developer with JavaFX knowledge you can try to ask if this particular developer have some knowledge about JavaFX or ask your client if Swing knowledge is sufficient. Unfortunately these two don’t have a lot in common. But if you see in clients requirements that he wants Swing and JavaFX you can for sure ask why- because it doesn’t make any sense to write any application in these two at the same time. They are mutually exclusive.

Web applications

Every web page is just:

But, this is a bit more complicated because everything can be generated or delivered in a lot of different ways.

Mobile applications

There are a lot of mobile devices that give possibility to use Java. Almost every device has its own library and approach so it’s quite hard to cover them all. I will try to give a little overview about Android world as it’s most popular platform today.

DB overview

Database is just a container for data. If you don’t want to lose some particular file you store it on your hard drive. In application world database works similar but its far more complicated. There are a lot of different databases:

  • RDBMS – Relational Database Management System. Most popular conception where data can have relations. For example Your basket has one-to-many relation to products. So You have one basket while shopping and you can put as many products as you like in it.
  • NoSQL – Databases that have different conception than tabular idea used in relational ones. If we want to use NoSQL database, we need to choose one as there are a lot of them:

 Summary

The purpose of this intro is to show spectrum of issues that every recruiter should be familiar with in my opinion. I have choosen three most important topics for this article – I hope now its a bit more obvious how this “java world” works. From now on- when you get your client’s expectations try to classify them as suggested above and then try to find similar technologies that can possibly cover same principles or standards. This will help you looking at particular technologies in candidates resumes.

Next chapter will be a bit different we will cover one topic and then I will give you some example requirements from real-world job offer and show how to look at this offer and how used technologies are connected to each other.

Aware recruitment. Part 1: Introduction