The Expo

Despite other departments in our company arranging optional meetings to explain what they do, in a recent survey, colleagues had apparently said they don’t have visibility of the wider business. The directors decided to create what they called “The Expo”. This was a mandatory all-day event located about an hour away from our main office.

The Registration

We got told to sign up via an Events Company’s website and the instructions we were given didn’t match my experience at all. We were told by visiting the website via the link in the email, it would auto-populate with our names. Yet the first question on the page was to ask for my name and email, and only then did it display back to me. We were also told to ignore the displayed cost because it would be the company that would be charged and not us personally – yet it displayed as “free”. There was no information in the email about how we would travel, but then one of the questions on the survey was asking us how we would arrive at the venue. It was only when I tried the “coach” option did it then state it would pick us up from the office on the day, but didn’t state the time. I then expected that information in the confirmation email, but it was only a week before the event I was told the pickup was 7:50am which meant I would probably have to wake up at 6:30 to make sure I didn’t miss it.

Despite the usual reminders that travelling by personal car on company time would invalidate your insurance (since you need to be covered by business insurance), I suspect most people went by car because there were only around 20 of us on the coach.

The Arrival

As we headed towards the venue, some of the senior management handed out notebooks but no pen. The notepad did have the schedule printed on the front which was useful. Since they told us to dress smart, most of us didn’t bring bags, so we had to inconveniently carry a notebook around all day.

The Event

Most of the day was sat in a large meeting hall watching presentations from the heads of various departments and directors. They used the opportunity to present the Employee of the Year awards. The thing is, we periodically watch presentations like this remotely, so it seemed a waste to make people from across the country to travel to an event like this. Some people travelled hours, and stayed in a hotel on company expense, and I just didn’t see how it could possibly be worth it.

“can’t believe we have so many people turning up”

Event organiser

You invited the entire company and said it was mandatory, what did you expect?

The Call

As it approached lunchtime, during one of the presentations, I noticed a developer checking his phone and looking concerned and then he walked out. During lunch, I was talking to another developer in the team. He started looking at his phone, then handed me his plate and told me to hold it while he goes to take a call. Several minutes passed and he hadn’t come back, so I was there awkwardly holding 2 plates. There were no tables and the room was packed with people so there was nowhere to put it. Eventually, I just had to bin it. When I saw them later in the day, they said there was a Major Incident so were called to a room to investigate remotely. So a few developers and the directors were all gathered around 1 laptop, knowing there wasn’t much we could do.

That’s another disadvantage of one of these all-day events. No one is working, and urgent issues like this can’t be addressed and just adds extra stress.

The Stalls

Another part of the day was walking around some stalls. It was like a careers fair but you already work for the company that they are promoting. Also, since there were that many of us, we were split into 2 groups, and since I was in the second batch, all the free stuff was gone. I could have grabbed a free pen for the notepad.

I didn’t really get the motivation for actually approaching anyone on the stall to listen to them reel off a speech that they would have been saying on repeat hundreds of times throughout the few allocated hours. Wouldn’t it have been better if these were also presentations in the main hall, then they only have to do the presentation once, and everyone gets to hear it?

I suppose the more socially outgoing types might be in their element, but I was just walking in circles, pretending to look busy. Eventually, I got talking to some old team mates and we were commenting on how bizarre the entire thing was.

Software Development Stall

For Development, the manager who volunteered to run our stall said he planned on using a darts game but using “magnetic” darts so it wouldn’t violate Health and Safety. The “Fun Police” busted him though – Health and Safety deemed it unsafe since throwing something would involve swinging your arm back and that is dangerous.

I’m not sure if things have changed from a few years ago, but we have had office parties with a Bucking Bronco, Bouncy Castles and similar games. I think every year 1 person has had some kind of injury using those, but it never stops us organising things the following year.

The replacement game was a “guessing game”. It was a vague question like:

“Guess how many minutes were saved in a 2 month period during our “COVID” release?”

The manager was insistent that everyone should guess, and was demanding I submit a number. I didn’t understand how people were coming up with the numbers. I kept on asking questions but I got the impression even the figure they had was some exaggerated figure. I asked

  1. what was the feature?
  2. how was it measured?
  3. Why are we measuring in minutes when the figure appeared to be large like 20 mill minutes.

After the event they announced that guesses ranged from 100 minutes to 2 billion minutes! The correct answer was 31.9 million minutes.

Evening Meal

Another part that wasn’t well thought out and a waste of money, is that they provided food at 4:30 but there was nothing scheduled afterwards. The coach was at 5:30 so I had to stay, but most people had no incentive to stay. So when food was served, there were probably only 20% of the people there, but they would have paid for food for everyone.

Feedback

I did wonder if people would give negative feedback for the event. It seemed rather pointless to me; a complete waste of money, and not really that feasible to try and bring the entire company in one building like that. I suppose the main COVID days are behind us, but it’s probably a bit of a health risk. I knew a few people that were ill after the event.

Loads of people actually stated positive feedback, but it was on Yammer, and people seem to use it to post overly positive statements. The only negatives were:

  1. All I used the notebook for was the agenda on the back, which could have been printed on the back of the pass.
  2. no pen
  3. carrying around the notebook all day
  4. restricted interactions, 
  5. lack of space while eating

Yet the positivity was flowing:

