Recruiting Graduates #4: The Applicants

Introduction

Other blogs in this series Recruiting Graduates #1, Recruiting Graduates #2, Recruiting Graduates #3.

Fredrik Christenson (I didn’t make a note of the exact video it was from) once stated good developers can be judged by:

  1. How they reason about a problem
  2. Their way of communicating with people
  3. How they voice their concerns/make decisions. Asking the right questions, pushing back in the right circumstances in order to get the right requirements; have “Guiding conversations”.

I think the general set-up of our interview can lead to this. The first part is for them to present the take-home test we gave them. They have to write a simple application with a UI and present data it retrieved through an API. The second part is to do some live coding, and define a few technical terms. Then the final section was some behavioural questions led by Colin.

Colin’s Update

Colin had interviewed several candidates for the Graduate Developer role in India. I asked him if the interviews had been going well, and he said the Graduates “couldn’t write code“. He said there was someone with a Masters degree, who then said they

just learnt the course material a few days before the university exams then instantly forgot it”.

applicant

I guess at that point in a programming interview, when the interviewers are asking why you can’t write any code, then there is probably no way to get yourself out of that situation.

Saying you are forgetful is just instant rejection, although points for honesty, I suppose.

My Preparation

When it was my turn to do some interviews for the UK-based applicants, I was worried. I hadn’t been given any training or guidance, and the questions we had come up with were poor and I didn’t feel comfortable asking them. I was also scrutinising their applications and was trying to come up with questions based on their descriptions of their university course, or small amount of work experience. However, when it actually came to interviewing, there was actually someone else leading the interview, and Colin turned up too. So Colin had misled me that I would have a big part in the interviews. Also, Colin said he never asks questions about their CV, and sticks to coding or behavioural questions – so I’d wasted my time.

To be honest, I’d wasted my time anyway – because the first 2 interviews I was lined up to do were cancelled with half a day’s notice. Not sure if the HR team were slack or if the candidates backed out late. Colin speculated that people were dropping out because they couldn’t do the take-home test we gave them (which they would present in the interview). Maybe that means it is a good test. Colin said that he didn’t give the take-home test to the applicants in India, which could explain why he ended up interviewing people that couldn’t write code at all. 

He didn’t give them the test due to our Indian Senior Developers saying the test was too hard for Indian Graduates to do (see Recruiting Graduates #1). To me, this seems like an admission that Indians are generally inferior, especially if they are happy for us to give the challenge to the UK applicants. This seems a very strange admission indeed. 

The Cheats

Colin also said many of the applicants were caught cheating. On the questions where they were asked to define technical terms, they were reading the definitions from a website. He said some of them hid it well in terms of eye/arm movements (since they had to have their webcams on). However, the phrasing was a bit suspect, so Colin Googled the response and found the website they were reading it from.

He said another candidate seemed to pause whilst they thought about a question, then all of a sudden pasted in a block of code plagiarised from a website. 

“HERE’S SOMETHING I PREPARED EARLIER”

fictional quote, inspired by the classic Blue Peter line.

Scoring

Colin did actually hire a few of the Indian applicants though, but when I looked through their Interview Feedback, the interviewers were scoring them 2/5 on most sections, but then a few sections were 0. So the scores were clearly a fail but we were hiring them anyway.

I also noticed that candidates who provided the programming answers in Python were scoring lower, even though, when I looked at the code – it looked correct. The problem is that it is a C# job and the interviewers only know C#. However, many of the Universities we were targeting used Python as their main language and we knew this up front.

So for the same job, we have a stricter process for UK candidates, and are also biassed towards C# candidates even though we only ask for knowledge of programming and don’t require prior C# knowledge.

Applicants

Time Magazine’s “Person of the Year 2006”

I did read through the CV’s of the people we hired. We hired Time Magazine’s “Person of the Year 2006”. I did wonder if Colin or the other interviewers had read that because it’s an instant red flag to me. It doesn’t sound like a legitimate claim, but then if you research who the award went to, it went to YOU. To put that on your CV is a joke though, unless you really did contribute significantly to online content. So if the candidate couldn’t justify it, I would just reject them.

Game Developer

For one of the guys that dropped out, I had some concerns with his application. Maybe he was legitimate but I think his claims weren’t backed up by the evidence he provided.

The first thing I noticed is that he stated “deep knowledge and proficiency in Java, Python, HTML, CSS, and JavaScript.” but I didn’t see any examples on his GitHub page, and there’s no commercial experience listed in his Work History. I wanted to ask him:

 “Can you tell me what kinds of applications you have developed using these?”

My proposed question

He did say that his GitHub profile “included group projects.” but which ones were Group Projects? Working on group projects is fine, but I think it needs to be clearer so you can judge what he has done on his own. If they had used source control properly, you would see the commits by each user – which is where I saw the major red flag. All the commits were actually done by someone else. The only thing the applicant had done on the entire repository in his name was to initialise the repo, and fix a build issue at the end.

Your profile has another “contributor”, can you tell me who that is?  – They have committed all the games to this repo.

My proposed question

Many of the games on the repository were Unity games, and I downloaded them, looked through the source code and play-tested them. For someone who had done a Games Degree, I was disappointed in the quality. Most of them I felt I could have made, and there were some really basic game design mistakes, and he said one of his University modules was “Advanced Game Design”. I wanted to ask this:

“If you worked on these games again: to fix bugs or improve the game design, what would you change about them?”

My proposed question

Example answers would be: In the Platforming game, you can stick to walls and the sides of platforms if you hold down the arrow key – which seems like an obvious bug. In his Snake game, it wasn’t clear what was happening, and you can move over enemy spawn positions to instantly kill them as they spawn in. 

For his experience working in Home Bargains, he claims he

“Engaged with customers and built relationships to advise customers on products they’d like to know about”.

Candidate, clearly blagging

Home Bargains is basically just a supermarket, and he is hyping it up as if it is a sales job and personally gets customers returning. That doesn’t sound like a valid description of this role. I shop at Home Bargains and I don’t ever recall seeing anyone talk to the staff there unless there is some kind of dispute. 

Python, Machine Learning Expert

The first guy I actually interviewed was about to finish his Masters degree, and has a Machine Learning degree. He seemed decent enough at Python to be able to do the take-home assignment, which he said he rushed through in a few hours because that was the only time he could dedicate to it. However, he seemed to struggle on the live coding part. I tried to prompt the candidate to talk us through his code, but he seemed to prefer coding in silence. I even helped him out by pointing out a bug in his code, but he ignored me, then wasted another 5 minutes working it out. I did wonder if he understood what I was saying. His CV claimed “Good communication and Presentation skills” but his presentation was full of “erms”, and during the live coding, he barely said anything, even when I reminded him to explain his thought process in order to gain more marks. By our scoring system, he scored very average but he has good credentials and I think there is potential there. You would think with his credentials, he would aim for a fancier job which could utilise machine learning though.

Possible Cheat

The second guy I interviewed got off to a good start. The program he demonstrated looked very complex. He said he was new to C#, and had good knowledge of C++, but he used our task as a good opportunity to learn C#. He actually used ASP.Net with Razor. It was mainly C# but it also contained some Javascript. He explained the program reasonably well, but then suddenly seemed to doubt himself and say that his program wasn’t very good. I assured him it was actually very impressive. However, when we moved onto the technical definitions, he couldn’t answer them very well at all. He really struggled with the live coding questions, then reminded us he is a C++ developer. However, after letting him re-attempt using C++, he still struggled to get something even close to what we asked. I find it hard to read C++ but he came up with some strange approaches and couldn’t explain his thought process at all. It made me think that he got someone else to write the take-home test.

3rd Guy

The third guy I interviewed seemed like a much well-rounded person. He explained his code well, asked questions when he was unsure of what we were asking, and showed he could debug (well, to a basic level anyway) when his code didn’t work. I made it clear to Colin that I thought he was the best candidate, but sadly he got offered a job elsewhere for way more money than what we could offer.

WE HAVE FLEXIBLE 
WORKING HOURS. 
INTERVIEWER 
NO. 
WE DECIDE YOUR 
WORKING HOURS. 
J) 
WorkChronicIes.com 
Fo//ow me on 
GREAT! 
SO 1 DECIDE MY 
WORKING HOURS ? 
WE STRETCH IT AS 
MUCH AS WE CAN. 
IT'S VERY FLEXIBLE. 
b

