Project: Batch Approval

This long blog documents what I have been working on for the past year. I had made lots of notes with the aim of writing a blog, in addition to taking extra notes from chat logs.

We actually estimated the project would take around 5 months, but then an extra 2 months for testing and go through our slow rollout process. It actually took closer to a year. I’d say it was a combination of:

  1. realising the feature was more complicated than anticipated
  2. the UX team had little knowledge of the actual user experience
  3. managers changing or trying to change team members
  4. our slow release process
  5. 90/10 rule of project management

We were told the project was important, yet we were only assigned 2 developers (as in myself and one other). As the project came to a close, we were being integrated into our new team, therefore other developers could help out during the final stages.

Here is a list of all the people involved over the project’s lifetime:

Name (Core team in bold)Role
MeDeveloper (Team Lead)
DanielDeveloper
DeanDeveloper (Temporary)
DennisDeveloper (Temporary)
TinaTester
TimTester
ColinTechnical Manager
MaryTechnical Manager
OliviaProduct Owner
OwenProduct Owner
CarlCustomer Representative
AdamArchitect
AndyArchitect
GraceSafety & Legal Governance
UlrikaUX
UrsulaUX
I’ve made the names start with a letter to represent their job title, apart from Colin because he is a recurring person in my blogs. I’ll put reminders throughout the blog so it is easy to follow.

Current Software

To protect anonymity, I need to come up with a different theme for what the software is for. Let’s say customers request various restricted items of different severity. So a request could come in for a Hunting Rifle, and the user needs to know if they have the adequate licence to possess firearms and they are deemed medically safe in a recent time-frame. Possible warnings are shown which the user can dismiss/acknowledge e.g. “licence is up for renewal in the next 3 months”, “recent purchase of other firearms”. Standard users can create “Awaiting Approval” tasks and assign them to users with authority to approve. To approve them, the authorised users open the task list, view the details, then click approve. Many tasks have either no warnings, or low-severity warnings, so users often just glance at the info and click Approve. The system then sends the approved request to a central system, then loads up the next task. There’s a couple of seconds delay due to the “digital signing”, a couple of seconds for sending, then loading up the next record. To sign loads of tasks, it’s a very slow and laborious process. It’s a major source of complaints from our users.

Unsafe/Unofficial Automation

Carl [Customer Representative] sent a link to a video where someone was demoing a commercial automated tool that autocompletes the tasks. It waits for the system to load, clicks the approve button, then repeat. So you could set it running, then walk away from your desk.

I thought it seemed ridiculously irresponsible and would cause people to be sacked if they got caught using such a tool:

A) The program is now the one authorising the tasks, not the qualified user. What’s the point needing to have qualifications if you aren’t even going to read what is on-screen? If a task was wrongly approved, then the user would be accountable.

B) if you walk away from your desk, you are leaving your PC unlocked, along with your physical Security Key.

The creator had actually put a bit of thought into it though. If there are any Warnings that require another click to dismiss/override, then the automation is paused.

The video claimed that some users have up to 500 tasks to sign after a weekend. They charge a fixed yearly fee of £295, plus 7p per customer on the system per year.

“the robot does not get bored, does not make human errors, and crucially is a lot cheaper than the user’s hourly wage”

Promotional video for the Automation tool

Probably just makes robotic errors instead!

I said we should change the names of the buttons to try and screw them since it probably uses something like that to locate the button to click. It would be quite funny to make them dish out refunds.

The existence of the automation tool shows how much the users desire a better solution.

UX User Feedback

Given the existence of such an automated tool, it is no surprise that one frequently requested feature is Batch Approval. Our UX team put together some kind of interactive prototype and invited a few users to provide feedback on two designs. The alternative design was actually produced by Mary [Technical Manager] who has no UX qualifications. I’m not sure how that came about and why UX agreed to trial her design, but the feedback was actually extremely favourable to her design.

This caused her to be quite smug and maybe caused some animosity as we will see later. The ratings out of 5 were:

(Option A) 4.3 for Mary’s design

(Option B) 2.3 for UX Team’s design

For additional comments, one user commented:

“I prefer Option A by a country mile – Option B feels even worse than the existing system!”

Another commented:

“Option B feels more clunky, less user friendly than option A. A lot of clicking involved”

One even gave a threatening response:

“Option A or you’re gonna lose me and my franchise”

Shortly, there was a write-up from a conference where the feature was announced:

“This item is one that really did steal the show – this is something that our customers have been very eager to see us implement and are very excited to learn that we are busy developing this solution.”

“Busy developing this solution” made me laugh, because at the time, all I had was a dialog box with a couple of lines of text and a button.

Proposed Change

The general idea, is that the user is presented with key details from the tasks in a data grid.

  • They can click checkboxes to select which tasks they want to approve.
  • These are added in a queue to send in the background.
  • The user can continue working as they are sending.
  • The “digital signing” has to take place on the user’s computer so a large part is done client-side.
  • The user has to remain logged in until the process is finished.

This project had actually been discussed for years, but because there wasn’t much of a “commercial drive” for it – we would be giving users this feature for free – it was always low priority.

Product Owner: Owen

I think the initial planning was done by a different Product Owner but then when the project fully began, we were assigned a new Product Owner, Owen, who was new to the company, but he also gave me the impression that he was new to the role…but also didn’t seem very clever in general.

Here are some quotes that happened in various meetings (mainly Sprint Planning and Refinement).

Owen: "which work item is it?"
Me: “the one right at the top"
Owen: slowly scrolls...chooses 2nd item

Me: "it's not a Must, it is a Could"
Owen saves it with Must tag
Tim [Tester]: "No, Owen, you tagged it wrong, go back"
Owen: "Which WI is this?"

saves it with the Must tag again
Then goes back into the work item and gets confused
then goes back into it again. I think he needs rebooting

Me: "you need to set the state"
Owen clicks to close
Me: "you need to set the state, go back"
Owen is confused
Me: "left hand side Owen!"
Owen hovers over the right
Me: "left hand side Owen!"
Owen moves down

Me: "leave it as it is"
Owen "Which one shall I take out?"
I'm sure he is intentionally 30 seconds behind to wind us all up

Owen changes Story Points from 3 to a 5 without any discussion.
"shall we keep it at 5?"

For another item, I was talking about how the requirement is either obsolete, or needs a completely different approach from the initial proposal. 
Owen: "So how many points shall we add?"

"The system crashes when entering incorrect PIN and clicking 'OK' on error prompt"
Owen: "what was the behaviour before we fixed this?"
team: "It crashed"

We were discussing how we logged a bug a few months back but haven’t seen it occur since, so it will need some investigation to try work out what the recreation steps are.

“Assuming the bug still exists, how long will it take to fix it?”

Owen

Estimating software changes is hard, but I always think bugs are even harder to estimate. It’s only possible if there’s clear recreation steps, otherwise it is stupid to ask – we can’t fix it if we don’t know what the problem even is.

“depending on Grace’s [Safety & Legal Governance] feedback, do you know how long it would take to fix?”

Owen

Translation: can you predict what Grace would say, and given that she did say it, can you come up with an estimate for it?

I logged a bug about suggestions on how to improve a dialog. It would be up to Owen or UX to decide on the approach to fix it. Owen then asks questions along the lines of: “what do we need to do for this? do we need it?” I said it would be nice but it’s not my decision. Then he still asks “do we need it?” “can we close it?“

What’s the point asking me these questions, when I logged it with the aim of asking him to decide?

When the project deadline was looming, we ended up having multiple meetings to decide if there’s any features we could scrap, or defer to a later release. After the first meeting where we decided scope, he may as well have said “You know those items you said we need to do and couldn’t defer them, are you sure we can’t defer them”, because he was arranging subsequent meetings to go back over them. When we came up with estimates which showed that we would need at least another month, he was then arranging another meeting to re-estimate them.

