Shots Fired On Inexperience: Leaked Transcript

Intro

Even though all software developers should take part in code reviewing their peer’s code, I find most developers I work with aren’t that interested, so ultimately it comes down to a few high-ranking developers, plus me.

Recently, we have been rejecting a lot of bad code from inexperienced developers. It’s fine being inexperienced as long as you have a team to support you and help you eventually produce an effective solution. I think what happens is – there’s not enough seniors (or seniors that are actually good), so the code gets into their Project Branch. Then, when it is time to merge in for the Main release, experienced developers review the code and reject it.

I often specifically get asked by the Software Delivery managers to review code to ensure it is in a good state for the release. We had a group conversation where we were discussing the current bad state we are in. Software Delivery managers had asked Darren, Dave and me to review a project.

Participants

Darren, Dave – Principal Developers

Mark, Michelle – Software Delivery Manager

Me – the silent observer

I’ve given the developers names that start with D, and the managers names that start with M, so it might be easier to follow.

The Conversation

Darren  08:36

Whole lot of Nope in this Code Review.

Mark  10:52

Judging by your review comments, this doesn’t look to be something that can be resolved in the next couple of days. Does their implementation need to step back and restructure?

This might need another call

Have any of you guys been involved from a high level view for this Project?

Darren  10:55

The changes to the Database are totally inappropriate, and possibly way off the mark of what is needed.

Changes to the Database filing are non-trivial, if people don’t understand it, they need to reach out for help, not just smash code in.

Our product is going to turn into a legacy codebase very quickly if this behaviour carries on.

Dave  11:11

We do keep getting Code Reviews to Main with unworkable solutions. It’s highly frustrating, and a big waste of our time. Most of the time, the code or even the work item has not been reviewed by an expert-level person before a review to Main is requested. On occasion, someone gave correct advice in the first instance which was then ignored.

We need to fix this, and have help from you guys raising the problem.

Darren  11:14

The solutions feel like a very reactive approach to programming… Very little thought for design.

Mark  13:02

So have any of you guys been approached about this Project before this review  was raised?

Because I think this ties in with the whole idea of needing an Subject Matter Expert during the construction of the project rather than at the very end – something that we’re trying to drive forward

Dave  13:07

only about 2 days ago 😖

All our Subject Matter Experts are on the New product 😛

Darren  13:08

I reviewed the previous incarnation of it, without the concerning the Database changes.

“All our Subject Matter Experts are on the New product” Even so, I might have made time to discuss this with someone if asked.

Dave  13:09

yeah same

My point is that the day-to-day design and building of the projects is led by inexperienced devs. The developers are not being mentored while developing the code – but instead, at the end of their code writing; which should be something a lead developer is doing

It’s good to have the view throughout the dev process, or at least the start, as well as quality checks at the end – which should be a straight-forward “yeah, you’ve not done anything crazy, it meets the coding standards and is what we agreed”.

Mark  14:43

Yeah. This is all the good stuff which me and Michelle are trying to address as well. Trying to have a Subject Matter Expert assigned to each project during construction just for that overarching view, and to give a steer when needed.

I.e. a month ago this could have been caught at the start by saying “don’t make these changes within the Database itself” haha.

Darren  14:51

To be fair, you don’t need a Subject Matter Expert to tell someone not to dump a load of copy and pasted code from one module into another. Just someone with some experience in developing software to a higher standard than “Hello World”.

Michelle  14:52

“Hello world” just triggered some terrible school flashbacks.

Dave  14:52

Agreed, but as a business, we need Seniors to point out when people are constantly doing silly things to their line manager.

Michelle  14:57

It’s the experience aspect that is the biggest challenge, if there was a better ratio of experienced people to inexperienced people areas where skills are not good enough, they would start to improve (or at least that’s the theory).

Everything just seems stretched way too thinly at every turn. Hell, it isn’t just development that has the problem.

Darren  15:00

I’d also add: knowing anything about the teams working on the code would help.

I can’t know everyone, but I don’t even know what the teams are, what they are working on, who the seniors / leads are to discuss with.

E.g. if someone has a problem with code my team is doing, then I’d expect to be brought into the loop (either to explain our position, or to understand the other sides)

Dave  15:06

Who do we talk to, to at least pass the buck on the issue and raise it?

Michelle  15:11