Recruiting Graduates #1: Discussing how to make a good test

Colin arranged a meeting with a few Senior Developers (including me) and a Senior Tester. He stated that we are going to do a big recruitment drive, specifically targeting Graduates in India.

He said he is disappointed with the current Indian staff in general, since many seem low skilled and poor communicators, so he wants us to come up with:

  • Multiple choice logic questions for a timed test
  • Multiple choice programming questions for a timed test
  • Verbal logic questions for an interview
  • Verbal programming questions for an interview

So we are testing them on both written, and verbal comprehension as well as programming. Fine plan so far.

In the next meeting, a few of the Seniors had come up with some questions which they said they got from some websites. I had spent a few hours scouring the internet for ideas but I had found many websites with poorly worded questions, ambiguous questions, or material that I just thought was irrelevant to the job (either not C#/objected oriented/not graduate level). So I only submitted a few questions but I needed to confirm what our aim was…

I noticed many of the suggested questions were specifically programming questions on C# which is what the job is for, but do these graduates we are targeting actually know C#? I ask the question and the Indian seniors say that these days, university courses are mainly Java and Python. So I tell them the test they have come up with isn’t suitable. For multiple choice, the questions have to be just logical questions using pseudocode. For the interview, it needs to be phrased like “using a language of your choice” and we would have to allow them to use Java, Python or anything else.

I also found that they had many questions that were wrong, ambiguous, or irrelevant. I don’t think they used the same bad websites I found, but there’s some terrible questions out there for sure. I think it says something about how bad our staff are when they are meant to be Senior and they are taking questions from online and not really thinking about if they can answer them or not. We are going for Graduates as well. Really the hierarchy would go Graduate/Junior->Developer->Senior. So surely the questions have to be easy for Graduates to do.

“Why are people who don’t know what they’re doing, setting these questions?”

Colleague

“so we can recruit more people that don’t know what they are doing”

Me

Another problem was that we scraped about 50 questions of questionable quality, then Colin says: “I want 60 questions for them to do in 60 minutes…also we need a second set of 60 questions just in case someone leaks the answers to other applicants”.

Everyone seemed fine with this, but I pointed out that 60 questions were a struggle to come up with, and I didn’t think it was possible to answer them in 60 minutes – I said 45 minutes is better. 60 minutes sounds like pure tedium to me. The 3 other Seniors and Colin were all adamant that “60 questions in 60 minutes” was standard in the industry, and a couple of Seniors said they did tests like this in recent years and it was fine.

When we eventually came up with a test, Colin says

“I tried the test over the weekend, I do not think we can do the test in 60 minutes”.

Colin

Wow, I was correct, and was shot down 4 to 1 votes.

He wouldn’t specify what score he got but was insistent that he passed despite not answering all the questions.

I am never a fan of doing programming questions in an interview situation (unless it involves using a computer). Sometimes companies give you pen and paper, (or a whiteboard), and you have to write code. It’s unnatural and very awkward. Also, they come out with cliché problems like sorting algorithms, or data structures. Sometimes you can blag your way through these scenarios if you practice them beforehand. I prefer a take-home-test to build a small application in a few days. I’m conscious that this can be a lot of work especially if you are applying to other jobs at the same time. An alternative could be to show a program you have previously written and do a presentation on it to demonstrate your understanding and talk through the design decisions.

We already had a take-home-test from previous recruitment, so I suggested using that. The Indian Seniors said this would be far too hard especially if it involved calling a Web API. I said the candidates don’t even have to complete it (fully working app with many features), you just want to see how far they get and see how they structure their code and how they break-down the problem. If you just tell them to write one method like a sorting algorithm, then you don’t really get to see how they structure code because it’s minimal, isolated code.

The Indians even suggested a compromise of giving a choice of programs to write, but to give extra marks if you choose the first example. It didn’t seem that fair to me and there didn’t seem any noticeable increase in difficulty. One suggestion was even to get HR to call them and ask them on the phone to decide which test they want. How would that call even go?

HR: "Are you familiar with Web APIs?"
Candidate: "no"
HR: "do you want to do a banking app with a database?"
Candidate: "no"
HR: "you have failed to get the job"

or

HR: "Which test do you want to do? one with a Web API, or a Banking Application with a database? You get more marks for the Web API"
Candidate: "erm…Web API then."

Eventually, they relented and agreed just to ask for a specific program and we would see how far they got. Next up was to decide how much time they actually got. I suggested giving them up to 10 days. One Indian Senior said 10 days was nowhere near enough time given the difficulty of the program. Another Indian Senior (who had previously stated this test was far too hard), then claimed he had a similar test that he successfully completed in 3 hours. I was like “wut“. How can he go from saying it was far too hard, to then saying it is easy and he can do it in 3 hours! He then suggested we should make them create and interact with a database which I think makes it way harder! I challenged him on this and he said he has never seen a university syllabus that has interacted with an API (which my suggested test required)… Despite him showing me a university that used ASP.net which is all about web apps and web services.

I did feel bad criticising their decisions when they had put some effort in, while I did think about the situation but didn’t have any good questions to ask. However, I didn’t think they had put much thought into the problem they were trying to solve.

Some lessons learned:

  • You need to decide what level of experience you want to aim for so you can set relevant questions e.g. Graduate, Junior, Senior, Expert.
  • You need to know what kind of programming languages your applicants will be using. If they are from a Java background but your job is C#, you may have to set the test in Java, but make it clear the language of the job is C#
  • Make sure the questions make sense, aren’t ambiguous, and the answers are actually correct (this will be discussed further in an upcoming blog)

Glint Survey: Findings

In the last blog, I discussed a survey my employer sent out to all employees. If they use the results, then they should address highlighted issues (if any), and aim to keep positive aspects unchanged. This blog is about the results.

The findings were presented to us by some of the Directors. It was full of hype as expected.

“We will provide an update on our journey to become an Employer of Choice and outline the key work-streams that underpin this business-wide programme; many of which will be supported and informed by the feedback captured as part of the Glint survey.”

Director

Firstly was a sales pitch of why Glint is good (some good business jargon and hype here):

  1. “Strategic approach to measuring engagement”,
  2.  “ownership for engagement is enabled”,
  3.  “Improved effectiveness and efficiency of surveying”,
  4.  “Improved understanding of how we compare externally”,
  5.  “Employer of Choice programme enabler.”

87% participation, standard participation for Glint is in the 70-80% range. Our Group-wide Engagement Index score is 70 (100-point rating).

The score is calculated from the first 2 questions of the survey, which were:

  • I would recommend The Company as a great place to work
  • How happy are you working at The Company?

The other questions in the survey are basically to drill-down deeper. Or in their words:

“to improve engagement, we need to focus on improving the more tactical areas included in the survey”

The questions were responded to on a 1-5 scale. The Rating breakdown was as follows:

  • 67% positive (4,5)
  • 23% neutral (3)
  • 10% negative (1,2)

As a side-note, one department leader discussed his department’s score:

“our department engagement index is 55 which is a little bit lower than the company at 70”.

Departmental Manager

That kinda looks significant to me. 55 sounds very poor in isolation, and lagging behind the 70 as a whole.

There were around 2,000 total comments, left by 37% of respondents. They determined 58% of the comments were negative, 34% positive, 8% neutral. I assume this was judged by an AI, categorising the sentiment. Unclear if Glint provides this but it is a great feature if they do.

 “It’s in the comments where the richest data is available to us”

Director

Why wasn’t it mandatory then? I felt it was way too easy to not think about the question and just give a random score without justification. I discussed this in the previous blog.

We were shown a tag cloud which is quite meaningless in isolation. Included words like:

  • Development
  • Action
  • Knowledge
  • Pressure
  • Raise
  • Barrier
  • Manage
  • Team member
  • Deliver
  • Workload
  • Responsibility
  • Request
  • Software
  • update
  • Remote working

We seemed to score particularly high on “Camaraderie” (Question: I have a good working relationship with members of my team); and “Work-life Balance“: (Question: I am able to successfully balance my work and personal life). I personally scored these high.

 “These particular results show that The Company, on a personal level, is a welcoming, fulfilling and supportive place to work where colleagues feel safe and cared for, in particular by their immediate teams, and can enjoy a role which does not infringe on their personal lives. This is a reassuring picture, reflecting the nature of our business, the quality of our people, and the importance of our values.” 

Director

We were really bad at “Barriers to Execution“: (Question: We do a  good job removing barriers that slow down our work); “Collaboration“: (Question: Teams collaborate effectively to get things done); and “Culture“: (Question: has a great culture). Personally I was unsure about Barriers To Execution and Collaboration, and I feel Culture is too vague without examples of what it actually means. I would have thought Barriers and Collaboration would vary drastically between departments, so amalgamating the score as a whole seems a bit random to me.

 “Our opportunities reflect a picture that shows colleagues are most frustrated when it comes to being able to effectively do their job to a high standard, especially when this involves working with wider teams or departments – either due to internal processes and tools or a lack of effective cross-departmental collaboration, communication, appreciation or awareness.”

Director

The HR director was appalled that we also scored low in “I believe meaningful action will be taken as a result of this survey.”. Despite hyping up our focus for this Employee of Choice thing, our employees don’t believe the Senior Management will improve things! 😀 

“We know from the survey that many colleagues are sceptical as to whether this new approach to measuring employee engagement and responding to employee feedback will result in any meaningful action being taken.”

HR Director

One comment they picked out suggested that people complain about things but don’t actually raise these issues with management, so suggested we need more “Director Q&A” Sessions, or an “Employee Forum” where we can ask questions or raise issues. Maybe we really do need a culture change.

The thing is, we once created a Slack channel where we could contact the Software Development department managers (so that was specific to my department only). The Managers did respond to some concerns and one issue I remember we complained about was communication, where the Head of Development sends an email to 3 managers below him, and then those 3 managers forward the email on to their line reports, who then have to forward the email on to their line reports; but someone will be on leave, or just didn’t forward it on – then people miss out on info. After promising they would put an end to the madness, I think 6 months later it just started again. Then after a few more months, the Slack channel was completely dead. I think another issue is that it seems so obvious when there are issues, it seems crazy to think that managers don’t know about them. I mean, that communication example is an obvious problem! So then people may feel like they don’t need to raise it, or think managers won’t change their ways. It also doesn’t help that the HR Director keeps dismissing people’s rants on Glassdoor. She is always like “this doesn’t reflect my experience“. Well yeah, you are on a high paid job sat in a fancy office, of course you don’t know what it’s like on the ground. 

 “I want to reassure you that we are committed to learning from these results and will dedicate time to identify what actions are needed or where further exploration is required, at a Group-wide level. By providing line managers with rich and actionable data via personalised dashboards, we are empowering you all to drive change within your areas too. This is not a top-down approach but a collective one where we all have a role to play.”

Director

Group-wide Objectives

  1. Improve cross-team collaboration
  2. Improve understanding of cross-team priorities including wider strategic clarity
  3. Ensure better communications between teams and business areas
  4. Equip colleagues to have honest conversations
  5. Create a mind-set change

Personally, I have no idea how you implement these. Surely some departments have these problems and others don’t. Only the individual departments would know if they can be fixed.

Q&A

Then in the Q&A section at the end, there was one complaint from Development, highlighting the increase in attrition and the general problem of us replacing Seniors with Juniors which was affecting the ability to complete projects on time.

Another complaint was how we posted record profits, boasted about the generous pay rises they dished out…but was still below the rate of inflation.

Another staff member challenged how someone had a correction to their pay due to the “gender pay gap”, but then excluded from the pay review because they already had a pay-rise that year. A similar thing happened to me actually where I was underpaid for my role and level of experience. It shouldn’t matter why you had a pay-rise before, you should get it adjusted for inflation as standard, and not be told you’ve already had a rise. All the current mindset does is re-introduce the pay disparity they were trying to address.

Another person made the point that sometimes Directors respond to questions on these Q&A sessions by saying they will “take it offline” and answer the person one-on-one. This means others in the company never see the answer to these tough questions – which then breeds a bad culture and then the feedback is only given via channels such as this Glint survey.

Closing Thoughts

You can easily understand why people doubt meaningful action will be taken from the results of the survey. We often highlight problems and then they just get shrugged off. I understand people always seem to moan about pay, so it is easy to shrug that off as “not an issue”.

I’ll be intrigued what they actually do to meet these objectives, and to become this “Employer of Choice” they keep stating.

Renaming “Master” in “Scrum Master”?

During the Black Lives Matter movement, the “tech community” debated whether the “master” branch (in terms of source control) should be renamed to “main” or similar. This was then adopted by GitHub as the new default.

Recently, I wondered if the same debate was had for “Scrum Master” in terms of Agile Development. The “Scrum Master” is a responsibility to organise the Agile meetings such as the Daily Scrum aka Daily Standup. The scrum nomenclature was adapted from Rugby.

I found a thread on scrum.org which argued for and against, but the community definitely settled on keeping the name. The difference between a “master” code branch, and a Scrum “master” is that the Scrum Master is about mastery, and not a master/slave relationship. So it’s the same word but different meaning and origin.

Thank you for your input and we will pass it forward to Ken and Jeff. Please remember as Ken and Jeff have always said, the role of Scrum Master is one of Scrum mastery and not in any way related to being the owner of the team as the team is self-organizing and self managed. Scrum Master  a role and not a job title taken from the ideas of the master carpenter which dates back thousands of years.  GitHub on the other hand literally used Master and Slave meaning that one controlled the other. 

That said, a lot of things are always being discussed and considered and your courage to bring this forward is greatly appreciated.  

Eric Naiburg

I’m sometimes embarrassed to tell people what I do because of how arrogant or self-important I think my job title and role make me sound. Whether one agrees the name should be changed or not, public opinion on the word “Master” exacerbates this problem.

Simon Mayer

Piotr Górajek calls people out for virtue signalling.

I will put here a little different perspective. IMHO this is ridiculous to push for change words only for the sake of pushing for it. How do you come to an idea that one word, put out of its’ context, should be changed because of “racism connotations”? Each word have a lot of meanings

Piotr Górajek

The word master is clearly a person that masters the framework, a coach, a person that has a mastery or “expertise” on something. With this line of thinking why we do not rename the Master degrees from Universities? MSc titles should be renamed as well?

Alexander Leanza Bøhnsdalen

There’s a good amount of sense in what Alan Eustace says

I wanted to observe a couple of things.

It seems like most, if not all of us, engaging in this conversation, are white. On what basis can we evaluate the impact of the terms we’re discussing?

Changing terms/language alone will not eradicate systemic and institutional racism. And yet language and symbols are powerful. 

Language changes over time to accommodate shifts in cultural sensibilities. There are plenty of examples of this.

Personally, as I mentioned above, even before recent world events, I have disliked the term “Scrum Master” for some time. I have not found it helpful, and continually have had to explain what is, and what is not, intended by the word “master”. 

Alan Eustace

“Organizations choosing not to respond to #BLM in a productive way will cause negative perceptions ranging from being perceived as tone-deaf (best case); indifferent to institutional bias; or racist (worst case).”

Phil Bryant

I’m not sure on Phil Bryant’s view. It defintiely seems like virtue signalling, and I’d say it’s quite tone-deaf changing things that don’t need to be changed and drawing attention away from the real issues. People are protesting against police brutality and we are trying to rename Scrum Master into Scrum Facilitator or something.

Now consider a team with a white Scrum Master. Every day, the members will hear their leader referred to as their Scrum “Master” – unless we make a change. As Agile practitioners, “We value responding to change over following a plan.”

Phil Bryant

Now consider a team with a non-white Scrum master. WHAT ARE YOU GONNA DO ABOUT THAT PHIL!?

The problem with choosing another word is that many other words can also have some kind of offence if you really study them. Sean Hoegaarden says

Scrum Wizard will be a problem for the same reason as Master (KKK), Scrum Captain too (slave trade ships), Scrum Samurai is obviously cultural appropriation, the Scrum Alchemist has antisemitic reminiscences… I hope we will not end up with something like an Agile Clown…

Sean Hoegaarden

Can I suggest we go to the home of where the terminology “Scrum” came from – i.e. Rugby.

The key role in a Rugby Scrum is the “Scrum-Half” for example.

Mohamed Hesham Jurangpathy

Sorry, but if someone starts calling me a Scrum Hooker instead of a Scrum Master I’m not only going to be offended, but probably initiate some fisticuffs!

René Gysenbergs

In conclusion, if the name is deemed inappropriate or irrelevant by the community (and we need non-white people to be part of the decision, rather than white folk just virtue-signalling), then the Scrum community can look to change it. However, deciding on a new name that doesn’t involve cultural appropriation or cause any other offence – seems harder than first thought.

Farcical Development: Templates

The Plan

A developer in my team, Isobel, was free to pick up some work, and she knew another team had too many items assigned, so their Team Lead contacted us to ask if we could pick up the work instead. 

I wasn’t opposed to the idea, but we didn’t know what the enhancement was at the time, so didn’t know how long it would take and didn’t know if our Testers would be available to test it, or would the other team test it? It’s unclear, but their Team Lead wanted me to commit and accept reassigning it to us.

When I looked at the enhancement details, there was loads of confusion because it had loads of code changes linked to it, and was logged about a year and a half ago. It turns out, a year ago, a developer had done the work, checked the code in, but then got told to “roll it back” due to lack of testing resources. Then instead of going into the next release, it was somehow delayed a year… Now we have a lack of development and testing resources! 

There was this comment too:

The change will then need to go out as an urgent/emergency release. As the functionality is deemed potentially unsafe, we only have 7 days to get it out, it’s actually 6 now as it was logged yesterday.

1.5 years later… 

There was another item I was assigned recently, and that had similar chaos with how long it sat on our backlog

10th November 2020 - bug logged
15th September 2021 - assigned to the team

No wonder our users are often reluctant to report bugs because we don’t seem bothered about fixing them. Then our release process is also really long so sometimes there’s a 6 month lead time after we fix it.

I'll try and quickly explain the feature: Users can create these Templates which are composed of components. There's these special "calculation" components which use data added to the record and give you a score. Users can add data-entry components to the template which can be used by the calculation components. However, it's not clear which data is used, and we can change the calculation formula at any time; which makes it “unsafe”. You can also group several components together to make a Group Component. So the plan is basically to stop users from adding these calculator components, and they have to use our own Group Components which will have the calculator and the prerequisite data-entry components with it. For existing templates, we just have to show a message, telling the users their template isn’t recommended to be used.

I was invited to a meeting along with Isobel, and the managers tell us that all we need to do is take the old code, update some user-facing text which the UX team will confirm, then it just needs to be tested, but it should all work since it was ready for testing over a year ago. So in terms of development work, it sounds like we’d spend more time in meetings and generally discussing the work – than actually doing the work. (I later find out this is not true).

Assigned to Isobel

I tell Isobel to go through the changes and make sure they really do meet the requirements. A few days later, Isobel says she is on annual leave for 2 week but the changes are fine. The next day, I’m told I should look at it instead.

Assigned to Me

After an hour of testing it out, I find that there was:

  • A control partially truncated
  • Some extra spacing in one of the error messages
  • Some components that were disabled that shouldn’t be
  • Inconsistency in behaviour between “Templates” and “Templates Pro”
  • Group Item logic was completely wrong
  • Blank warnings were appearing for all other components

So how did the original developer think this was ready? Why did Isobel think it was ready?

So I start to fix the issues and I find copy-and-pasted code, redundant code, unclear code, code which could easily be unit tested but isn’t. I spent around 3 weeks sorting it out and it still wasn’t perfect. Meanwhile, I was invited to other meetings to say they changed their mind about some features. I had to undo some changes, change more UI text, and disable a few more components. In hindsight, I think I may as well have binned it, and started it again from scratch.

When I thought it was ready, I had the Pull Request created in the first week of January, ready to be checked-in for testing, however, there were no testers free, so it sat there for a month.

Eventually, the testers begin testing it and find a few problems with it. I fixed 3 out of 4 issues, but the last one seemed to be impossible to fix due to another bug which really needed to go to the specialist team that dealt with that area. 

The actual template knows where it came from, but the Group item inside doesn’t. There was this interesting variable name that made me smile.

isOneOfOurs

I showed it to a colleague

“seems like Britain First wrote this”

Bants from colleague

There was some code where we set the originID to either the user’s or our organisationID. However, it set it to 0 which then assumed it was one of ours. I tried looking at one of the other properties which was a different type of ID; a GUID, but it was blank, so it was broken there too. 

I couldn’t see a simple way to fix this. It would be far too risky for me to change, and I definitely didn’t have time. So I got told to abandon it and it would be reprioritised.

I think it was around 6 weeks later, it was assigned to another team. So it is now it’s with its 4th team, approaching 2 years later. Maybe we can call this a “pass the parcel” enhancement.

Assigned to Kumar

I was aware that the development re-started (along with some other requirement changes) when I saw a Pull Request for it. It was from Kumar, a developer in India that is absolutely rubbish. Not only that, it is quite hard to help him because his English is fairly poor. I also can’t tell if he is trolling, or if he really is that bad.

I would have thought that Kumar would have been told to speak to me about the work so I can “hand it over”, or at least he should have seen my name and comments on the item and shown some initiative and asked me about it. As it goes, this new change was something I already had fixed, it just wasn’t checked in. I could tell his fix wouldn’t work just by reading his changes. I message him telling him this.

He later responds with this conversation:

Kumar  10:11
Hi Mate
10:12
With the changes i have raised as a PR, I created a page as Group item and section as well with itself containing the components as Group as well as non Group items and it seems working  .
can i share you the screen mate ?
Me  10:14
so a user authored page/section Group item which contains one of the components - shows the message
and a Officially-authored page/section Group item which contains one of the calculators - does not show the message

Kumar  10:14 Exactly mate Kumar  12:34 Hi Mate, Shall i comment out that the fix has completed the scenario we discussed here ?

I didn’t believe him, so I checked his code out, built it and tested it out myself. Obviously broken as expected.

Me  12:50
just trying it now and it looks broken to me
got an Officially Authored Group Page and all the components have warnings next to them
Kumar  13:10
Ok dude, I will have a look on it.
Kumar  13:31
Hi Mate, As u said it was showing up all the warning
I might have not removed the Pages and section flag check for showing warnings
will debug the code mate,

The next day

Kumar  07:12
Hi Mate
Good Morning Mate

I look at the latest Pull Requests and see his new changes. Instead of taking my code that I know works, he has come up with his own solution. I think it might work, just harder to read.

Me  08:59 did you test my changes or just write that yourself? 
Kumar  09:11
no mate i have took it from latest service branch of my team
was everything fine mate ?
i tested that locally and working fine
Me  09:13
it is similar to what I had done, just more lines of code
Kumar  09:14
haha, ok mate i will make the changes as suggested in the comments
Thanks Mate

It’s not really funny. You just wasted a full day’s work because you didn’t just use my code.

I explained to him that this item is a bit of a nightmare since there’s multiple places you need to change due to “Templates” and “Templates Pro” which doesn’t share much code. Then there’s some existing bugs, and many different combinations of templates you can create. He doesn’t seem to test his work at all, so I think he had no chance of getting this working. I was trying to emphasise how much testing needs doing with every change to try and get him to put some effort in. Unit testing would help alleviate some of the manual testing. The next day…

Kumar  13:27
Hi mate, Good noon
It is becoming a night mare as u said :joy:, i have completed with the unit test case also have fixed other area like Warnings were happening in the “Admin org” too. i have fixed that now. Kindly review and guide me to proceed further
Me  15:58
<send him picture> that should have the main yellow banner at the top shouldn't it?
Kumar  15:58
If it was a “Admin org” org, it should not have mate
Me  15:59
it's not
Kumar  15:59
Then it should have i believe
haah, one more PR patch upcoming ..?
:exploding_head: literally with this work
Me  16:17
I suggested 2 unit tests. You have only done 1. I think it is the other scenario where it doesn't work
Kumar  16:32
Ok , but if the method will not execute if the template was Group template mate, so do i need to do that as well ? in turn it returns empty
Me  16:40
isn't your requirement that it shows the message regardless if it is Officially-authored or User-authored
Kumar  16:41
yes, that is the requirement
i will check on the code once again mate
haah lil confusing

Although the overall work is confusing, this is one of the simplest parts of it: Show a message regardless of who created it. If the method is “returning empty” then that is the bug, it should return a message.

There was a line of code like

if (!configEnabled && activeSubscription)

and he changed it to

if ((!configEnabled && activeSubscription)
||
(configEnabled && activeSubscription))

so I wrote: “so just activeSubscription then

Kumar: I am not able to get ur point here, kindly guide me

Me: “true or false” is always true isn’t it?

Kumar
yes mate, so shall it be framed like this
if ((configEnabled || !configEnabled) && activeSubscription)

NO! That still says “true or false”. I was trying to think of how I can write a response without telling him he doesn’t understand the very basics of programming. This is like Day 1 of learning how to write code.

Kumar: haah, I got it, just “activeSubscription” is enough isn’t it?

I was glad he seemed to understand in the end, because I was tempted to tell him to change his career…then he adds:

“correct me if I am wrong”

He has zero confidence.

The very next day he then tells me there is another requirement to remove the banner that he has been changing, so “is there any point carrying on?”. He sends me a screenshot of the requirement rather than giving me a link. He is definitely sent here to troll.

I’m sure he must have known about this, and I don’t know why he either:

  • didn’t make the deletions first (it would reduce the amount of code and reduce confusion)
  • not change any code he knew he was going to delete

So he made changes trying to fix a feature he knew he was going to remove. I had invested time reading the code, manually testing it, and all this back and forth communication. What a waste of my time.

Unassigned?

The good news is that he is leaving so he is going to be another company’s problem. The bad news is this enhancement is going to be reassigned to someone else.

I’ll probably write another blog about Kumar; I’ve got some more notes on previous development work he has done. If this enhancement ever goes live, maybe I will write a follow-up blog on it too.

Bad Rules

I’ve written blogs discussing incentives, and will probably write more in the future. One of my classic stories was how a Test Manager stated she was judging Testers if they run 10 Test Cases a day. Some people just ran 10 then chilled out for the rest of the day even though they would have normally done more work than this. Others tried to run as many as they could, but they ignored the harder Test Cases and ones that depend on 3rd parties. So:

A) it looked like we were nearly complete because the number of remaining test cases were low, but this last batch took ages to run so was very misleading.