The Architects

An important project started around the same time ours did. Our architect, Adam [Architect], was reassigned to the new project. Andy [Architect] joined our team as a replacement. He wasn’t completely new to the company but wasn’t familiar with this area of the system. Additionally, I don’t think he even looked at the software or even requested a demo.

Any question we asked him, he ended up making an excuse that he was busy and will get back to me later. Then when he did answer, I then sent a message to the original architect, Adam, and he said Andy had asked Adam about it and simply relayed the message back to us. So basically Andy wasn’t doing anything. We had him officially assigned, but it was Adam [Architect] that was answering the questions but via a middle-man.

The July Cancellation

There was a bit of disruption when our project looked to be cancelled, but there was apparently some mis-communication.

Hi All, a decision has been made by Directors to stop Batch Approval and to move resources across to pick up Project France instead. Therefore I will be cancelling the Batch Approval meetings.

Project Manager

1 day Later

The directors had decided to move you to the new project so I cancelled the meetings, but then I find that there wasn’t a firm decision from the Directors.

Project Manager

Brian has asked us to proceed with Batch Approval as originally planned. Sorry about the chaos dudes. They must be smoking some good drugs upstairs.

Olivia [Product Owner]

It was off the table, then someone put it back on the table, then someone else swept it off the table, then someone picked it up off the floor and put it back on the table.

Andy [Architect]

Coding Tales

Colin [Technical Manager]: "What sprint are you in?"
Me: "I dunno"
Colin [Technical Manager]: "you are the team lead, you should know"
Me: "No one in the team knows"

Put it in a new tab but make it behave like a dialog

The original UX designs looked like it fit nicely in the existing Task Framework. The requirements were that Batch Approval had:

  1. Its own folder but is a sub-folder of Approvals
  2. Opening a task opens it in a new tab

After looking at the code though, the framework didn’t actually support a sub-item. But we found a basic workaround to make it look like it did. However, there were quite a few features that we got “for free”, but we didn’t want them because they weren’t appropriate for a sub folder. So I had to disable the features by hacky code.

If you double click a task, then it opens in a new tab, which is what they wanted. However, they then didn’t want you to be able to navigate away into other parts of the system, and the Task Framework didn’t support that. With a bit of a workaround, I got that working, but the tab was designed to view one task only, and we are displaying a Batch of them. A few weeks went by and I managed to cobble something together, but the code was awful.

I took a step back and thought about it.

  1. We have a tab that the users surely would expect to be able to move away from to view other tabs.
  2. I’m using this “tab” which is designed for a single task, and I want multiple. So I had to make my own custom page.
  3. We have hacked a sub folder and had to basically fight against the codebase to get it all working…

So why don’t we just have a button on the main folder, and it launches a modal dialog?

  1. It would take a couple of days to get working,
  2. the code would be neat,
  3. and I think it’s what the user would expect.

After speaking to UX about it, they were happy with my proposal. I had wasted about 3 weeks trying to get it working like they previously wanted. Also, we are again telling UX what a good UX design is.

Scrollbar

The UX was also clear that we didn’t want a scrollbar to appear, and instead we use pagination. I didn’t see anything obvious in the standard DataGridView Winforms control, although I’m sure this is a common problem/requirement.

I ended up writing my own logic to add controls to the grid, keep track of the size, then stop adding when the size exceeds the height of the control. However, if there is only 1 very large task, we have no choice but to use a scrollbar.

The problem we encountered was that sometimes a scrollbar did appear when it shouldn’t. I made some tweaks to the calculation and it seemed to work fine. But then a Tester found a combination of task sizes where it still appeared. I couldn’t work out what I was missing in the calculations but it seemed about 4 pixels off, so I just added that into the calculation. Again, all seemed fine for a few days, but then the Tester found a combination of sizes where it still appeared.

Olivia [Product Owner] suggested that we detect when there is a scrollbar then disable the Approve button until the user scrolls down.

I said if we know when the scrollbar is there, why don’t we just remove the last task and check for the scrollbar again, repeat until the scrollbar has gone. I thought the code would be messy, and I’d end up writing a stupid code comment like “mate, something has gone wrong with the calculations here, so we’re gonna have to do some jiggery pokery to get out of this mess”.

Adam [Architect] did suggest some alternatives and they were just as wildly wrong.

Dean, a developer in another team agreed to help, and after a couple of days, he says “you can just set the vertical scrollbar to be disabled”.

But if the scrollbar is appearing so you have to scroll to view the content, then surely disabling the scrollbar will mean content is off the screen?

I tested his idea, and it worked fine! What must be happening is that the vertical scrollbar appears and takes some of the horizontal space… which causes the text to wrap and creates the need for more vertical space. Therefore the scrollbar is required and so remains. But if you tell the scrollbar it cannot appear, then the controls are added, and my calculations meant it fit perfectly in the grid.

It’s a self-fulfilling prophecy!

Olivia [Product Owner]: Do we have concerns about the unknowns?
Tim [Tester]: It's just the unknowns that we don't know about
I feel like you need to know the system inside and out to be able to safely implement this

Conflict With The UX Team

UX: “We want to minimise pop-ups”
Also UX: “Add a pop up after closing the dialog”

Ulrika [UX] had to take time off to deal with some personal problems. Ursula [UX] agreed to join the meeting we arranged on the Wednesday.

“I don’t work Thursday/Friday and have to leave early on a Wednesday to get the kids. I’ll get back to you next week”.

Ursula covers for Ulrika but then also has time off.

When she got back to us, she seemed to overlook how users access this restricted part of the system, and it turned out none of the UX team actually had this knowledge. So halfway through the project, we were discovering new requirements because they hadn’t designed the user flow.

Don’t Have Time

In early January, we were waiting for UX to give us some approved text but they seemed to be taking their time. I asked Olivia [Product Owner] what was going on, and she said that we don’t have time to make any more changes so they “needed to stop requesting changes”. Even though I pointed out that I was the one requesting changes, she said “we don’t have time to test” (even though it only involved quickly checking some text has changed on a message box). Nearly 2 months went by before we actually began to release.

After more protests from me, she says:

“The text is fine for now. We don’t have time to be changing it.”

Olivia [Product Owner]

When it came for the final review, reviewers questioned why we had dialogs with some ToDO comments on it saying “ToDo: Awaiting UX approval“. Even if you don’t have comments like that, I have seen developers question the user-facing messages if the grammar isn’t correct or sounds unclear. It definitely wasn’t clear because we just wrote the first thing that popped into our heads at the time; knowing the text would be replaced.

I think what had happened was that Mary [Technical Manager] and Olivia [Product Owner] had fallen out with Ulrika [UX], and then was refusing to authorise her changes. Remember, tensions will have been building since users criticised Ulrika’s design and wanted Mary’s design, and Mary’s arrogance about it wouldn’t have gone down well.

It’s just part of the process though – all text needs to be approved by the UX team; otherwise what is the point of their team?

Conflict With The Architect

When we implemented Adam [Architect]’s suggested invalidation logic, we thought the criteria was too restrictive. Adam was off on annual leave for a few weeks so we couldn’t consult him. So we made our own decision to change it, and got Carl [Customer Representative] and Grace [Safety & Legal Governance] in agreement. However, when the Architect saw it, he said it was unsafe. In many meetings, I got the impression Grace wasn’t really listening and she tended to agree with what we said. Not exactly great when your job involves telling the team what is safe and legal, and then get overruled by the Architect.

