Employee Profiles: Neil

Neil was very similar to Gerald. Although I always got on with Neil, his programming skills were a bit lacking.

He was definitely one of those software developers that may have been good in his prime, but the languages he has used are now obsolete and he struggles to learn new things, so was a poor C# developer. Or maybe he has always been poor.

Neil is like “I don’t know why this bug is happening, I might try change random parameters

So I said “have you found the barcode code since it is that which is displaying incorrectly?

No I haven’t. I suppose that’s important to find

Neil in the Standup update on Thursday: “gonna switch branches

Friday: “just in the process of switching branches

Switching branches takes a few minutes (Git, plus some config changes)

“I don’t have a good feeling about downloading nuget packages any more. Before the patch, the fix made 21 changes to .csproj file and .config files in order to work. So far it has made 523 changes.”

Neil

What’s he on about? sounds like Neil is deleting packages then removing the part of the build script that grabs them, then wondering why he can’t log in. 

One trait they had is that he seemed focussed on his own work and didn’t pay attention to what anyone else was doing. So there could be well-known employees at the company and he wouldn’t know who they are. So there were plenty of conversations like “go and ask George for assistance” and he would be like “who’s that?” or “what does he do?” much to the derision of team-mates.

"might be worth getting you and Nick on a call together because you are working on similar items"
Neil: "Nick who?"
"Nick on our team"

He once turned up to the stand up which started at 9:30 but he was supposed to be on a 4 hour training course from 9. He said he joined the meeting but no one was there. Our manager was like “did you join using the correct link? The calendar invite says PLACEHOLDER so that’s not the correct one“. Why didn’t he ask people if the meeting was on? He should have messaged his manager straight away.

A few months later, he missed another meeting. “did you not see my reminder about this morning’s call in Slack yesterday afternoon?

I thought it was some advice on where to look in the code

The team lead had posted “Announcement : reminder that we’ve got a call at 9am tomorrow about MEDS ISN”.

Probably Neil’s brain – “mmmmmmm MEDS ISN call. Sorry, I can’t seem to find the MedsISNCall code. Is that a 3rd party dll?

I’m still baffled by Neil. If he thought it really was code, then why wouldn’t he ask you how to find it?

He often struggled and didn’t ask for help, even though we repeatedly told him we would help train him up in our software and with C#. He would raise it as a point for himself in the Agile Retrospectives, and say that he will ask for more help and work as a team; but then carried on as normal.

Yesterday, I failed to log in after 3 attempts. So I am carrying on looking at it

Neil wants to add a new user to the database because he doesn’t know how to unlock his password by running a script on the database, but it seems he didn’t know how to add users either. I wonder what time he locked it. Did he lock it at 11am, then walked off?

Neil last week: I need to ask for help more

Probably Neil’s brain this week: well, my account is locked, looks like today is a write-off

Later on, the manager asks him if he is all sorted and he said: “I can log in but an error pops up.

So he is blocked again and never said anything. He is really trying to get himself sacked.

I’ve noticed these types of people often blag their standup updates by saying “Sent a message to…”. Sending an instant message or email to someone could take some time to make sure it is worded correctly, but it’s not really a significant thing. Then there can be times where the recipient doesn’t respond because they are busy or out of office. But then what are you doing whilst blocked? They seem to use it as an excuse to write-off the entire day and shift the blame to someone else.

There were several times where he was working on items that had been picked up by others, had completely misinterpreted the requirements, or just had general bad luck with work being deprioritised as he was working on it. It kinda became a running joke like he was a cartoon character.

We told Neil to take a bug from the backlog. It was one I had investigated and put loads of notes in so it should be really easy for him to fix. He took the one already assigned to me with a status of “In Progress”.

Build Problem

On a standup, he was saying he was struggling with a build error. I volunteered to help him since we didn’t want him stuck all day. I asked him to clarify the situation; “is it on a computer that has always worked then suddenly stopped working?” And is he “currently running the build script without any of his changes in, or could it be caused by something he changed?”. “If he types that az login command, what does it say?

Then all he says back is

Curtis from IT is supposed to be setting up elevated access on A20205 but it isn’t working yet

WHO IS CURTIS? Why is he included in the story now? and what even is that machine name? Am I supposed to recognise it?

Existing one that has always worked except for these latest build changes. Curtis said “I’ll need to switch your admin access over from Primary to an elevated to match that of the other users on the jumpbox” and under the circumstances I thought it sounded like a good idea.”

