Colin Promotion

I did mention that Colin joined this team because he saw it as a good opportunity for promotion. I thought he was absolutely nuts because he didn’t even deserve his Senior position, yet he was aiming to be among the “big dogs” in the company (often known as Principal Developers). I’m sure you will agree that he has ‘ideas above his station’ if you read the stories I write about him.

Well, now I have egg on my face – because he has been promoted yet again, and I’m still not a Senior. He is two ranks above me now, can you believe that?

I sent messages to some of his old colleagues to inform them of the news. Usually, if you tell someone about a promotion, you will get neutral responses like “ok, now I know who to talk to about X”, or maybe some positive responses like “brilliant, he really deserved it”. Out of 7 responses, what percentage were positive or neutral?

0% positive, 0% neutral. 100% negative. Some people even accused me of lying. I don’t normally put swearing on the blog, but I’ll include this one. Here are the responses:

“What!? I don’t know what to say to that.”

“haahaha are you fucking joking?”

“wtf..what is wrong with the managers?”

“Be prepared for more mistakes”

:joy:Is he your team leader? That should work out well :face_with_rolling_eyes:

 “wow, how did that happen? God help the world”

 “Don’t lie”

I’d like to point out all I said was “Colin has been promoted”. I didn’t tell them what I thought, or preceded it with any statement to influence their opinion.

So the promotion definitely doesn’t have the backing of his colleagues. It makes you wonder how a promotion can go ahead when it is unanimously deemed a bad idea. Well, I’ll keep trying to think of how to make an accurate and fair promotion process.

I did have a conversation with my manager to ask why my promotion didn’t happen. He gave me the usual response I’ve heard in the past to do with budgets and no free spaces for that role. I pointed out that Colin has just vacated a Senior position which I can have.

He was still adamant that the budget was gone and there’s no free spaces anyway. He promised he was doing as much as he could to promote me, and he said he was constantly asking the Head of Development to promote me.

I have to put faith in him, because later that day the Head of Development sent me a message saying how she understands “I am doing a great job and it is appreciated”. 

The funny thing is, I’m not even doing a good job at this current moment. I’ve had lots of annual leave, and haven’t had much work assigned since we decided to cut the scope of our recent releases. I’ll probably write about this in more detail shortly.

How To Make Your Team Hate You #2

I was thinking about the colleagues I’ve legitimately despised (and it’s not just my opinion), and most of them have something in common: they have either been promoted, or told they will get promoted if they prove themselves. So here is story number 2.

We were in a newly formed team, and Rob was a newly promoted Test Manager. As developers, we were planning on tidying up the code base, formatting the code consistently, and removing unused code.

There wasn’t any real testing to do, given the code was unused, but Rob insisted we spend time investigating how to test the code.

It didn’t make sense – how can you test some code that isn’t used? Unless you prove it somehow is used, of course. But if the developer could tell the tester how to prove it is used, then the developer would know it is used, and wouldn’t remove it.

For the actual, real, development work, Rob demanded that we come up with a full test plan for every planned piece of work before we are allowed to make any code changes.

The thing is, even though I know the overall aim and could explain some test scenarios up front, I will always suggest more tests after I make the code changes. After I have made the changes, I am familiar with other areas of the system it impacted, or extra changes I made to refactor the code. So it only would be a temporary plan anyway.

Once we made that point, Rob then said we should analyse the code, plan out what code changes we would make, including refactoring, and document them. When all items are documented, we could then start work.

Who agreed in the team? No one. Not even other testers. Yet, he then runs off to higher ranking managers and persuades them that it is a good idea. I think they were just good friends with him, so they backed him.

We ended up spending ages working out what we were gonna change, but then not actually do it; because we had to plan every item first. 

When the time came to actually implementing our plan, you then had to spend time re-familiarising with the solution and then verifying if the proposed solution was actually accurate. The person that did the planning may not be the person to actually implement it.