B) We discovered that 3rd Party API/Test Systems were down at the last minute.

So this incentive actually helped delay our releases.

I’ve been watching a lot of Andrew Platt’s videos recently. He has many channels but this one he just reads stories from Reddit. It’s basically very low-value and easy YouTube content to make 😀

The stories he did on Rules made me laugh. It’s a similar concept to incentives; you are trying to change people’s behaviour by rewards/punishments, but if they aren’t well-thought out, then they backfire.

Here’s a few notes on my favourite punishments from the video:

  • If you’re a minute late that’s half a point, if you’re up to 4 hours late that’s half a point. So if you are gonna be late, may as well delay more.
  • Death penalty for stealing sheep. Welshmen caught stealing sheep would claim to be making love to them because the penalty for bestiality was lower.
  • Day care started charging a small fine for parents who picked their children late. This caused more late pick-ups. Could be that parents didn’t feel as guilty because it didn’t seem as much of an inconvenience. Also, it’s cheap childcare.
  • Bus drivers got banned from wearing shorts – so they all wore skirts instead.
  • Cobras were killed for a bounty in order to reduce the population. Enterprising people bred cobras to cash-in the bounty. When the reward system was scrapped, the cobras were set free, increasing the cobra population.
  • “Dry Counties” banned drinking. People would drive further away to drink, causing an increase in drunk driving.
  • Mandatory to drop heating temperatures to save on electricity. People brought their own heaters which increased electric use.
  • “Clean Desk” Policy caused people to put all their paperwork in an envelope and place it in the Internal Mail. It would arrive on their desks the next morning.
  • Dominos deliver pizza within 30 mins or it will be free. This increased car crashes as the drivers would drive recklessly to get there on time.
  • Only giving smokers breaktime; rewarding smokers.

