Team Duplicate

Part of my team’s work is basically to create a framework where other apps can be plugged into. So this framework has a menu bar and is responsible for functionality that can be used independently of which app you are using. A good example of that would be Chat functionality.

So a part of this project is to create a “proof of concept” (POC); have the “shell” with some sample apps. When other teams make an app, then it can be tested within this POC.

Recently, another team has been putting together a POC which demonstrates how applications can be integrated into the shell. Have I just repeated what I wrote above? Oh, yeah. They are duplicating our work.

Who came up with this idea? Who planned this work? What is the point of it?

I asked one of the developers what the point of his work was, and he replied “you will have to ask the team leader”. I’m thinking “hang on, you agreed to work with them and you don’t even know what the point is?”

Our POC has our shell with a couple of other apps that other teams have produced. The duplicate POC has our shell with some apps that their team has cobbled together. I just don’t understand this at all, not only is it inferior because it’s not using other team’s work; a few developers have just wasted weeks writing apps that no one will ever use. It will just be discarded at some point. Or that’s what I initially thought, but I did hear the manager who is in charge of this say something like “this will be the POC that teams will refer to going forward”.

The other week, one of Team Duplicate’s members, Liam joined our stand up. When we mentioned some upcoming work, he volunteered to speak to another team we were waiting on, which seemed very generous of him.

A few days later, I went to pick up this work item from our Backlog. So I asked Liam if he had any information about it. He then gave me a weird reply along the lines of “I don’t think we need you unfortunately”. I was thinking “wtf, you are firing me with no authority!?”.

I then found out a member of his team was already working on it and he thought I was asking if I could assist with their work. I told him it is on our Backlog and he was telling me it was on his team’s Backlog too.

Obviously, we are duplicating work. This illustrates it. We need the functionality for our POC, they need it for their Duplicate POC.

In the end I picked up a different requirement. I mentioned this to a developer in Team Duplicate and he said “oh yeah, I need to implement that too”. I was like “you are joking, right?”. He says he wasn’t. So I said “I’ll race you then”.

I implemented it first.

Angry Complaints

On our stand-up call, we were joined by Lyndsay from the UI Controls Team. Vincent mentions that we will require some extra controls for the work he was doing and Lyndsay responded angrily “I just checked the Slack channel and no one has requested this, how do you expect them to do the work if you haven’t asked?”. Chill out, it has just come to our attention.

After the stand-up Vincent goes in the Slack channel and posts. A developer from the UI Controls Team responds negatively. He angrily stated that its not his team’s responsibility to do all the work, and maybe Vincent should do it. Lyndsay liked his response. It completely looked like Vincent had been set up.

A few days later, our Product Owner suggests we should work in a stricter Sprint approach, so we end the two week period with an end-of-sprint demo. At the end of the call, Lyndsay starts complaining that no one has done a demo or even announced one. She then says when the Development Manager comes back from holiday in a few days time, he won’t be happy.

I’m wondering how Lyndsay expects us to take her seriously when the Product Owner had only just announced the intention to create a demo, then she starts kicking off about the lack of demos.

I’m also wondering how things can be fine for months, then all of a sudden, Lyndsay made it feel like we are doing everything wrong. It’s like when we used to log a bug, and then a Test Manager would charge to your desk, demanding to triage it.

Slack Analytics

I recently discovered that Slack has an analytics page. We’ve been using Slack for around 1 year now, and the statistics sure were interesting.

The channel with the most posts is the team that were responsible for the adoption of using Slack. They collectively have written 74,000 posts in that one channel. That figure is seriously alarming. What about posting in other channels, or sending private messages? Damn.

Well, their highest individual posted 64,000 messages, but the average for their team was around 30,000. Their newest member of their team led the monthly charts for December with 3,500 across the 18 days she was in the office.

I think I use Slack far too much, but I have 1,700 message for the entire year. Yet, that is half the leading December poster. My team’s channel has around 1,100 posts. So we post around 74 times less than the highest posting team. That particular team has posted 2.5 times the second place team, so they are ahead by some distance.

I do wonder how much Slack impacts productivity. I think the team that is leading the Slack charts is perceived to be very productive and innovative by the Managers. Yet perception by Managers is often different from the actual truth. I often hear their team claim they are too busy and that other teams need to help out with their backlog. Maybe if they weren’t on Slack so much, then more work would be done? I don’t see how one team can justify sending 74,000 messages across a year. That is a staggering amount.

Buzzwords

There’s a manager that constantly reels off jargon and buzzwords, then at the end of his speech, I always think “what the hell is going on?”.