We came up with a compromise, and implemented it. Then when it came to the Code Review, Adam suggested removing one more of the sub-rules which I think would be perfect, but then Olivia [Product Owner] was reluctant for us to make more changes.

Then a week later, Olivia said she would arrange another meeting to discuss the rules because she felt it might be too restrictive. OMG. However, she then seemed to have personal grievances with Adam, so told me not to make the simple change, even though it would be what we want. She used the excuse of lack of Testing time.

Adam [Architect]

We shouldn’t be knowingly introducing bugs. Olivia [Product Owner] This is not a bug. It’s a change to the criteria and we are not going to change it a week before we finish. I am speaking to Carl [Customer Representative] about changing the criteria, and we’ll look at it then. Adam [Architect] A bug is any deviation from requirements. Why are you planning on changing it if it is not a bug? Olivia [Product Owner] That’s not a bug. You are right in the sense that we need to change it…we’re just not changing it now. I was happy to leave it as it was to get this out of the door. That’s my call to make. Mary [Technical Manager] There's a lot that's not right. But how long do we keep going until we give it to the customers?

A summary of how this situation appears to me:

  1. There is a process, but if you declare you want to move the process to the next release, then it is fine.
  2. It will take too long to change a few lines of code, so we ain’t doing it. Apart from when it is a comment on the Code Review, then we are doing it, apart from those that we aren’t.
  3. It takes longer for Olivia [Product Owner] to argue against it than to fix it.

The CEO had recently posted:

“The most important thing we do every day is keep our users and their customers safe by managing risk effectively. I know you all know this, but it warrants repeating: safety is our number 1 priority all day, every day – regardless of anything else that is going on. It trumps everything. Please always remember that.”

CEO

Our Managers are like:

“Next release”

The Technical Manager change

Colin [Technical Manager] complains that Daniel [Developer] and I haven’t handled the project well – and it overran by over a month at that point. A week or so later, the team was on a call with other stakeholders and he said

“you guys have done a tremendous job”,

Colin

then said the delay “was caused purely by scope-creep and nothing to do with the developers at all”.

“Mary is in charge of the team since yesterday”

Colin [Technical Manager] with his timely announcement

I got the impression that Mary just wanted to get rid of the project, because it was dragging on for far too long.

The Testers had nothing to do since us Developers were working on the last few bug fixes. Tina [Tester] said she was just re-testing old features to pass the time, but also get extra confidence there are no remaining bugs. Mary [Technical Manager] replied:

“should we be doing testing when changes are ongoing?”

Mary

Well, in that case, this statement means testers should only be hired for a couple of weeks right at the end of a project – since changes are constantly ongoing. I think she might have intended it to mean like “you’d better not find more bugs!”, but if there are bugs, then you definitely want to find them before our users do.

On the last day of the Sprint, Tina [Tester] took annual leave. She had left her assigned items in the “To Test” column of the Kanban board. There was no evidence she had tested the item, so I don’t think it wasn’t a case of just forgetting to move to “PO Approval” column. Olivia [Product Owner] and Mary [Technical Manager] then decided to just close the items. No evidence, no demo – just close them so the Sprint looks good, and looks ready to release.

What annoys me is that Mary had criticised how we had run our team and suggested we don’t follow the process. She stated that she perfectly follows the process – which leads to her successful projects. Then I see her cutting corners like that.

Just like Colin, she criticises me to my face, but then when we are in a group she states:

“I think you’ve done a fantastic job given that there’s only 4 of you”

Mary

A few days later, I had finished what I was assigned, but there was a bug on the backlog which Mary [Technical Manager] seemed to want to defer (again, she just wanted to release the project as soon as possible). I thought it couldn’t be released without this fix. I stated that I would like to look at it and she said:

“don’t do any development work”

Mary

Seems I have the day off then. What is the point in me sat around doing nothing? If I fix it, we can decide if it goes straight in, or deferred for the next release. Or maybe I won’t even find a solution. She just seemed desperate to finish the project so wasn’t considering the seriousness of the bug, or thinking logically at all.

The Backstab

I didn’t actually sit around doing nothing. I worked hard and found a solution. I knew that there was no chance Mary would accept my changes, so I needed to come up with a way of convincing her. My plan was to get the testers to informally test it, then I can say that I have a fix, and the testers are happy that there’s low risk of introducing more issues – so she would be stupid to reject it.

Testers Tim and Tina were in agreement that the fix should definitely go out in the initial release, and they agreed Mary was making a bad decision to consider releasing without it.

Tim said he would “have to check with Mary if he was allowed to spend time testing it” since they got told not to test anything. I said “there is no way she would approve it, that’s why we are doing this informally/secretively”. If Tim and Tina test it and find a bug, my plan has failed and Mary never needs to know that I attempted it.

It’s a perfect plan, or it would have been, but Tim then goes and tells Mary that I asked them to test it.

“You gotta start being better with your comminications – it’s not just yours and Tim/Tina’s decision if something gets put into the release – it’s a whole team decision but ultimately mine and Olivia’s. You’ve messaged them directly asking if they can get it tested, and as much as they’ll also want to get it done, it then puts them under pressure. This is how you’ve all got to a stage of being all over the place and burning yourselves out, it’s got to stop please.”

Mary’s chastisement

I shouldn’t have to go behind people’s backs and make my own decisions, but the entire non-management side of the team thought it should go in, and only the managers thought it shouldn’t. As a team we care about quality, but managers are just focussed on deadlines.

I also didn’t appreciate that she is accusing my decision making of adding stress to my team.

80% coverage

As the project got towards completion, I recalled our stupid “Merge Ready” process that no one seems to care about other than the small team who came up with it. You have to justify the likes of Code Coverage, and ours was at a low figure like 10%.

I’ll write some blog posts about my reasoning on when tests are good or bad in the future. A simple explanation is that Units tests are good when covering requirements, but often developers write them to cover implementation i.e. verify a particular method is called; but not that the particular method actually works. When you switch implementation, you have to rewrite a new unit test, slowing you down. Unit Tests are supposed to help you refactor, but in this case, it is a hindrance to refactoring. We did a lot of prototyping early on, and knew there would be large re-writes, so Daniel [Developer] and I decided to worry about Unit Tests later on.

When I declared the low number of Unit Tests, Olivia ended up raising it to the Directors for some reason. Why was it their concern? Do they even know what Unit Tests are for, and what the coverage actually means?

It could jeopordise my chance of payrises (I was correct, I got 0% this year) and tarnishes my reputation.

When Mary joined the team, she berated me over this decision and made the dramatic statement:

“We can’t go on like this”

Mary

She then asked a couple of her favourite developers to write some Unit Tests for my project, completely undermining me.

The thing is, both Dean [Developer (Temporary)] and Dennis [Developer (Temporary)] spent way longer than they estimated, and they didn’t do as much as they hyped, then when it came to make the last few changes, it slowed us down.

We ended up around 22% in the end, and the managers decided that is fine.

That’s the problem with us though… Do 80% coverage because it’s important. But actually it’s not that important, so you don’t need 80%. But TRY get 80%, Why?, Dunno, but the Document says.

Tim [Tester]

On track

Dennis [Developer (Temporary)] was also asked to helping out address the Code Review comments. In some ways, this kinda slowed us down. I told him I had a branch with some changes in already and sent him a link to it so we can work together. When I caught up with him the next day, he said that he had been working on a few of the ones I already had done because he hadn’t looked at the link. What a waste of time.

When Mary asked for a progress report, Dennis reckoned it would take 1 day to go through 20 comments, but he had done 8 easy ones the day before, and we had the hard ones left. So I said it would be more like 4 days, but could take longer if they are surprisingly complicated. I was correct.

Final demo