Salary: Cost of living increase

In the last few years, my employer hasn’t bothered matching inflation. When challenged, the HR Director has said they traditionally don’t do this and are not obligated to do so.

It’s basically a wage-cut if they don’t though, and each of these years they seem to be posting record profits. Always seems really sketchy when you get told there’s no budget but they seem to forget they are a Public Limited Company and need to announce their finances, including director’s bonuses and all that.

This time they acknowledged that inflation is very high this year, and are hyping up how caring they are because they are actually giving an increase… although in most cases it still is going to be under inflation. It was pretty predictable that it was going to rise further than the 5% they were benchmarking against. The current figure published by the ONS was 6.2%.

They claim to be giving “an excess of 7% rise“. Everyone is getting a 2% rise, with a further 3% at the discretion of line managers but they can’t give it if your salary has changed in the last 6 months. Last year, when they finally acknowledged I was underpaid, they staggered the increase in 2 instalments so I only got my full rise in January so that means I don’t qualify for this 3%. They are also giving 2% profit share which is a one-off payment and not a salary increase at all. Pension will increase by 0.5%.

So according to their maths, 2 + 3 + 2 + 0.5 is 7.5%. But 2 of that is the one-off payment so at most you can get 5.5%, but 0.5% is your pension, which is nice, but it doesn’t end up in your bank; so we only get 5% direct in our bank.