It was great to put faces to names – especially when it’s a team that you work closely with. It was also really nice to see people that I’ve not seen in over 3 years. Overall, a great opportunity.

I was reminded of the value of face to face interactions with colleagues across the business. Will be looking forward to future opportunities to meet in person.

I learnt more in one day about our business/products and services than I have in the year that I’ve been at the company. What an amazing ‘sheep dip’ opportunity to immerse oneself in the ‘what we do’ and ‘why we do it’ for our end Customers – fantastic !

Seeing people, I have not seen in over 3 years since working from home was great, as was meeting people I have never met in person before. Getting to meet them in the flesh and build further bonds was a great experience.

Having the opportunity to network on such a mass scale and learn about other departments that we may not have regular touch points with was invaluable.

It helped me appreciate how each and every department is working towards the same goal, and that we have a lot of exciting tech-for-good products!

Being just 5 months into starting with The Company I found The Expo a real success. Not only did it serve to educate as to the breadth of offering across the wider business but also reinforced the value and absolute quality of our portfolio. The insights to the wider business has reinforced key messages around data quality relevant to my customers within their world and how our unique offering can support and accelerate the valuable research they provide. This event really encouraged me to reach out across the wider business and was indeed an excellent platform for building an internal network. The Expo gave a real feeling that top down and bottom up you would get support.

Sometimes, being bogged down in the day job, it’s common to be disheartened by the day-to-day challenges we face and getting mired in the weeds: a classic case of not being able to see the forest for the trees. The Expo was a great opportunity to get the big-picture view and see how, by succeeding in the daily challenges, we are improving healthcare for huge numbers of people.

I’d been fortunate to have attended two other great opportunities to meet up face to face and network already this year, and still found this another great one to see even more people and catch up on common themes across the whole business. I always learn something both personally and about our products, on this occasion improving my knowledge of Project X particularly. The overwhelming reminder at the beginning of why we do it, the impact it has and why we should feel proud of where we work, is a welcome prompt to look up from the day to day challenges more often.

I met many more people face-to-face for the first time than I’m able to remember now and got a real insight from generally chatting to others around what different teams actually do, how and why. With the number of acquisitions we’ve done over the years it also helped me learn what some of the products we’ve acquired are as well as how they add value to our customers. It was great to see some of our Chennai colleagues at the event and hear how the services I work on day-to-day are used in the real world.

Hang on, they flew people from India over to England just for the event!? What a waste.

Mum’s frozen laptop screen

My Mum doesn’t call as much as she used to. So when I had a missed call from my Mum, I thought it could be an emergency. When I rang her back, she said her computer was stuck on the lock screen.

It’s hard work though because she is terrible at explaining problems or what she attempts to do, then she often finds it hard to understand my simple instructions. 

She said holding the power button ain’t turning it off, which is weird. I thought the classic “turn it off and on again” would sort it out, so I said to “let the battery drain”. So she said “it can’t be the battery because she can see what is on screen”.

So I explained that the plan was that “letting the battery drain will turn it off. Then you can turn it back on again when plugged in“.

I couldn’t think of any other options.

She said she was “pressing Alt+F2 but it wasn’t doing anything”. I said “what does that shortcut do?“, and she said “I dunno“. I asked who told her to press it, and she said “myself“.\(〇_o)/

I wondered if she meant Alt+F4.

My Mum popped around to my house with her laptop. Clicking wouldn’t transition to the login screen, and you could move the mouse fine – so it wasn’t frozen. I pressed ctrl+alt+del and it unlocked. I locked it again and it went back to the login screen straight away and would respond to mouse clicks, so ¯\_( ͡° ͜ʖ ͡°)_/¯

I bet letting the battery drain would have solved it as well, but she kept on charging it. I do wonder if her fictional shortcut of Alt+F2 was meant to be ctrl+alt+del. This is what I mean when I say she is terrible at explaining problems or what she attempts to do. Then it ends up being frustrating for the both of us.

The takeover – the break’s over

Several months ago, I was on a social call with a few of my colleagues. We were talking about how our flagship product is really outdated but we had been working on a replacement for around 4 years without success. Therefore, the future looks bleak.

I made the point that if our rivals release their new software before we do, then we could be in serious trouble.

A colleague, Robin, agreed with me and stated:

“the only way we can stay in business is to rely on our competitors being worse than us”

Then added:

“we are Yahoo, waiting for Google to turn up”

Robin

I think the comparison is that Yahoo were quite a well-known search engine, but they didn’t build on what they had. So then Google came into the market with their superior search engine and not only took their market share, but then released products like Gmail which made Yahoo even more redundant. Yahoo ended up abandoning their own Search feature and used Google’s instead. Today, it seems they use Bing.

I’m not sure we would have the same opportunity just to back off and utilise our competitor’s features.

Robin then elaborated:

We have lost a lot of expertise over the years, so there’s large parts of our software we don’t truly understand. It’s essentially falling apart at this stage. We need to retire it. The sheer amount of technical debt is so bad that fixing technical debt is stymied by how much technical debt there is.

Robin

Shortly after, an American company placed a bid at a hefty 50% increase on share price. It was quickly accepted by the board who will be cashing in for millions.