On the final Project Demo, Carl [Customer Representative] was saying the sending process was far too slow. He had been on most of the demos from the start and saw the progress across the project.

The original version I showed him was incredibly slow, but I had managed to speed it up significantly. So despite him witnessing the project months ago, he said the performance was a concern and maybe users would think it wasn’t a significant improvement.

We had all kinds of people turn up to this final demo. People from support, training etc. We should have had those guys on the early meetings. They were prodding holes in the requirements and asking important questions. Although we gave good answers for most of them, I couldn’t help but think our changes might not be as useful as we thought.

If only we got more users involved throughout the project, rather than just some UX mock-ups before we started, and then a year later – give them the update and hope for the best.

I’d like to reiterate just how hard the team has worked. They have worked their little socks off

Olivia [Product Owner]

Conclusion

We were told the importance of the project, but because there wasn’t a direct commercial aspect to the project, I felt it wasn’t backed up by the number of developers assigned to the project. With only 2 developers, then key staff like Architects and Product Owners switching throughout the project; it just slowed us all down and made us all feel it was actually a low-priority project.

There were other morale-reducing aspects like when we were told the project was on hold, then Mary berating my decisions, and implying the failures were down to me.

There wasn’t a great understanding of the feature in many ways, illustrated by

  1. how many requirements we discovered throughout the project,
  2. the UX team being clueless about many aspects,
  3. one Product Owner so clueless – it seemed he struggled to use a computer,
  4. then switching to a clueless Architect that just went straight to the original architect.

Recruiting Graduates #6: The Disappointment

Last year, I wrote some blogs explaining how the hiring process for Software Developers is bad.

General Summary Of Why The Software Developer Hiring Process Is Bad

When I was involved in trying to come up with something better, I was frustrated because I didn’t have the answers, but I felt everyone else involved didn’t understand my concerns.

I hate the way Tech Interviews and tests currently are, but I think it’s hard to come up with something as a replacement. When researching example questions, I see lots of questions along the lines of “who invented Object Oriented Programming?“, and I think “I don’t care“.

Then there’s loads of aspects that you would just Google if you didn’t know it e.g. memory usage of each type.

Or you may get questions like “what is wrong with this code?“, but if you actually pasted that code in Visual Studio and try and build it, you would see the error. Or in the case it is valid but not advisable; Code Analysis would flag it. Some of these can be trick questions like mathematical logic where the order of execution is ambiguous, but Code Analysis would definitely flag to tell you to add brackets, so it’s silly having these as a question.

Then I hate all the generic Fizzbuzz stuff (check if a number is divisible by 3 or 5, or even both). These are just so cliché that people could just learn from memory anyway.

Also, what do these graduates we are targeting actually know? back in my day, I knew Java but I was terrible and didn’t know how to test properly, or even debug. So there’s no point testing them on that either.

Stupid Questions From The Internet

During our meetings, I asked the team how they were coming up with the interview questions, and they said they were just Googling for C# Interview questions. This is problematic because applicants may have read and learnt from these very sites, but also many sites had terrible questions, which were sometimes incorrect.  

I came across this website:
https://www.includehelp.com/mcq/is-the-use-of-return-statement-necessary-in-every-function-in-csharp.aspx

 95. Is the use of return statement necessary in every function in C#?

 Yes No

 Answer: A) Yes

 Explanation: Yes, the use of return statement is necessary in every function in C#.

I think some programming languages may differentiate between “methods” and “functions” where “functions” always return something. But in C# you just call them “methods” which can either return something, or be defined as “void”. So this is just incorrect.

 99. Which is the first line of a C# program?

 using System;

 using system;

 using Namespace;

 namespace MyApplication

  

 Answer: A) using System;

If you create a blank class, “using System;” is the first line, but A) you could remove it B) the order of using statements matter C) in modern C# you could move it to a “global namespace”. I also asked the question of “who are we targeting?” because everyone was coming up with C# specific questions. My colleagues told me the universities we were targeting were primarily coding using Python! So we were writing the wrong test, or targetting the wrong people.

The Performance Review

In my recent performance review, my manager Colin stated:

“You were given an opportunity to lead on defining our interview process, but have not shown much interest in it. Ultimately someone else led it, creating the interview pack, redefining interview questions and leading live interviews, which I think is a missed opportunity to shine.”

Colin

I argued that: although I didn’t have a huge impact on the end result, it would have been a bigger mess had I not pushed back on some of the questions. Although it seems some of the interviewers still asked questions I said weren’t suitable.

We ended up coming up with a terrible process that some candidates dropped out of, and the ones that went through with the interview struggled and we were left with the decision to gamble based on what little we saw.

The Best Hire

One of the best hires we made was someone I didn’t interview, but I looked at the interviewer’s notes, and he didn’t exactly look like a strong hire. 

  • Implemented the basic application to consume webapi and just printed the values based on some predefined values
  • No unit testcases were written
  • application is simple
  • Inheritance – simple explanation
  • polymorphism – no idea
  • interface – not good explanation
  • purpose of inheritance – No idea
  • Print the numbers and its occurrences – Not completed, but after showing the hints he completed
  • Print the number from 1 to 100 using Recursion – Completed
  • print the numbers based on divisible values – Completed
  • Logical, cut the cakes into 8 pieces with 3 cuts – Completed
  • Candidate lacks on syntactically at some areas, but has some logical solving skills and good attitude on approaching things

When I stated to Colin that it “wasn’t a great batch of hiring”, Colin said out of the people we did interview, we ended up hiring around a third of them – which he said was above the normal hiring rate. I said that it was only above the hiring rate because we hired people that should have failed. Then later, he quoted the numbers “15 interviewed. 4 hired” (more like a quarter then). But there were loads of applicants rejected before the interview stage, and others dropped out along the way.

Intermission: Bantz from Twitter

The Polymorphism question

The Polymorphism question that was asked on some of the interviews was basically “do you know the types of polymorphism?”   

I didn’t even understand the question, and I probably have 10 years of experience.

I was only thinking about the usual polymorphism where you can refer to derived types as the base type:

 IAnimal animal = new Dog();
 animal= new Cat();

To check if I wasn’t going mad, I asked some of my colleagues. Here is how they responded:

“not sure i do, no. Inheritance and Composition, are they right?”

Dean (Senior Developer around 10 years experience)

Like covariance and contravariance? But I don’t think I could put it into words. I guess you have real polymorphism and fake…virtual functions have a virtual function table that map overridden functions from base classes. But a lot of polymorphism is just the compiler being intuitive and going “you’re not crazy” it can be treated as that type. 

Adam (Software Architect)

Types? an interface can be implemented many times. A method can have the same sig but different parameter types etc

Rob (Senior Developer around 20 years experience)

According to https://www.bmc.com/blogs/polymorphism-programming/, there’s Runtime, Compile Time, Overloading, and Casting. So if very experienced developers can’t explain the concept, then why are we using the question to target Graduate developers?

Conclusion

It annoyed me that Colin stated “have not shown much interest in it”. I was trying to make sure we had well-defined objectives on the exact type of developer we were hiring. Everyone else just started copying questions for the internet without considering the knowledge and experience of the people we were targeting. I didn’t have the solution of how to make a good software development hiring process, but I really wanted to make sure we got close – but I just didn’t have any support from everyone else that was involved.

Burndown Chart: tasks

Colin said that our Sprint Burndown chart wasn’t accurately reflecting the work done. He said we were overrunning with each Work Item which meant that we would have 0 points for one Sprint, then we get the full value in the next Sprint – which shows as a sharp drop on the Burndown chart.

I told him that’s how the Burndown charts work – but he said they want more accuracy. I argued further: If the requirements haven’t been met, then it’s not complete, so you haven’t added value to the software – i.e. you have made no progress.