Personally, I just get the 2% plus 0.5% pension. That is supposed to cover the 6.25% inflation, and is it even going to stay that way? Could rise further.

I love that in the FAQ they provided with the announcement, they went with:

Will I receive a salary increase if I leave? 

Surely no one would even think that. How can you get a salary increase from a company you are no longer employed by.

:upside_down_face:

Making Yourself Redundant

I often find that managers end up writing jargon-fueled posts that don’t mean anything to me. It’s often just hype, or a slight change which makes no difference in the grand-scheme of things. So it just frustrates me or makes me laugh. I was talking to a friend about this topic and he said he loves it when they get the word “synergy” in there, so I was glad to read in in this post:

One thing is certain in life, and that is that change is inevitable. But change doesn’t mean it’s a bad thing; it means new beginnings, new opportunities, new ways to improve. Over the coming weeks we will see some change come to our Product Team. A new structure to bring synergy with our SAFe implementation so that we are better aligned than ever to deliver our hugely important product roadmaps over 2022.

Most notably, Product Owners will move to report directly into the appropriate value-oriented structure (Vertical Markets or Horizontal values).This change will reflect the need to provide autonomy to the relevant specialist areas enabling them to;

  1. make clear decisions on their respective priorities.
  2. bring the Product Owner and Programme Management teams closer together supporting their knowledge of the ‘Why’ and the customers that we are focusing upon.
  3. provide greater consistency of resources working on specific areas based on the technology/product/market in which they specialise

