What I Evaluate My Workers On

I design tests that only the meticulous, hard working, and the curious can pass.

The baseline for me is to assume good googling skills.

Programming languages change all the time and, usually, within six google searches, you can find the latest updates. Similar to Kevin Bacon’s (Frigyes Karinthy’s) six degrees of separation, I like to say it’s six degrees of google searches…. also, I always remind people to “GTS”- google that $h1t, when I can’t remember the syntax exactly 🙂

So what makes a good programmer?

Note: This is just my opinion and not everyone agrees, GTS for alternative views!….I try to screen for these top five traits:

  1. Determination
  2. Curiosity
  3. Proactiveness
  4. Fast Applied Learning
  5. Resourcefulness

I’ll explain each one below but take it with a grain of salt as not everyone might agree to my thinking.

  1. Determination

When I post a job ad, I post a repo for them to clone… most likely a gitlab repo and ask them to clone the repo and try to solve the problem at hand.  Most people don’t like to read through someone’s crappy code let alone solve the problems with the code.  Only the most determined and elite programmers can read and fix something that others wrote.  Most will whine and complain saying that their time is valuable and that they won’t do it.  Well, I’m not looking for hourly guys that pinch me extra time for BS reasons.  Imagine if it’s only a five minute job, they will probably ask for five hours to do it.  Do you want that?  Do you want someone to nickel and dime you every freaking time?  I got no time for that!  I want someone that is determined and also wonders why there are bugs of that sort… or why we do it that way.  That brings up my next point:

2. Curiosity

If you don’t wonder why a particular syntax is valued more than another or why the CTO choose Java versus C++ or why there are a lot of bugs in production, then you may not fix root cause problems or understand why your code is running slower than it should.  Most of the time people are not curious about these things, but I’m not looking for the 95%.  Do I want someone that just take orders blindly?  Do I want someone that repeatedly fixes the same type of bug in the system even though it can be preventable with a little of extra effort?  If they are curious, they would dive into it and actually fix the root cause… which brings us to the next point…proactiveness.

3. Proactiveness

Are they looking for different ways to improve the system?  Are they actively seeking faster, better and cheaper ways? If they are not thinking to improve the system, then they are not proactive in improving the company/group/task force.  Sometimes it’s a cultural thing, in Asia, as I have experienced, most companies have hierarchies and the workers are rewarded for not being proactive.  This prevents the lower ranking people who are closest to the insights from speaking out.  They are even rewarded for fixing the same types of bugs/errors and not fixing the underlying problems.  As I have saw first hand, it’s not the guy that helps to win the race gets rewarded but the ones that fixes the crashed Lamborghini gets accolades!  (Another one of my expressions…”Crash another Lambo”)

4. Fast Applied Learning

What good is it if they have certificates and can’t apply the theories? It’s like taking a paper or computer test and then not really using that theory at work or even in a side project.  Gone are the days of four years computer science degrees before taking a job.  I have many friends and I have personally hired non-computer science degree or even self taught programmers that are super stars.  Usually these individuals are fast applied learners and implement their knowledge right away.  I’m always an advocate of JITL (Just in time learning).

5. Resourcefulness

This is an actually a learned trait… which occurs in hard times or for people with self induced goals.  If you are given  a constraint and a task to accomplish, or set yourself a goal within that constraint and you know the existing way of doing things cannot get to your goals, you don’t quit, complain or talk to the boss before you come up with alternatives. No, instead, you start to think of different angles.  Our current times offer a perfect example. Since we have COVID-19 we can’t physically meet with people in person, so what’s the alternative?  Zoom or some sort of conferencing tool coupled with shorter but more frequent meetings.  Maybe it’s too easy to point that out so I’ll give another example, although a dated one.  Twenty years ago, a person I know was given the task of retrieving and storing physical folders in a warehouse but he had a hard deadline of of leaving at 5pm so he can make it to happy hour :-).  Even when the folders were alphabetical, in a whole store room of them it is still hard to find a single document.  It would take ages to sift through rows of cabinets and folders to pull out a single document.  So what he started to do was to create a database of the locations down to the document level so that it can be searched. That way he didn’t have to run back and forth and waste his time in the rows of cabinets and plowing through the folders.  The time he saved was substantial enough that he was done by 3:30pm instead of the usual 8pm.  Pretty resourceful… applying tech to the physical storage. (And that links back to my earlier rant about measuring performance)

So there you have it… my list of 5 areas that I evaluate my programmers/workers on, what are your criteria’s?  Add a comment below or send me an email:  william@williamma.com

 

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.