“This is exciting for us. This is in recognition of the brilliant work we have achieved together in the past few years. It’s a recognition of success. This is about future growth, with potentially a new shareholder who can drive innovation, great service for our customers, and take us to the next stage. We believe this combination will have the resources and expertise to enable us to better support our users through technology innovations. Our long standing track record of delivering effective technology solutions and strong financial and operating performance combined with our partner Group’s resources and expertise will enable us to accelerate our development. We therefore consider that the combined group will be well positioned to serve its customers and partners in the UK, whilst ensuring we remain a strong organisation through technology innovation.”

Director’s corporate-jargon-riddled waffle.

A further update from the director’s was aimed to allay our fears of redundancy or general change to how we work. It was also full of the usual corporate jargon:

  • great for everyone, the employees, customers, the shareholders
  • Accelerating investment
  • redundancies: “Absolutely not the case. This is about growth.
  • genuinely really excited for this. Excited about the opportunities for individuals
  • Excited about the positive synergies between the two businesses
  • accelerate in research
  • “don’t worry because it’s going to be absolutely EPIC!”
  • Continue personal journey
  • accelerate our strategy, accelerate our roadmap, accelerate our customer base
  • gives our colleagues something to really relish
  • gunning for growth and innovation for some time. Completely in alignment with the direction we set.
  • no plan to change what we are doing in UK or India
  • unique culture that we will maintain and build upon
  • Benefits and conditions will remain (pensions safeguarded)

“clearly, what we are focusing on now, is making sure we complete the year”

At the end of the update, our CEO came out with this ominous statement

We are actually highly profitable (somehow), but that made it sound like we were struggling. Is there any doubt we will not see out the year?

I didn’t find many comments from our users posted on the internet, but a small group seemed to be concerned that our data would be owned by an American company. I think for the most part, and especially with our main software, we don’t actually own the data. Our users own the data and we are mainly the “data processor”. So if the American company wanted to buy us to get their hands on our data, then I reckon they would be doing illegal things, so that’s not a worry. I think it is merely a case of the American company wanting a profitable company and to get into the sector. They might be shocked when they find out our current software is really retro without much scope for growth, and the replacement is in “development hell”, and not worth the hype we gave it.

One user was saying that because the idea of Americans owning our data was “unethical”, they wanted to build their own system which would be ethical and not-for-profit. I did wonder if an open-source project could work – our system has essentially been built by hundreds of developers over 15 years. With hindsight, you could build something similar much quicker, especially if you focus on the core features. However, the architecture is a massive problem and costs loads to run. It would take at least 5 years before you had enough features to get users to switch to your system. Then it would still need to be funded to keep running. I think even the big open source projects have salaried software engineers because you cannot just rely on ad-hoc contributions.

Like I said, we have struggled to build our own replacement which is in “development hell”. That’s with full-time staff and loads of managers to coordinate it. Then we were talking about trialling a version which is basically just an RSS feed after hyping it up 4 years ago.

I was discussing this conversation with one of our Software Architects, and he said the open source idea could only feasibly work if an existing company like ours made our product’s code open source; so it was already complete and the architecture was in place. Then the contributions would be to add features, and make it more performant.

“Well, they certainly can’t make them any worse! That wheel of death that says ‘loading’ just goes round and round forever!

A user on the takeover, and our software’s recent performance issues

Back to the takeover, it will be interesting when/if the takeover fully completes to see what the American company plans to do with us. I’m intrigued if our Director’s statements have any truth.

Note: I stole the blog’s title from the Fall Out Boy song “The Take Over, The Breaks Over

Merge Ready Checklist

We have a small team of people that are known as Tech Quality Assurance. They are comprised of a group of experienced ex-Test Managers, although I often think they can’t have learned much in their experience due to some of the ideas they come up with or how unaligned they are with their communication.

A few years back, there was a project I was working on which was near completion and I got asked to fill in a “Merge Ready Checklist“. I was like “errr, what’s this?

If the QA team are going to introduce a new process, shouldn’t this be communicated when it was created?

I looked through it, and most of the evidence they wanted were aspects that you needed to be aware of up front, so you could track them, and gather evidence as the project progresses. When I saw it, I thought it wouldn’t be possible to be allowed to merge. Even some of the simple stuff like:

“Branches are expected to be kept in sync with root development branch on weekly basis. Provide evidence of the frequency you were merging from Main and the date of the most recent merge.”

process on branch-merging

I merged when I wanted, so what are they gonna do? reject it because I didn’t merge enough? The branch history is the evidence, why is it worded as “provide evidence“. Why not just ask for the link to the code branch?

They then insist on having Test Coverage of 80% which I always think is an unreasonable ask. When I joined Development, we had Visual Studio Enterprise licences which have a Test Coverage tool available. However we have since downgraded to Professional. So I ask what Test Coverage tools we can use because it needs to be something that IT have approved to download, and that we have a licence for. We were told we could use AxoCover, but I found it wasn’t compatible with Visual Studio 2019 or above, which was an inconvenience.

Ok, so let’s run it and see what happens. Firstly, you are greeted with a phallic symbol.

Test execution started.
         ___
        /    \
        |     |
        \    /
        /    \
       /      \
___/        \___
/                      \
|     _______     |
\__ _/        \___ /
AxoCover Test Runner Console

It’s supposed to look like their logo, which looks more like a fidget-spinner.