I think it is more for the Development Director. It’s something me and Mark have brought in fashion everytime we come across an example. Difficulty has always been what to suggest to fix it within the limitations of what we got

Dave  15:21

Certain business types don’t understand the value of good engineers and will simply get the cheapest money can buy, in the hope the decent engineers will act as quality gates and stay with the company.

It must be soul-destroying, working away in an office across the globe, with ‘experts’ in the UK saying if your work can or can’t join the rest of the product. It’s not the right thing to do.

They need infrastructure mirroring ours, and separate projects would be a great way to achieve it

Darren  15:25

Last I knew, the other office still have Development and Testing as separate departments

Dave  15:25

This just reinforces the stereotype that Ben bangs on about: the company is ruled from the UK. Normal companies have different product sectors at different locations, because it mitigates these problems

Michelle  15:27

All valid points. What Dave is saying are points raised verbatim by more than a few people who have been in this world for a while. As for soul destroying: 100% agree it has to happen to catch this stuff; but each time it’s caught it will knock you back that little bit more

Just needs some kind of sensible structure that is adhered to. But then again – if no one is made to follow something, who will?

Dave  15:30

Yeah, for me, it’s responsibility, if you don’t have to pay for your actions, then it drives bad behaviour. But since we maintain our Product, having to pick up the bugs, see the customers complain on Social Media, see the error reports on live and backlogs grow, we’re a lot more invested

it is feeling more and more like, knock this feature out as quick as possible, throw it over the fence at UK law-enforcement, see if it goes through

👮

With responsibility you’re driven to get the right structure in place, you want to place experts/leads with the teams and have them monitor each day, because it soon becomes a very long task to get fixed last-minute. Top-down approach, drives the 9-5 job behaviour, lack of interest and minimum viable work ethic.

Darren  15:32

+1

Which goes back to my point about who the teams actually are. And we really need to do proper ownership. I still own large bits of our Product, because I care about them!

Dave  15:34

Same. Developing and code reviewing isn’t my job, really. However, I don’t want to see the product damaged and go to waste, because it helps people, genuinely.

Darren  15:34

Would be so much nicer to say “I don’t look after this any more, just do what you want and hope nobody gets sued” 😣

And it isn’t any one change that is unsafe, it is the poor quality, lack of adherence to existing designs, just piling code in, coupling stuff together, changes in the wrong place, etc that lead someone else to create a unsafe bug later – usually without anyone batting an eyelid.

OK, some changes are totally unsafe too – a few weeks ago, I have to point out that you cannot calculate an age in months by doing ageInYears * 12

😖

Dave  15:48

So, if I were to write some general comments without mentioning names, and send them to the Development Director, expressing that we’re at our wits-end, would anyone be prepared to back it up or be a part of the revolution?

Darren  15:50

Feel free to add my name to give clout to this

Dave  15:50

sure, I will of course send to you first to check

Summary

  1. Not enough people willing, or have the ability to review code. – I always find this a weird one; given that I reckon 90% of a developer’s job is reading existing code. If you cannot review code, then can you be a good developer?
  2. People aren’t putting enough thought into the architecture, or adhering to well-known standards like SOLID Principles – This is the kind of behaviour I saw in developers I’ve written about like Colin and Derek.
  3. The ratio of Juniors to Seniors is far too high, which not only is a problem now, it is a problem in the future when the Juniors haven’t progressed enough.
  4. The rapid hiring of staff has meant you don’t know who people are, what they are working on, and what their level of experience.
  5. Hiring cheap staff has caused some resentment/uncertainty with UK staff. Pay seems frozen and more jobs are moving abroad. It wouldn’t be that bad if the staff we hire are cheaper and are good, but they often just appear to be cheap.
  6. It would be better to split the offices into separate products so people feel like they have full ownership. There’s other problems too like time-zone differences and general communication problems.

First job – The “just Google it” seniors

When you are learning programming, I think it does help to have some kind of mentor, or alternatively – many mentors. There’s certain aspects that are hard to learn yourself. 

One simple example for me: Even though I could go out of my way to learn keyboard shortcuts, or find cool features of Visual Studio, I feel I have learnt the most by sitting next to someone while they work, or if they come over to help me. When they have the keyboard, they will bring up features I have never seen before, or manage to find files way faster than I could, and I’d be like “WOW! How did you do that?”. It’s amazing how much faster I am now, and it is mainly due to what I have learned from others.