I asked why Curtis is involved. Has Neil asked him to fix his build issues? and why does he think it’s an IT problem rather than a Development one?

He contacted me. He did not give a reason for making the change so I don’t think he knew about my build issues. He may have noticed that others users have elevated permissions. I do not think they have caused the build issues.

So he is telling me about Curtis but it’s nothing to do with the problem I am trying to help him with?

After looking at Neil’s local changes, I saw that he had made changes to the build script which is basically one of my initial questions which he could have answered. I suppose I need to check each stage for tampering.

So I ask him what the error he got in order for him to start changing the build script. It shouldn’t be necessary; why would it work for everyone in the department but not Neil? He sends me a screenshot, and I noticed that the command prompt showed Isobel’s name as the local user. 

How can he be logging in as Isobel? Have IT merged his account. Is this Curtis’ doing?

I asked him if he noticed he was logging in as Isobel. He says he took the screenshot from her documentation! He is a wind-up. He was getting the same error as her troubleshooting guide but decided to paste her screenshot to me.

I tell him to log in; then run a command. He runs the command without logging in. So I explained again, and I think he logged in but didn’t run the command. Absolute wind-up.

In the end I think we undid all his random changes to the build script and fixed the problem with the Azure Devops plugin, as documented in Isobel’s guide.

How Many Items To Return

There was a bug he was assigned to that looked like it could be simple on first glance. You have a list of items and the code was calling the LINQ method First(). The change could be that it should be FirstOrDefault if it could be an empty collection, or maybe the problem is that there really should be one item in the list and it is missing.

Without recreating the problem, we wouldn’t know what the fix should be.

Looking at the code, it passed in a list of items and possibly switched some depending on the config and certain checks. The method returned a list but was not clear at first glance what was returned. Is it all items? ones that have switched? any that have been modified?

He said it should be all items regardless if they were swapped.

Then when reading the code in this particular method where the crash occurs, why was it returning items when this swapping feature was enabled, but 0 if not?

Another developer, Dean, points out that in the previous method calls, there is another IF statement. When this swapping feature is on, an empty list is returned, and when it isn’t, the original drugs are returned. But then they are placed in a list called switchedItems.

Neil: “I understand it enough to know that this fix will work, but don’t understand it enough to refactor it

He says his approach is to make the simplest change possible, not increase the scope and chance of introducing a new bug. I say that although that approach is generally good, in this case we see that the original developer had made a mistake in a previous method, and not returned the initial list of items. Then it looked like they had put in a hack to possibly try and work around it.

So I tell Neil that the original change was basically a hack – and the developer was attempting to do the simplest and quickest fix; but it has then made the code look confusing and still has a bug. Then Neil is continuing this mentality, by modifying the if statement to work in this additional scenario where we have found a bug, further contributing to the mess.

We discussed other scenarios and if those scenarios are impacted by this particular code. Then David says “so my change is fine then?”. Dean and I, in unison, say “NO!”. You need to fix the original method to return the initial list.

Not Hitting Breakpoints 

There was another good example where he did ask for help but hadn’t recreated the issue at all, and didn’t adequately explain what point in the investigation he was stuck on.

The bug report was very poorly worded, but the general gist of the problem as I understood was – that there was a certain type of Request Task which contained a list of items. The user then tries to change the item to a Repeat order. Then it crashed triggering a dialogue.

His manager asked him if he had tried recreating the issue, and he said he has been “trying for a while“, but didn’t elaborate on it.

I gave him advice that sometimes you need to look where the crash occurs from the stack trace, then look at the method calls before that to see the initial UI call. Then work out which UI control triggers that.

The next day, he says he is still struggling, so I needed to help him.

I get set up. After I start investigating and getting sidetracked with other issues, he then says he is getting a crash creating the Tasks. What has he been doing for the last few hours?

I sorted his environment out, then asked him if he had found any suspicious code, and he said he hadn’t. I wasn’t sure if he meant he hadn’t even found any relevant code, or hadn’t identified what could be the problem, but I left him to it for a bit.

He sends me some method names which lead up to the method which was mainly from the stacktrace, and some were irrelevant. I pointed out that the line of code that was crashing was when a collection was empty, and reminded him the exact method he needs to look at

A few hours later, he asked me if I had made any progress, and then said “there is a null being returned in the If statement”. So I remind him that null is fine, we are looking when the collection is empty. Empty or null are similar, but there’s a difference in the world of programming.