Then I can’t even make sense of the statistics? Is that saying that I have removed methods, and deleted tests? I have added a few classes with several methods each (these obviously contain lines of code and conditional statements so I expect all values to be higher. I had also added some Unit Tests but maybe would have expected 30% on new code.

I asked Tech QA to explain the figures to me, and they were like “we dunno, we aren’t developers. We just look for the 80% number“. Then I point out that they were supposed to be judging the 80% coverage on NEW CODE only. This is for the entire solution file. So this doesn’t give them the evidence they want, and it’s not accurate either and cannot be trusted.

After running it several times and adding/removing code to see how the numbers changed, I then was suddenly low on disc space. Turns out Axo Cover reports are 252MB each! Yikes.

They also wanted you to run the static analysis tool Sonar, but with the licence we paid for, we could only run it on our Main branch. So we need to merge our project in to run Sonar, but they want the Sonar results to authorise if we can merge it in. The classic chicken and egg scenario. Later on, we did get better licences to run Sonar on our project branches.

When we submitted our Merge Ready Checklist to the best of our abilities, we got the following feedback:

“TechQA have reviewed the MRC and assessed it with a critical level of risk. There are a number of items that we would deem vital to address however even resolving these items – it would leave the project at critical.”

We failed the Merge Ready Checklist

Surely that is the biggest rejection. Even resolving the issues won’t change their judgement.

We arranged a meeting with them to discuss the way forward. At one point they said:

“These are all things that are too late to address but are common themes we raise time and time again and significantly reduce confidence in the quality of a release.”

TechQA

Surely that’s a problem with their communication. So the process is just sprung on teams when they want to merge in, then the problems aren’t even fed back into the system/communicated to other teams so they can’t learn from it, and then they proceed to fail.

I then asked the release manager what we can do, and he said that the TechQA team are there just to advise him what should and shouldn’t go in the release. Due to contractual deadlines, he just lets projects go in anyway as long as the team explains what bugs they are aware of. All the other aspects like Sonar and Test Coverage don’t bother him at all because it is more “Technical Debt” and not really that reflective of the user’s experience.

So what we are concluding is that the TechQA team are completely pointless and we may as well save money by binning them off, because they are just creating processes that no one cares about, and aren’t enforcing anyway.

It looked like they were also doing these for another company we acquired. I found this on another team’s review:

It should come as no surprise that the assessment of the MRC comes out as critical.

  1. The “Definition of Done” specified in the document is not the one followed by the team as you point out that no testing was part of the user story and a Product Owner was not attached to the project towards the end and therefore could not do the PO review.
  2. Also, no unit tests exist for the code and there is no ability to confirm the changes have not degraded any quality metrics.
  3. Elements of the regression plan have not been run and once again the team have not been given sufficient time to consider quality.
  4. On top of all that the code is written in Visual Foxpro which was EOL’d by Microsoft in Jan 2010, that’s 11.5 years out of support!

An example for the other week saw the lead developer give a lot of backchat to TechQA.

"Link is to a PR not to a build - where do I go to see the state of the build"
 > All PR's into master need a passing build. If you would like a hand using Azure DevOps please let me know and I'll see if can find time to show you how it works. 
 
"there must be some sort of output that can be used as evidence surely"
 > Once you have looked at the build, you can also view the 35k passing unit tests. 
 
"Need some evidence of your test coverage levels in the form of a report or chart from the text coverage tooling you are using"
 > You can see the tests written in the PR to master. Each PR for the new work was accompanied by tests.
 > Coverage Report attached for the impacted code, although code coverage is a useless metric.
 
 "Sonar - Please provide evidence when you have it available"
 > If the work is ever completed, then we will have automatic sonar reports for projects.

No idea why he doesn’t have Sonar running, but he obviously doesn’t care enough, and definitely doesn’t care about Test Coverage. I do find it strange that we have been using Azure DevOps for years now, and TechQA still don’t know how our development process works – and you would think it would be a prerequisite for them to do their work.

They should be liaising with the Development team in order to create processes that are feasible, useful, and accurate.

Employee of the Month

Managers seem to love the concept of Employee of the Month/Quarter/Year. On paper, it sounds good because it recognises the efforts of an employee, but I often find that managers don’t really understand the effort that goes into something, and they also don’t have knowledge about the entire development process.

So what will happen – is that there will be a shortlist of nominations, then managers will get together and debate on who should win. Some of the nominations will have been highlighted by any staff members, but some will be the manager’s own opinion. Regardless, the emphasis is really delivered by the manager who is representing the nomination. So a more persuasive manager will hype up their candidate more than someone with less persuasive skills.

As an aside: as a non-manager, I can only judge by their description of why they gave the award, and I might have my own view on who deserved it based on my limited knowledge of the projects that I have heard about. So their judgement may be misguided, but so is mine because I also don’t have full knowledge across the department.

Another thing to bear in mind is that managers can be biassed towards the financial gains of the project. Team members don’t decide what projects they work on, so as long as they don’t completely mess up the project, sometimes it seems pre-determined who wins.

I remember talking to a colleague whose team had won the “Team of the Quarter” award. He said it was an absolute joke because the project had overrun by 3 months or so due to mistakes within the team. He said there were all kinds of arguments and team morale was low. They knew they had cost the company money, but the late fines were insignificant compared to the money they gained when the project was delivered. Then, because it was worth loads of money, the managers gave them the award and cited “tough challenges” that were overcome.

Recent Awards

Strangely, in our last awards ceremony, an award was given to a team whose analysis and discussions led to the cancellation of one of the highest-value projects we had gone for in recent years. The CEOs seemed to make a big joke out of it, but were probably crying on the inside as we had not only paid 20+ people a year or so salary, but lost out on potentially millions of revenue.

There were also some great examples of somewhat-predetermined winners. The team leading the “Employer Of Choice” scheme won an award based on “improving work conditions“. Who else was gonna win that? The team was literally formed with that objective. Should you get it for merely delivering it, or should it only be given if you exceed it?

There was a recent problem where some users were experiencing a 20 second wait time to load up a customer’s record. A developer was assigned to the bug and put out a fix. He won a “customer satisfaction” award. Whichever developer was assigned to that was gonna win – it wasn’t anything to do with his contribution at all. The thing is, if you look at his change, and look at the code review, it was a bigger team effort:

  1. 2 expert developers had left all kinds of comments on his review and made him come up with an alternate fix. So the solution he came up with by himself wasn’t adequate.
  2. One of the comments stated how his fix simply moved the problem from “first load of a customer record” to “when the user logs in”. This was stupid for 2 reasons. That very same developer had fixed a problem with excessive login times 2 months prior so he should know it wasn’t a good idea to extend the log-in time. Secondly, some users like System Admins may never look at customer records, so extending their login time in order to save time when loading records is terrible.
  3. Then the developer had also stated that part of the actual fix was created by a senior developer.

So really, barely any of the solution was actually produced by the developer that won the award. It was a team effort and they didn’t get recognised.

What annoys me, is it was for the “Year” period, but some nominees had already won when they did “Employee of the Quarter”, so they ended up winning twice. I suppose it is stupid if you don’t win the Quarter award but then win for the Year, but maybe they could have come up with different categories, so you can’t win both.

In recent times, we have been producing some video interviews with the winners along with the people that nominated them for the award. The video is full of soundbites and emotional music. It’s so unbelievably pretentious. One video was hyping up a newly-hired manager’s Employee of the Quarter award:

That’s what I have brought to the business. Don’t make a decision unless you understand all aspects of it.

Winning manager

Kinda sounds like he is having a dig at the current managers and their rash decisions!

“interpersonal connectedness. He is driving that agenda which is great”

The nominator

“I’ve got a long way to go but yeah, I’ll get there, and I’ll bring the business with me”

Winning manager

My Win?

Several years ago when I was a Tester, there was one particular awards ceremony that I’ll never forget. When the awards were read out, the managers created tension by reading out what the winner did before announcing the person’s name. So they were like “this person worked on Project X, and this person took on challenge Y, showed positive attitude” etc. I couldn’t believe it because it described my work in my team! I was overjoyed how my team had recognised my work over the months and had put me forward. In that team, I had successfully delivered the previous project when I was the only Tester and we had no assigned Team Lead. Then I had moved onto a new project with the same team, plus one new problematic team member. I felt like I deserved something to make up for the fact we had a really problematic team member who caused me a lot of stress. Then when they finally read out the name – they gave it to the problematic team member! I nearly swore and stormed out of the room.

Virtual Praise Cards

We did come up with some virtual praise cards that you can send to your colleagues. There’s certain people that frequently give them out, so it leads to the same names that gain them. Often you see them just handed out for doing basic things. Like I was saying before; you are just literally doing your job and you get praise. There was one that I was joking about with my colleagues because it just seemed like – either the employee was trying to get in his manager’s good books, or was just having a laugh with the system.

 “Thanks for sharing the updates time and again. Literally under good leadership.” – Praise card for a manager

I also got quite a few of these cards during the first year of them being implemented, but then it seemed like a fad and I have rarely received them since.

LinkedIn Learning

I was recently watching a course on LinkedIn Learning about “Recognizing and rewarding great performance”. There were some good lessons in there: 

  1. Employees will respond more to non-money recognition once they are already paid fairly 
  2. Monetary reward should be proportional to the work value. If they save the company £10000, don’t reward them a measly £20. 
  3. High performers are best rewarded with growth opportunities 
  4. Peer to peer recognition is powerful  
  5. Be careful with incentives that creates more losers than winners. – might not help people you are competing against 
  6. Be mindful that incentives can be manipulated 
  7. Flexibility is a reward every employee can appreciate. Extra day off.

The new Ux designer

In a recent blog, I remarked how we always seem a bit short-staffed when it comes to our UX team, who come up with the User Interface designs, provide icons, and write the user-facing text that appears on buttons and dialog boxes.

On our stand-up update, a developer, Andy, was explaining his interaction with a new member of the UX team. Just like a lot of recent hires, it seems we have just hired anyone that applied.

Andy wanted an icon, and they sent him a screenshot of the icon rather than the actual file.

So he asked for the actual icon file, and they sent him an icon file but it looked a bit different from the screenshot.

So he questioned if it was right, and they sent him the icon he expected, but he noticed it had a transparent background and he wanted white.

She is like “it is white, you can see it on my screenshot”, and he is like “no, it is showing as white because the graphics program’s background is white.”

It’s very alarming that we are hiring a UX designer that doesn’t seem to understand the concept of transparency and doesn’t understand to send the files she creates rather than screenshotting them. ¯\_( ͡° ͜ʖ ͡°)_/¯

Timesheets

Government Tax Credits

Many years ago, managers asked us to start filling in a Timesheet. They were adamant it wasn’t used to actually track what we were doing, and accepted we may inflate the actual hours to fill the working day e.g. we might have been chilling for 2 hours but then claim we did the full 7.5 hours on a project.

They implied it was to help them claim for some “UK Government Tax Credits” which was some kind of tax rebate for companies involved in “innovation“.

The thing is, I think 95% of our work is contractual so we have been given some requirements by our main customer, and we implement it. So it’s not driven by our own creativity in the hope that people want it. It is driven by the customer who already announced they will pay. Therefore, I think our claims were probably a tax scam. That’s my opinion though, and based on no legal understanding.

One day, I got an email from auditors KPMG. I wasn’t going to lie, so I told them it was simply making a few changes to allow the feature to work for a different country. Also, it got cancelled.

KPMG Audit

I am from the audit team at KPMG and have been given your contact details by the group finance team and have a couple of questions regarding work on a specific project in the year.

Group finance have recorded that you have spent 1/2 of your time in 2018 on the Scotland project. Could you please confirm this through answering the following questions:

1)  Please can you describe the nature of the project we have selected for testing? (i.e. is this project to do with maintaining existing software, or enhancing/building new software)