Certainly sounds brilliant doesn’t it? The next bit made me laugh though.

As a result of these changes, the role of Head of Product Owners no longer fits into the product structure and so, unfortunately, George will be leaving the business. He’s been heavily involved in designing the new structure…

Wait…what? He came up with this new team structure and forgot to put himself in it?

Configuration Manager tool – Text Matching

When we add new, optional features, we often put in a flag to enable or disable the feature for certain users. This allows us to slowly roll-out the feature, or only enable it for customers that pay the premium. If there’s problems, you can also disable the feature quickly without pushing out a new version of our software.

One team had decided to rename their module, and therefore were updating the configuration flag’s name.

A lead developer, who reviewed the change, questioned if they could do that without running into incompatibility issues. The project team’s lead stated:

“No, we have the feature validation at source and target separately before we do anything. So, there should not be any compatibility issues.”

Project Lead

However, I was convinced the lead developer was correct. We have multiple versions of our software deployed, but we only have one version of the Configuration Manager tool.

So let’s say in Version1, the new module is called “User Manager“, but in Version2 they want the module to now be called “Staff Management” – and so they update the main software and the Configuration Manager tool to use this new name.

When we use the Configuration Management tool for new users that are using Version1, we update their config to use the new name “Staff Management“, however Version1‘s software will be looking for “User Manager” and will not find it, so will think the module is disabled.