We ended up being 2 months into the project and not a single line of code was changed. When we started doing the work, the “familiarising” process just annoyed people. From the start, we had stated that the entire process was dum, we were annoyed at the extended planning time, then the actual development stage just reinforced how dumb the entire thing was.

I don’t know if anything happened behind the scenes, but Rob was moved off our team at this point, and it felt like a huge weight off our shoulders.

I don’t know what Rob aimed to achieve with his idea. I think he thought it was a process that enforced quality, but he was unanimously told it was a bad idea, but yet fought to get it implemented. Surely if the team is fighting against it, then dictating that they implement it is just going to cause so much friction – that your position is going to be untenable. And it was.

The lesson here is that if you do get promoted, make sure it doesn’t go to your head. Yeah, you have to manage people, but having a new fancy job title doesn’t mean you have to go wild. You are working with people. You are still working with your old colleagues. Treat them with respect and be more understanding. I think a lot of managers gain respect by being nice and leading by example.

Blackmail Hiring

A manager was talking about a former software tester, Aaron, who was regarded by many as a waste of time. He struggled to learn simple things, and you often had to explain concepts to him multiple times.

Many times I sat with him, and essentially did his work for him. I heard similar complaints from other colleagues.

The confession the manager made was: that Aaron actually failed the interview process. It was just that his friend Richard had recommended him, and when Richard realised that Aaron wasn’t going to be offered the job, Richard threatened to resign. So to appease him, Aaron was hired.

The thing is, Richard ended up leaving the company less than half a year later, whereas Aaron remained for years. Eventually, his manager lost patience with him, and Aaron initially moved teams and line manager.

His new manager wasn’t so patient, and issued him with a Performance Improvement Plan. Aaron’s position was finally untenable, so he finally resigned. No idea why we didn’t act earlier, but he should never have been employed in the first place.

Mid Year Review 2020

Intro

I’m not sure if the “end of year” coincides with the tax year, or if this “mid year” should have been a few months back, but the organisation of our performance reviews has been poor this year.

I think we were supposed to agree on some objectives back in January or something, which got delayed, I think this was mainly due to managers having to decide which crazy criteria we are judged against this time. I have ranted about different ways of evaluating performance, but they usually seem unfair and favour those who love to exaggerate or are a bit dishonest; which isn’t who you want to give pay rises and promotions to.

Anyway, the mid year review was booked in and I pointed out to my line manager that I have no objectives and haven’t prepared anything. Then he said “don’t worry, I’m just gonna free-style it”.

So much for being fair! In previous years we were told the strict process and consistency across the departments was for fairness. Now we have regressed for a pure free-for-all.

However, I’m not complaining because I hate the majority of reviews. I think you do have to be purely subjective when it comes to analysing developers, and I think you have no choice but to judge how well they fit in the team, which the manager should have awareness of. So I have more chance of finally being promoted under this unorganised style.

The Review

So my manager Chris, begins the meeting by explaining that he has got some notes on his own opinions:

“you’re the strongest developer in the team, or you are up there with the best”

Chris

and he has also asked for feedback from my colleagues.

“the biggest problem with working with him, is that he is too good”

Anonymous

“why isn’t he a senior yet?”

Colin

I know that one because Colin had personally called me last week and told me he had questioned it with Chris. No idea why Colin is lobbying for my promotion. 

I’m good friends with one of the Software Architects, and he has also been trying to influence Chris on my behalf. So I have 2 people protesting about it which is funny.

‘The promotion is finally here’, I thought. Then Chris starts saying that there’s been a bit of negative feedback too, and it’s my communication.

He said that I’m too cynical and sometimes put a downer on the outlook of the project. I wasn’t sure what he meant at first, but then I later realised that as a joke, when the slightest thing has gone wrong, I do say things like “the project is gonna be cancelled!”. Are people actually taking that seriously? It’s just over-dramatic comedy. Instead of Chris asking “how are your projects doing?”, he always asks “are there any projects on fire?” How is that any different?