I was watching a few of his video updates and wrote down a few phrases that took my interest. The first video was about “latest developments” and how these changes are going to “accelerate development” as we “integrate with teams“.

The next video asked “how do we get the backlog to illustrate we are moving in the right direction?” with a respect to “data-driven timelines”. There’s gonna be a “high level plan” which will allow us to “commence application development come Q2”. We can “tally up with the timeline” and when we “consider ourselves integration ready”, we then “help teams work with integration-ready architecture”. Finally, when we get “all bases covered”, “collectively we have a whole backlog and roadmap of work”.

Can we achieve this? Let’s hope it is clearer come Quarter Two.

Why is my build failing?

A Senior Developer asked for help on Slack. His build failed, so he triggered it again and it failed with the same error. He had hoped it was just a random failure.

I pointed out the reason it had failed is because there was a failing unit test. His code change was a one line change. He had changed a boolean value from false to true, but hadn’t updated the unit test.

After I pointed it out, he then deleted his post for help. Destroyed.

The API

In our current project we need some user data to populate a screen with the user’s settings. I ask the team responsible for this data if they have an API we can call. It shouldn’t have been a surprise to them because we are replacing existing software and the requirements are the same – we just need to implement it using different technologies.

So I email them with the requirements. I want to pass them a UserId, and I want them to send me back the User’s Configuration in return. Easy.

A few days later they send me a meeting invite.

On the meeting they said they didn’t understand the requirement. I then show them the UI designs, and tell them that I need the data in order to populate a form for a particular user.

Two weeks later I get another invite. They still don’t understand what we want. So another team member explains to them.

The next day I get an email with their new design. I can call their API with an ID related to my application, then I have to do a separate API call but I can’t specify a user. The format it comes back in is JSON, but it’s not really conforming to the standard.

So you may expect some JSON about a film to look like this:

    {
        "title": "Gravity",
        "info": {
            "directors": ["Alfonso Cuaron"],
            "actors": [
                "Sandra Bullock",
                "George Clooney",
                "Ed Harris"
            ]
        }
    },

but instead they said they want to send this:

    {
        "title": "Gravity",
        "info": "{directors: [Alfonso Cuaron], actors:[Sandra Bullock, George Clooney, Ed Harris]}"
    },

So you can’t have nested objects which JSON is designed for. Instead, you just have 2 fields with everything smashed into one text string. Why?

Ignoring that though, after 3 months, they finally email to say it is ready. So I look at their Swagger documentation which shows all the API calls in a website, and even has a button that can trigger an API call so you can see an example response. “Brilliant” I thought, I can understand what they have done without writing any code or using a tool like Postman to send calls. It is simple as clicking a button. I click the button…but the message fails to send.

I then send an email, informing them that this doesn’t work. The developer says something along the lines of “we are in the process of changing the API”. What do you mean? I waited 3 months and you are saying it’s not ready – an hour after telling me it was ready!? He did get the Swagger documentation updated before the day was over, but I just don’t understand how it wasn’t updated as they were actually making the changes.

So after 3 months, we get an API that isn’t even suited to our needs. This is just madness because we will be the only consumer of at least one of the calls they implemented. Therefore, the API should be driven by our requirements. We shouldn’t be making two different calls, then doing some jiggery-pokery with the data, when it is easy for them just to send it back in the format we want.

Duplicate Builds

Recently, there’s been quite a few odd things our team has done and I haven’t put that much thought into them. So I have either:

  1. approved their Pull Request, putting my trust in the developer that it was the correct thing to do
  2. casually skimmed over something someone else has approved.

Then, when I spend more time in that area, I then think; “what the hell are we doing?”

I was making some tweaks to our build process and then thought “why do we have two builds for every check-in we do?”

So I look at the definitions and it’s basically this:

Build 1Build 2
Download and installDownload and install
Run linterRun linter
Run testsRun tests

Produce report
build steps

So the second build is just to produce a report, which it needs a valid build to produce. But it could just use Build 1. The sensible thing to do is just to delete Build 1, since Build 2 has the full steps we actually want.

So I ask the developer that set-up these builds and he said “it is quicker”.

So I’m like “what!? how?”

“it runs in parallel”

So? Both builds initially do the same thing, but one has an extra step so Build 2 takes longer. We have to wait until both builds complete before the code can be checked in. If Build 1 fails for some reason (e.g. Unit Test failure), then you are 99% guaranteed that Build 2 is gonna fail, therefore is a waste of time and money. The report can’t generate unless there’s a valid build, so the report may as well just use the existing build. Since they run in parallel, the total time is just the time of the longest running build e.g. Build 2.