A few days later, our Scrum Master had been in a meeting with him and was instructing us on his new process. Colin’s idea apparently was to add a “task” for each day and link it to the Work Item. At the end of the day, you mark the task as closed. 

I’m like “eeeeeeer wut”. So now it tracks your daily work.

I told her she must have misunderstood. Adding a task per day is just counting the amount of days in the week. I suppose if you take a day off, then you won’t count that day.

I questioned it, and she agreed that it didn’t sound right. So she goes back to Colin. No, he really does want a closed task per day, but also said to create a task even if you are on holiday.

Wut.

:all-the-things:

add tasks to all the things! 

So they want effort more accurately tracked, but are now just counting days, even the ones you haven’t worked. Surely if you create a chart, it’s just gonna be a diagonal line with no fluctuations.

What are we supposed to write for the task’s title and description? “Carried on working on it 7.5 hours”.

I just refused to do it, but the Scrum Master did the admin on my behalf. The idea lasted about a month.

I find that Burndown Charts often look unclear anyway. Here is one from another team:

So what are we even seeing here? The chart to the left shows Tasks, although the chart doesn’t seem to show the correct Completed figure – it shows as 0%. However, you do see the average is 46 which I think is per day – which illustrates the ridiculous number of tasks that teams were creating anyway.

The chart to the right shows User Stories but I think it’s not the number created, but the total points assigned. So one might be worth 1 point, but another could be worth 8 – it depends on how complicated the work is. I think this is a typical Burndown where the first few days nothing is complete because the developers are working on fixes, then the tester will get it in a few days. In the second week, more items are completed. There were even 4 points removed, presumably a change of requirement or maybe it was deemed redundant.

This is another chart that a team posted to boast about their progress. This example is a bit more unclear, but I noticed the Tasks Burndown (start 12th September) is not for the same time period that the Stories Burndown is (start 29th August).

The Stories Burndown looks interesting doesn’t it? It looks like only a small amount of work was done and then when it gets to the end of the second week, they add even more work. I did theorise that maybe they didn’t officially start the project until after 10th September but what does the 72% Completed mean? That seems to imply they are ¾ through their project. ¯\_( ͡° ͜ʖ ͡°)_/¯

Initial Onboarding Guide For Software Developers

Intro

I’m stealing ideas from a former colleague again. He had a blog post about Onboarding, and I felt I had seen many of these mistakes myself so they are worth thinking about if you are a manager and are expecting a new starter. These points are mainly about an office environment, so some points are no longer relevant to us, or are different now we work from home.

Onboarding Checklist

There’s a lot of work done during the recruitment stage; reading CVs, lots of meetings with recruitment teams (in-house or agency), and lots of technical tests and/or face-to-face chats with candidates. Once the offers are accepted, your work doesn’t stop there, but you have some time to prepare until the new-hires start their new roles. Some tasks are:

  1. Find a desk
  2. Find a chair
  3. Order the laptop
  4. Order Monitors
  5. Order the peripherals
  6. Consider collaboration
  7. Grant access to digital tools and codebases
  8. Make sure you are available on their first day

If you do not deliver on the above, the new starter’s first impression of you will be of failure. If you can’t organise equipment, desk, and have a plan to get them started, then what else will be missed? (pay reviews, promotions, training budget, etc)

Onboarding Checklist Discussion

Find a desk

If you are replacing a staff member, then you should have a desk already. However, is it clean?  If the desk has been vacant for some time, it can end up being a dumping ground for miscellaneous items (books, broken equipment, old stationery). Are there any problems with the desk? Does it wobble? Is the key missing for the drawers?

Find a chair

Chairs are more notorious for being damaged or dirty. Make sure all the wheels are still there and the back can be adjusted. The chair should be clean; not stained, or dusty, and free from any other horrors.

Order the laptop

You may be restricted by company procedure, but if there is a choice of laptop, make sure the new employee gets the one they desire. If the developer has a strong preference for a certain system Windows/Mac/Linux, it’s a productivity hit if they get something else. Another thing to consider is the form-factor – If they travel a lot, a smaller size may be much more comfortable for them, especially if they want to partially work on the train. The large screen can be gained from plugging into a large monitor at home or office.

Order Monitors

Many developers like having 2 monitors, although in recent times, it seems some are switching to 1 very large monitor. It’s great to have a combination of your code editor on one screen, then documentation/the software itself on the other.

Order the peripherals

Order the keyboard, mouse/trackpad, headset etc. Even if there are loads spare, they may be partially faulty, or just unhygienic.

Consider collaboration

Teams are full of people – full of personalities. It can be potentially tricky and there’s some nuance to it. Take some time to consider the optimal place for the new starter to sit. Is it the “replacement” spot? Is the desk more isolated? Is there some weird office joke about the desk!?

Who would they pair well with? Is the new starter’s job something someone in the team wanted (missed out on a promotion)? Is there someone who is seen as a bad influence?

Grant access to digital tools and codebases

Sort access to the code, and work management tools (licence keys for all required software).

Make sure you are available on their first day

If office based, be in the office. If distributed, you need to be free for video calls etc.

