Team Composition

Several months ago, new teams were formed and we were shown the proposed structure. I thought there were a few strange decisions.

When there’s a team of 8 people, what’s the chance that you would end up with 2 James’ and 2 Louises?

I swear managers like to go out of their way to be annoying :smile:

It’s almost like they think “how can we maximise the communication problems?

If I was choosing teams, I would notice this, and would swap teams to remedy this. I can understand it might not be possible due to job roles and skill sets, but I’m sure most scenarios could be avoided. I’m sure these teams were chosen randomly rather than having any rationale.

Another team had Jack and Jacqueline. I pointed this out to Jack and he didn’t think much of it… until some members of the team referred to Jacqueline as “Jack” and the conversation became confusing.

The team that I recently moved to involves a third party API which is locked down to only allow network traffic from the UK. (I don’t know why the test API has these extreme restrictions – probably unnecessary “red tape”). It should be obvious to managers that this team needs to be fully UK based, but their insistence of being inclusive meant they still added members located in India.

I was replacing a UK developer who left because he was asked to do everything – because the Indians couldn’t connect to this API. In the first week when I joined the team, I was busy working, when one of the Indians contacted me and told me to pick up a bug fix because it was high priority, and they wouldn’t be able to debug/fix the bug accurately/comfortably.

We had 2 fairly urgent bugs and I was being asked to do both of them, yet I didn’t know what the 2 Indian developers were doing in the meantime. No wonder the other guy left – the team’s composition is nonsensical, and the Indians are always going to use this excuse. I’m sure the Indians don’t actually want to be in the team though, they would be more comfortable being assigned to any other team. 

You would think creating teams is generally easy, but I suppose there’s a bit of complexity to it. I’ve never had the opportunity to propose a team structure. I’d probably say my method would be something like this:

  1. Pick the correct number of Developers and Testers, considering their ability and knowledge. Do they have experience in the areas the team is focussing on? Does their job title really reflect their true ability? No point just putting one Senior in the team if they don’t have Senior qualities.
  2. Consider their personality types, are there any leaders in the team? No point putting together loads of silent types. Conversely, you probably don’t want too many big personalities.
  3. Consider if there’s any problems due to their location (access to networks or physical locations, consider time differences).
  4. Consider how well people get on:
    1. If you have people who are really close and are productive, then it’s most likely a good idea to keep them together.
    2. Conversely, people that have caused conflicts in the past could be placed in separate teams. No point risking extra tension.
  5. Try and avoid having similar names. This gets confusing in both written and spoken communication. 
  6. You may be limited when people can start working in the new team. Presumably everyone is already working on something and will need to transition.

Guess The Employee

Last year, we hired someone as a Communications and Engagement Coordinator and she came up with a “Guess The Employee” game. You are given a few clues, and if you guess who it is, you can win a £25 Amazon voucher. The thing is, we are quite a big company, and I only know people in Development, Support, and maybe know a few names of Directors.

I don’t even think I know most people well enough to know facts about their personal life either. For a few of my closest work friends I would – but then I don’t imagine they would be selected as a candidate. So even if there’s some really easy clues, how am I meant to know Becky from Marketing, or Mark from Finance? 

I imagine they only choose senior managers from each department as possible answers, since theoretically they would be more well-known. However, the people that know them the best will be their managers – so you are then awarding high-ranking managers and directors.

Recently we had this clue:

I display good performance for our customers, but I have been known for handing out red cards for other’s poor performance.

Obviously it is the “Customer Support Director”! He was a qualified Football Association referee, assigned to the North West Counties league.

£25 was awarded to a Director for knowing this.

Surely the Employee Engagement officer should come up with ideas that can engage lower-ranking staff rather than games that Directors can play.

Code Analysis: You Cannot Have More Than 6 Parameters

Recently, a software developer refactored some method calls in a strange way, so I questioned him on it. He stated “you cannot have more than 6 parameters”.

This is nonsense, but he means there is a Code Analysis rule that flags this up. The theory is that: if there’s many parameters, some of them are probably related, and so they can be grouped into a common object. 

public void AddUser(
   string forename,
   string surname,
   Date dateOfBirth,
   string addressLine1,
   string addressLine2,
   string town,
   string county)

In the example above, you can group the last 4 fields into an Address object.

When the Code Analysis rule flags your code, I think it’s more of a question of “can you group these parameters together?” and not a “you must never have more than 6 parameters”.

If you think the code is fine, you can simply suppress the rule. If you think it is correct, then you can create a new class to group these variables together (or use an existing class if there is something relevant).

I’ve written quite a few blogs on Developers writing code in strange ways because Code Analysis prompted them to. I think Code Analysis aims to prompt you to write code in a standard way, and avoid common errors/inefficiencies. It seems to have the opposite effect because many developers don’t think for themselves.