I do wonder who doesn’t like my humour, since when I am on calls and say things like that, people in the team do laugh. Given that I write it on a lot of Slack posts, surely people understand it’s just a recurring joke; like a comedy sketch show. There’s plenty of witty humour too, not just recurring phrases. I bet it is Becky or someone with a similar personality because she just seems a bit out of touch with technology, and is a bit too serious. She also asks stupid things so I can be quite snappy in my responses on Slack, so out of everyone in the team, I bet her opinion of me is the lowest. At least I answer her questions, most people don’t even attempt to help.

Chris did say to maybe not joke around so much, apart from when I’m with him because he loves my humour.

Chris also started saying he needs even more evidence of my Senior qualities to take to Senior Management to persuade them of my promotion. Therefore I need to accept more responsibility and take the lead on projects.

I think I argued my case really well. Firstly, I said “how can I lead when we have loads of Seniors in the team?” They should be leading because it is their job to do so. The fact that not many show much leadership anyway means they are underperforming, and also I am held to different criteria. It’s also Chris’ job to decide who works on a particular project. So if I’m never the most senior in the team, then I can’t lead. That’s not my fault.

I also stated that I have been given these challenges like mentoring and I do show senior ability by doing all the Code Reviews, then nothing comes from it, not even a wage rise.  He kept on saying he needs evidence to convince the senior management, but I said that he has enough; he had said he regards me as one of the best developers in the team, and realises I was essential in dealing with all the recent urgent fixes that everyone shied away from. He can see that I’m one of the few developers that engages with the conversations on Slack/Teams. What is everyone else doing? Either doing their own work and they don’t care about the rest of the team, or they are simply chilling out.

He did ask why I thought I hadn’t been promoted in the past but others have been. I said others are probably a bit more firm in their demands and threaten to quit if they don’t get what they want, whereas I just get on with things. Also, the way we attempt to measure developer’s performance is just nonsense.

He did say to improve my communication, I need to show more authority and be more firm in my views. So I asked him for a payrise, otherwise I may have to quit!

Result?

It was funny how he said my humour was perceived to be a negative aspect, but I was running the Performance Review like a comedy show. I can’t help myself chipping in the humour. Although there is truth in my demand. If someone joined the company in my role, you can guarantee they would be on equal pay or higher, because I’m somehow still bottom of the salary band. He did promise to look into that.

He did conclude he would sort out my promotion, but when I pressed him on timescales, he refused to comment. No doubt I’ll have to wait another year or something daft.

Good Job

There have been a few instances of managers just regurgitating information, but when I think about it, I guess that’s just how the world is. Someone can report back to their manager and the manager has to trust what they say. Then that manager feeds back to their manager, and so on.  I guess you can’t expect them to verify all the information. That’s why you have a hierarchy and delegate, and get information fed back to you.

It’s quite funny when it reaches Director level, because I’m sure they literally have no idea what certain things mean because they won’t have more than a basic understanding of how software is developed. 

There was a really urgent bug fix, and I volunteered to do it. It wasn’t immediately obvious what the problem was, and I was getting a bit lost trying to debug it. Recreating it was easy, understanding why it wasn’t working was tricky.

Given the urgency, I requested help. I managed to get one of my close colleagues to help. He did point me in the right direction; he pointed out something I had overlooked. Then I came up with the theory of why the bug was occurring, and I was correct. At that point, fixing it was actually trivial.

He had to give feedback to my manager to confirm that he had helped, but he tried to make sure I got credit by saying that I did “a good job”. I know this because he screenshotted the Slack conversation and sent it to me.

I then received a message from my manager stating I had done “a fantastic job”. A day later, the Development Director messages me saying that she understands I have done “a cracking job”.

I love how the adjective basically increased in importance as it went up the chain: good->fantastic->cracking.

I did do a good job from a certain perspective. I did show good decision-making by requesting help to ensure the work was done on time. It definitely worked out for the better. 

Also, another developer should have actually picked this work up, but I detected his reluctance. It was one of those where it was quite late in the week, and we had to fix it with some urgency. He didn’t want the pressure/stress and responsibility. I did step up, and it was a bit more complicated than I initially thought, so I definitely mugged myself off there. 