Existing users on Version1 with the old flag in their configuration will work as normal, but it won’t work for new users. For Version2 users, the Configuration will have to be redeployed since their config will have the old name, but Version2 will be looking for the new name.

If the Configuration Management tool used ID’s rather than matching on text; it wouldn’t be a problem, so we have screwed ourselves over there. Matching on text is rarely a good idea due to possible spelling mistakes, case sensitivity (is “User Manager” the same as “user manager“?), and usually less efficient matching on something else like a number ID.

I spent a while trying to think of ways around this issue. Ideas that I thought of involved writing complex database scripts, running scripts outside the release process and getting other people involved. But then I think all my ideas still wouldn’t solve the incompatibility issues and it seemed way too much work for something trivial.

The team were adamant they wanted to rename it though, but it didn’t really matter too much. Only our staff see the Configuration Management tool, and we can update the main software so the users see the new name. It just adds confusion if someone tells you to enable “Staff Management” but you can’t see the option, so they have to correct themselves and ask for “User Manager” instead.

I would have thought the project team would have ran through different scenarios to test if their idea was feasible for new and existing users. But even after questioning it was feasible, they were adamant there wouldn’t be any compatibility issues so I had to explain the scenarios to them.

Related Blogs:

Configuration Switches
String Comparisons

Mentoring #7