Out of interest, I asked a nerdy developer if there really was a limit to how many parameters you can have. So like a total nerd, he tested it out. Apparently, in C#, the max you can have is 65536 parameters in a constructor. Then he gave me additional nerd stats. His file was 4MB of source code which compiled to 1.9 MB exe file.

No idea why 65536 is the limit, and I didn’t spend any time investigating it, or quizzing him further. I just accepted it’s such a large number, you would never reach it. It’s more than 100, so you may as well say there isn’t a limit.

The Matrix Resurrections

Since The Matrix series is related to hacking, I feel that a movie review is suitable for my blog. This is full of spoilers as I discuss the film’s plot; or lack of it!

In December, I watched the Matrix Trilogy again in anticipation for the new film; “Resurrections”. I believe I saw the original film when it was released on DVD, and the other two in the cinema. I tend to forget films very quickly so I only remembered I loved the first one, thought the second was quite good and disliked the third. I think this time, I did enjoy the original trilogy a bit more than I remembered, but I did get the feeling that by the third film, they didn’t really know how to end it – and it just felt a bit half-assed.

I tend to like watching review videos to get an idea of what other people think, and I did see a suggestion that The Matrix was supposed to be just a standalone film but the massive success forced it to become a trilogy to cash in on the popularity. This sounds plausible because it’s what happens to everything really, and these days you get unnecessary sequels and reboots. I thought Resurrections sounds like it fits that category… and it is.

They really are milking the franchise if this really is the 3rd sequel to a film that was never intended to have one. The time between the films is so large that the actors are quite old now and I think this does negatively impact the film. They got Keanu Reeves and Carrie-Ann Moss to reprise their roles as Thomas/Neo and Tiff/Trinity, but Morpheus has been replaced.

The film begins by introducing you to the new characters (led by Bugs) but they are rewatching the opening from the original film where the agents have tracked Trinity down. It’s described as a “modal” – some kind of “sandbox” simulation, but things aren’t exact – and it turns out it’s an ambush; cue some cool action scenes in typical Matrix style. Morpheus is an Agent for some reason, but soon turns (for some reason) and is determined to find Neo to bring him back to the real world.

Thomas Anderson (Neo) is a famous game designer by the success of his The Matrix trilogy of games. He is now making a new franchise but is told by his boss that Warner Bros are wanting to cash in on a fourth Matrix instalment whether he likes it or not. This sounds like that Lana Wachowski has somehow been forced to make this film and is spending the first 30 mins or so just having a dig at the people that are paying her. Warner Bros seem fine with it. They probably just want a film to get money.

Thomas seems depressed and delusional, so goes to therapy. Part of him suspects that the idea of the Matrix is actually real, and when he meets Morpheus – a character he thinks he created – he thinks he really is crazy. One of the new characters, Bugs, convinces Thomas to follow her and now we get loads of sequences that mirror the first film. Instead of fans picking up on the references, it is specifically pointed out to you by using actual footage from the original film. Look here is Morpheus (shows clip), here is a cat (shows clip). 

Also, instead of using landline phones to travel out of the Matrix (who uses landlines now?), they use mirrors. Why? Mirrors don’t have the internet, they could have just used any smart device. I’ve seen explanations that mobile phone screens are called “black mirrors” when powered off so it’s a reference to that – but that seems tenuous. I was confused near the end when they don’t use a Mirror and just get disconnected by being unplugged. I thought that caused death in the original trilogy?

So once you go through the story beats of the original film: Neo wakes up again in his pod, released by robot, meets the new crew, trains in a fighting program, travels to Zion – the actual film can happen. There’s still no real plot or end goal though. We have Neo back in the real world but what is really at stake? He now wants to rescue Trinity who is still in her pod. Does she want to come back though? Probably if she is convinced that she is living in a simulation, but she should think Neo is a nutcase.

Why are Neo and Trinity even alive? Didn’t they die at the end of the original trilogy? Well they did, but they were resurrected because the love they had can generate extra power or some nonsense. So the new “Architect” did exactly that. Then the more he torments Neo, the more power he can generate, so the Architect also happens to be Neo’s therapist to keep convincing him that the idea of the Matrix was just a game idea in Neo’s mind and it isn’t real. Wasn’t Neo blinded too? Well, these super resurrecting bots can repair eyes as well. 

When Neo reaches Zion, he is told that 60 years have passed. Neo and Trinity haven’t really aged that much but everyone else has; so Niobe, still played by Jada Pinkett-Smith, is an old woman. She thinks Neo is bad news, so locks him in a room with a balcony. So when Neo looks out to enjoy the view, a ship swoops in to free him. Wasn’t a well-thought out plan by Niobe. 

I previously mentioned that the age of the characters is a problem. Instead of all the fancy kung-fu, Neo just blocks bullets and uses a force-push move. Trinity doesn’t have much to do until the final scenes; and I was surprised at the number of scenes she was in. I suppose most of the film was trying to make you remember what happened in the original film and showing you what the characters had been up to – that they ran out of time for the film to actually happen; despite it being 2 hours 30 mins. After the initial set-up, Morpheus only appears sporadically, and Bugs barely features.

