Playing Dumb

Derek always annoyed me when he would play dumb when doing non-programming tasks. So if he was helping Testers by running test cases – they would tell him to open a test case, and he would be like “what software do I use?”, “what do I click now?”, “do I click the Pass button when I’ve finished?”

It just wastes time and frustrates people. I always thought he was being as awkward as possible so they would just tell him not to bother. If he asks all those questions, then it’s just gonna waste a tester’s time. If they are answering questions, then it means they aren’t running test cases. The idea of a developer helping out means there are two people running test cases. But an awkward developer just means there is a developer slowly running test cases whilst supervised by a tester who could have just done the job quickly.

I’m introducing a new character, Beavis; because he always acts dumb, or at least appears oblivious. Also, he has a very Beavis-like laugh.

Beavis was doing the exact same technique. I heard him ask many dumb questions like that. Later, he calls me over to help set something up. I tell him his account doesn’t have enough permissions.

So he logs in with the admin user, goes to the configuration module and then says:

“how do I find my user?”

“click the Find button”

“where is that?”

“In the menu, first button”

he clicks it. A dialog appears. “How do I then find my user? Do I just type in my name?”

“No, you have to type Pi to 10 decimal places!”

I didn’t really say that, but it was hard to keep calm with the questions that are just wasting my time.

He then says “sorry, I’ve never used this program before”. Even though that was clearly a lie.

Beavis and Butthead

I know he hasn’t used it much because he used to work on a completely different software product, but he has used it and was helping a Junior set it up the very next day. But when you have 20+ years of experience in the software industry, how can you not be comfortable using basic features? Many features are intuitive. If you wanted to find some text, it doesn’t matter if it is Internet Explorer, Microsoft Word, Notepad, OneNote, Visual Studio; you would always press Ctrl+F. Want to Save? Look for a “Floppy Disk” icon, or the word “Save”.

Brogrammer #3

The Brogrammer was on a call, presumably to his manager. He was talking about a recent Programming exam he did. He then says “I didn’t understand most of the questions, so I just guessed. It was multiple choice so if I passed, it was down to luck”

You have to admire his honesty.

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.