2)  What’s the status of the overall project? (i.e. how far from completion? / have any issues been encountered which you are struggling to resolve?)

3)  Does the attached percentage of your time appear an appropriate representation of the proportion of time you spent working on this project at this time?

4)  How do you record your time, and do you know how the percentages we’ve outlined to you are derived?

If you could send your response directly to me by the end of the day that would be great.

KPMG

I wonder what they did with my response telling them the project got cancelled. I also think the time spent wasn’t correct. In different years, I have known other people get contacted with wildly inaccurate times as well, so I have no idea how the times we enter in the timesheet somehow become completely different figures when reported by the Finance department.

New Timesheet Meeting

It was my understanding that the entire business (or at least anyone involved in software) filled in their timesheets. But then more recently, we were all asked to join a meeting about timesheets, and I was surprised at how many people were protesting about this “new policy“. Even people working on the same software as me said they hadn’t had to fill it in. So I had been filling it in for years after being told it was mandatory, but then it seems it wasn’t – depending on which team you were in.

There were quite a few companies we had acquired over the years which also hadn’t been asked to follow this process.

This is what we were told:

Purpose & importance of timesheets

  • Resource plans only forecast the allocation of people and time. Timesheets provide actual and factual data which provide the following main areas of value to the company.
  • The ability to improve our scheduling — we can use this data to better plan in the work we have for the department at a team and individual level.
  • The ability to improve our forecasting — by reviewing Forecast vs. Actual time we become more knowledgeable and therefore accurate in our forecasting process, this improves our understanding of what and for how long our teams need on various items of work.
  • The ability to understand what things cost — by understanding how much time is spent we can get a generalised view of how much the work we do costs. This is important for both budgeting and recognition of capitalised revenue – It also helps us know what to charge our customers where appropriate.
  • The ability to understand if we are efficient — by understanding how much actual time is spent on various activities versus what was allocated we can get a view on what disrupts our plans, by how much and who is impacted. We can then use this data to mitigate this.
  • Person specific salary information is not used to calculate cost; finance use a generalised role-based approach and the SFIA framework.