Tiffany should need strongly convincing to leave the simulation, but Neo barely even tries, so Tiffany walks away. Somehow, Tiffany suddenly decides she prefers to be called Trinity so ditches her husband and kids, and suddenly becomes proficient in combat again. Then, when it is needed, she decides she is somehow “The One” so can fly now, saving the day, before going to meet the Architect to show who is boss now.

I think the original Matrix captivated audiences with cutting edge effects, and impressive martial arts. There’s far less action in this film and it pales in comparison aside from the opening scene. Visually, it is nice, but it’s just like any modern film.

It was probably hard to come up with a story without feeling like it was a cash in. I think Lana probably didn’t want to make this film, and I don’t really understand why the likes of Keanu and Carrie agreed to do it. Did they read the script and think this had a good story to tell? Or do they just like money?

Some people thought Revolutions tarnished The Matrix’s legacy, but now this film comes along to deal the finishing blow. Unless they turn this into a new trilogy of course.

I think the Pitch Meeting for this film sums it up perfectly.

Word To Your Mother

Recently, we had a bug with the Microsoft Word integration, specifically for MS Word 2010.

There was a meeting about it, and someone stated that we removed it from the list of versions we supported; therefore we don’t have to fix it. We can just tell users to upgrade to a version of Word that we do support.

However, after other people looked into confirming this claim, it turns out we never sent out any communications to notify users of this change. Since we didn’t give them adequate notice, we have to fix the bug and keep supporting this version for at least another 6 months.

Additionally, we don’t have Office 2019 listed on software we support, yet we support o365. Or we say we do, but no one in Development had a licence for it; not even Testers. So we just hoped everything worked fine up to this point.

Cannot Count

There was a bug in our software where a crash occurred when an address with over 50 characters was specified. For the fix, the developer changed the code to truncate the text down to 49 characters.

“why are you using 49 and not 50?”

Me

He thought the “length” property was actually 1 less than there are; so 50 characters would report the Length property as 49. He was thinking of arrays where they are zero-indexed, so the first position in an array is Index 0, second position is 1 etc. Obviously he didn’t test it, and it was the wrong assumption. Length means length.

Also, there were 5 other address fields with no validation (Line 2, Town, County, Postcode, Notes). Why didn’t he add validation for them too? Just because the bug report was for the first line of the address, why wouldn’t you consider the rest of it?

After I prompted him, he added validation for all fields, truncating them to 50 except one where he truncated to 51. Why 51?

“I manually checked in the registration screen. That field holds 51 chars.”

Weird, because I manually checked it and looked at the code – it is 50. Let’s check the database column too… That’s right. It’s 50.

“Thanks, I’ve changed it to 50. Sorry, some kind of counting mistake.”

We seem to have so many developers that don’t put much thought into their work. This is one of the easiest bugs you can fix, and yet I’m basically hand-holding them through it. When there’s more complicated bugs for me to review, I end up scrutinising the code in great detail because I end up assuming they put zero thought into the solution, and didn’t test it.

Mentoring #6

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.

The months have flown by, and my last Mentoring blog was back in August!

Back then, we were in different teams and I stated that I wasn’t going to be proactive in helping him since I had constantly given him advice, offered to spend time with him, but I didn’t see much effort on his part. Since he was in a different team – it wasn’t really my responsibility to help him progress with his team’s work.

Things have changed slightly since I got reassigned to his team (managers sure do love reassigning people!). I gave him a list of bugs to look at, which were (what looked like) easy ones. It is proper work to do (rather than working through tutorials), although hasn’t gone through the normal prioritisation process, so even when he fixed them (well with a lot of supervision from me), they are just now lingering in a code branch and won’t actually get tested and released.

I spoke to him at the start of December and said there’s going to be downtime as most of the team are off, and we end up having a “change freeze” where we don’t release anything to our users anyway. December is the perfect time to do his personal project and write as much code as he can without any expectation/pressure from any management or team members.

A few weeks later, I asked him what he had done and he said he was just “finishing off some online courses”. Which to me, should have taken a week at most and it mainly involves just watching videos. He said he would move onto his personal project next. A week later, I asked him if he had any code to show me or discuss and he said

I’ve been chilling out… it’s Christmas”. 

Apprentice

I really wanted him to get involved in the projects next year because I think January/February is going to be really busy. We’ve been putting off starting projects (although a few of them I actually had a look at in the December downtime, and prototyped a solution), but they will no doubt want to rush them out as they suddenly become “urgent”. 

However, since he has barely put the effort in again, he still is way behind the skills level he should be performing at – which means it’s going to be difficult to assign him parts of a project he can actually do.