So we need to find what can return an empty collection. The returned list sometimes does stuff with the swapping feature so that made me think it could be that.

Neil 
Which dialog are you referring to when you say "in that dialog"?
Me 
In the Task
Neil  
Are you adding a task that appears in the To-Do list or Inbox?
Me 
Requests, not To-Do list
have you not got that far, or have I just confused you by giving you random bits of info 

I don’t really get it because it sounded like he knew it was Requests, and then is now thinking it could just be some other type of task. Then when I explain where the link is that the user is clicking in the stack trace, he is like “oooooooh I haven’t got this far“. 

It said Requests in the bug report. I told him to first work out what the user was clicking in the UI. But he hasn’t got far enough to know it was a Request nevermind what the user was clicking on.

As he was showing me debugging, it was hitting all kinds of breakpoints. He had like 50 and hadn’t been hitting them before because he wasn’t using the correct dialog. He had speculatively changed the method I had told him to look at as an experiment, but if he was never using the feature that called that code, then what is the point of experimenting by changing it?

He could have told me that he can’t hit his breakpoints at least. Either a problem in Visual Studio, or most likely; he isn’t in the correct feature of our program.

I don’t really understand how he can be a developer for 30 years and not understand how to work out a problem from the stacktrace. It’s not 100% possible due to a feature might needing configuration to be enabled, so you may still wonder how code is called, but at least you can deduce some information and come up with several scenarios then rule some out.

Conclusion

I always say it is hard to tell how good developers are, but there’s certain red flags that suggest they are bad. Obvious ones for me are not asking for help, not understanding basic debugging, showing a lack of interest in the project or code quality.

Dumb/Strange Statements

Here is a collection of dumb or strange statements my colleagues have said. These have often come from old chat-logs and emails.

EIS – Internet Explorer

Nithya: It uses EIS
Sam: what is EIS?
Nithya: Internet explorer
Sam: Internet Explorer?
Nithya: Internet Information Services

That’s literally how the conversation went. Nithya was saying random words and letters when he meant “IIS:  Internet Information Services

Posting deleted wikis

Paul, a software architect, was writing some blogs, which looked very useful, and posting them on our internal social media. A manager asked if it can be put on Confluence where all our official documentation was, and would get better visibility from the development teams. He replies

The projects on this Tech Blog are only for demonstration purposes and are not official projects. If there is any documentation it will be on my personal space on confluence, this will no doubt be cleared soon as I will be leaving at the end of this month.

So he was refusing to move them to a better location, and even knew he had information in places that will soon be deleted.

Stating the obvious

A tester was trying to create a new test environment and got an error when deploying the server code.

“added all the config values but still getting install errors
Failed, 7.2.1.0000, 28-Sep-17 10:48:29, 28-Sep-17 12:10:26, 4, (Inner Exception) Exception of type Common.PatchFailedException, message = 'One or more databases failed to patch correctly: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)'

“Can it be because there is no SQL Server installed on the server?”

“erm yes not having SQL installed might be the problem”

Surely that’s an obvious thing to check. Can you manually get to the database? No. Well, that’s the problem then.

Only reply if you still need to do this?

In the release stand-up today, I requested that ALL teams create the required test data before 7.1 is applied. Can I ask if all teams have done this?
Only reply if you still need to do this?
Regards
Robert

What do you do if you get no replies? Wouldn’t you wonder if everyone did the work, or forgot to reply/didn’t see your message?

If you are James

From: Rachel West
Sent: 19 April 2017 15:47
To: Testing
Subject: If you are James Brown please reply. If not, please delete

Just checking my request has been actioned

Rachel West
Principal Software Engineer in Test

Why would you send a message to everyone in the department, asking for one specific person that you could have contacted directly?

“not many people have Dave Sampson-level knowledge, apart from Dave Sampson, possibly”

Francis

Script is missing

“let’s say Script A is missing. There is possibility that Script A might not get executed.”

isn’t it 100% certain it won’t get executed?

coooooooeee

There was one guy that started his forum posts with “cooooooo-eeeeee” like he was talking in a queer dialect. He described himself as a “forum queen”. Strangely, he claimed he had got banned so didn’t post for a few weeks, before chiming back in with a “cooooooo-eeeeee!” I don’t know how you can get “banned” on an internal forum at work, but he permanently disappeared a month later so presumably got sacked for causing a scene.

Charlotte

“I made it up in our heads. Half in my head, half in your head”

Charlotte