I’d like to think I would volunteer for things like this anyway, but I am trying to be the centre of attention in order to force my manager to give me that promotion he hinted at. This has worked well, because the Development Director has been told about it.

The Code Analysis Meetings

Our Team Lead had been hyping up how important it is to improve the statistics of our codebase. So we have a report that runs and gives you metrics about duplicated code, “code smells”, possible bugs, test coverage etc.

Colin volunteered to lead on this. I know that he is just trying to impress our manager to try and worm his way into another undeserved promotion. The thing is, he isn’t even thinking about what he is doing.

There’s been 2 meetings per week, and it’s been going on for 3 months. I wanted to know what was going on because we haven’t heard any outcome from the meetings, and the statistics haven’t improved either.

Intervening

I asked one of the attendees if they had discussed a particular rule that was flagged by the report, and told him that if we suppress the rule, it will improve the metrics by 300 or so. He told me to come to the meetings.

So I join the meeting, and ask them to investigate the possibility of suppressing this rule and people seem to think it is a great idea. No one had any other new ideas, so then Colin said we would continue going through the report.

I asked him to explain the process since it was my first meeting. He said there are different severities like low, medium, high, critical, and managers only care about the two highest categories. So he was going through each rule and commenting on them saying they can be changed to Low, or that we need to fix them.

So we start looking at each rule violation, and there’s about 8 people on the call; mainly developers but a few interested testers, and 2 managers. I say “interested” because they have turned up to the call, but when Colin asks people to discuss it, no one can make a decision. Colin kept on trying to describe what the code was doing but made so many mistakes, I had to correct him several times.

I was basically taking over, but kept on asking for other people’s opinions, but people seemed pretty indifferent. The call had gone on for nearly an hour and a developer hadn’t said a word, so Colin accused him of being asleep. The developer said he was awake, but then continued to stay in silence for the rest of the call.

I was told there was another meeting in a few days time, and it would be more technical, so I agreed to join.

The Great Realisation

That meeting was basically the same people, but excluding the managers. Colin continued going through each rule violation again. The conversation that followed roughly went like this:

Me: “Hang on, this is taking forever. We are seeing the same type of rule violation and you have gone through about 15 of them now.”

Colin: “Yeah, there are loads”.

Me: “This seems like it is gonna take all year. How many violations of this particular rule are there?”

Colin: “4000”.

Me: “Hang on, let me get this right. You are going through each of the 4000 violations, analysing the code, and trying to decide if you should mark it as Low severity or not?”

Colin: “Yep”

Me: “Don’t you think it is stupid?”

Colin: “That’s what managers want us to do”

Me: “No, the managers want you to decide how important the rules are, not how important each particular violation is. If they were aware there’s 4000 of the same rule, I’m sure they wouldn’t want you to do this. Why don’t we just look at the rules? How many rules are there that are being flagged as High or Critical”

Colin: “5”

Me: “So you have had about 12 meetings to discuss 5 rules, and you haven’t even gone through 1?”

Colin: “Yeah”.

Absolute waste of time. Just think, if there’s only 6 people and you paid them £12 an hour, and had 24, 1 hour-long meetings that they attended – that’s a cost of £1,728. But then sometimes there would be more people attending, and you had the expensive managers too. What did they achieve until I came along? Nothing. No one questioned it.

The thing is, we are concentrating on the wrong thing. There’s plenty of bugs to fix which bring value to the users. Why are we wasting time tweaking things that don’t need to be changed? The crazy thing is, we are spending all this time talking about doing it, and it isn’t being done.

The Efficient Team

In the next meeting. I told the manager our new approach, and also raised some of my concerns with how much importance we are placing on this. She didn’t care about my concerns so that got ignored. What she did say was “you guys are becoming an efficient team”.

Is that even serious? Months of wasted time. The words sound sarcastic to me, but I think she was being serious; the tone sounded sincere.

So in conclusion: Colin was just trying to impress the managers by taking the lead, and so was everyone else really; they were on the call, but they really had no passion for what we were doing.