When I started my first programming job, it was for a very small company (less than 10 staff), and I expected the Senior developers to help me a lot. Instead, when I asked them for help, they always said “just Google it”.

No matter how much I tried to argue with them that it would be faster for them to tell me, they would insist that I should Google it. If they were really busy, then fair enough, but I knew they didn’t have much work.

Sometimes you can find your answer fairly quickly by Googling. However, you still need to understand what you are reading, and sometimes it is far easier having someone explain it to you. It’s possible for someone to explain something in a few minutes, rather than reading a huge article for 20 minutes.

Also, you may not find your answer in the first article. You could have to trawl through several articles. Additionally, the articles could have a lot of irrelevant aspects to it that doesn’t apply to your situation, or confuse you further… possibly causing you to Google other terms you have seen on that article. You could end up with an hour passing by and you are left more confused than when you started.

Alternatively, maybe you find the correct answer, but the example code is in a different programming language.

Google only really works if you use the correct terms. If you know you have a problem but struggle to explain it, you don’t have much chance with Google, but an experienced human may be able to tell you the correct terms and concepts. At least a colleague has a good chance of understanding the problem you are trying to solve because they may have seen the requirements.

I vaguely remember spending ages trying to learn Threading, and I chose to use a “Thread” class. Then days later, when I had it working, I demoed it to the Seniors. They then said “why didn’t you use the Timer class, it is much easier?”

My thoughts were “why didn’t you tell me to use it when you knew exactly what I was working on, and knew I wanted some guidance?”.

It’s like they took great pleasure into watching Juniors struggle. They did mention that previous employees in my position left within 3 months, and they actually sounded quite proud of it. I always respect people that are smart and are willing to pass on their knowledge. It’s frustrating when you meet people that are smart but are so arrogant and patronising about it.

Work Hours #2: Working From Home

When we worked in the office, I found that if I had finished my assigned work and it was towards the end of the day – I was reluctant to start something new, but I wouldn’t have the guts to go home (I thought my manager or colleagues would question why I was walking out 30-60 minutes earlier than you should). So instead, I’d stay at my desk and talk to a colleague or browse some programming websites, casually look through recent bug reports, or bug fixes. But either way, I wouldn’t be working.

The thing is, I would rarely walk away from my desk during the day. Yet there were other people that would go for a break for 10-20 minutes on a regular basis. Then there was Derek that took so many breaks – he would only work for about 4 hours instead of his contracted 7.5 hours per day! I explained this in my previous blog on Work Hours.

When I thought about it, if it was acceptable for Derek to work like that, there shouldn’t be anything stopping me walking off after 4 productive hours at my desk.

When we moved to permanently working from home, I had my usual office mindset where I would rarely leave my desk and wouldn’t shut my laptop off until it got to 5pm. Then a few months in, I started taking a few more breaks, but still wouldn’t leave until 5pm. Sometimes if my colleagues asked for help around 5pm, I’d happily help them out for 30 minutes or so.

If you think about it, I was probably working more at home. There’s no one distracting you by walking past your desk, no temptation to look at what other people are doing, no office banter to distract you, no one coming to your desk unannounced.

A few weeks ago, it got to 4pm, and I started wasting time – having a nosey at bug reports and recent code changes. Then I thought “what am I doing? Why am I wasting time until it gets to 5pm. No one is going to see me leave”. So I walked over to my PC and started playing games. I left my laptop on, and if people messaged me, I would rush over and respond. Sometimes they wanted help and I would call them. Other times they were sending me unimportant stuff, so back to games.

Over the last month or so, we have cut down the amount of bug fixes we are putting in the releases. I have quite a few fixes waiting to be checked in, but I’m not allowed to commit it because of the restricted releases. So I’m on target for the work I’ve been assigned. I’ve sent a message to my manager, requesting more work. While waiting for a reply – I go play some games. He could take up to an hour to respond, because he could be in a meeting. No point wasting time and waiting around.

I have a high standard of ethics, or like to think so. I don’t see a problem with this new way of working. I’m getting the assigned work done, and I’m having fun. It’s not like I am actually slacking off. Also, I did say I always have my laptop on during work hours and will promptly respond. There’s times where there will be something important and I’ll work past my contracted hours, so it kind of cancels out anyway. I don’t complain if I work 2 extra hours some days to investigate/fix some important issue, because I know I’ve taken the time up front.