Charlotte also once claimed she was bitten by a bee. Another colleague said his mate once claimed he “saw a bee punch another bee”. I can’t imagine a bee doing anything than sting.

Tech Depth

“Will create tech depth and try to fix this”

Rammohan


He meant “technical debt” item, as in; “I will do future work to improve this code.” I’m trying to imagine what “tech depth” looks like https://media1.giphy.com/media/GGkqULbznGpLW/giphy.gif?cid=6104955ewizx9p87brkmf67mqlxyf4vg1tqxzsx1e0bbkbwu&rid=giphy.gif&ct=g

Wilfred’s Dying Words

This is like some dialogue in a game/film/book where the person is dying and he is trying his best to get his final words out.

I hope you can manage….everything should be clear…once you experiment with it…try to query any website first…to get a feel of it…(GET http://www.bbc.co.uk/)

Wilfred
"Sir, We have lost another developer" 
"Godammit! Did we get the information from him before he passed?"
"Well, he seemed to want us to query the bbc"
"mmmm, cryptic. Get our best analysts on it ASAP"

Oil

Me 11:15:
"Chickens come from seed which comes from oil" - Steve
Andy 11:16:
hahaha what
Me 11:16:
Steve said all food comes from oil, then said that
I was instantly lost
Finnerty was talking about cars
Me 11:22:
now Bellamy is talking about mowing cat poo
these conversations evolve quickly
Me 11:36:
"The Git Server is kaput" - Bellamy

Deliver The Impossible

“we are capable of delivering impossible things”

Hari

everything is broken and we are all idiots 

they are dangling a reverse carrot in front of me

Bob

It works on my machine: Top 20 Replies by Programmers

I was watching a tech conference and a woman was detailing her experiences as a software tester. Her presentation was titled “Being a woman in tech“. She was implying that people have been sexist towards her, or at least a clear victim of unconscious bias. The quotes she wrote down were:

  • Are you sure you’re testing this correctly?
  • This doesn’t need testing, there’s no bugs
  • Why is this taking so long?
  • That’s how it’s supposed to work
  • Works fine on my machine

Now, aside from the first one (maybe the third too), those are just generic statements and not any attack on her ability, or anything to do with being a woman. As a man, I have heard other men say those things to me or other men. I often think today’s generation are told they are victims so misinterpret many statements are microaggressions.

If you have any experience with working with developers, then there’s plenty of recurring statements they make as excuses, often they use them intentionally as a classic software development joke.

Sometimes developers say them because they are certain their code was working under all test scenarios they tried. Sometimes it’s just an automatic deflection to defend their pride.

I saw this meme which has many classic ones, some that I have heard in some scenarios, and others I reckon are just included as a joke and no one actually said them. Notice how similar they are to her claims of sexism:

Top 20 Replies by Programmers when their programs don’t work…
  1. That’s weird…
  2. It’s never done that before.
  3. It worked yesterday.
  4. How is that possible?
  5. It must be a hardware problem.
  6. What did you type in wrong to get it to crash?
  7. There has to be something funky in your data.
  8. I haven’t touched that module in weeks!
  9. You must have the wrong version.
  10. It’s just some unlucky coincidence.
  11. I can’t test everything!
  12. THIS can’t be the source of THAT
  13. It works, but it hasn’t been tested.
  14. Somebody must have changed my code.
  15. Did you check for a virus on your system?
  16. Even though it doesn’t work, how does it feel?
  17. You can’t use that version on your system.
  18. Why do you want to do it that way?
  19. Where were you when the program blew up?
  20. It works on my machine.

Employee Profiles: WHY IS HE DIFFERENT!?

There was a former employee who seemed to have plenty of enemies. From the times I spoke to him, he seemed to have a great general knowledge and was passionate at programming. However, other people seemed to say he was weird or arrogant, and could be very argumentative and patronising.

From some online blogs, forum posts, and some work emails people dug up, I realised people had a point. Maybe you just had to catch him in the right mood, or provoke him by saying something factually wrong so he would snap and correct you.

I don’t want to bash his appearance but he seemed to take on some stereotypes of a nerdy programmer, but one of the rock/metal types. So long hair, then baggy jeans with chains, or even camo. Which makes it weird when we found his blogs as a teenager:

I am currently single (oh my Gods!) but I doubt it’s a state I shall long be in. I’m currently courting a very sweet Gothic model, who actually went to my college at the same time as me.

Aside from my Grandmas, who uses the word “courting“? But the way he claims he is dating a model sounds arrogant, but he later repeated this claim that he only dates models.

Another profile described himself as

“articulate, clever, charming and funny (at least if you have a very dry sense of humour). I’m attractive enough to be choosy but I’m not so attractive I’m un-claimable.”

Then rated his skills as “I am an extremely competent programmer and web developer

His Guitar Hero skills are also legendary: 

“As karma-driven punishment for getting it early, the guitar no longer strums down making those Expert bass licks a little too difficult for even myself”

In one email chain at work, he stated:

“I demonstrably proved, without a shadow of a doubt, that people had been lying about the scope of the problem and the nature of the issues; specifically the then head of the Maintenance Team, who pressed his own fabrications so hard I was forced to publicly humiliate him by presenting the evidence to his superiors (who he was telling repeated lies to) to get him to stop slagging me off.”

So you can see his arrogance.

I’m not sure if it was due to his arrogance, or some other reason, but although we once had an open-plan office for Developers, Testers, and Managers; he was in a room by himself, so looked like he was the most important guy in the office.

There was one amazing situation where we were in the breakout room, and a manager storms in and exclaims “WHY IS HE DIFFERENT!?

So he had a good record of causing conflict.

There was another guy that I hadn’t met, but was reminiscent of him in some of his prose. This other guy was always trying to start arguments in trivial meetings. We had a meeting about some kind of Skills Matrix we needed to fill in, and he challenged the manager’s claim that there was a “complete” list of skills on the form.

The core skill I use as the vast majority of my job is still not on the “complete” list – despite requesting it via the form. Could you please just take a moment to appreciate why it is I get so angry with people choice of words in presentations when they are not wholly accurate?

Perhaps a phrase like “The pre-agreed list” in the presentation might have been clearer?(The level of irony that the #1 thing I do wouldn’t even be on there was completely unexpected. That is just unfortunate, and in another life might be funny. In this one it is infuriating).

Different Person Number 2

Complex Processes lower morale and encourage bad practice

I always find it interesting when people work in a particular job then get promoted into management. It’s a completely different set of skills and if it’s a fair promotion, the idea of getting so good at your job, that you no longer do that job anymore; is another illogical aspect of it.

One thing that always amazes me is when people make decisions that they know are a bad idea from their experience doing the job.

When I worked as a software tester, my view is that we were essentially there to find any bugs that exist. Part of finding them is to document how to recreate the bug so that developers could fix it. Extending this process so it’s more complex, more stages, or involves more people – causes people to not want to find bugs.

There were times where I witnessed people do the bare minimum and they would ignore bugs that didn’t appear severe to them.

One of the worst people I’ve worked with was an average tester who wanted to become a Test Manager, and he ended up trying to make the process more complex and often announced changes in a condescending way.

When testers found a bug and wanted to investigate it, they would often try to recreate it, sometimes under different scenarios to work out the scope and impact of the bug, then will tell a developer their findings and only then get it logged.

Therefore there was a delay between finding the bug and actually logging it. So we got an email from the Test Manager like so:

All,It is important that as soon as you discover a defect, you raise a defect for this BEFORE you speak with the developer. Any defects raised can easily be closed if they have been raised in error or discovered by the developer to not be an issue. We run the risk of releasing with defects that could potentially cause serious issues for our customers.

I understand his point that – if managers are checking the system to see what bugs are outstanding and they don’t see them all, then potentially, the software could end up being released with bugs. However, the process started getting worse from then on

Please can you include myself and Becky on any emails that are discussing a defect with a developer. This is so that we are both kept updated with any defects that could cause issues. Also for every defect you raise, I’d like an email to myself and Becky with the follow information :
-- WorkItem ID
- Title
- Area
- Any other information you feel relevant.

So now when we discover a bug, we had to log it straight away without the investigation, email two Test Managers, then copy in any further emails to them. Then as more information is known, update the bug report, and making sure we also had an appropriate workaround if the bug did get released (or is already released).

All,When you are filling out the SLA tab for a defect you need to ensure that if you’ve specified that there is a workaround available that the Workaround box is filled in with the Workaround.

If you’ve raised any defect that is a Severity 3 this MUST be fixed before the branch is signed off. This is our exit criteria, we do not sign a release off with any Sev 1, 2s or 3s. if the developer disagrees with this, escalate it to myself and Becky and we’ll deal with it.

Often when we logged a bug, he was either emailing you or comes to your desk to ask why you haven’t triaged it with a developer yet. Sometimes he did that within 10 minutes of you logging it. So he wanted you to log it before triaging, but would then demand that you triage it even if you haven’t had chance to contact an appropriate developer.

You’d also have other test cases to run which he was always on your back to give him constant status reports. It was hard to win because if you have tests to run and have found bugs, then he will want you to triage them but sometimes helping the developer could take hours which means you aren’t testing, so he will be asking why you haven’t run your tests.

That level of micromanaging and demanding updates wasn’t great for morale and also encouraged Software Testers to stop logging the bugs they found because it just added to their own workload and stress.

It seemed better just to steadily get through the tests, but I suppose if you didn’t want to log bugs, then what was the point in actually running the tests? I did suspect some people just marked them as passed and hoped there wasn’t an obvious bug they missed.

Colin As Manager

It’s been a long time since I wrote about Colin, a pretty incompetent software developer that seemed to be good friends with one of the high-ranking managers that seemed to lead to some bizarre promotions: to Senior Developer, to Principal Developer, then eventually switching to a managerial role. Talk about failing upwards. 

The thing is, he came across as a bit scatter-brained so couldn’t imagine him actually being a good manager.

Here are some random stories I found from my notes and chat logs about how he performed as a manager.

Salary

Mike said Colin began sharing his screen on a meeting, and had a list of salary changes in a spreadsheet. Interesting how they have salaries lined up BEFORE the reviews which we haven’t had. Just as I have previously suspected. I suppose other managers have messed up in the past when a promotion was announced a week prior to the performance reviews.

I can imagine Colin eventually getting sacked for that type of mistake. It’s classic Colin, and as I predicted, the mistake did happen again a few months later. This time at a meeting I was involved in. We were trying to hire new developers for Colin’s teams. Colin was sharing his screen and had a list of employees that were leaving and their salaries.

When it came to my reviews, Colin kept on saying I was doing a great job but then pointing out one thing that was holding me back. It always seemed like an excuse to not give me more money or promote me. When I did switch managers, my new manager promoted me within a few months and gave me a £14k raise due to how behind I was compared to my peers.

Arranging Meetings

Colin often arranged meetings then didn’t turn up, or turned up late. He was constantly saying he was busy all day with meetings so sometimes scheduled meetings at bizarre times.

I was particularly annoyed when he arranged a weekly update meeting during lunchtimes, then half of the time doesn’t even show up. The update was mainly for him to collate info then take it to his manager, but he said we had to give our updates to the other teams, much like an Agile Scrum of Scrums meeting. So regardless if he was there, he went ahead.

There were some other  meetings which he arranged, and where he was an important attendee and he turned up 25 mins late.

One time, I was about to leave for the day, and Colin said he had an end of year review meeting with someone in Chennai. That would be 10:30pm on a Friday. Indians often have a dedicated attitude towards work. I think just because they would agree to something like that, doesn’t mean you should actually book it.

An example of scatter-brained or panicky behaviour was when he started a meeting, shared the wrong screen. He declares he is “sharing the wrong screen”, but instead of stopping ‘sharing’, he leaves the meeting, then takes him a few minutes to actually rejoin the call, where he carries on like nothing weird happened.

Informing & Criticising

Colin: "he is coming in as a Solutions Architect rather than Technical Architect" 
Me: "what's the difference in the roles?"
Colin: "I don't know, I'm just telling you the news"

I thought it was funny when he gave an update on the performance of the teams he was managing. “Last week was pretty bad for us. You guys don’t know this“, then says there were 8 Major Incidents, which got escalated to the Directors. What made it more funny to me was that the CEO had given out bonuses to his teams for apparently doing a great job. It was a fairly small bonus like a £50 Amazon gift card but still probably a regrettable action. I’ve said many times that managers seem to reward the wrong behaviour and struggle to identify the best performers. That’s another example. How can you go from doing a great job, to creating 8 disasters in one week?

I often found Colin to not practice what he preaches. So might lecture people about needing to improve code quality, but when he was a software developer, he was constantly cowboying solutions. Another example was that he says we should never put-off taking our annual leave because it can hide problems (it would illustrate a reliance on someone if they weren’t in), and show higher output for months then would suddenly drop towards the end of the year when people take annual leave at once. Then after his lecture, he then admits he hadn’t even taken 1 day off and we were 75% through the year.

Colin complained that Rob and I haven’t handled the project well, and it overran by over a month. A week or so later, the team was on a call with other stakeholders and he said “you guys have done a tremendous job”, then said the delay was caused purely by scope creep and nothing to do with the developers at all. I don’t know what to believe there. Maybe he did believe it was our fault but didn’t want to berate us publicly so was deflecting like a good manager. However, not declaring that to us meant we got mixed messages.

Near the end of that project, Colin showed me the items we had remaining and was like “you only have a few left to do…surely you can complete it all quickly”. I told Rob and he was as annoyed as me:

Rob: Its things like that that really make me nervous
Blind hope without actually looking into the problems
SURELY you can do it quickly right?
If not you must be crap!
Thanks for the morale boost!

The problem is, the project has dragged on due to complications, so the remaining work is probably quite difficult, but Colin is just seeing simple numbers. “3 tasks left; that’s not a lot”. But each task could take a week or two to get right. So even between 2 of us, it could take 2 weeks. Then Colin is setting the expectation it can be done within the week.

Closing Thoughts

When people have done a job for a while, then become a manager of those people, you would expect them to be great managers because they understand the work involved, the process, and problems they have faced with previous managers. However, time and time again, it’s like people forget their experiences and end up becoming bad managers.

Rebase Debate

I’ve written a few blogs about debating issues with the Team Lead. Another argument we had was about the use of Git Rebasing. The blog will be quite long if I go into the detail of what this means, but:

  • Git is a type of source control
  • Source control allows you to see the changes with the date/time they occurred
  • You can create a “branch”, make your changes, then merge many changes at once into the “main” branch.
  • There’s a concept of “merge” which basically keeps the timestamps they were originally made
  • There’s another concept of “rebase” which creates new commits, so changes the timestamps like they have just been made.

This new team always rebase, and end up rebasing as they are developing in their branch. A well-known rule is that if multiple developers are working on the same branch, you cannot rebase it without causing problems to your team members.

I raised this as a potential issue because I saw many upcoming items we need to work on that need multiple developers working on a feature, or needing to work from a shared branch. The Team Lead dismissed because he has apparently never had problems working with rebase before.

As I forewarned, I got hit:

  1. Jay creates folder A with many files
  2. I branch from his changes
  3. Jay moves all those files to folder B
  4. rebases
  5. I then rebase my branch. Git can’t see the move because the history is rewritten. It keeps folder A with the old files and treats them as mine. It adds folder B with Jay’s edited files.

Later on, the Team Lead was hit with something similar.

Team Lead
rebased fine for me

Team Lead
hmm this is fucking me up now
i rebased onto jay's branch which went fine

Me
but now there is duplicates all over the shop

Team Lead
now i'm trying to rebase onto develop but it's trying to apply jay's commit to it too

Andrew
he rebased his branch again
before merging into develop

Team Lead
but it should recognise that my branch starts at my first commit though shouldn't it

Andrew
not if you rebased onto his before he rebased again
you just have to drop any of his commits

Team Lead
ah right, not come across that before but makes sense

So if you have multiple developers working in the same branch, you should not rebase once commits have been synced by one or more team members. Rewriting the commit history means Git cannot sync new changes because it sees everything as a new commit.

Debate about ChecksumGenerator

I was working on recreating functionality in our new API. It was basically a copy-and-paste job from our current product.

I had another debate with the Team Lead who said I shouldn’t have copied the ChecksumGenerator, and wanted me to replace it with a Nuget package.

The idea of using existing packages is from the generic advice of “don’t reinvent the wheel“. If the code already exists and has been thoroughly tested by loads of people, then it’s best to use that. In terms of future fixes and enhancements, if it is a popular open-source package, then other developers will update it. If you rewrite the code for your own company’s use, you are stuck maintaining it.

However, in our case, we already have some code, we know it works since I took it from our other product and it’s been used for several years. It’s only 58 lines long and has no need to change.

The package he wanted me to reuse wasn’t actually that popular so it adds some risk using it. I had just finished my code changes and already ran all the tests, so any changes would need to be retested.

Isn’t using loads of packages just adding bloat? That is such a webapp thing to do. My brief experience of developing a React Application, has shown me that it uses a crazy amount of packages with a basic boilerplate application like create-react-app. Then anything you install has loads of other dependencies, and you end up having bloated install size and loads of potential security risks.

The Team Lead’s justification is that a ChecksumGenerator isn’t directly related to our API so shouldn’t be in our repo, and wants to “do things properly“. I think if you go that extreme then the software ends up in development hell. Which is exactly what has happened here because this API is part of a larger project that has been in development for about 7 years now.

It’s quite hard to win an argument against a Team Lead because unless the majority say that he is wrong, then what he says goes. We have a Junior in our team, then the other developer is the Team Lead’s best friend. Then the other two are Testers that don’t have much interest in a coding discussion like that. So it’s gonna be rare for someone to speak up and cast a winning vote there.

I asked my Software Architect friend what he thought:

“That’s completely senseless. Pretty much always use code that works, as long as it performs well as part of it ‘working’.
Does the new package have an allowable licence? 

You should ideally try to avoid dependencies”

Software Architect

I had a discussion with another colleague in another team. He mentioned that infamous time someone got angry and withdrew a package which took down a large part of the internet. I think we have mitigation for that scenario though.

Robert:

What if the package gets pulled?

Me:

I was about that yesterday. I think we mitigate it by having our own nuget store. So I think the package goes from the main nuget source, down to our local nuget store, then into our builds
might have made it up, but that's how I picture it
so unless you attempt to update the version, you always have a copy of the one you currently reference because it is cached on your server

Asking a Senior Developer how to create an authenticated user

I have a lot of experience as a software developer in Desktop Applications, but moving to a project involving many Web technologies, creating an API is a new challenge to me.

I asked a Senior Developer in the Authentication team how to get set up. I didn’t even know where to go to even begin to create a user, then didn’t know how to get the correct permissions etc. Then the process of developing against “DEV” environments rather than a “Production” URL is another mystery to solve.

Tony: "you need to exchange the Advanced-Auth token for an 3rd-Party-Token token"
Me: but don't I need to get the Advanced-Auth token first?
Tony: yes
Me: Don't I need to link my user to be enabled for Advanced-Auth?
Tony: yes, just do it through the app
Me: I have never used the app
Tony: create an account then
Me: but I need to know how to get the app in order to create an account
Tony: host.int.solutions.com thats the url you will need
Me: but if I am making changes in a project, then do we use DEV rather than INT
Tony: So everyone integrates with int as dev is unstable
Me: If no one uses DEV then what is it for?
My conversation with Tony is like:

It’s gonna be a long month.

It’s frustrating that he was only giving me basic information. You’d think there would be like a general “New starters” guide he could have linked me to. Or his team should have had documentation for creating new users. They probably do, he was just being awkward.

I suppose this is the classic example of a software developer that is skilled in actual coding but not so good at communicating.

CTO overrule

I’ve written blogs about how our CTO tried to change our release process and announced it on a “Town Hall” call with the entire department; then loads of teams told him it couldn’t be done, so he had to back down.

Then later, on another Town Hall, he tried to change the Change Control process, but wouldn’t back down when we told him it wouldn’t work. He made the claim of it being a sackable offence if we didn’t follow it. Then a month later, he found out someone couldn’t turn a server on because of the Change Control process. He said it was “malicious compliance” and that will be a sackable offence in future. Within a few months, nearly the entire process had been reverted.

Last week, he was talking about how we needed to move a Data Centre to a new location. He said he preferred to move to the Cloud since it is “inline with our strategic targets”. However, after having several meetings with the experts involved in the Data Centre, they decided the best solution would be to move to another data centre. However, the CTO didn’t like this because it wasn’t inline with their strategy and he thought the move would be too slow.

Therefore, he took the executive decision to overrule them and demand they move to the cloud.

“Do I know we can move all servers to the cloud in time? No. But I was prepared to take the risk. I would rather make decisions and be wrong, than sit by and not make any”

CTO

It seemed strange to me to claim that moving to a physical data centre would be slow, but then moving to the Cloud probably couldn’t be done in time.

He then claimed that

“we have wasted enough time deciding what the plan should be; to move to the cloud or to move to a physical data centre”.

CTO

Isn’t this the worst scenario though? He could have made the decision before any meeting was arranged. But it sounds like they had debated the decision, came to a conclusion, then he told them he didn’t like their conclusion. Then he moaned that they wasted time debating.

So they have had meetings with the experts, and conclude the data centre is the best decision, but since the CTO loves the cloud, he has overruled them. So what was the value of the meeting? And will the staff be motivated to do something they don’t believe in?

“I think I’m compassionate with my team. It’s what binds us together as a team. Otherwise we are a bunch of individuals.”

CTO

I don’t get how he can make these statements and not realise the hypocrisy. How can you be compassionate if you have shown no confidence in their opinions and decision making?