He didn’t even seem convinced.

GitHub Actions

Probably a common thing I’ll discuss on this blog is people using technology just because it’s apparently cool. In a way, it is similar to when people write programs using languages they know, rather than using an appropriate language for the task. It’s like the mentality is “I’ve learned this thing, so I’m gonna use it!”

Teams have been using AWS Code Build to build their applications. Then one team decides to be different and try some new technology; GitHub actions https://github.com/features/actions. When their source code is on GitHub, it does make sense to use Build tools there, but at the same time, every other team is using AWS, so why not be consistent? To be fair, I guess a good reason to use it is that you get 2,000 free minutes a month, so I guess it is cheaper for one team to use it.

Now, there’s a couple of things I want to mention here.

A) This team that uses GitHub Actions has many people that I mentioned in the Anti-Microsoft blog (https://strangercodingtings.home.blog/2019/10/29/nerd-elitists-1-anti-microsoft/). Now, the funny thing is that Microsoft acquired GitHub back in June 2018 (https://techcrunch.com/2018/06/04/microsoft-has-acquired-github-for-7-5b-in-microsoft-stock/), and therefore, their servers are running on Microsoft’s Azure platform. I do wonder if those guys are aware of this.

“GitHub hosts Linux and Windows runners on Standard_DS2_v2 virtual machines in Microsoft Azure with the GitHub Actions runner application installed.”

https://help.github.com/en/actions/automating-your-workflow-with-github-actions/virtual-environments-for-github-hosted-runners#about-github-hosted-runners

B) In my team, we have 4 repositories, and 3 were set up to use AWS Code Build. I submitted a Pull Request to configure the fourth. I get a comment on my Pull Request saying “changes are OK, but I recommend using GitHub Actions instead”. No justification for it, he just thinks it’s cool, so wants me to undo the few hours work. I can understand if there was a strong advantage for using GitHub Actions over Code Build, and if there is, I would want all 4 repositories converting, not just 1. It just adds to the confusion, and adds to the things you need to learn and maintain.

William

I’m gonna create a new character called William because I have a good feeling he will be a good source of stories, so don’t want to group his stories with Colin.

There was a time I was looking through the recent changes to our software and I saw someone had added some additional error logging. When people have done this in the past, its because there is a bug they cannot recreate, so they need to add additional logging code to gather extra information in order to diagnose the issue.

Anyway, I look at the code and realise that what they were logging wouldn’t be helpful at all. I asked the developer what he hoped to achieve and he said “William told me to do it.” So I was like “If William asked you to jump off a cliff would you do it?“. He replied “But William is a Senior“. I was like “so what? you need to consider things for yourself“.

Recently, William has got involved in our project and has been trying to help decide how to approach our architecture.

We were discussing how users could be updated with real-time changes to data. William stated we couldn’t use SignalR. I asked why and he gave me a shocked look as if it was obvious. “It doesn’t work with web browsers” he said. Weird, I thought, because a partner product uses SignalR for their website.

SignalR supports “server push” functionality, in which server code can call out to client code in the browser using Remote Procedure Calls (RPC), rather than the request-response model common on the web today.

https://docs.microsoft.com/en-us/aspnet/signalr/overview/getting-started/introduction-to-signalr

I was looking into a solution involving Web Sockets and he came over and told me it has been ruled out because it is limited to 1 million connections. I was like “1 million connections? How many do we need?“. He was like “we need to think bigger than that, Websockets isn’t scalable“.

I asked around to get an idea of our current userbase. Turns out we have ~180,000 users, but around half will be active at any one time. So even if we did scale it up, 1 million is more than enough. I was speaking to one of the Architects and he reckoned that the 1 milllion limit can be surpassed with certain implementations.

Anyway, it got me thinking that maybe you shouldn’t always assume people know what they are talking about. William states things with such confidence that it sounds like he knows what he is doing, but really; it’s just the first idea that popped into his head.

“As a junior developer, hearing others say “I don’t know” is extremely reassuring and erases the common misconception that experienced developers know the answer to every question, and have a solution in the back of their mind for every type of problem. Admitting you don’t know something is nothing to be embarrassed of — instead, it’s a new learning opportunity for everyone involved! It may even lead to another occasion to pair programming or debug a problem together”

https://dev.to/httpspauline/5-ways-to-create-a-junior-developer-friendly-culture-3n4

So if William admitted that he needed to do some research, we could have investigated various messaging technologies.

Without me questioning his statements, we could have rejected two perfectly viable options.