10
By Chris Johnson @ intrin.sc Hiring for performance vs. skills This article is essentially part 2 of my last award winning article on 'Hiring a Great programmer' (see http://www.codeproject.com/Articles/814978/Hiring-a-Great-Programmer ). This time I want to delve into the non-technical side of hiring a developer, or for almost any position that is critical to your organization's success. Though most managers understand the importance of hiring wisely, many don't know how to do it. In the end, they often choose prospective employees based on gut reactions. While this strategy sometimes works, more often it leaves managers with ineffectual or unmotivated employees who drag the organization down. Decisions based on emotions, biases, personalities, or stereotypes often reveal themselves as bad decisions in hindsight. The key to dodging this pitfall is to train yourself to base all of your hiring decisions on reason, not emotion. I have worked as a consultant for many years, and have been through my share of interviews, both good and bad. I recently had an interview at a software company that was looking to hire a senior consultant for an important project. This was a boardroom type interview with 4 senior managers and technical people interviewing me. So, this would normally make the interviewee feel at least a little bit of pressure to perform. One of the questions was "If we have 10 people in a room, what will be the maximum number of handshakes that would potentially occur" (i.e., the number of handshakes between each person that will be unique.) I immediately thought that there would be a formula for this, and I should immediately come up with an answer, but after thinking about it for a few seconds, realized there isn't one that I could think of off the top of my head, and proceeded to calculate this. The number of people is essentially irrelevant, so if you have n people, the number of unique handshakes is (n-1)*(n)/2 = 3. I calculated it for 3 people, then realized there was a formula and applied it to 10 people. So, I did get the correct answer. But,

Hiring for Performance vs. Skills

Embed Size (px)

DESCRIPTION

This article explains exactly how to hire a developer or an architect based on performance, and not just skills. This should dramatically improve your development teams performance.

Citation preview

By Chris Johnson @ intrin.scHiring for performance vs. skills This article is essentially part 2 of my last award winning article on 'Hiring a Great programmer'(see http://www.codeproject.com/Articles/8!"#8/Hiring$a$Great$%rogrammer&.This time ' want to del(e into the non$technical side of hiring a de(eloper) or for almost any position that is critical to yo*r organi+ation's s*ccess. Tho*gh most managers *nderstand the importance of hiring wisely) many don't ,now how to do it. 'n the end) they often choose prospecti(e employees -ased on g*t reactions. .hile this strategy sometimes wor,s) more often it lea(es managerswith ine/ect*al or *nmoti(ated employees who drag the organi+ation down. 0ecisions -ased on emotions) -iases) personalities) or stereotypes often re(eal themsel(es as -ad decisions in hindsight. The ,ey to dodging this pitfall is to train yo*rself to -ase all of yo*r hiring decisions on reason) not emotion.' ha(e wor,ed as a cons*ltant for many years) and ha(e -een thro*gh my share of inter(iews) -oth good and -ad.' recently had an inter(iew at a software company that was loo,ing to hire a senior cons*ltant for an important project.This was a -oardroom type inter(iew with ! senior managers and technical people inter(iewing me.1o) this wo*ld normally ma,e the inter(iewee feel at least a little -it of press*re to perform.2ne of the 3*estions was 4'f we ha(e 5 people in a room) what will -e the ma6im*m n*m-er of handsha,es that wo*ld potentially occ*r4 (i.e.) the n*m-er of handsha,es -etween each person that will -e *ni3*e.& ' immediately tho*ght that there wo*ld -e a form*la for this) and ' sho*ld immediately come *p with an answer) -*t after thin,ing a-o*t it for a few seconds)reali+ed there isn't one that ' co*ld thin, of o/ the top of my head) and proceeded to calc*late this.The n*m-er of people is essentially irrele(ant) so if yo* ha(e n people) the n*m-er of *ni3*e handsha,es is (n$&7(n&/2 8 9.' calc*lated it for 9 people) then reali+ed there was a form*la and applied it to 5 people.1o) ' did get the correct answer.:*t) since ' was *nder press*re) it too, me longer than normal (which ''m s*re applies to e(eryone.&:*t) the inter(iewer didn't seem to li,e my answer) pro-a-ly -eca*se ' too, a whole/2 min*tes to answer.He stated there was another person he inter(iewed that got the answer immediately) only -eca*sehe memori+ed that 3*estion and answer in his head.' was a -it shoc,ed that he preferred people who memori+e things) rather than those who start with no ,nowledge a-o*t a partic*lar pro-lem) and still manage to come *p with the right answer.' reali+ed that this manager was loo,ing for people who memori+ed thingsrather than sol(e real world pro-lems.' also reali+ed that this pro-lem wo*ld ne(er -e something which wo*ld e(er need to -e sol(ed in the real world) and it almost ne(er applies to any '.T. related jo-.This manager) was clearly hiring for s,ills (s. performance as e(en tho*gh my answer was right) he was e6pecting memori+ation.;ormally) the ed*cation yo* recei(e) and s,ills yo* ac3*ire thro*ghe6perience) only acco*nt for a-o*t 25 to 95< of the jo- or new project yo* wor,ingon.High performance on the jo- is m*ch more important that s,ills and memori+ation) which may or may not e(er -e *sed in any partic*lar jo-.=ritical thin,ing) and the a-ility to perform *nder press*re is m*ch more important than almost any s,ill anyone co*ld ac3*ire.:*t) sadly most managers ne(er reali+e this) and constantly hire the wrong people.''(e seen new people hired) that str*ggle with the most -asic tas,s s*ch as setting *p a de(elopment en(ironment or tro*-leshooting a malf*nctioning program.' recall a time that a .e- 1er(ice (>ancy name for a program that ser(es informationo(er a networ, or the .orld .ide .e-.& was coded -y a de(eloper who had left thecompany a few months -ac,.This other ?(eteran@ de(eloper tas,ed with getting the e6isting code *p and r*nning) who had -een with the company for a-o*t 5 years str*ggled to get the .e- 1er(ice set*p and r*nning on their de(elopment machine.After a-o*t 2 wee,s of trying) they ga(e *p and as,ed me to help.After a-o*t 9 min*tes) ' saw that in the '''1' conAg*ration) there was an '0 that -elongedto the old de(eloper) and ' as,ed the new de(eloper to simply change it to their '0)and see if this wor,ed.' had almost no e6perience with .e- 1er(ices at the time) -*t ' ,new that yo* can't ha(e an '0 that no longer e6istedBThey con(inced me that ' was wrong (witho*t e(en trying o*t my s*ggestion&) and so) ' went -ac, to the other project ' was wor,ing on.Another wee, later) they insisted that ' drop what ' was doing and install this .e- 1er(ice on my de(elopment machine and getit r*nning as 3*ic,ly as possi-le) -eca*se it was a-sol*tely critical to get it wor,ing.1o) ' installed it on my machine) and also read thro*gh the doc*mentation (which *nfort*nately was written in -ro,en Cnglish) and was e6tremely technical.&At this time the other de(eloper had me con(inced that the '0 wasn't the pro-lem) so ' tried in (ain changing conAg*ration Ales) and tracing thro*gh the code) -*t to no a(ail.' tho*ght howe(er) that ' sho*ld gi(e my '0 theory a try) and after changing the '''1' conAg*ration to *se my '0) it wor,ed immediatelyBB1o) my point here is that hiring for performance is a-sol*tely criticaland will sa(e yo*r company h*ndreds of tho*sands of dollars if not millions of dollars in la-o*r costs if yo* simply hire the D'GHT person.That is the person who thin,s correctly) and ne(er ass*mes anything.in this case the other 'de(eloper' wasted 9 wee,s of the companies time) and no matter what their salary was (''m ass*ming it was a-o*t a(erage for a de(eloper) as this person had -een a de(eloper for o(er 25 years&) hiring me at a-o*t ! times their salary wo*ld still sa(e the company ah*ge amo*nt of money.To p*t it in a E perspecti(e (with hypothetical n*m-ers&:=ost -rea,down:1enior 'de(eloper' at EF5 / ho*r (8 hrs. / 0ay& wor,s on pro-lem for 9 wee,s. =ost: EG)555=hris at E255 / hr (2f co*rse ' don't ma,e that m*ch) -*t there is a (ery strong arg*ment that ' sho*ldB& ta,es appro6imately 5 min*tes to install and get the project r*nning. =ost:E99.99Total 1a(ings: $5,966.672f co*rse these Ag*res don't incl*de appropriate ta6es) and let@s not forget all the -eneAts paid to an employee these days.:*t that pro(es my point -eyond a shadow of a do*-tB' sa(ed the company tho*sands of dollars.And) remem-er) that this act*ally happened) and ' ha(en't made this *p) -elie(e it or notBAnd) what wo*ld happen if ' wasn't there at the timeH1ince) there was no one in the department that ,new anything a-o*t .e- 1er(ices) that de(eloper wo*ld contin*e wor,ing on the pro-lem for who ,nows how longB:*t) ' was s*rprised to see in that case that the manager didn't seem to care) -eca*se the employee wor,ed for a lot cheaper than ' did.They still didn't get the fact that hiring the wrong person can cost the company a h*ge amo*nt of money.'t is almost irrele(ant what the ?right@ person's salary is) as they will still cost the company IC11 than the wrong person at a (ery low salaryB''(e enco*ntered this sit*ation o(er and o(er again) in e(ery single company that ' cons*lt with) and ha(e gone o(er this iss*e with some of the managers who ''(e wor,ed with.Howe(er) one of the selling points for hiring an employee at a lower salary) is that the manager whos*per(ises the person doing the hiring will -e pleased that they 'sa(ed' the company so m*ch money -y doing so.1o) that manager who does the hiring may get more of a -on*s or some other incenti(e to hire people at as low a salary as possi-le.' do see this trend happening in ;orth America (and most li,ely aro*nd the world&.'t is one of the reasons ' -ecame a cons*ltant) as ' can charge the higher fees.:*t) of co*rse the downside) is that we ha(e to complete o*r projects on time) while at the same time helping o*t other 'de(elopers' li,e this for *p to se(eral ho*rs per day.1o) yo* end *p wor,ing harder) and longer than the rest of the team.2ne other thing to a(oid when inter(iewing the person) is to simply gi(e the standard memori+ation and coding tests.They sho*ld -e p*t thro*gh a practical test that is not -ased on s,ills or memori+ation alone.2ne real world challenge that ' went thro*gh at a past project in(ol(ed a fairly s*-stantial change to a part of the program and the *nderlying code and data-ase str*ct*re.As yo* can see -elow) this was for a large power company that was creating a new system for the entire %ro(ince.A -rief o(er(iew of the pro-lem is as follows:Existing scenario:& Hierarchy map of geographic locations in a pro(ince.Jo* can (iew this as a tree as follows:Figure 1:Hierarchy Map2& ClectricalGro*ps ta-le is a self$referencing ta-le where the ?%arentClectricalGro*p'd@ points to the 'd of the ta-le itself:Figure 2: EG (Electrical Group) tale9& Cntity ta-le (co*ld -e 1*-stations (as shown in Ag*re .&) Generating *nits) etc. or any f*t*re entity that is related to Clectrical Gro*ps&.This ta-le had an ?ClectricalGro*p'0@ Aeld which of co*rse pointed directly to the Clectrical Gro*p record for this partic*lar entity) which is on the 9rd ?le(el@ of the tree (or!th le(el in some cases&:Figure !: "ustations tale!& 2*tp*t was a 2d Hierarchy map on the entity@s *pdate screen) li,e so::.=. Iower Kainland L Manco*(er 'sland Mictoria 0owntown 1*-station.F& =ode to tra(erse tree is fairly simple.Jo* ha(e the child C.G.) from the Cntityta-le (s*-stations in this case&) so yo*r code wo*ld j*st loo, at the ?%arentClectricalGro*p'd@ Aeld in the Clectrical Gro*p ta-le rec*rsi(ely) *ntil the ?%arentClectricalGro*p'd@ Aeld is ;NII) then re(erse the list of Clectrical Gro*p records) and display on screen.New Scenario:& 'nstead of one Hierarchy map) there can -e any n*m-er of Clectrical Gro*p Hierarchy maps.2& To simplify the process) we need to add a few screens to the system so that the *ser can select any e6isting Kap and copy it) and edit it (is*ally) so they can remo(e any nodes they want) and change the te6t if needed.This wo*ldloo, similar to >ig*re ) -*t with of co*rse the correct iconsB 9& 2n each entity screen) there wo*ld now -e a potentially *nlimited n*m-er of maps to -e displayed.This was to -e accomplished -y a OP*ery pl*gin that the de(eloper wo*ld specify the map type '0 for.Jo* can then place as many OP*ery pl*g$ins on the entity screen) as there are maps.1o) how e6actly was this all accomplished yo* as,H't wo*ldn@t -e that diQc*lt for someone who thin,s clearly) and doesn@t thin, a-o*t coding -efore *nderstanding the high le(el design.' tho*ght that s*rely most de(elopers thin, li,e ' do) and come *p with a high le(el design :C>2DC loo,ing at code.:*t) *nfort*nately) ' was wrongR.The Solution:& Add a map ta-le.This wo*ld ha(e a Kap '0) and a ?rootClectricalGro*p'0@ which wo*ld j*st point to the top most ClectricalGro*p'0 in the ClectricalGro*p ta-le as a-o(e.(Iea(e the e6isting Clectrical Gro*p ta-le as is&:Figure #:Map $ale2& Add an Cntity to Clectrical gro*p lin, ta-le with an CG (Clectrical Gro*p& '0) and an Cntity '0 and an Cntity type (or yo* can ha(e one lin, ta-le per entitytype.&:Figure %: "ustation$oEG tale.9& =reate a new screen to allow the *ser to (is*ally assign an entity to an Clectrical Gro*p somewhere on the tree.This was already done) (altho*gh somewhat poorly -y a pre(io*s de(eloper&) -*t now the Cntity lin, ta-le records ha(e to -e *pdated.!& Demo(e the ?ClectricalGro*p'0@ Aeld from the entity ta-le) so yo* wo*ld ha(eto *se the new Cntity to Clectrical Gro*p lin, ta-le instead.F& Kost importantly) (A>TCD *nderstanding all of the a-o(e data-ase changes&) to display the 2d hierarchy map) yo* can tra(erse the ?tree@ *sing 2 di/erent methods.And) each method wo*ld pro(ide a di/erent le(el of eQciency depending on how many Clectrical Gro*p Kaps there are in the system.a& To display the hierarchy map at the 3*ic,est speed in a system with a small n*m-er of Kaps) yo* wo*ld start from the e6isting CntitytoClectricalGro*p ta-le record) as that '0 wo*ld -e stored in the Cntity ta-le itself.Jo* wo*ld tra(erse the ?tree@ which is j*st the ClectricalGro*p ta-le) in the same method as -efore) since yo* ,now the ?%arentClectricalGro*p'0@) yo* wo*ld rec*rsi(ely mo(e thro*gh the ClectricalGro*p records *ntil the ?%arentClectricalGro*p'0@ is ;NII.Howe(er) this is where it gets interesting and this is where ""< of de(elopers ma,e mista,es.Kost de(elopers wo*ld thin, that yo* wo*ld -e done at this point.' am saying this -eca*se on the team that ' wor,ed on) the ?architect@ who came *p with most of the code for the e6isting system) insisted that the tra(ersing was done at this point) and proceededto write some =S code) which is another -ig mista,e.' then proceeded toha(e another con(ersation with a 9rd de(eloper who came *p with the same concl*sion.' ,ept trying to e6plain to -oth de(elopers that yo* ha(e to *nderstand e(erything at a high le(el) well eno*gh) :C>2DC coding.:*t) my words went in one ear and o*t the other.1o) to contin*e on with the sol*tion) now yo* ha(e tra(ersed the ?tree@ once from the -ottom to the top.1o yo* ha(e the parent Clectrical Gro*p '0.:*t o-(io*sly) since there are now m*ltiple maps) yo* cannot -e certain that the root '0 yo* ha(e corresponds to the correct Clectrical Gro*p map) rightH1o) then yo* loo, at the map ta-le) and if the correct Kap record matches the root ClectricalGro*p'0 that yo* j*st retrie(ed yo* are then done) and yo* can display the 2d map.'f it doesn@t match) then yo* m*ststart again) as there may -e more than one record in the Cntity to Clectrical gro*p lin, ta-le that matches yo*r entity '0.1o) simply repeat this process with the remaining Cntity To Clectrical Gro*p lin, ta-le *ntil yo* ha(e fo*nd the correct root CG '0 in the Clectrical Gro*p ta-le) and then display the 2d map.-& To display the hierarchy map at the 3*ic,est speed in a system with a large n*m-er of Kaps (?Iarge@ in this case is of co*rse to -e determined) -ased on yo*r performance testing&) yo* wo*ld start from the e6isting Kap ta-le) and *se the root CG '0 for the map that yo* are interested in.Jo* wo*ld ha(e to rec*rsi(ely tra(erse e(ery single node in the tree howe(er) *ntil yo* And the ClectricalGro*p'0 that matches the record in the CntitytoClectricalGro*p ta-le.And) of co*rse) yo*r code wo*ld ha(e to only ,eep the last f*ll ?path@ from the %arent to child node.Summary:As yo* can see) a minor change to an e6isting sol*tion res*lts in an incredi-ly comple6 code change) that was simply not *nderstanda-le to most people on the team (who came *p with the e6isting data-ase and code ' might add.&The reason ' thin, that ' *nderstood it m*ch 3*ic,er than most is that ' simply loo, at things (is*ally) and try to write e(erything o*t as clearly as possi-le) and as simply as possi-le) so it ma,es it o-(io*s what is happening.0*ring the somewhat entertaining con(ersation with the other de(elopers on the team) they ,ept referring to code) in the middle of the con(ersation) yet we ne(er ha(e to rely on any code at all) *ntil the ?pse*docode@ and the f*ll design is wor,ed o*t.:*t again)this is most li,ely why ' was -ro*ght on in the middle of the project.As) the ?architect@ of the original sol*tion was also in the middle of a " month s*-$project which consisted of an entire 9 screens that essentially added a time element to theconcepts of Clectrical Gro*ps and related entities) which was act*ally called ?%[email protected] ?architect@ was pro-a-ly too ca*ght *p in his c*rrent disaster to care a-o*t adding new f*nctionality.Howe(er) since ' didn@t want to get in(ol(ed in the 9 screen disaster) ' insisted that he add the code for the new f*nctionality that ' j*st e6plained a-o(e to his part of the code.'t wasn@t act*ally a lot of codingto -e done.' ,new that it wo*ld -e done incorrectly) e(en tho*gh ' e6plained the process to the ?Architect@ and the entire team at least se(en times) and doc*mented e(erything with comprehensi(e doc*mentation e6plaining the processin detail.1o) ' had to ta,e the incorrect code) and A6 it to complete the sol*tion.2f co*rse) there was a lot more to it than this somewhat simple e6planation.Therewere a few other screens to -e written that allowed the *ser to (is*ally drag and drop Clectrical Gro*ps and associate them to related entities) and of co*rse all the code to tra(erse the tree) and of co*rse the %l*g$ins that ' wrote to act*ally displaythe 2d code on the Cntity screens.The OP*ery %l*g$ins allowed a *ser to simply place them on any screen) then call the pl*gin with the desired Kap 'd.The %l*g$intoo, care of the rest.:*t again) ' ha(e to stress that for any de(eloper who was ma,ing changes li,e this) it is a-sol*tely critical to *nderstand the high le(el design in their head) -efore e(en thin,ing a-o*t what coding changes need to -e done.C(en if yo* are not a data-ase architect) or ha(e any e6perience with OP*ery) a competent de(eloper sho*ld ha(e -een a-le to get this done in a few wee,s or so.And) any competent de(eloper sho*ld ha(e -een a-le to Ag*re o*t the high le(el design in less than 25 min*tesB1o) this ma,es for a perfect test for a new de(eloper.'nstead of as,ing them technically oriented 3*estions) which completely -ypass the concept of proper high$le(el / technical design) a 3*estion li,e the a-o(e scenario sho*ld -e a mandatory 3*estion in any de(eloper inter(iew.This sho*ld tell the inter(iewer whether or not the person can sol(e a pro-lem witho*t the pro-lem -eing tied to any coding style or technology) which isfar more important than learning any technology.>ollowing the hiring for performance concept wo*ld allow yo* to a(oid hiring the ?Architect@ in the a-o(e scenario which yo* want to do at all costs.The architect act*ally wor,ed on the ?%rojects@ 9 screen disaster for almost a year.Ioo,ing at the end res*lt of the ?%rojects@ mod*le) there was a-sol*tely no way that adding a time component to an e6isting sol*tion wo*ld ta,e a year to do.' was also s*-ject to the constant disc*ssions -etween the :*siness Analyst and the ?Architect@ in which they were disc*ssing adding new feat*res) that didn@t really ma,e sense) as the :*siness Analyst had no e6perience whatsoe(er with de(elopment. 'n that case) the Architect sho*ld ha(e -een smart eno*gh to ,now that the :.A.@s ideas were wrong) and not to implement them) and to gi(e the reasons why not to implement them.They sho*ld ha(e also reali+ed the lac, of s,ill in the :.A.) and toclarify as m*ch as possi-le with the end *ser.This may not sit well with the :.A.) -*t then the project wo*ld ta,e only 9 months and not a year) as the *nnecessary coding wo*ld ha(e -een a(oided. Ta,ing the a(erage yearly salary of a 1enior 0e(eloper / Architect to -e appro6imately E55T) this wo*ld ha(e sa(ed the company E#F)555B1o) as yo* can see) hiring for performance is act*ally m*ch more important than hiring for s,ills) especially in software de(elopment.The a-o(e scenarios that ' j*st descri-ed act*ally happened.Another one of the pro-lems ' fo*nd was that e(en tho*gh partic*lar portions of a project were ta,ing way too long) management ne(er tried to correct it.'n my (iew) this acco*nts for most of the fail*res of larger projects.Cssentially) a manager hires the wrong person) and doesn@t reali+e it *ntil it is too late) and at that point) cannot necessarily replace the person) as they wo*ld ha(e to report the reason why they dismissed the person.1o) they ha(e to contin*e on *ntil the project is Anished (if e(er.&.'f ' werea manager) ' wo*ld serio*sly consider gi(ing inter(iews that determine whether the person can perform) *nder a real$life scenario) instead of the typical de(eloper inter(iew that j*st as,s the candidate to ram-le o/ facts) then write some code to see how well they st*died or memori+ed something.This is g*aranteed to sa(e the company h*ndreds of tho*sands of dollars per year) which can -e critical to whether a company or an '.T. department s*cceeds or not.