Additionally, sometimes you have those meetings where you don’t really need to participate so you end up casually listening. So sometimes I have whipped out the 3DS or Kindle and played some casual games whilst listening to the meeting. Multitasking.

Some days I’ve kept a book at my desk. When there’s something that blocks me for 5 mins or more, like I have to rebuild our software, or I need to wait for someone to finish their meeting – then I can read.

Managers are always going on about how important it is to have a good work-life balance, and how we need to be aware of our mental health. You may as well take advantage of the new way of working. It has its disadvantages but it also has advantages like this.

Simon Sinek

I came across Simon Sinek and some of his talks are really interesting.

I was watching some of his ideas on performance.

Here he was illustrating that you can set a goal (the circled dot in the top right), and one team’s performance may be all over the place but has a general upwards trajectory. They may have many moments of poor morale, high staff turnover, yet they reach the target and are most likely rewarded by many companies.

The second team is the fairly straight and consistent line. They don’t reach the goal and aren’t rewarded. However, give them a few more weeks and they will get there. They get there with high morale and with structure. His point is that it’s the team’s momentum that is important to spot. 

He prefers this second team but most companies will reward the first team and that bad culture will thrive.

Here, he was saying how you can categorise people in terms of Performance and Trust. We often have metrics for performance but not trust, which leads to companies rewarding toxicity.

You don’t necessarily want someone who performs high, but you don’t trust (top left circle); they may perform but “do you trust them with your money and your wife?”. No.

Obviously “low performance and low trust” is really bad, and high trust and low performance isn’t that great either. 

“High trust and high performance” is really rare, but if you come across them, then keep hold of them at all cost. The people you also need to make sure you keep are the ones he has circled on the right: “mid performance, high trust”; they are the loyal and effective employees. If you ask someone “your team is failing, who do you turn to for help?” then they will point these employees out.

How do you measure success? Simon Sinek

Social Justice Warriors and “Cancel Culture”

This is going to be a controversial one. It’s also a long one.

Many months ago, I went out seeking new development podcasts to listen to, and I checked one out that happened to be run by a group of women in the tech industry.

My opinion on the content was mixed and I did think it would be a cool idea to do some podcast reviews. However, after I wrote it, I felt that some of the criticism could be perceived as a sexist attack (because they are women), so I decided it wasn’t worth the backlash, and therefore didn’t post it.

I did listen to more episodes and I did follow some of the hosts on Twitter. However, as time went on, I saw more things I didn’t like with their behaviour.

I still don’t think it is worth naming them, because as I’ll explain, they could retaliate with their “cancel culture” attitude, and I really don’t want a tirade of abuse from 80 thousand people.

So in this blog, I’ll just refer to them as the SJW Podcasters.

Let’s just summarise some of my beliefs, so you can bear in mind as you read.

  • Yes, I do have a blog where I criticise people, but I also like to draw attention to the positives. Also, see the two points below:
  • I think freedom of speech is important, but I do draw the line when the speech incites hatred and can cause harm to people.
  • I judge developers on their code and attitude towards software development, and not by any bias of race/gender etc.

One criticism I had with the podcast is that sometimes they seemed to view things in terms of Social Justice, rather than just analysing the content. So for example, they were doing a book review which talked about differences between men and women in the workplace. They criticised the author because they didn’t explicitly mention that trans-women are women too. Surely it is implicit unless the author contradicted the assumption? However, later on they start talking about issues that apply specifically to biological females, which means their initial statement was hypocritical. Given that they spent time moaning about the author, essentially accusing them of being a trans-phobe; the podcast seemed to be more about Social Justice than it was about being a tech podcast. Also, they explicitly stated they lowered the rating of the book because it never used the word “transwoman” or any related words.

I can’t find the quote now, but I’m sure they wrote/said they will never have a male guest on their show because it takes away from the efforts of women. Surely if you want to promote equality/inclusivity, then you shouldn’t “fight fire with fire” and be exclusive with “positive discrimination”. What happens if a male wanted to come on the show to talk about how to get more women in the tech industry? Nope, we can’t have that can we?

The other day, a developer with 80,000+ followers on Twitter, posted a nerd joke which was a witty play-on-words on the Black Lives Matter movement. Obviously racism is like 10,000 times more important than trivial nerd issues in software development.