Discussion

We were told that “Contractors are not applicable for Timesheets“. Why? Surely this goes against all the reasons why they want to do timesheets, to estimate the time and money cost of projects and improve forecasting. If outsourcing isn’t logged, it gives a false impression.

Some people were asking questions like “What’s the maximum/minimum hours to be logged per day and per week?“. Is that them admitting they had no idea what their contracted hours were?

In similar fashion, you would get people who work part time asking questions such as: “I don’t work Fridays, do I need to log anything for that day?

Also, in a similar fashion, some people wanted to admit they didn’t really do their contracted hours, but had to inflate it to overreport it. I suppose if they want to know how many days/weeks projects are taking, then recording how many hours you have been slacking does make sense:

When I started recording timesheets in this system I was putting in less than my contracted hours, and then got a message saying the timesheets were incomplete. I now record all of my contracted hours. Let me know if this isn’t what you want.

Then you had people with the opposite problem

Should we accurately record the number of hours worked, or should our timesheet always add up to 40 hours a week regardless of extra hours done?

Some Tech Lead/Architect-type staff made a good point that since they work across projects and will help others when needed, they won’t have that “project task” on their timesheet because they haven’t been assigned to that project:

“I do a lot of work doing “consultancy” for projects that I’m not formally allocated to, so naturally those projects are not in my “Tasks” list. Am I expected to try and find project codes for each of these (and get allocated to those projects even for a bit of one-off help) or should I just use ‘BAU’ (Business as Usual) for that?”

Another architect said his work actually spanned multiple projects because he was working on something that is a prerequisite for both projects. So would that mean he just halves the time against 2 projects?

In a similar fashion, sometimes problems arise with some legacy system, and the experts in that field will have to investigate or even fix the issue. Does this then just go down as a generic “Out of scope” item? That sounds like something that is important to track.

Some people were moaning that they might already fill in some time against their assigned Bugs (which was their specific team’s decision), but now they have to also report the time into this central system.

I think there’s plenty of aspects that are open to interpretation or people’s preferences. I noticed we have a “Meeting” task, but when there’s a meeting about your project, then shouldn’t that just be logged as Project Work, and then Meetings should be for non-project meetings? Then sometimes we have optional meetings where someone is demoing their project, or another department is announcing some news. Is that a “Meeting” or is that “Out of Scope”, or if it is educational, should it go down as “Personal Development”?