I am mentoring an Apprentice who has never done C# before, and this is his first programming job. So this is a diary of some-sort of his progression and my ability to mentor.

Managers love rearranging teams and sometimes I facepalm at how ridiculous it gets. When our teams were first formed, I was in Team A and my Apprentice was in Team B. I flagged this to my manager as a strange choice because it would make more sense if I was working alongside him and knew the work that he was assigned to do.

After several months, I got reassigned to Team B. A few months later, he has been reassigned to Team A but will work as a Software Tester. So now we are in opposite teams once more.

All this switching is just stupid, but I don’t object to him switching roles. Recently, he did say he understands C# a lot more now and can read more code that he could before, but he struggles to understand what our software currently does.

The annoying thing is, I did suggest to him early on that; temporarily, (or intermittently) switching role to a Software Tester may be beneficial to him. Testing the software will mean he learns the functionality of what it is supposed to do, he sees more of our process, and also understands how the Test Environments are deployed/configured etc. Our software is really complex so I felt his insistence to get stuck into the code was actually hindering him.

He actually sounded quite excited to try it now, and I felt that if he does enjoy it, it might suit his abilities more. If he doesn’t do well, then we may end up letting him go.

This is the thing, he has been here a few years and hasn’t really learnt anything, and when he does ask basic questions, I find myself telling him I had already gone through all this stuff before. I don’t expect him to retain everything I tell him, but I did emphasise there was a lot to learn, and this team is incredibly difficult so needs to put the effort in early on – which he didn’t do. Now Colin (who I have written about many times on the blog) has moved roles from Developer to Manager, Colin told me he is aware that there are several underperforming people, and that he is going to be looking to move them on; my apprentice is one of them.

Colin seemed to suggest that if he can’t complete work himself (either from a Development or Testing point of view), then he could be let go. A week later, my apprentice was asking questions from a Developer perspective and I asked what happened to the Testing work. He said something about “not wanting to be a Tester” and “didn’t want to get stuck doing that work”.

Not a good idea.

Showing he can do Testing would be much easier than trying to fix some difficult Bugs. Going against a manager’s idea when you are close to being let go is also playing with fire. Also, what happened to the enthusiasm he showed a week prior?

I’d also previously explained to him how there’s always times where Developers have to chip in and help Testers. Those that kick off a fuss or don’t contribute enough are always looked down upon since they are not “team players” and don’t show a “quality” mindset which everyone should show.

We will have to see what happens. I’ve only ever known people to be sacked for having major arguments with managers, or doing something really offensive. It’s a rare occurrence so I’d imagine we would just keep him around, even if he doesn’t contribute much.