However, surely people are either:

  1. Going to find it slightly offensive, and unfollow him
  2. Don’t think anything/much of it, and ignore it
  3. Going to find it witty, and are happy people still can post humorous stuff in these dark times.

This joke was in no way racist, although you could say he was trivialising the movement. Whatever your stance, surely it doesn’t warrant drumming up hate to try and destroy his career.

One of the SJW Podcasters was extremely vocal about getting her followers to unfollow this guy, and no doubt they were also providing the negative comments towards him. I think he lost about 5,000 followers from the backlash, and got a tirade of abuse.

I’ve seen the SJW Podcasters gang up on other people for their tweets. What will happen is one of them will tweet some criticism, then the rest of them will join in, so it seems like there is bigger backlash. They did the same thing to this guy by targeting a director of a popular development tutorial website where the developer had a large presence. The director was quick to action the deletion of all his content, and banned him from the site.

Another development content provider saw the declaration of the ban, so also followed suit and also banned him from their platform.

Then they looked for his other online presences on major platforms and got him banned there too.

When this developer primarily finds work by his online presence, this is a massive hit to his career. People have flagged up other potentially controversial statements (more like Frankie Boyle style humour), so there is some argument that he could deserve it. However, why didn’t they “cancel” him years ago? Why now with a simple joke? Shows like South Park can be controversial too, but yet they address social issues with satirical comedy. They have mocked Social Justice Warriors with their character PC Principal.

Some responses were along the lines of “this guy has taught me a lot, who can I follow now?”. Someone was nice enough to respond with a list of their favourite developers. Who could be offended by that? Obviously the SJW Podcasters! He got a negative response, chastising him for his choices and dictates he needs to edit his post and include women and ethnic minorities. He did a follow-up tweet, including the members of the SJW Podcasters to appease her.

She then tweets a more detailed explanation directly to her followers. I was so pleased that this got a lot of backlash. It seemed like 70% of the responses were along the lines of “I follow developers based on merit, not their ethnicity/gender”, or “please do not tell me who I am allowed to promote”. A few high-profile developers also responded with messages along these lines. I thought they were quite brave for doing so because obviously, the SJW Podcasters were going to retaliate. “You are part of the problem” she tells them, angrily.

Absolute toxic behaviour.

The next day, I was so pleased to see that she deleted her tweet, but I was saddened when I saw the other high-profile developers having to debate with her followers that were accusing them of being sexist/racist.

I looked back through their recent tweets and there was another tweet by someone promoting their favourite developers. Not only did the SJW Podcasters claim it was sexist, but they also suggested they were unethical by just promoting their friends and not mentioning that fact. Now, that is quite a good point. If there is bias and you are promoting something with a commercial interest, then you should declare it. Promoting Twitter profiles is debatable because if you are promoting developers, then you are indirectly promoting their services (books, lessons, website, consulting etc). Now here is the hypocrisy… You can go to a popular book reviewing website, view the books that have been written by the SJW Podcasters and what do you see? 5 star reviews from each other without declaring that they are best friends with the author. Surely they got the book for free, and since they hadn’t declared it; that is against the website’s terms and conditions.

So let’s return to the “cancel culture” story. Additionally, on one of the posts I read that day, this tweet from well-regarded developer “Uncle Bob” was quoted.

Despite Uncle Bob stating that you should only judge the code by the quality of it, and not the author’s background, you can see the negative replies to it. There are replies telling him he “is wrong”, “please delete your account” etc.

What the hell.

I even saw one of the SJW Podcasters’ followers suggest that their next target should be Uncle Bob because that tweet “is racist” and he needs to be canceled. No dude, it is literally the opposite case.

I just don’t understand what people are thinking. People are so obsessed with being politically correct, that they are then attacking and abusing people…which is completely against what they are fighting against:

  • They want inclusivity, so they promote exclusivity.
  • They want people to treat each other with respect, so they promote abuse.

Anyone that doesn’t agree with them is declared “part of the problem”.

After the “dust has settled”, one of the SJW Podcasters’ tweets “A little kindness goes a long way”, another tweets “Take care of each other.”

Practice what you preach. Lead by example. Call out toxic behaviour (but definitely make sure it is toxic). Don’t be a hypocrite.