So it seems the simple idea of creating a timesheet has loads of complexity that a lot of people haven’t considered. I suppose the answer comes down to what you actually want to measure and why?  

The manager’s response to the questions about “if the time needs to add up to your contracted hours” – was that “the time should be accurate and it shouldn’t just be ‘adding up to something!’”. But the system doesn’t really support that. There was a time where a teammate’s time was erratic and he was starting at 2pm and sometimes staying late, or sometimes doing extra time on different days. So instead of doing a consistent 7.5 hours a day, his timesheet looked more like 2, 7, 13, 7.5, 9.5 etc, and it got flagged up as being inaccurate.

This was a brilliant quote from a colleague:

“the only accurate timesheets are the ones when I am annual leave”

Someone came up with an interesting idea. Since many people will just slap 7.5 hours against their project across 5 days, and we all know the timesheets aren’t going to be accurate, can’t we just assume if someone is assigned to a project, they automatically get 7.5 hours assigned to it, unless they log tasks on the contrary e.g. out of scope work, sick leave, holiday? 

No” was the answer because that’s not how the Time Sheet system is designed. It is a good idea though.

There was one guy called Jason who was constantly moaning. I’d seen him on other calls and he seemed quite problematic. I could imagine he is the sort of person that would get sacked at one point for his problematic and negative attitude. The manager leading the call somehow remained patient with him, and came out with this quote which was a great response considering how frustrated she must have felt:

“I can’t work miracles Jason….I am telling you how I can help you right now”

Manager

Sounds like a film-quote.

Delayed reporting of Major Software Incidents

Process Problem

A few years ago, there was a period of time where I ended up being on the calls after a Major Incident (MI) with our software was declared. I was amazed at the clear failings with the process. There were all kinds of various managers, then maybe a few people from Deployment, but then barely anyone from Development. 

Then you’d have these managers just theorising if the Incident was caused by hardware or software, and if it was software – which enhancement/bug fix could have caused the issue?

It was pure guesswork of course, and occasionally they were right, but what is the point theorising when you could just get the people involved that can actually investigate it?

Sometimes I would hear about a Major Incident and then see that it was actually logged days ago. I think a problem is all the process between Support and Development. Support log incidents in their system and talk about “customer reference numbers”, but we need it in our system which is currently Azure DevOps and we talk about Work Item numbers. 

So sometimes there might be a delay even logging it in Support, and then there is a delay until it actually gets transferred over to our system. Often we are on these calls and we ask for a Work Item number so we can read information rather than just waiting for someone to mention it on the call… and then we are told that they haven’t created a Work Item yet.

I remember a time when users complained to Support, then they logged a Bug straight away, and did really good investigation. Then it would come to us with full details. Now, users complain for weeks, it gets escalated up to the Directors, then comes down the Development managers to Colin, then we have barely information to look into it because the users haven’t provided it, or is just “Chinese Whispers” and the information gets lost.

It’s so frustrating because how can you attempt to diagnose anything without all the required information? So the call is pointless, but when you do have the information, then you don’t want to be on a call – you want to go and start looking into it because you want to diagnose it then fix it.

So let’s look at one of the last examples I was involved in…

Example

Colin messages me about a Major Incident.

“I need some investigation…”

Colin

Apparently 179 sites are complaining about this problem and threatening to leave. Despite being complaining since the Friday release, Colin only knows about it Wednesday. Classic. Not the first time this has happened.

So what can I investigate? What is even the problem? All I know is there is a problem with a certain feature, but the thing is, we integrate with several third party API’s and I haven’t been told which one it involves, and I don’t know what the problem the users are seeing is.

I ask Colin to elaborate:

“not sure which provider. Can we look into all of them? So one of them may be broken, but we need to look at them all and hope we find it”

Colin

Wut. You want me to test them all out and hope I notice a problem? But it could involve just one and require specific steps.

When I finally got some information, it was pretty sparse.

“between 2 minutes and 12 minutes for the dialog to pop up” 

the problem

I told them I would have to see it happen, and see if there is anything different the user is doing to make it go from 2 minutes to 12 minutes. It sounds like a network issue, or not our fault.

“we will test it with a happy…well not a happy user, but an ‘engaged’ user”.

Manager’s suggestion of arranging a call with a user to witness the problem

I was then on a call with all kinds of random managers, all chipping in speculative accusations. “It’s a problem with the deployment“, “it’s a problem with the amount of data in their Tasks module“, “it’s a problem with the number of user-created resources“.

Colleague Opinion

I was discussing this with one of my colleagues and he re-iterated my views:

"they red flag anything nowadays - they just wave their flags around
It’s always the case that someone knew several days ago, but now it needs fixing immediately and it’s the first time any developer has heard about it

why can it not go:
Problem logged by customer -> Support discuss with Release Management -> Release Management arrange call with the correct Team Leader -> Prioritises the work with a developer and tester

I don't see how that's difficult

What actually happens:
Problem logged by customer -> sits in a list for a while
Problem management person looks at issue -> sits in list for a while
Someone kicks off and escalates the issue -> Director gets it in the neck -> Release Management notified
Release Management hold a call -> float many theories about what the issue is about
Developer randomly hears about issue -> mistakenly joins call mid-flow -> explains that it's probably related to the work item with the same keywords as the issue in the title
Developer now late with their own work
Release management say they'll prioritise the issue, but asks if you could start working on it -> Developer says no because you are busy working on 8 different things -> everyone in a huff
Team Leader nowhere to be seen -> likely watching the TV"