THIS IS YOUR MANAGER WHO 
BOB, CAN YOU SHOW 
WILL TAKE CREDIT FOR ALL 
THE NEW EMPLOYEE 
YOUR WORK. 
AROUND? 
SURE. 
(YAN G 
e 99 
workchronicles.com 
AND THIS IS WHERE YOU'LL 
THIS IS WHERE YOU'LL 
WORK LATE NIGHTS ON 
SPEND HOURS IN 
EVER CHANGING PRIORITIES. 
99 
Hello. I make comics about work. 
Join r/workchronicles or follow on Instagram/Twitter/FB 
Work Chronicles 
workchronic/es.com

Bonus: New Starter Packs

When I started, I think all I got was a writing pad to make notes. Maybe I got a pen.

Years later – existing staff, and all new staff were also given a water bottle, and a company-branded hot drinks flask. Even though it’s a simple thing, everyone seemed to appreciate it.

More recently, it was announced that “New Starter Packs” would be posted out to all new starters, and we were asked for feedback on the contents. I don’t get why they didn’t anticipate some backlash because they only planned on giving them to new starters. Also, they clearly had already ordered a certain level of stock because they were taking photos of them and had quite a few company-branded items.

There were the obvious choices of pen, paper, post-it notes, drinks bottle, in addition to some chocolates, sweets and some other miscellaneous items.

“The new starters will be there with their fancy laptops, new starter kit, and high wages, laughing at us”

Me

Some people criticised the choice of unhealthy treats, given some recent schemes to promote healthy lifestyles. There was also a Webcam Cover you could put on your laptop, which someone questioned if our IT department had approved it – to which the Head of IT said they weren’t authorised because they “crack screens and they also damage the bezel of other laptops when removed.”

It was also only for staff based in England, but a high percentage of staff are now based in India, so the managers admitted we need to find a supplier over there too to be fair.

So it wasn’t a well thought out idea really.

Software Development Process

When a new development team is created, managers insist on creating a “Ways of Working” which essentially comes down to describing the software development and testing process in the ideal way.

Then after a few weeks, you end up just resorting to the default way of working.

The “ideal” way assumes that the Testers can provide ideas and inspiration to the Developer, and when the Developer writes the fix, the solution won’t deviate from their original perception. Therefore, all the Test Cases are written up front, and none are needed to be written after.

Here is an example that one of my former teams came up with:

Before fixing the defect

Analyse together 

  • Make sure you pair up as a developer and tester to work on the defect.
  • Review the problem together
  • Understand how to replicate the fault
  • Understand the extent of the problem (all regions, all set-ups, all environments?)
  • Do the initial debugging to understand where the problem lies

Fixing the defect

The developer MUST 

  • Make sure there are unit tests to support the current functionality
  • If there aren’t unit tests then implement a simple refactor which will allow appropriate unit tests to be added
  • Add unit tests that prove the defect (which will fail)
  • Fix the defect
  • Get it code reviewed
  • If you are working on code you are not familiar with, get 2 reviews, one of which must be from an expert
  • Run all the unit tests and prove the fix

The tester MUST 

        • Write test cases with steps and expected results for the initial test cases. They must

                ○ Be clear and unambiguous

                ○ Cover the different scenarios/circumstances/options

                ○ Not test things that are irrelevant

        • Once written, set the state to “Review” and assign to the reviewer

        • The reviewer

                ○ Adds comments as appropriate

                ○ Set the state to “Ready” if Ok, or back to “Design” if it needs changes

                ○ Assign it back the test author

        • Only use Given, When, Then if you are using Specflow to automate your tests

        • Only use exploratory testing

                ○ If you have passed a Rapid Testing course

                ○ And you have a clear understanding of testing heuristics

                ○ And you plan and classify sessions, keep session logs, run debriefs

                ○ And all the specific test cases and all regression test cases have been executed

        • Create regression tests of the functionality

        • Create test case(s) to prove the defect

        • Get the tests reviewed

        • If you are working on functionality you are not familiar with, get 2 reviews, one must be from an expert

Assure the Quality

  • Review the actual changes together
  • Understand the logic
  • Understand the scope
    • Minor/contained (inside a method that’s inside a class that doesn’t affect anything that’s outside it)
    • Medium/impacting (a change that impacts outside it’s own class or is called from elsewhere in the system
    • Major/widespread (a complete refactoring of existing code or large changes to core features)
    • If they don’t understand the logic or can’t establish the scope, escalate to the Technical Manager
  • Execute the tests
  • Attach and link all work items and evidence together

How Software Bugs are Prioritised

A Product Manager recently wrote about how Software Bugs aka Problems are prioritised, so I thought I’d share that here.

Prioritisation Spotlight Report 

Product Managers conduct a weekly meeting with other stakeholders to discuss Problems and their effects on our customers. A key output of this meeting is to ensure that we are prioritising the defects that are causing our customers pain or have the ability to do so. 

These Problems can range from being the result of a major incident, recent software upgrades, or internal database monitoring. However, what they share is that they all have the ability to generate customer dissatisfaction. 

The Product Managers have been ensuring we are able to accurately and consistently apply logic to the Prioritisation process. This is a key requirement of the Problem review that allows us to create the prioritisation for Development to work on. 

How does this work? 

The weekly Problem Prioritisation meeting is open to anyone who has a business interest in resolving these software defects for our customers. When discussing these defects as a group, a number of areas are covered, some of the new key areas are below:

Number of cases linked to Problem – this is multiplied by 2 so a Problem with 4 cases will generate a score of 8 for example 

CSAT (Customer Satisfaction score)– This is the level of market impact the defect has, or is expected to have, and is scored in 4 areas; Critical, High, Medium, Low. 

Software upgrade blocker – Does this hold up the ability to patch customers to a newer version of the software

Safety rating – Does this have safety implications? 

The Prioritisation reason – has the problem been raised as an internal escalation,  safety, Information Governance, Security, Customer pain/Escalation, Service Level Agreement, or an Enhancement via the User Defined Roadmap. 

IG – Does this have Information Governance implications? 

Number of users impacted – taken into account based on how widespread the issue is and how many customers are affected. 

What will this allow us to do? 

This is going to help us all become aligned with the vision across the different areas of the business and will enable key stakeholders access to a single source of truth when scoping these items into the team’s backlog. A “Top 100 Problems” list will be updated after the weekly meetings.

Software Tech Jargon

When you work in the Software Industry, it’s obvious there’s going to be a lot of technical terms and abbreviations/initialisations. However, I think in many cases, you could easily write/say something in a way that more people could understand. I think sometimes people want to appear more technical, or maybe even “gatekeep” by trying to outnerd their peers. Over a long period of time, I have collected various written and spoken quotes. So here is a nice and varied collection. I don’t understand what many of these mean.

“I believe this to could be because of the contiguous memory necessary to rasterise an image of this scope.”

“I think if you are migrating the symbol server, then you need to consume the symbols”

.Net Nerd

“That’s why I use a View that bakes the invariants in so I don’t need to re-check them a number of times.

Adding this index could improve performance of the query by 47% and avoid using hash matches and parallelism operators.

DB Nerd

You have a couple of options here. 1. If the data is small then you might consider xcom as an intermediary to share data between two operators. Preferably this is up to hundreds of records and no further (without using custom xcom backends). 2. Sounds like you probably want something like a TrinoToCloudWatchMetricsOperator, it’s the sort of thing that would need to be implemented as it’s quite niche but could likely be re-used across teams. I tend to treat Python Operator as a fallback option now. If it really doesn’t make sense to write your own operator because it’s so specific and couldn’t be re-used.

 This code will need to be changed at some point in the future to detect the Evergreen Runtime as a prerequisite – removing the need for this Visual C++ runtime check.

For anyone interested in learning about Node.js and the MEAN stack to produce a quick REST API, this is a pretty good tutorial which dockerises the app too and deploys it to aws: https://blog.codeship.com/running-mean-web-application-doc…/ Incorporating a CI system like Travis, Jenkins or Circle, testing with Supertest or Postman and adding in aws clusters and load balancers means in a very short time you can create a CD system for the API too with a time to live of 3 to 4 minutes. Using all free tools like VS Code, Github and the AWS free tier means it can all be done without paying a single penny too. too much

Me 13:27:
can you tell me how a minimal deterministic acyclic finite state automaton would use less space than a trie?
Lucy 13:29:
7
Me 13:30:
This is because a DAFSA can compress identical branches from the trie which correspond to the same suffixes (or parts) of different words being stored.

what kind of nerd do you have to be to understand all this jargon?

The user account is in a different forest than the computer account. The processing of Group Policy from another forest is not allowed. Group Policy will be processed using Loopback Replace mode. The scope of the user policy settings will be determined by the location of the computer object in Active Directory. The settings will be acquired from the User Configuration of these policies. 

Windows Event Viewer.
now that is a good bit of jargon. What the hell is a forest?
This is from some jargon from FutureShop for some crazily expensive headphones.

The LCD-4, Audeze’s new reference headphone, is the result of dedicated research and development and advancements in materials science. It features Their amazingly thin nano-grade diaphragms and unique Double Fluxor magnet arrays for the most powerful magnetic flux density in existence, an incredible 1.5 Tesla! It also features a new comfortable suspension-type carbon fiber and leather headband and delivers breathtaking high resolution sound, imaging and transparency, with exciting dynamics.  

We are pleased to offer a free cable burn-in service for this cable when purchased through us. The Nordost VIDAR cable burn-in machine combines three different functions all in one operation:
It neutralises charges that build up around the cables and the insulation 
It provides a very wide band and deep conditioning into the conductor core, which produces changes in the way signals pass through the metal. 
It ultrasonically conditions the surface of the conductors.  

 So, we’ve now got a requirement to orchestrate some containers with Kubernetes and patch some MS SQL databases. Now we can bring Octopus in because we no longer have 180,000 machines to deal with, just the 300 or so database boxes with Kubernetes managing the rest of the servers running the containers. Throw in your CI/CD tool of choice to pipe directly in to Octopus and your container registry and you’ve got a pretty sweet setup going!

Me 16:30:
Enablers support the activities needed to extend the Architectural Runway
have you tried extending the Architectural Runway ?
Andrew  16:32:
i think there were protests about them doing that

Append blobs are made up of blocks like the block blobs, but are optimized for append operations. These are used for things like logging information to the same blob from multiple VMs.

https://docs.microsoft.com/en-us/azure/storage/common/storage-introduction

Suppress OrganisationLookup Index queries from the ambient transaction so that upstream callers can run their own transactions without escalating to a distributed transaction.

DB Nerd

The transaction log for database ‘tempdb’ is full due to ‘NOTHING’.

SQL Server error

Ongoing issues with L drive, so it has been recommended that we change the 10% buffer to 20% buffer. so the job stops earlier, but has less impact to live service and easier to support the job and provides more headroom if necessary. Will have an impact on how long the job to run.

“The StringFormat::GenericTypographic method creates a generic, typographic StringFormat object.”

Microsoft docs. I wanted to know what StringFormat.GenericTypographic actually does. Still non-the-wiser

 It comes bundled with a few really interesting tools developed by the CoreOS team, such as etcd, fleet, and flannel.

most organizations seem to be quite attached to an antediluvian model of testing all components in unison. We had two services on the backend — a gevent based API server and some asynchronous Python background workers which had a tangle of gnarly native dependencies including the C++ boost library which, if memory serves me right, was compiled from scratch every time a new Vagrant box got spun up

If you’re an Erlangista, you’re probably familiar with Fred Hébert’s manual on using the Erlang VM’s primitives to debug production systems while they are running. Languages like Go come with built in support for obtaining the heap, mutex, CPU and goroutine profiles of any running Go process Unit testing such service-critical I/O with mocks inherently embodies a sellout since it not just sacrifices accuracy at the altar of speed, but also ends up shaping our mental model in a way that’s almost entirely dissonant with the actual characteristics of the system we’re building.

Some good words thrown about in this blog: https://medium.com/@copyconstruct/testing-microservices-the-sane-way-9bb31d158c16
Me 11:35: 
have you heard of a kibibyte

Daniel 11:35: 
nope

Me 11:35:  
any serious programer know the difference between kilo and kibi... – Florian Peschka 

apparently its 1024 bytes whereas a kilobyte is 1000

In computing, a nibble (often nybble or nyble to match the vowels of byte) is a four-bit aggregation,[1] or half an octet. It is also known as half-byte[2] or tetrade.[3] 

Moreover, 1982 documentation for the Integrated Woz Machine refers consistently to an “8 bit nibble”

Wikipedia
Me 15:41: 
one day I'm gonna work out what Memoize() does and use it
Andrew 15:42: 
What is memoization and how can I use it in Python? 
if you don't know what it is then don't bother trying to use it
end of
Me 15:42: 
it sounds like a great word
"such as in simple mutually recursive descent parsing[1] in a general top-down parsing algorithm[2][3] that accommodates ambiguity and left recursion in polynomial time and space" 
Andrew 15:43: 
haha that's gotta be some sort of joke
Me 15:43: 
It says "simple" so it must be. You just aren't smart enough"Me 15:41: 
one day I'm gonna work out what Memoize() does and use it

I’d like to use NodeJS NPM package manager to setup a small gatling/postma/newman box for REST API testing. However NPM seems to have a problem with the corporate proxy. Does anyone have any tips for making the installation process easier?

Developer

“Before you can deploy Helm in an RBAC-enabled AKS cluster, you need a service account and role binding for the Tiller service.”

“making it volatile means it chucks out the thread-cached value for the variable each time it’s read. Therefore getting the actual value each time” 

Developer

The KeyStore Web Services 8.1 uses a contract first approach to web service development. This approach defines the message contract for each web method requests and responses up front using xsd schemas and WSDL. This allows KeyStore to establish a suite of fixed web service methods that can be managed and versioned between releases.  

Hierarchical xml messages are constructed using xsd type definitions in order to establish a request and response message for each web method. When referenced using tools such as visual studio .Net, this will create a client side proxy classes that developers can use to call the web methods.  These proxy classes represent a strongly-typed client side object class model for each method request and its response. This removes the need for web service clients to work with raw xml. It also has the added advantage of ensuring type-safety for many input parameters (e.g. Dates/Integers etc).

“STAThreadAttribute indicates that the COM threading model for the application is single-threaded apartment.”

Available now: Single-threaded apartment (fully-furnished)

Andrew with a joke

For Gafana those who want to use the dashboard I created the JSON attached just needs to copied into import for your local Gafana ,Can someone try this I am interested to see how ‘intelligent’ Gafana is and if it exports the Data Sources it should be looking for as well or if the user importing needs to get them up as well

We have a CIS hardened ubuntu image with ssm access as a base image. I have installed all my software dependency and then made it as an ami release image. When i use this new ami image as launch template and create ec2 instance i can’t able to connect ssm. I have enabled ssh connection and check the status of ssm it is enabled & running.

Developer question. Can you help him?

 I’m trying to create an Alias and a CMK key and trying to associate the alias with a secret. I was getting the following error during deployment using CDK “The operation failed because of an invalid KMS key: Alias arn:aws:kms:eu-west-2:xxxx:alias/rejs-alias-int-secret is not found”. I tried to directly associate the CMK key instead of the alias with the secret and it is working fine. I have also tried associating the alias of the same CMK key with other resources like s3 and it is working fine in that case too. I’m facing issue only with the secret and CMK alias combination. Am I missing out anything here? TIA

Developer question. Can you help him?

I’ve added some instrumentation to the FireInternal method on the EventBroker class to include the eventid in the exception message so we can try and identify where the null event is originating from. Going forward, maybe we should replace the .net 2 lock, queue approach with the ConcurrentQueue class in .net 4 to try and prevent any possible cross threaded operations / race conditions on the eventbroker. It looks like this issue isn’t just occurring on the quick access toolbar select patient operation but also on SessionControllers._messageReceivedWorker_DoWork method.

Developer

Kafka™ is used for building real-time data pipelines and streaming apps. It is horizontally scalable, fault-tolerant, wicked fast, and runs in production in thousands of companies. This can be done in a round-robin fashion simply to balance load or it can be done according to some semantic partition function

Likewise for streaming data pipelines the combination of subscription to real-time events make it possible to use Kafka for very low-latency pipelines; but the ability to store data reliably make it possible to use it for critical data where the delivery of data must be guaranteed or for integration with offline systems that load data only periodically or may go down for extended periods of time for maintenance. The stream processing facilities make it possible to transform data as it arrives.

https://thirdeyedata.io/apache-kafka/

–parallel

Similar to –stream, but completely disregards concurrency and topological sorting, running a given command or script immediately in all matching packages with prefixed streaming output. This is the preferred flag for long-running processes such as npm run watch run over many packages.

$ lerna run watch –parallel

Note: It is advised to constrain the scope of this command when using the –parallel flag, as spawning dozens of subprocesses may be harmful to your shell’s equanimity (or maximum file descriptor limit, for example).

Lerna

In parallel computing, an embarrassingly parallel workload or problem (also called embarrassingly parallelizable, perfectly parallel, delightfully parallel or pleasingly parallel) is one where little or no effort is needed to separate the problem into a number of parallel tasks.[1] This is often the case where there is little or no dependency or need for communication between those parallel tasks, or for results between them.[2]

Thus, these are different from distributed computing problems that need communication between tasks, especially communication of intermediate results. They are easy to perform on server farms which lack the special infrastructure used in a true supercomputer cluster. They are thus well suited to large, Internet-based volunteer computing platforms such as BOINC, and do not suffer from parallel slowdown. The opposite of embarrassingly parallel problems are inherently serial problems, which cannot be parallelized at all.

A common example of an embarrassingly parallel problem is 3D video rendering handled by a graphics processing unit, where each frame (forward method) or pixel (ray tracing method) can be handled with no interdependency.[3] Some forms of password cracking are another embarrassingly parallel task that is easily distributed on central processing units, CPU cores, or clusters.

https://en.wikipedia.org/wiki/Embarrassingly_parallel

Not gone to production

We recently had a Development department meeting. One person raised a point about the recent higher-than-normal staff turnover, and also commented on the number of cancelled projects:

“If we look at Group Technology that I’m part of as an example, a lot of our staff turnover can be attributed to problems specific to the department and specific to development work: onerous manual, slow processes, moving from one cancelled product / project to another etc.. Some developers have been working here years and never worked on anything that has actually got to the customers for example. How do we propose to tackle those specific culture problems?”

I thought it was funny, because I knew one particular developer who had worked on a small cancelled project, then worked on – what was supposed to be – a replacement for our flagship software. Then when that project got restarted, he moved back to our flagship product on what was supposed to be the most important project; which also got canned.

Andy Marsden 16:18
i just love free shares
we got 50 last year, basically like £600 for nothing

Me 16:18
Our wage is basically for nothing
remember that time your code went to production?

Andy Marsden 16:19
no
is it just me that doesn't care about who uses my code?
i just like writing code

Me 16:19
Andy is writing code for the terrorists

Andy Marsden 16:20
haha
seen something before that's like a moral question:
"As a developer, if an oppressive government took over and forced you to write code to destroy Paris for example, would you write it flexibly so that it could be used to destroy any city?"
i couldn't bring myself to do it (write rigid code that only destroys Paris)

At the start of last year, the CEO had made a big fuss about a Scotland project that needed doing by Jan 2023, so many of our best staff members were assigned to it and were told not to help out with any other requests. As it got closer to the end of the year, there were discussions to cancel it, and eventually it was canned. You are talking approximately 30 staff members and paying them for a year of work. Completely binned off. Well, they said it had been shelved until our new software is released, but given that it has been in development since around 2018, is that ever going to be finished?

The Phantom Bogey Wiper & Sub-human Antics

I was looking through my work emails, looking for some classic stories, and found the story of The Phantom Bogey Wiper.

From: Lee Davidson
Sent: 10 May 2010 14:42
To: Development
Subject: If you're the phantom bogie wiper please take note!!!
Importance: High
 
Apologies to everyone for my tone in this email but some filthy scummy piece of excrement who’s most likely one of our colleagues has been wiping bogies on the toilet walls.  This isn’t something that happens by accident, the offending vile contemptible excuse for a human being must be making a conscious decision to offend others so I’ll not hold back in my show of disgust at this utterly pathetic person. 
 
Whoever you are and you know who you are could you put a stop to it please?
 
Regards,
 
Dave. 
From: Lee Davidson
Sent: 27 May 2012 10:26
To: Development
Subject: Toilet etiquette

Dear Colleague,

It is with great deal of regret I send this message but the sub-human antics of one or more of my male colleagues in confines of a toilet cubical have left me appalled and disgusted.

I can’t believe I’m typing this but could the person who is treating the toilet as their own personal cesspit please use the following etiquette.

·        Do not wipe your bogeys on the cubicle wall.
·        Do not spit chewed toilet paper on the toilet door.
·        And worse of all do not smear your excrement on the cubicle wall.

If you’re the person responsible then please remember you share this toilet with civilised human beings.

Best Regards,
David.
Lee Davidson
From: Richard Hirst
Sent: 29 March 2012 10:36
To: Keith Hanrahan; Me
Subject: FW: Toilet etiquette

Stay vigilant people… The toilet related incidents have been much better upstairs since Testing moved downstairs, any suspects?

From: Me
Sent: 29 March 2012 10:40
To: Keith Hanrahan; Richard Hirst
Subject: RE: Toilet etiquette

Ben always said he had poor hand-eye co-ordination. Maybe bum-hand co-ordination too

I can’t believe I wrote that in an email. I don’t think we had chat apps back then though. I shared it with a colleague:

Sadiq Khan: 
In this day and age, that's a ballsy email

Me  09:15
11 years ago :scream:

Sadiq Khan  09:16
Makes sense for that time

Me  09:17
back in the dark ages where we wiped poo on the walls
From: Scott Simpson
Sent: 27 August 2015 13:19
To: Development
Subject: Toilet etiquette


Apologies to all the female members but having to send the below out again!! Credits to Lee Davidson for the initial email 3 years ago.

I have added a slight addition after a harrowing experience yesterday!
·        Do not leave your excrement all over the toilet seat or around the bowl – It is NOT the cleaners job to clean after you!

Scott Simpson
Product Owner
From: Norman Taylor
Sent: 24 November 2015 10:16
To: Development
Subject: RE: Toilet etiquette

Apologies once again to all the female recipients of this email!

I’d just like to reiterate Scott’s point below as I’ve spotted a second sighting of this in the downstairs loos! :/ Not exactly what I wanted to see after my morning porridge!

Norman Taylor
From: Mike Dean
Sent: 24 November 2015 10:18
To: Norman Taylor
Subject: RE: Toilet etiquette

That’s probably nothing compared to the state of the left-hand cubicle toilet seat yesterday afternoon, mate!

I had to force the contents of my lunch back into my stomach!
June 2016

Me 16:40: 
The Phantom Bogey-Wiper has been hard at work. There's a right collection in the toilet cubicle wall 
surely, there's not many people who it could be, unless there's more than one Phantom

Mike Dean 16:42: 
the phaaaantom of the loo-pera is here
disgusting

Me 16:45: 
in fact, the original incident that you sent me was 10 May 2010  
so 6 years on, the Phantom is still at work

Mike Dean 16:47: 
wow
who could it be?
I've been here about 6 years, but I have an alibi

Me 16:48: 
if it's the same person, they must have worked in those 3 offices, must be male, and in Development
but there could be multiple phantoms

We never did solve the mystery. I did suspect it was multiple people but quite hard to accept people would behave in that manner.

Can AI Make Computer Games?

Jabrils created a game using various AI tools. Although he says it was 100% created by an AI, it required him to type in different prompts until he got something that worked, and needed to use different AI’s in order to get the code, images, and sound. So it still needs human input as a “director”.

I fooled an expert gamedev with a game made ENTIRELY by AI

He got David Jaffe, who worked on the likes of Twisted Metal and God of War, to harshly critique it, oblivious to the fact it wasn’t Jabril’s own game.

He initially struggles to work out what the aim of the game is, which highlights the fact that – even though it is a working game – it doesn’t have the extra polish such as a tutorial, button prompts, or subtle visual hints. Although, maybe it could have added them had Jabrils specifically asked for those features.

“I have no clue what I’m doing in this game. If I wasn’t recording this video with you – I would be done”

David Jaffe

“I also don’t know what my goal is. I assume it’s to land but you don’t really have the space marked very well.”

David Jaffe

Since David believes that Jabrils made it, he remarks on how you think your own game is obvious how to play it, but that’s why getting someone independent to play test your game is so valuable. It’s similar to any type of software development really; you can be so focussed on coding, that you don’t see the bigger picture and the various ways someone can interact with it

After he is told it was made by an AI, he becomes more positive. 

“I think it is brilliant. Looking at it from that perspective, that is how games are going to get made more and more, right. The fact that you could do that, and say ‘make me a game that does X, Y and Z’ is amazing…I love it. I love that you made this. It’s terrible, but it’s kind of like criticising a one-year-old who took his first steps.” 

David Jaffe

It’s going to be interesting how AI develops, and I do wonder how long it will be before human interaction will be reduced, and also if AI can “understand” game design to actually incorporate more user-friendly features.