Finishing the Apprentices work

In a previous blog, I was criticising some work done by an Apprentice: Apprentice Insanity

What actually happened with this is that it got deprioritised so was just shelved for a couple of months. Which is weird, because the original developer made out it was very urgent and wanted to check it in at the last minute.

When it was decided it was needed again, who got asked to finish it off? 

Yeah! me! What are the chances of that?

The Fix

The work was to show some messages to the user why a feature isn’t enabled for them. There can be several different reasons, but we never told the user why, until now.

So I load up our program with a valid user… I can’t use the feature anymore, and it tells me 5 reasons why I can’t use the feature. It’s completely broken then. A valid user should have allowed me to use the feature, and obviously show 0 reasons.

So I fixed a few bugs, and now I can use the feature, but there are still 3 reasons displayed. So it says I can’t use the feature; but I can, and I know I should be able to. 

I spent a lot of time looking through the code, and I saw that there is an existing file that did the validation, but the apprentice had created another file with some other validation rules in. If it is the same rules, then we are checking them twice? If they are different rules, then you end up in a situation like this; where I can use a feature, but the other file’s validation tells me I can’t.

So I end up deleting this extra file, and make the existing file be the code that returns the failed rules.

The new dialog he added looked nice enough, although the dialog was a bit small, and a few aspects of it wouldn’t actually meet our UX standards. When I looked at it, I saw that he had positioned all the controls by hand for a particular size, and so I had to do a lot of rework to get the controls to work on a larger dialog.

He also had code with complicated logic to adjust the size further. Complete hacky. So I got rid of all that too.

There was some other hacky code where he even had a comment along the lines of “for some reason the control can be duplicated, so if this happens, then we need to remove it”. After some experimentation and debugging, I eventually worked it out. What was happening was that the initialisation code was calling his new method twice. You would think that means the control was always added twice, but it wasn’t.

It turns out that there was some existing code that checked if a control was in position 1 in the grid, and if it was; it was then removed. Then there was some logic to re-add it based on a condition. So the control in position one is optional.

Position 1Control that sometimes gets displayed. Put new control here?
Position 2Control that is always displayed
Position 3Another Control that is always displayed
Illustrating the grid layout. There are 3 rows which can have controls in.

The Apprentice was adding his control to position 1 in the grid, but if the other control was there, then he added it to position 2 instead. So what was happening is – if he added his control to position 1, then the existing code then removed it, then when his logic is executed the second time, then it gets added to position 1 once more. So it displays correctly, but works “by coincidence”. 

If the existing control is added to position 1, his method then adds the new control to position 2, so when it executes the second time, it adds a duplicate to position 2. So then his hacky code kicks in and removes the duplicate. The simple solution; just create a new row in the grid for his new control. Delete the duplicate call. Delete the hack.

So it seems like he got into a mess by trying to cut corners, put in a hack when it didn’t work, but then it only worked intermittently and he didn’t understand why… so then put in some more hacks to cover it up. What you end up with is nonsense.

In the end, I had completely rewritten it, made the UI nicer, and got rid of all the bugs. Result.

The Demo

We had a demo arranged with someone who was basically representing a user. I was going to demo my code, but, an hour before the meeting, I got an important meeting invite. As a joke, I asked the Apprentice if he could cover me. He said he would be happy to do so. I told him I was joking, but if he really wanted to do it, then it would be appreciated. Like a nutcase, he agreed. With only about 45 minutes to prepare for the demo, I told him I had completely rewritten his code, so he may be a bit lost. 

He chose to demo from his existing, broken code.

My meeting turned out to be really short, so I joined the demo as the Apprentice was trying to explain a feature, after it crashed and somehow wiped the contents of an existing dialog, much to the confusion of the Representative.

I saved the day at that point and demoed the proper, working code.

Afterwards, one of my colleagues said to me 

How the hell can you demo something THAT broken?

concerned colleague

I said he is “a complete legend”.

The Proxy