Apparent Analysis

A manager recently posted an update with facts that I was sceptical of:

“Analysis conducted into 2 years worth of Major Incidents

Some interesting trends have appeared and I think it’s worth discussing:

  • Data shows that most of the MIs are caused by either a 3rd party or tech debt/ops related issues. The number attributed to code change is pretty low.
  • We are lacking ownership around domains for existing products so not obvious which Engineering Manager is accountable.
  • We don’t have enough SQL skills to manage our complex DB
  • We rely upon a small number of people to investigate MIs.
  • MIs should be owned with the right teams.
  • Further investigation required on this and changes to ownership, structure, investment needs to happen.”

Release at Pace

Another interesting claim was made by another manager:

“There’s lots of interesting developments going on at the moment; we’re delivering more than ever before.”

Manager claim

I message the Software Delivery Manager to ask if there is any truth in that, because I thought we were releasing at the slowest pace.

“Who knows? I reckon one of those blaze statements that people just say to make it sound good”

Software Delivery Manager

On a recent Development meeting, one person posed a question to the Head of Development:

“Deploying software at speed is ultimately what we want to do as a business. However, this can come at a cost. We have had more Incidents in Q1 caused by software defects than we did in the whole of last year! How do we ensure the deployed code is at the quality required if we are going to deploy at speed?” 

Staff member’s concern about software quality

If we deliver more changes, I suppose there is more risk of introducing more bugs. If you are rushing, then you are more likely to create Major Incidents. I suppose you can say it is fine if there’s more bugs in general, but all considered low severity.

The Rapid Responders Group

As a response to this, I think Colin came up with the idea of the “Rapid Responders Group

“We are deploying our software at a pace we have never done before, so we can miss scenarios that could happen in the production environments as we have seen in the last two MIs. If we can get information straightway, we can investigate the issue straightaway. We all have access to the Live environment. With our technical ability, we might be able to see things that other people might not, so this is why I have assembled this team.”

Colin on his new idea

However, it was quickly shot down by one of our architects and never mentioned again.

“With one of the MIs, there was absolutely nothing we could’ve done between the people in this channel to anticipate that as it relates to a combination of live configuration and state that can’t be replicated.

In general the problems we have with the MI process is making changes takes too long due to processes and permissions, noise from the non-experts present (it’s hard to get a word in edgeways with some people), and multiple people bugging those performing the fixes/changes for updates (when it should be one person who fronts the technical team working on sorting it out)”

Architect

“We had first-hand experience of this on the last Major Incident call. We could have fixed it within 30 minutes but was on a call discussing it for hours.”

Colin
Architect:
It's usually the fault of those running the call or lack of confidence in Dev.
I will say when we have enough information to make a fix - that I'm departing the call to concentrate. As you say, it will otherwise go on for hours, with multiple people fronting opinions on the cause of the problem, unless someone identifies it with confidence and takes the initiative.

When an MI occurs, it's always the same group of people, which is often a pretty good mix, but first we need to identify the cause.
 
Usually it takes a long time for the details of the MI to be logged, particularly somewhere Development can all access such as a Work Item. If you miss the start of the call, it's difficult to know what the details of the original issue were: you can guarantee you missed something of importance.
 
I would suggest the following to help the diagnosis run more smoothly:
 
  1. When a release is made, it must identify a point of contact for each change, preferably the team email address making the change. 
  2. When an MI is started, a brief description must be provided in written form and a source-of-truth record started (such as a Work Item). 
  3. The Release Point Of Contact list is emailed with details of the MI starting.
  4. They might not need to join the call unless there is something they can add, but at least if they feel their input valuable to the diagnosis they can join or reply with details. 
  5. After identifying the team/person working on a fix, they are protected by a single manager. The manager will be responsible for communicating with the techies and the outside world, so they can concentrate. They will update the Work Item and email those who need to know progress, what the fix entails etc. 
  6. Work out a way to expedite changes to live and retrospectively log change requests
Principal Developer:
From the MI's I've been involved in, they mostly run smoothly - the only disruption is (as Mike said) people "sticking their oar in" and having a guess at what the problem might be - sometimes forcefully.

They are not always wrong, but sometimes it can distract from getting to the route of the issue, you need to have the confidence to talk over them and get the information you need, correct misunderstanding, and to keep the discussion on track. A lot of the time the initial presentation from support can be way off the mark, but that is true of most bugs we get due the lack of technical skill in support. Only the developers on the call are going to be able to diagnose a fault as a result of a code change. 

The primary focus of an MI call is to restore service ASAP, exploring workarounds is part of the developers role on the call - can we change a stored proc / setting to improve things now? This helps users and gives development more time to work on a fix. Another role is to assist the wider business (especially those in the Safety and Governance roles) to understand the issue - is it as bad as initially reported, or is it worse!?

Once we know what the problem is, and how we will resolve it, then it is OK to drop off and work on the fix.

Conclusion

I think it is clear that too much time is wasted discussing the problem with the wrong people. Managers need to find the correct group of technical people, give them all the information they need, then give them time without hounding them – in order to actually fix it.

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.