A new customer reported a particular feature was broken. This feature used a web browser (Chromium) to work.

A developer spent ages trying to work out what was going on and realised that the site had an invalid proxy script. The invalid script was causing a crash within Chromium, rendering this feature completely unusable.

Due to a typo in their proxy script, their proxy wasn’t blocking access as described by the script; it was basically “anything goes”.

The developer told them how to fix it, and we thought it would be case-closed. However, now that the proxy blocked access to websites as defined by their IT department, their employees started complaining.

Instead of the IT department:

  1. tweaking the rules, 
  2. Disabling the script completely
  3. or simply informing their staff that these sites were blocked according to their company policy

They decided to revert back to the original broken script. This obviously made our software break again. 

Really, it was a problem with Chromium, the software used in Google Chrome and now Microsoft Edge. Obviously, the workaround is to actually set a valid proxy script, but they decided to be awkward.

Testing and Developer Equality

I think it is possible to have an “us and them” kind of attitude between the developers and testers. You are supposed to work together to a common goal; deliver quality software. 

Since testers have the responsibility of making the final call if the work is good or not, and can send it back to the Developer, then there can be some resentment here. I have felt that a bit when I was a Tester, but it’s rare to witness events like that.

There was a time when it was announced that the Software Tester job title was changing to sound more important, and recently, there has been rumours that my employer is considering making Developers and Testers: “Engineers”. I don’t understand what a blanket term like that even achieves. Surely it is a nightmare for managers to sort out projects in the future. New managers may end up trying to put several Testers in a team together because all they see on a spreadsheet are several “Engineers”.

Surely it makes recruitment harder when you are advertising for “Engineers” and it isn’t clear what job you are applying for.

Some Testers can write code, and they will create Automated Test scripts, or some helpful application. Not all Testers can write code, or have even a slight interest in writing code.

I think it’s a case of managers trying to fix a problem that doesn’t even exist. There have been a few Testers that were vocal that they don’t want to be called Engineers. They are Testers and are proud of it. They feel that being called Engineers will come with the expectation that they have to be able to code and they don’t want that. I’m sure some Testers will be happy with the proposed change, but I think most people will agree it is a stupid change.

I do wonder who came up with the idea? Why change something if there isn’t a problem? What problem is this trying to address?

VMception and other Tales

We were supposed to be using a program to connect to a Virtual Machine. Some of us encountered a bug that prevented us from installing this software on our company laptops.

One developer asks

“Would we be able to install it through a Virtual Machine?”

Yeah of course. Let’s connect onto a Virtual Machine, then install some software to connect to another Virtual Machine that we actually want to connect to. Brilliant plan.

A Virtual Machine in a Virtual Machine. We could make a film about it – like Inception.

What we actually did is log the bug with the provider’s support team, and they quickly fixed it.

Chapter 2

We were given instructions on how to install this special Virtual Machine. We already have Office365 accounts, but for some reason, we were given a separate email address to use just for these Virtual Machines.

Beavis managed to make excuses to take the previous week off. When he finally returned to work, he wrote “I’ve been sent instructions; am I supposed to be configuring this virtual machine?”

<sarcasm> No, you just got sent the instructions to ignore them.

“I think it only works when you remote onto your work PC” 

Rob

No Rob, it’s literally why we are using virtual machines, so we don’t have to remote onto something physical.

Then Beavis is up to his usual tricks, delaying as long as possible just to get out of doing work. He posts on slack:

“The instructions say to log in using my new email address. Do I have to log out of my usual work email because I’m already signed in?”.

Beavis

Is that a serious question? How many websites allow you to log into them with two different accounts at once? Just log out, or use a different browser. Simple.

The other thing of note in the instructions was the 2-factor-authentication. “If you use another app like Authy then you need to download Microsoft Authenticator as well.” I guess the instructions could have just said “You must use Microsoft Authenticator”. That would have been clearer.

Another team member says “I’m getting an error”

“What app are you using?” 

“Google Authenticator”

<facepalm> (-‸ლ)