Project Diary: Voice to Text AI

Introduction – August 2025

These days, our competitors are producing AI features, and since AI is the cool thing that all corporations want to promote alongside the claim they have “cutting-edge innovation”; we want to follow suit and we want to rush an AI product out.

If we make it too advanced though, it will meet the requirements for a 6 month (or more) legal approval process, so we want to keep it basic.

In recent years, even though we have struggled to get software out in a reasonable time-frame, they want this feature to be out after 3 months at most. The initial implication was that they wanted it finished by the end of year so would release straight after Christmas.

The lead developer reckoned the initial set up, which includes all the DevOps tasks, would take 3 weeks. Creating a repository is a few clicks, then there’s the pipelines to create, and all the “tooling” like installing and configuring Jest and Linting on the application side. I know Terraform is fiddly and the approval process for the AWS user permissions etc takes a while due to the process, but 3 weeks seemed a bit extreme to me.

The flow of the planned AI application was initially as follows:

We have an old product SystemNow, and its (eventual) replacement ProjectFutures. ProjectFutures is currently in use as a “Companion App” with minimal features. ProjectFutures runs as a browser based app. They don’t communicate effectively with each other in my opinion. So the old product SystemNow opens a new screen which then triggers opening a new page on the new product ProjectFutures. Then the user can hit record on ProjectFutures, upload the transcript to the 3rd-Party, who then sends back the transcribed audio in an annotated text format. Then we transform that data to then display inside SystemNow.

Reading through the architecture, it seems crazily complex, that the speech-to-text process involves sending the data to a 3rd party API, it then comes back with a processed transcript and we then send that to the cloud to send back to a different program on the same machine (this part was later changed to send a local message to the WebView component). There can be some kind of delay as well though; so the user could be waiting, but has to keep the program open.

Then what happens if there’s errors at each of those stages? How easily can the user recover if they have recorded a 10 minute clip but haven’t filed the data due to an error? I’d imagine once that happens a single time, then the user will stop using the feature.

I’m skeptical that this would save the user time, but might make their note-taking richer as long as the 3rd party actually sent detailed notes back.

To keep the company and product anonymous, I don’t want to disclose the actual product. To imagine the use, picture a customer having a consultation, in person or telephone, with a house designer. The designer will create a “consultation” which can have multiple pages, one for each room. Most consultations could just have one page, but multiple pages consultations are also used. Once they fill in text for each section in a page, they need to switch the free text entries to actual products. So if they have typed “white toaster”, they see some product suggestions, and then select an actual product in the system, which replaces the free text with a “code badge” eg [Russell Hobbs 27370 Eden 2 Slice Toaster] which makes it read-only. They can delete the “code badge” or swap it for another product, but cannot modify part of the text. This has a product ID associated with it, and can have “qualifiers” which are slightly different product variations without requiring a different code e.g. colour options for white and black.

So our AI speech to text feature aka “Scribe” will replace all (or most) of the typing. It listens to what the consultant and customer discussed, then generates the consultation pages and sections, and suggests product codes for each section. The consultant then just needs to verify each section looks correct and do the product coding.

Week 1 – 18th-22nd-August

Day 1: It seems Dave (Lead Developer) and Liam (Team Manager) have already created quite a few User Stories (aka “Work items” or “tickets”; where the requirements are supposed to be described as user-focussed) in meetings they had separately from the team. 

The idea was that the team could go into a Refinement meeting and focus on Story Pointing (estimating) but the disadvantage is that Jonny fully understood the requirements and the rest of the team didn’t.

Story Pointing is where we assign a score based on the predicted size using the fibonacci numbers 1,2,3,5,8,13; where 1 point is the smallest task. It’s a team vote so the most popular or average score is supposed to be chosen. My frustration is that we often scored too high, influenced each other’s votes, and didn’t consistently choose the average vote; so estimating always seemed like a waste of time in this team.

The initial User Stories were mainly the basic set-up, the prerequisites for development, so have nothing to do with user features. It’s setting up the repositories, pipelines, and configuring SonarCloud. I often wonder if these should be classed as User Stories.

For one of the set-up stories, I stated “it is a 1 point and we don’t need to discuss it, just move on to the next ones”. The team decides to vote anyway. Lucy chooses a 3. Then chickens out and comes down to a 1 without explaining why she thought it was far more complicated.

James then drops off planning.

Lucy chooses 2 for the next one, but Dave chooses 3, so Lucy then makes out she meant to choose 3 all along. Now we have two votes for 3 and my vote for a 2, so now I am outnumbered. I managed to get them to change to a 2 though.

For the next one, we all choose 2 apart from Lucy who chooses 3. She comes down to a 2. So that is 3 chickens in a row.

James comes back after 45 mins; what was he doing?

Week 2 – 25th-29th August

We now have the two code repositories created; one for the Client-side (UI) and one for the Server-Side (API) along with all the PR checks via GitHub Actions, and CodeQL.

There’s a debate of which 3rd-party provider we are using. Surely we shouldn’t be starting the project without API keys licensed?

We get assigned another 3 developers who are contractors. One contractor will join the business later. Two are currently employed with us but were originally assigned to another team but their project got cancelled. Is there a chance our project will get cancelled? It’s slow progress and the requirements aren’t locked down.

Everyone seemed to take one day’s leave at short notice but there’s not too much going on so not a big impact.

James declares he doesn’t want to do development work, but wants to focus on testing. Testing what though? we hadn’t got the repos fully set up, and hadn’t written any code to test. It will be a while until there’s any real testing work.

Week 3 – 1-5th September

The two contractors, Marek, and Andrei are sitting around reading documentation. They do ask for work but Liam (Team Manager) is unsure what to suggest as he didn’t expect to get them so soon.

I told Marek that our ReadMe in the API repo was a template and can be ignored. There’s literally no features so nothing to build or configure despite what the ReadMe says. Later he declares he doesn’t have the AWS access required as stated in the ReadMe. I tell him again “it’s a template”.

The next day Marek says he can’t install something as stated in the ReadMe. I tell him again “it’s a template”.

Andrei keeps starting meetings early when Outlook reminds him there’s a meeting in 5 mins. One of our meetings overruns so the manager declares a 10 minute break before we start our next meeting. Andrei instantly starts the next meeting.

We had a meeting with Sam, the UX Designer. The user flow is absolutely massive with a few questions over confidentiality and security etc. Also what happens if there’s connection problems during each phase. Does it carry on recording, and how long for? The user can’t really wait around, so can they quickly revert to manually entering the data instead?

Since we only planned work for 4 people, we don’t even have work to give the contractors. We need more refinement meetings but this means the entire team aren’t working.

In the estimation session, Dave (Lead Developer) shows how easy it is to set up Release Please which generates release notes. I say, “isn’t it quicker just to check it in now than to write the User Story for it?”. Dave agrees, but he creates the User Story and asks to story point it anyway. To my surprise, the team votes were 1 2 2 3 3 5. So we literally saw Dave do the work within seconds and yet the only person voting 1 was me! Lucy said she “went high just to be safe” (voted 3), and Marek said he “went 5 because I’ve never done it before“. Mate, Dave showed the config file from another repo. It’s like 10 lines to copy and you change nothing.

I suppose different teams vote differently, but from past experience 5 usually means 5-8 days.

What is the point even of Story Pointing when people are voting 2,3,5 for 5 minutes of work? Can you trust any estimates? I feel like it’s a complete waste of time.

By the end of the week we have added Sonar, and set-up Playwright testing framework on the UI side.

Week 4 – 8-12th September

We had meetings all day Monday. One was a demo about the prototype that was written by AI from Chris (Framework Lead) and Mark (Architect). We had another refinement session.

Marek asks “What is ProjectFutures“? It’s the start of week 3 for him but surely he should have been aware what product he is working on. I thought Liam (Team Manager) would have given them an Induction; it would have been the sensible thing to do.

Later in the week, we had a few more long refinement meetings. The contractors are still pointing high because “they’ve never done it before”. For one User Story, James gave a link to another repository which showed the exact method we had to add for authentication: 1 2 2 3 5 5 5 were the votes. Surely it is a 1!

Week 5 – 15-19th September

I start working on adding the Automated Testing framework; Refit to the API, although we don’t have an API, so what am I even adding!?

There was a major NPM security incident where malware was infecting several packages. On investigation, it didn’t affect us because we didn’t use any of those packages, but NPM was disabled by our security team “as a precaution” and we were told to just do some “personal development“.

Week 6 – 22-26 September

Another contractor, Ivan joins us. The NPM incident is still ongoing so we kept on doing “personal development”.

Week 7 – 29th Sept-3rd October

“You guys fly through work so this incident has come at a bad time”

Jean (Product Owner)

We are in Week 7 and don’t have any features complete. I suppose Dave (Lead Developer) was correct about it taking a long time to set up, but it really shouldn’t. I think it’s because we keep splitting tasks down and spreading them throughout the team, so one person does an hour-long task but then drags it out to fill the day. Yet one person focussed on it could just whizz through.

We also spend too much time planning which is also because we have broken tasks down too much. So we end up discussing what the scope is; where one task ends and where the next one begins, but the second one is instantly blocked by the first as a dependency. So it’s all just stupid. If you can’t get two developers working on different items at the same time, then what’s the point in splitting the feature down like that? 

I’m still trying to get Refit working in our repository but I still don’t really know what the objective is since we don’t have an API. I just want the boilerplate code I guess, but our internal package APIAutomation was showing an error about missing data.

Week 8 – 6-10 October

We had another bizarre planning session. One item had the following scores: 2 3 3 5 5 5 

James, who voted 3, says it’s most likely a 1. Why did he vote two scores higher? 5 is the majority, but then people admit it’s probably simple to implement a config flag, it’s just we haven’t got experience creating config flags for ProjectFutures. What is the point of voting if everyone doesn’t believe in their vote apart from me. 2 shows it’s easy but allows more scope if we have trouble. I suppose I should have voted 1, but voted 2 to attempt to be more in sync with their numbering.

I’m still struggling with the APIAutomation package error.

There seems to be an idea that we won’t actually open our Scribe in the “Companion” mode. It will now be launched as an embedded Webview2 control inside SystemNow. I’m not sure what the reason is because this surely means you can’t place it on a separate monitor and we will be really restricted in terms of space.

Week 9 – 13-17th October

I took a week off. Perfectly timed really since not much was happening.

The lead automation tester at the company admits that there was a bug in the APIAutomation package and I was the first to see it.

The rest of the team are adding basic UI components and test tools like Storybook and Playwright.

Week 10 – 20-24th October

I had to reset my laptop at the request of Group IT, which would then have all the new security policies. However, the update failed to reinstall, so I was completely screwed.

I called IT Tuesday morning, and after investigating if anyone else had the same problem, they asked me to come in tomorrow to reset it. At the office, they have a couple of attempts and don’t succeed, so I head home. They later fix it so come and deliver the laptop to me.

There’s some weird restriction about having to wait 24 hours before we can download applications from the Internal App Store. With meetings like the End of Sprint review and Friday’s Retrospective, I’ve gone the full week without doing any work again.

When I think back to the original plan for the project, I suppose we have missed the 2 month project deadline that the managers wanted. It’s an absolute joke that we don’t have any real functionality to demo. Liam (Team Manager) keeps saying it’s because of the NPM major incident that prevented us from doing work, but we weren’t making much progress before that.

Week 11 – 27th-31st Oct

Liam (Team Manager) keeps mentioning “version 0.5” which I get the impression was an outcome from a meeting during my week off.

So the first thing to start the week is yet another planning meeting to discuss the items in scope for version 0.5. Not only do we have extra meetings about descoping work, there’s extra work for temporary config flags. Due to the fact we are behind, we want to rush out a demo to a small group of users to get feedback which actually comes at the cost of delaying the main project by a couple of weeks.

One of the User Stories is to install the Fluent Validation package. We wasted more time talking about it than it would to take to install. I think items like that are dumb because a User Story should deliver functionality to the user, and this is just Step 1 of delivering some value, and it’s an implementation detail. It’s to check that part of the message content is valid, then we will send a Rejection if not.

I spent most of the week reconfiguring my laptop after the reset. All kinds of things hindered me setting up my laptop. The AppStore triggers installations off in the background so it is hard to know if and when they are running. There can be hour delays, and required restarts. Having to set up things locally and on WSL adds to the pain, and restoring the Linux image took ages.

The team collectively are working on Launch Darkly (Configuration Flags), and some Message Validators.

Week 12 – 3-7th November

Andrei kept on talking about adding a DateTimeValidator even though for his story, he just needed Date (not DateTime). When we asked him why he was doing it, he kept on saying he had “only ever used DateTime before and wanted consistency through the application”. We are like “no mate, some things need Date, and some need DateTime” so we eventually need both types of validations.

We have our End of Year Reviews to fill in at short notice so this is another distraction.

We completed a high number of Story Points this week, I believe around 45 when it was more like 20 in previous weeks.

Liam (Team Manager) asked what caused this increase. Then Andrei joked “GitHub Copilot“. Although he did increase productivity, it definitely took longer to review his code; it had loads of scope-creep and complexity. I keep thinking he gets ideas in his head like wanting DateTime then begins doing more, or the wrong thing – to what was asked.

I wasn’t sure why our velocity actually increased. It might just be that all the basic set-up is complete and we were doing work which was small and the Story Points were inflated, so we were getting 3 or 5 points for items that were really 1 or 2s.

Week 13 – 10th-14th November

The week started with an incredibly long planning session. We spent way too long debating how many Story Points to bring in. Do we go for 45, or try to use an average, so plan around 33 points?

I saw this quote from one of the managers. I think they were talking about costs. I hate all this business jargon:

“We’ll design a good enough path for both pppy and pupm taking into considerations user facing Flow and internal ops constraints that can be ready by Q2 2026”

Andrei and I have been adding Validators. Marek added one as well which is only his 3rd PR in 11 weeks.

James is still working on hosting issues.

Liam (Team Manager) announced that we were reducing the number of Microsoft Teams chats associated with the project. This was the first time I had heard that another team had started their work. I knew my mate Adam was going to be working on the SystemNow side of things at some point because he had told me. I didn’t know that he had started, and didn’t know what his team was called. When I asked him about it, he said he wasn’t aware his team had their own Microsoft Teams chat.

There was a demo arranged Friday to show the project so far. On the call, there were Software Architects, Safety, Marketing, Data Scientists, all kinds of managers at various levels in the hierarchy. During the introduction, the managers were constantly hyping up the features and overpromising the project. The Marketing staff seemed really excited since it is a new product  to sell. After all that hype, the development team were basically like “here is a button“.

These demos seem to be expected to be weekly but how much progress are we going to make in a week? and it’s another distraction that we have to plan for the demo. It’s like Thursday afternoon will be wasted just to put a demo together for Friday morning.

The 3rd Party that will provide us with the embedded application that handles the recording and transcription is called VerbatimEcho. They are a small company but claim to be a market leader in other English-speaking countries.

Week 14 – 17th-21st November

Dave (Lead Developer) reckons we should make sure the “elements” in the JSON are ordered, but the requirements in the user story were written with the implication that unordered elements were invalid and should be rejected, rather than our code correcting it and accepting it.

I asked the question on Microsoft Teams, mainly for the Architect to confirm, I also asked which User Story we can pick up because most of the items we have seem to be blocked. Both questions were ignored.

I started looking at a User Story that involved rejecting the message if there were extra elements that weren’t in the schema.

I started writing a unit test and the GitHub Copilot added some schema parsing code using Newtonsoft. I wasn’t sure if we could use Newtonsoft with the new security changes. I searched for it in Nuget Package Manager and couldn’t find it. I looked on JFrog directly and found something similar named but couldn’t tell what it was since there was no link to the actual package. I noticed that Netwonsoft now have moved schema validation to a new package and they charge for it. So I was kinda stuck not knowing what to use.

I’m finding it progressively frustrating that the only reason we have our Daily Stand Up at 10AM is because of James and he keeps turning up late. It’s 3 hours into the day for the Contractors so I think sometimes they sit around waiting to be told what to do. It would be very beneficial for us to have the meeting earlier at 9.

A big turnout on the Friday demo; 36 people. Adam said they have nothing to show but then Jack, the tester in their team, showed a JSON generator tool to use rather than actually using the VerbatimEcho app. Our team demoed a tab control, and some error messages. I’m sure all these people join this demo wanting to see some revolutionary AI, and we are showing them basic UI controls.

Week 15 – 24th-29th November

On Friday at 6pm, James decides to tell the team he has annual leave this week, and he hasn’t handed over the work that he was assigned, so now that is probably blocked.

Mark confirms the schema story I spent most of last week on was another AI hallucination of ours. Jean (Product Owner) has been using Microsoft Copilot to generate the User Stories.

With Andrei changing how error messages work, he has taken the initiative to update all the old messages and remove the old code. Some of the helper methods that were suspiciously AI have now been deleted.

There was one message that said 

needs to be in one of the following formats: <formats go here>” 

but we only ever specified a single format it can be. I told him to create a separate message for when it is single.

He changed the message so it would read like it will specify one format, but we still allow an array to be passed in so it looks like it will display multiple. I asked him why he did this, and he said “although there’s no requirement to support multiple formats, the code is there if we do“. This makes no sense because if we do have the need for multiple formats, we would have to change the message like I suggested. However, since there is only a requirement for singular format, then why don’t we just code for that, and support multiple later? (but I don’t anticipate it ever being needed anyway).

On the side, and on a similar note: Andrei has made some custom error logging framework. He allows multiple errors with an array, yet we only produce 1 error, then the validation stops processing. He also has a property for each individual error to hide it from the user, then an overall property to hide all errors in the array from the user. When asked why he had done this, he said that “we might change the validation to allow multiple errors” and “It might be useful to hide errors from the user“.

So there is no User Story for it; he has just invented some work and showed off. For both validation and error logging; he is saying he has implemented them in a flexible way but both will require more work to get them to work that way. They look like they support multiple items but they don’t.

I don’t know enough about API development, but I can’t imagine something like this wouldn’t exist in the framework natively. So he is doing what he wants and creating extra work instead of just doing the planned work. It’s getting so frustrating.

We are quickly getting through our assigned work though. I don’t have much experience with UI but with GitHub Copilot, I quickly got my item done which was worth 5 Story Points. Although I thought I’d got it done; but it did need several minor tweaks which then delayed it.

The architect tells us that the schema will change. So the work we did to validate the schema will need tweaking.

Chris (Framework Lead) is apparently more involved now, although I think it is for framework changes. Although the work is driven by our use case, it will allow any app to work in this embedded way. Chris is due to finish 16th January.

There was talk of a March deadline for the project.

Week 16 – 1-5th December

James is back from his week off. He turns up at 10:05 though in classic James fashion. I ask him a question at 10:56 and he responds at 12:13.

I wanted to ask Sam (UX) about a few minor tweaks to the UI but he was off.

We were talking about Version 0.5, and James started kicking off, which I thought he was talking himself out of a pay rise during this End of Year Review period. “I wasn’t aware of that, so there’s not much vision and direction to the team“. Liam (Team Manager) was a bit annoyed.

Liam was talking about getting more people on the project to speed things up.  It’s the classic management question, thinking you can speed progress by throwing more people at it. Liam sounded aware it wasn’t a great idea if it would be disruptive to train people up, and split more work across more people. However, maybe we can delegate certain tasks like the DevOps side?

Liam mentions that Alan (Head Architect) is working closer with Adam. Sounds like he’s not happy with his estimate. Alan basically vibe-coded a prototype in a week. Adam reckons another 4 months’ work is required on top of the 2 months Adam has done so far.

Sam (UX) is going on about mono tertiary buttons. I don’t know what that means. Turns out the design has changed a bit and Dave (Lead Developer) doesn’t like certain things so I have to rewrite my control I made last week… Again

Christmas Party removed a day from the week.

Managers have demoed a UX Prototype to some users to get them hyped. Probably end up getting them too hyped when we deliver something different 6 months later!

Week 17 – 8-12 December

We had a User Story to create a database, but no one had come up with a design. Dave (Lead Developer) lists the columns we need then begins trying to rearrange the tables so it’s easier if we then “partially migrate” a table to DynamoDB or something daft.

I don’t understand this idea, but assuming we did go ahead with it; I don’t think it will be any easier because you’d still be dropping 1 table and modifying the other table to add a URL column to point to the new location. So sacrificing the design now means we have a potential overhead until we do the migration, but then we might not ever do this migration.

Then he wanted to add audit fields in there like Update/Created By/On. So 4 new columns. I didn’t think you’d need audit fields in both tables because the initial write would add entries to both tables, then additional rows for that entry would just add to the second table; so you can infer who added the entry by only looking at the first entry in the second table.

Regardless, the design would come from Mark, our Architect and database expert, so why are we even discussing this in a Sprint Planning meeting? The User Story should just be “Create database” and the exact design gets added later. Despite my protests, we carried on talking about the design ourselves.

Nearly an hour went by in this Sprint Planning meeting and we hadn’t even planned 1 item, and we needed 7 to keep people busy for now.

Andrei said it made sense to create a 4 column composite key. Wouldn’t that mean that you have to add 4 duplicate columns into the second table that it foreign keys onto? That sounds bonkers. Andrei claims to have experience in database design.

Andrei then suggested using a GUID for the primary key rather than an incrementing Integer. I don’t see why a GUID has any advantage over an Int, but Ints will have lower storage memory cost and be easier to read.

After 1.5 hours, we had 13 points planned in (we wanted about 30).

On the next item, it was Marek’s turn to chicken out, who voted 5 “I am happy to go for 3 or a 2“.

I noticed James was late to every Daily Stand Up by at least 5 mins. Then he’d disappear for long periods of time throughout the day.

I pick up an item to do with authentication, but we need some Azure Client ID and Secrets which only managers can create. I requested one from Liam (Team Manager) but he was busy. The next day he was off. The next day he was busy again until the afternoon but I managed to get some of his time. Dave (Lead Developer) then decides we can reuse some credentials for now so Liam wasn’t even needed.

Week 18 – 15th-19th December

We’ve had many Town Hall Meetings that have caused disruption. 1 hour long presentations of business guff.

James still keeps being late. We moved a Daily Stand Up to 10:30 because of a Town Hall meeting clash but he was still late. The next Town Hall a few days later meant we moved it to 11:00 and he was late again. It illustrates that Liam (Team Manager) does a bad job if he isn’t having words with James.

I don’t recall the last time I saw Dave (Lead Developer) actually work on something on the board. I never understand how we get random issues like a single unit test will be failing, and Dave is the one to notice it. He will then fix it and only tell people when he has the PR for it. Then there was a package he replaced due to some security issues, then another package he replaced because it had a bug that sometimes affected us so took the initiative to find a better one. It’s almost like he is inventing problems.

For my authentication work, I showed Dave what I had done so far. I created a temporary method to create a bearer token and Terraform to store the secrets. After looking at the current authentication package and API we need to call; Dave says the package actually handles the authentication for us so my User Story can just be binned.

James is taking ages to create the Transcript UI. I thought he was good with UI stuff but I suppose he is really a Tester and not a Developer. He also keeps being late so maybe he isn’t working. He keeps claiming GitHub Copilot is generating bad code, and he is struggling to sort the CSS out himself. I am very doubtful of this unless he isn’t asking the correct questions.

Marek and Andrei are doing some database work but it sounds like there’s a bit of crossover or dependencies with their work. They also discuss how to do unit tests which shouldn’t have a dependency on a database. Using EntityFramework you can use the InMemoryDatabase if you want some simple Integration tests, but then Andrei claims it doesn’t work with DynamoDB or something. I thought we were using SQL anyway, so I’ve no idea what is going on.

Marek asked about if he should check in the DB schema changes but I said something needs to be checked in to create the tables on the different environments (INT/PRD) because they aren’t gonna create themselves. No one in the team responded to me; an awkward silence as if I had said something stupid.

They keep using the term “Migration” as if everyone knows what that means. It does seem like it is a EntityFramework name, but I hadn’t heard of it before. It sounds weird to talk about Database Migrations when we haven’t created the initial database – there’s nothing to “migrate”.

Week 19 – 5th-9th January

Most of the team were away over the Christmas period. The 2nd was a Friday so pretty much everyone had that off as well. So a full 2 weeks are basically skipped.

The 5th was the real start of 2026. Liam (Team Manager) said James was off so “everyone was here on the call“. I pointed out Lucy was missing. Lucy then joins. James turns up 15 mins late. Great start from Liam; he is in charge of approving annual leave and has no idea who is supposed to show up to work.

7 items are still waiting for reviews to complete.

4 are Ivan’s and he should have had them ready over the last couple of weeks but they actually still have outstanding comments to resolve on them.

The Sprint Planning session was the usual debating the UX for a control so we planned nothing in by 11pm. We agreed to focus on clearing down the current items on the board at Liam’s request who seemed angry at the delay. But it’s really all on Ivan, so we are sitting around not doing anything. Dave (Lead Developer) said there will be a proper planning meeting before 2pm. It didn’t happen.

On Tuesday’s Story Pointing session, there was one item where everyone voted a 5 except me who voted an 8. Since the team is in agreement, it makes sense to go with 5. However, Andrei then says it could be an 8. It still makes sense to go with 5 because it’s still the majority vote. Dave (Lead Developer) then comes up with the idea of creating a “Spike” to investigate the scope of the item, then we can more accurately point. Absolutely nonsensical idea.

There was another item where we discussed for a while. The majority vote was 2, with a couple of votes for a 3. Dave votes 2 too. However, as Team Lead, Dave overrules and gives it a 3. There’s no real consistency in the process.

Another story involves clicking a Text Field and if the transcript panel is open, it then scrolls to the evidence in the Transcript and highlights the appropriate text evidence. I thought it was pretty standard, like 5 points. However, we then split it up, and score the scrolling 5 points, then the manual controls (next/back buttons) was a 3. So we are splitting work up too small, pointing really high, and we cannot often share the work out because there’s a dependency on each other.

In today’s jargon news, there’s a call for the “Provenance Derivation and Semantic Match Criteria within class 1 criteria

I had my User Story mostly complete by Monday evening but then I made some changes suggested by Copilot on the PR but they didn’t work. I struggled to understand the Jest output and I couldn’t see a way of debugging the tests. GitHub Copilot stopped working with some random network issue but I could connect to everything else.

On Thursday, I had it completed, so I picked up a new item and got it done within an hour. I encountered a random test failure but couldn’t understand why my changes had any impact on it at all. A bit of a weird week for me.

Week 20 – 12-16th January

James is on annual leave and hasn’t finished his story so Dave (Lead Developer) agreed to look at it Monday.

I saw a few PRs from Dave which were fixing something to do with a build (code coverage reports) – completely unrelated to what James was working on.

I picked up a related story which was to create a navigation control. It was really simple, just a coloured border around some text with 2 chevron icons to interact with. So I got it done within a couple of hours. It had a dependency on the item that James/Dave was meant to do so I think some of the functionality is blocked.

On my other item, only Lucy reviewed it, and pointed out some changes which were a good suggestion, but we could have just fixed it on the next related User Story rather than delaying this one.

On Tuesday, I pushed up another change for Lucy but I was mainly idling. Daily Stand Up was meant to be at 10 but we had a “Timesheet meeting” so moved it to 11:15 which seemed a bit excessive especially when the timesheet meeting didn’t last as long as scheduled, so I idled a bit until the Daily Stand Up. Then people were talking about all kinds of things so it ended up lasting around 35 minutes. So by 12pm no one had done anything productive.

We seem to organise the work in the least efficient way, have too many meetings about it, at inconvenient times, then people just idle between these events.

On Wednesday, there was a long call, estimating/refining work for next week.

As a team, despite the distractions, we ended up making quite a few changes throughout the last 2 weeks and got quite a few items checked in on Thursday ready for the Friday demo. These were some updates to API Schema changes, some controls to scroll through the Transcript evidence, some database changes, and a few tweaks to the build pipelines. Enough to talk about but still not exciting for the managers.

Week 21 – 19-23 January

In contrast to last week, not much seemed to happen.

I worked on the Transcript Navigator control.

Dave (Lead Developer) made a Mock site improvement.

Lucy finished off Ivan’s work.

In Week 16, Liam (Team Manager) asked about increasing the team size. We actually went with the idea of delegating some DevOps tasks to someone. So Richard was now in charge of tweaking or configuring deployment. That’s one less distraction for Dave.

Week 22 – 26-30 January

I created a drop-down menu. For some reason, the usual “fire event” in the unit test doesn’t work and I had to “use user event”, so that was a day wasted in the confusion. Lucy added a few comments on my review, then after I addressed them, she added some more for something completely different. Valid points but frustrating she keeps moving the goalposts recently.

On Wednesday, we were told that the Senior Managers wanted the release one month early. Do they know how software works? It’s done when it’s done unless we cut out features that aren’t Minimum Viable Product (MVP), but A, we already cut the scope, and B, we will release something more underwhelming so it’s a harder sell.

Maybe there was some pushback, because Liam (Team Manager) declared the date as 27th March so the old claim of a March deadline is still accurate.

In the Story Pointing session, for one item the votes were:

5 5 8 8 13 13

So a complete tie, but 8 would be a good average. Lucy tries chickening from 8 to a 13 because Dave (Lead Developer) had voted 13. However, Dave says we should average to an 8.

Week 23 – 2-6 February

On Wednesday, James said he’s been waiting a week for VerbatimEcho to answer a question. Liam (Team Manager) said it was only sent Monday and VerbatimEcho had the day off. Sounds like the typical communication problem where we have to tell a manager like Liam, and hope that he then asks VerbatimEcho. It would be better if we could just message them directly.

I keep finding that User Stories are vague and not sure of the actual scope. I picked up one that involved sending messages to SystemNow but we don’t have the integration yet to test it so it’s all theoretical.

Week 24 – 9-13th Feb

No real progress from me. One User Story kept on running into merge conflicts as the team checked in their items, then GitHub Copilot was re-reviewing it, and coming up with new comments on code it had already seen.

Meanwhile I ran into problems with WSL, with networking failures and Extensions failing. I think part of it was that my current version of DotNet was then on the block list for my employer with their new strict policies.

On a call with Andrei, who claimed he could help with WSL problems, he insisted part of it was the “obj directory”, but he is wrong because that’s for the compiled DLLs and this was an error on VS Code load, and nothing to do with launching our app or compiling it.

He then said he writes code on Visual Studio on Windows, and then copies the folder into Ubuntu to run via VS Code. I asked him repeatedly why he does this and it was just that he is “unfamiliar with VS Code”. Yet he is still using VS Code to build and run the app isn’t he? and this is an incredibly cumbersome and tedious process he is using.

With Dave (Lead Developer)’s changes to a Mock API, we now need a different command to launch our app. We also need to specify Database Config on the API side even when a database isn’t needed (I think this was Andrei’s fault). It annoys me when colleagues change the process but then there’s no clear guide to getting everyone set up.

The first pilot customer is live in pilot with the “Partner API Scribe version”. No one in the team seems to know what that means. They definitely aren’t using our API and app and we thought there were only 2 teams on our project, and the other team doesn’t know what it is either.

Week 25 – 16th-20th February

I’m trying to remember how our Refit Automation even ran. I added some ENV variables the GitHub workflow used but it was still erroring. It was calling out a specific variable so I added it and tried again. Repeat about 5 times. Then it moans that the INT URL isn’t available but I want to run this locally, but how do I do that?

I tried to test the API with the JSON files we had on Confluence which were examples that matched the schema. One of the objects cannot be parsed. I manipulate it to match our code. I get loads of errors about invalid date formats and missing attributes

This is a great example that if you mock everything in tests, you can end up creating nonsense. Why aren’t we using the JSON from Confluence in our tests? The JSON format is a key part of our project and has been massively wrong all this time. Ridiculous.

The next day Dave (Lead Developer) writes almost a blog post on the issues and the team reacts surprised like they didn’t know about it. Dave seems to be getting credit for finding this mess but it was me that spotted them all.

In today’s “Andrei being weird” story:

Lucy creates a PR with some hardcoded test data in a control she is working on. She declares it in the description. Copilot Code Review comments on it, stating that despite her declaring that it is temporary data in the description, it is better to be declared in an inline comment in the code to state it is temporary i.e. a TODO comment. Fair enough. 

Andrei then comments saying “add these strings to the Translation file” as if at some point in the future we will translate it to German. It’s temporary code mate. He hasn’t paid any attention has he? He is just looking for text strings to write that comment on. A few weeks ago he correctly flagged up some hardcoded button text that we needed to move to the translation file, but here he looks like an idiot for saying it.

In Week 17 we had the idea of adding 4 audit columns which seemed excessive to me. This week, Andrei has added initiatedByUser column to the Database even though we have “CreatedBy”. Dave (Lead Developer) points out it’s redundant and asks where the requirement came from. Andrei says we need to “stay flexible and consistent with the database design. Relying on CreatedBy might create additional work later if it can be triggered by 3rd parties“. What is he on about? He’s gone mad.

On another PR, I noticed his database code doesn’t always update the UpdatedOn timestamp so I asked “if that was intentional because I didn’t know what scenarios the code was executed”.

He replies “you’re absolutely right!” then explains the exact scenario back to me, clearly an AI response. He then asks “can you confirm this is not expected?

It’s frustrating because I’m asking him that exact question.

He then screenshots it and sends it on Microsoft Teams which angered me further. If he gives me a link, I can get to the review to have a look, but a screenshot means I have to navigate there myself. He then says “please resolve if it’s not relevant, or we can have a call“. How do I know it’s relevant? He hasn’t given me more info. He loves Teams calls. So I tell him if the code can be called when the same user edits, then their new UPDATED ON isn’t logged. The line needs to be moved out of the IF statement. I also asked why he is pasting AI responses to me when he hasn’t understood what it has written.

He then explains it’s only really auditing if the user’s display name has changed and we update their name. So that sounds fine then, my comment was irrelevant after all. However he then says “it needs more thought because the change tracker object is excluding them“. So I say “I’m happy to mark the comment as irrelevant, but if he’s spotted a problem then I’ll wait for him to fix it before I approve the change”. He immediately says that he “can’t see any issues with it”.

However 30 mins later he sends me some code on Teams which implies there is a problem but most of it is commented out so it’s quite unclear what the fix is. I ask him where the timestamp is updated because I don’t see it in the code he pasted, and he gives me some line numbers but there are no line numbers in his snippet, so I don’t know what he is on about. He asks for a call, I think it’s a wind up.

Week 26 – 23rd-27th February

I pick up a User Story that was something like

“as a user, I would like customer details in the API call”

The user doesn’t want that. The user knows nothing about API calls. This isn’t a User Story in my opinion but most of our User Stories seem to be like this. Also, it has no detail to be clear what the scope of this work is. What customer details do we need? Which API call is it included in? I stared at the code for a while trying to make sense of what it could mean. I eventually wrote a single line of code but is it correct?

I kept on running into environment issues. Sometimes I cannot log in, sometimes it’s slow, and sometimes says ApplicationID is missing so the app doesn’t load. Then the data I wanted didn’t exist, but did the next day but I hadn’t changed anything.

Dave (Lead Developer) keeps doing what he wants. Multiple surprise PRs each day for things not on the board.

Ivan is going on about Redux but we aren’t using Redux. Andrei is going on about “caching enums” but I don’t know what that means.

VerbatimEcho are still violating our schema. You’d think they would have implemented it pretty quickly and got feedback on it, but we’ve been coding against a mock app so we’ve rarely been testing it.

VerbatimEcho changed their URL so now we need to add that to the firewall and security aspects like CORS.

Adam says his team can’t merge into Main until next month and only then can we see if our project works. 26 weeks in and we have no idea if it’s going to integrate together. Also, surely we need to Integration Test before they put their code in Main? When it is in Main, the code will then be in the next release. We really have no idea how to release software anymore.

Week 27 – 2-6 March

On the 4th we found that VerbatimEcho have said they won’t be complete until 13th March. Adam’s team will be ready by the 17th March.

Our app doesn’t work in the Staging for some reason.

The Project Manager suggested we should have had Daily Stand Ups with VerbatimEcho much earlier on. Isn’t that her job to approve each of their milestones? You’d think there would be a contract and she would be in charge of managing the project.

Marketing Manager – “We are changing the game when it comes to AI – end users watch this space

I keep running into environment issues which are a massive inconvenience to developing; app not loading, product search giving me 400 errors.

I picked up a bug to fix which needed debugging but no one in the team actually knows how to bug a Typescript app. They all just do “console.logs” like noobs. I managed to get it working after a bit of trial-and-error but annoyingly it launched a browser window without the Keeper extension so I couldn’t use the saved credentials to log in. Instead, I have to keep a different browser window open with Keeper logged in and copy each username/password/2FA across. Since the bug actually happens in another repository, I tried changing the package reference to point to the local files. However their repo refers to many other packages using this “workspace” keyword which then doesn’t build, presumably because they aren’t in the main repo’s workspace. Nothing is ever easy is it?

I later realised there were similarly named packages and I was actually updating the wrong reference. With the correct one in place as a file reference, I then got it working. Although I couldn’t get the debugger to work with it so had to resort to “console.logs” like the rest of the team.

Week 28 – 9-13 March

I realised that the issue was caused by one of our changes many months ago and seems specific to certain Product Codes and only when this property we added was set to True. Therefore it would only impact our project which is why no one found it earlier.

I then noticed that GitHub Copilot had added a comment on the original change which the developer ignored. I added the suggestion in and it worked. Although some unit tests were now failing and it looked important. With some refactoring, I made the change simpler and the unit tests passed.

The functionality in general seemed a bit janky though and the method was triggered multiple times when it didn’t need to. The main problem was a hardcoded 2 second timer which I think was to basically ignore some of these refreshes. I asked Copilot to fix it and it added even more timers! I asked a Premium AI model and it came up with a fix which was a bit copy and paste, but it works.

However, Ivan has been making large changes to this Add Product functionality. From what I understood, the current other issue is that you can select a Product Code, then go back to edit it; it hasn’t updated with your changes. Some Product Codes have more fields to fill in, and these weren’t set to your current selections.

I thought Ivan was fixing this “save state”. I tried our changes together and it wasn’t retaining the data or updating the data. Also when you clicked a new row, it also added the same selected product code there too which was obviously wrong. I told Ivan about it and he claimed it works. Then we ran into environment issues where the Customer Find wouldn’t work, or the Add Product picker wouldn’t work, or you just couldn’t log in. So that was a day written off.

We had a meeting to discuss outstanding issues and it seemed the other team members had found various issues. Some we needed to fix now and others maybe could be delayed until after the initial pilot release. Managers were raising concerns that we have never seen it integrated all together; it’s always been tested with mock data and we have interactions between SystemNow->ProjectFutures->Third Party, so there is a massive scope of things to go wrong between.

We had a demo where Alan (Head Architect) said our implementation was wrong. When the user selects a Product Code, then the text should be replaced. There was a huge message thread back and forth where part of it was debating about the behavior and others were debating about the word “replaced”. Alan was insisting that we never “replace” but I didn’t understand his point.

I can’t really picture how his requirements work in all scenarios. If you select a code then replace it, then what text does it then show? does it then revert to the original text? Then what about a standard example where the Product name isn’t as descriptive. So start with the text:

"High chair"

then they select

[Chair]

do we then display

[Chair]

then it's up to the user to type the "high" back in, or select the appropriate code.

Jean (Product Owner) asks how to log into our test system and says she has never seen any of the functionality herself. Week 28 and the Product Owner hasn’t seen anything.

Week 29 – 16th-20th March

We had Sprint Planning at 10 so that’s basically 1 hour written off. After 30 mins, we had an ad-hoc department meeting so we had to attend that. Then not everyone was free to resume planning straight away.

Rather than simply Sprint Planning, we ended up Story Pointing and/or prioritising items. We were going to drop one item from scope after discussing it for 10 mins. The discussion was that maybe it wasn’t needed for the Pilot release but was valuable later. Then Andrei said it was ready to review, he just hasn’t assigned it to himself and was working on it last Friday. Why didn’t he say that straight away?

Andrei keeps going on about the order of an enum and pasted a whole essay from AI about it. When looking at his changes, he has defined an enum to represent Gender with values F M I U but for U (unknown) should be 0 as that’s the default value. So instead of putting U first, he has then just specified values 1 2 3 0. When Marek asked why he couldn’t just put it first, he says that there’s some “migration problem with Postgres“. My thought was that if Postgres has its own enum with F M I U then now we have a problem because the database uses F as 0. Turns out we actually don’t store the number value, we only save a single character. So it seems fine, but then does the order of the enum actually matter then?

We then talk about another item Marek was currently looking at. We debated 3 or 5 points then shortly after the meeting, Marek sent it for review. So he could have just put some points on it without discussion because it was also already complete.

We were about to be ready to integrate SystemNow launching our Scribe app containing VerbatimEcho.

James: “With stakeholders wanting to access the app now via SystemNow and us yet to actually see it working ourselves, it might end up being a bit of a disaster. Is it worth mentioning to avoid any disappointment when it doesn’t work yet?”

Dave (Lead Developer): “we’re currently in the period of integration testing so it should be expected that we are finding issues.”

We had a meeting with all the teams to talk about the remaining work. Or that’s what I thought it was for. It turns out there was an issue where the other team need to refresh the browser 3 times for VerbatimEcho to load properly.

Alan (Head Architect): “why do you have to refresh the browser 3 times for it to appear?”

Jack: “Sometimes it is more!”

It completely cracked me up when he said that. He said it like it’s just an accepted thing. I mean, I suppose he has put up with it for a bit without previously flagging it as an issue but it’s a serious issue if that gets released like that.

Then we were told our App wouldn’t work at all in the Staging environment which was due to some missing config from the Users team so it wasn’t added to the list of “accepted products”. Then there was another intermittent networking issue.

Chris (Framework Lead) pointed out the communication flow was

SystemNow->Companion->B2C Auth->Companion-CA->VerbatimEcho->VerbatimEcho(Auth)->ProjectFutures-Users->VerbatimEcho

Sounds horrendously complex.

We did more of our classic story pointing. Four votes for 2, Three for 3, so you’d think the majority wins, but Dave (Lead Developer) went with 3. There was one later on which was even more where it was five votes vs two votes, but two won.

Dave is surprised that replacing a Product Code doesn’t work. I literally told the team this morning on the Daily Stand Up, and everyone apart from Lucy seemed surprised at it. Ivan kept quiet so I didn’t know if he was actually there, but I told him to fix it because he didn’t have anything to do and I needed to finish off another item by addressing the code review feedback.

Week 30 – 23-27 March

Dave (Lead Developer) is rushing quick wins out to appease Alan (Head Architect) and Liam (Team Manager).

Tuesday was a write off. I kept on running into different problems; couldn’t log in, or I could but the app wouldn’t load, or horrendously slow to load customers etc.

We are starting to integrate with the real VerbatimEcho app now. Some bugs we are finding now because they are blatantly obvious should have been spotted earlier.

If we add new Headings in our app, they error when sending to our API due to missing fields.

We aren’t populating the “Main Product ID” of the section, and not populating Product IDs for headers that aren’t “Main Product” which contain Product IDs. Or that’s what Andrei claims.

We aren’t setting the Provenance for new items. Andrei reckons we should just remove the validation on the API rather than passing correct data through the app. His reasoning that it is quicker. It’s going to be roughly the same effort in my opinion. If it was a complicated object to set, then it’s only going to be an extra day or so. If we do his suggestion, we have to come back to it in the future, undo the deletion and fix it properly anyway.

When AI fills in a row, there is a button you can click to “Show Source” which should open the Transcript and highlight the appropriate sentence(s). We have the button but it doesn’t do anything. I added the implementation to make this Show Source button work. Lucy is working on removing the button. Classic. This is the classic thing that happens when you do your own thing rather than what’s planned on the board. My item was on the board.

In the Daily Stand Up on Wednesday, Dave (Lead Developer) was attending another meeting so I spoke up. I tell Lucy where the prioritised list of items is. She wanted to work on the bug James logged about not populating values automatically. I said “we cannot do it without having a guarantee that the units are the same”. For example, you could have a size listed in cm or metres which is the same metric but a different scale (as in 1 metre is 100 cm). We could do a simple text match but it might not work in all scenarios. (e.g. match “cm” but the unit is sent as “centimetres”).

An example in another context is “M” could be “metres” or “miles”. There’s thousands of possibilities across all types of products so unless we verify all of them and have an understanding of the metric then we cannot do it. If we get the 3rd party to use a standard ID associated with the measurement then we can guarantee it matches.

The next day she insists on working on it. At first, Dave (Lead Developer) seems fine with it but then realises we had recently said it wasn’t safe. He then explains similar scenarios I had explained yesterday when Dave wasn’t on the call. Despite that:

Lucy : “Shall I carry on working on it? I’m not sure if I can continue

James : “We can populate the values at least, then we know its unsafe

What is their obsession with doing this work? We have probably wasted 30 mins at least explaining why it’s not safe to do it.

Week 31 – 30-3rd April

Adam said some of our events aren’t working correctly.

VerbatimEcho say they changed start_finalization event to camel case to match the rest of the events. Dave (Lead Developer) says we’ve been using startingFinalizationProcess which used to work. So he doesn’t know what they are talking about since that is already camelcase and has different wording.

Jean (Product Owner) is seeing it integrated for the first time. The side panel is small and when extra warning banners are shown it squashes it vertically, cutting off the buttons and therefore unusable.

VerbatimEcho recording is currently not working. It intermittently records what you are saying so either misses the entire sentence or has several missing words in each sentence. It’s extremely frustrating to have to say loads of statements to hope you can fill the minimum words to get to the app. We really need to go back to our mock app but it needs some extra config changes or something to work again.

In Story Pointing, there was one item where everyone voted 5 apart from Lucy:

Lucy: “I was thinking 5. I’m not sure why I voted 3”

I don’t understand why she has to lie or chicken out of her vote every single time.

We did tell VerbatimEcho yesterday that their audio recording suddenly barely worked. They didn’t seem too fussed about sorting it. But since that is step 1 in the process, it should have been high-priority.

After chasing it up, VerbatimEcho then said it was only present on the Developer environment which is “vulnerable to instabilities“, and implying that contractually they had no obligation to fix it as a priority. I think “vulnerable to instabilities” just means it gets new features first, and therefore the bugs first; so he is just saying “these things happen”. But surely the entire feature not working 99% of the time is somewhat urgent, at least so we don’t think a company that specialises in speech-to-text software aren’t a bunch of cowboys when the recording feature doesn’t work. You would think they would have automated tests which would catch such a significant problem so it’s impossible to release like that.

Regardless, he was lying, or misinformed. It also affected their Production environment so it’s a shambles of a process if a broken feature can be rolled out like that.

Another problem being spoken about is that there is roughly a 125 consultations per hour limit due to a Third-party API rate limit that VerbatimEcho are using. VerbatimEcho say they are making around 40 calls per consultation on average. Our Software Architects are quite concerned that this is a major flaw that we need a solution for.

Week 32 – 6-10th April

James says he needs help, then was gone 11:30 to 12:30 when he finally replies to me. I asked him a follow-up question then he was gone till 1pm. I was gonna ask Lucy but she was gone for 1 hour. Another question, another 45 minute wait. At 4:15, I asked him another question. I noticed he’d been gone since 3:30.

On Wednesday, UsersAPI made a change which was reported at 10am but might have occurred earlier. It showed BLOCKED when attempting to log in. Lucy and James only noticed at 12:15 which makes me wonder what they have been doing all morning. UsersAPI team reverted it but it didn’t build.

People are spamming the channel with bug reports. We’ve got Jean (Product Owner), Safety Officer and UX designer testing it out. If only they viewed it earlier rather than when we were supposed to be finished the project.

On Thursday, we had official confirmation that the “Autopopulate units” idea (which Lucy keeps insisting she works on) cannot be done safely.

The “End of Development” demo was scheduled today. We now have loads of bugs to fix so we delayed the project once more.

The Config team added a new value without telling anyone which resulted in no apps when logging in. So that was quickly reverted Friday morning but blocked most teams for a few hours.

The Friday Retro was cancelled for the 3rd time in a row. (We didn’t have a retro again in subsequent weeks either).

Managers are very concerned with the slow performance from VerbatimEcho. VerbatimEcho claimed their production environment was fast, but we say otherwise. I saw Mark’s claims of “7 seconds app load” and “3 seconds customer load”.

Week 33 – 13th-17th April

It was Bank Holidays for the Contractors so some days we had fewer team members.

Usually we had a process of:

  1. Developer makes a fix, 
  2. team members review,
  3. a dedicated Tester tests it works, 
  4. then demo to the Product Owner for the final sign off.

Currently we have: 

  1. Developer makes a fix, 
  2. team members review, then that is it. 

So that is why the PO, UX designer etc keep finding bugs or missing requirements.

We were discussing making a change to our process but then Liam says:

“There’s absolutely no reason that the person who fixed it cannot verify that it works”

Liam (Team Manager)

Which is just completely against the usual software development process. Any experienced person in software development knows that.

Liam goes on about how we’d have to track metrics on how long it takes external reviewers to approve. His aversion was also that it would hurt our velocity if things got delayed or reopened. This is also dumb. Software Quality is about “delivering the right thing”, not “delivering the right thing fast”. He is just chasing “velocity” which results in the wrong thing fast. I don’t think we have gone fast though, we are massively delayed.

It sounds like our managers have had strong words with VerbatimEcho about their shoddy performance. It wasn’t just on app load, but the time it took to process the recording.

They came back with a detailed PDF hyping up their technology:

“Following extensive benchmarking across six models and multiple commercial providers we can confirm that the current implementation is performing as close to state of the art as possible.”

VerbatimEcho

Thursday morning, I had the “no headers yet” control ready for review and told the team in the Daily Stand Up. On Friday I made it clear that I still need 2 people to review. By Friday 5pm, no one had reviewed it, and I had my new item completed to change the Enter/delete/backspace behaviour in the editing controls.

Week 34 – 20-24 April

Lucy has the week off. Andrei logged a bug about needing to double-click for the caret to appear in the editing controls. I didn’t notice that problem on my branch, or on Main, so I got his branch that was “Ready for review” and saw it happen every time. I wrote that on his PR.

Wednesday; Pilot release is delayed again; pushed back to the 5th May. Ivan is ill so took a day off. He did a Classic developer blag update “Rebased… begun investigation”; so you did nothing then.

Adam wanted 2 weeks for regression but has been told they have 3 days. Liam (Team Manager) says we need more people in the team, which we definitely don’t. Our current size is the problem, since it means we split the work up too small, and we end up dragging items out with the usual Parkinson’s Law.

Andrei still hasn’t fixed his bug but he’s still saying it needs a review when in the Daily Stand Up.

I noticed a loading spinner on the VerbatimEcho finish button. It was positioned slightly off the control which was a really weird choice.

On Thursday, Andrei says he “tried to sync” with me about the issue I pointed out on his PR Monday morning. I never noticed the message and he had never chased up. So he has been blocked on it for 3 days but only saying that now.

Our contractors began having problems with our VPN which meant they could no longer even connect to GitHub so a couple of days were a write-off for them.

We discussed in the Daily Stand Up that the new VerbatimEcho spinner is due to the “Real Time Fact Extraction”. Since we complained about how long it took to summarise the recording, they had changed it so it starts working as you speak. It’s just a waste of processing if you cancel, or accidentally leave the recording running. If there’s a slight delay with the final words, there is a delay before you are allowed to click finish. The UX designer absolutely despised this. I suppose it doesn’t look good and can seem frustrating. The alternative is just to let them click finish and just have the main loading screen like they were showing previously. Suppose that would probably be the most logical implementation.

Some sites are already trying out VerbatimEcho without the integration with our software. I’m not sure what version is on live because they are constantly changing the text it generates, yet claim to have loads of customers around the world. So what does their currently released software do?

We’ve had some feedback on the VerbatimEcho feature in live compared to their biggest rival. VerbatimEcho:

  • Doesn’t pick up technical terms as accurately
  • Doesn’t understand other languages
  • Often duplicates entries
  • Negation statements not understood

Liam (Team Manager) says the negation is a massive issue and declares it UNRELEASABLE

Week 35 – 27-1st May

Our contractors are still having problems with our VPN. Liam (Team Manager) asks to describe the problem in detail so he can escalate it to Group IT.

Andrei says he is following steps to add “New Company”. Dave (Lead Developer) points out his screenshot says “Previous Company”, so he is using the wrong credentials.

Andrei says he cannot add “Previous Company” and shares a screenshot showing he has typed “Previous Company”. No error message or anything. Just showing he has begun to do something dumb; using “Previous Company” rather than “New Company” credentials.

Marek then acts surprised that deleting “Previous Company” allows him access to GitHub.

There did legitimately seem to be a problem because they couldn’t sign-in with “New Company” credentials either, but removing “Previous Company” from the application allowed them to connect to GitHub at least.

I don’t know why the contractors were set up differently. They all claimed they had always been set up with Previous Company credentials in the VPN and hadn’t been told to switch at any point.

There were a few other instances where they asked how to get access to things like Dynatrace. We told them it used “New Company” credentials but they clearly tried to use “Previous Company” then posted a screenshot showing as such.

We had a surprisingly long refinement session. We are supposed to have finished the project; but then there’s all this work I haven’t heard about. It all seemed like the most boring work. Some UI changes or Background jobs to delete data when past the retention policy.

Andrei finally fixes his “focussing on first row when you switch tabs” issue. It’s full of hacks. I tell Andrei that 150 lines of hacks probably isn’t a good idea. It’s messy and going to cause more bugs.

On Monday Alan (Head Architect) starts kicking off that the “associated text” bug isn’t fixed. It has to be fixed by tomorrow! Tuesday morning it was! Were VerbatimEcho just holding onto it all this time? Or was it that easy to fix?

After the Tuesday Daily Stand Up, Dave (Lead Developer) calls a meeting about Andrei’s change. I say that it could most likely be fixed in the “Add-Product” package. Dave agrees that’s most likely the case. We agree to check in the simplest fix for Andrei’s item. A new one will be logged for the edge cases.

Ivan has picked up the bug Andrei logged about double-clicking. You know, the one I told the team was only in Andrei’s branch. They now agree that the reason why Ivan cannot recreate it is – that I am correct.

Apparently, we’ve given VerbatimEcho a deadline of tomorrow but I don’t understand how we expect them to get it all perfect.

  • Inconsistent splitting
  • Qualifier duplication
  • Hallucinations
  • Not using preferred product codes
  • Duplication of comments
  • Some comments not descriptive enough
  • Wrong product codes used for certain items

Check out this confusing series of statements from Alan (Head Architect)

Alan says it crashes when adding value codes to the Main Product Heading. You shouldn’t be able to add value codes there, but he specifically says “we must not SEND values”. The logical way of phrasing this would be to say we must not allow the user to ENTER values (therefore we wouldn’t send them). Saying SEND implies it’s fine for the user to enter them.

He wants it fixing, hopefully by tomorrow.

Dave (Lead Developer) says it should be handled natively by the Product control we used but we got told to set the property to MainProduct=false because we didn’t want all the other qualifier fields which aren’t shown when MainProduct=false. As a side-effect, it also means it allows entering values as an unintended behaviour.

Alan asks when we do send the values, does SystemNow ignore or crash? But he just saw it crash so why is he asking?

However Adam reckons he added validation code to ignore values in Main Product Heading; implying the crash is a different cause.

Alan declares everything is fine then: “no change necessary“.

We are all like “wait…what?

Dave says we shouldn’t just “stop sending” values, or ignoring values. The actual fix is a third option – to stop users entering them.

Jack confirms it does crash. Alan says that it’s not possible to add a value to a Main Product Heading in ProjectFutures (contrary to his initial claim where he said it crashes when you do that).

James shows a screenshot of the Main Product Heading having values in ProjectFutures.

Dave repeats that the cause is that Main Product Heading allows values to be entered due to us setting MainProduct=false. It needs more thought to be able to hide both qualifier fields and values fields.

Alan repeats, (probably in an aggressive tone) “you cannot add values for Main Product Headings, full stop.”

Alan then uploads a video of him adding values to Main Product Heading codes and it crashing on submit.

On Friday, Liam (Team Manager) questions why Andrei’s item has been thrown back in the New column. Dave says it will be fixed as part of the additional bug we logged. I interject because that makes no sense, we created the bug to fix what wouldn’t be fixed as part of the main change. Andrei should have checked in a simple fix, and not abandon it. So I take over and complete the work instead.

Week 36 – 4-8th May

Ages ago, Andrei was talking about “caching enums” which he had a Draft PR for, then just abandoned it. This week Andrei told Marek to pick up the work.

A new bug was found. It turns out we allow any type of Product Code in each heading but SystemNow actually has a restriction in some sections. If we send data that violates that restriction, then it is rejected. I thought we agreed early on that any Product Code can go in all sections; the exception of course is Main Product Heading like we discussed last week.

James is saying the API throws validation errors if you save a blank page or a page contains a blank section. Shall we add validation client side then ask the user to remove blank sections before trying to save, or just strip the data client or API side for the save process?

“Sometimes the user will forget to add data and won’t want the section to be removed. What do you think about that?”.

Andrei

I think you are chatting nonsense. Why would they want a blank section to show after saving? They can always edit it and add new sections if they legitimately forgot to add data.

On a Town Hall, one of the Senior Managers stated to the department:

“Scribe is far superior to anything else on the market”

Senior Manager

Ironically, a day later, VerbatimEcho went wild and became even worse.

Me: “Weight 12 stone four”

output:”Work off stone farm”

The inconsistency that you can do the same consultation on the same day and get different results is worrying. But then it has days where the quality drops significantly.

I also noticed “centimetres” was always “cmso the Transcript isn’t verbatim like we asked in the requirements. It made me wonder if this was why the end result was often so inaccurate – that it changes what you said, then AI can’t make sense of the modified transcription.

Another theory was that I just wasn’t speaking clearly so I put my phone next to the headset and recorded at the same time. I then generated the transcription with AI on my phone. My phone was at least 95% accurate and the words it did get wrong was a logical possibility when you listened to the recording (my pronunciation was ambiguous). Turns out great speech to text technology does exist after all.

VerbatimEcho reckon their solution is “state of the art” yet it’s usually 60% accurate to me on a good day, and completely unusable on others.

Week 37 – 11th-15th May

Liam (Team Manager) says that Pilot should start 18th May. However, he also said VerbatimEcho are rewriting their implementation due to the poor quality. Weird, I thought it was state of the art last week?

Marek and Andrei are still going on about caching enums. I still don’t quite understand what it is. Their PR described it as follows:

“Pre-cashing enums at startup removes one time initialization costs from the hot path keeping performance test clean and consistent “

and

“Isolated into a non parallel collection because some tests mutate or poison the process wide static caches. Eg warming up assemblies containing duplicate keys”.

What the hell does that mean? It sounds AI, but the spelling mistake (Cashing) makes me think they partially wrote it at least.

Ivan is supposed to fix the focus issue, but I test it and don’t see any difference. The main method that sets the focus is unchanged and there’s several places in that same file that can also set the focus, so he can’t have tested it, or even made much attempt to investigate the problem. 

The “New VerbatimEcho” date is 19th May. I can’t expect much changes if they think they can turn the problems around in a week. They plan to drop more enhancements in “phase 2” which is 22nd May which sounds even more bonkers. Why would it take several months for a terrible solution then they can fix it in a week just because we are complaining more?

I spent ages writing a handover document so someone could investigate the bug I was working on. I had a fix that worked but was a few hacks, plus some good changes just to reduce component re-renders.

Week 38 – 18th-22 May

I took the week off. I’ve been waiting for a slow period in the project, and was fed up with how bad VerbatimEcho is. I hoped they would live up to their promise and have it fixed when I return.

The team switched to a different JFrog server, which ended up being several small PRs in classic Dave (Lead Developer) style.

Another bug was discovered where: if you apply a Product Code suggestion, then uncode it, the original suggestions no longer appear.

Idempotency solution doesn’t work, or so Mark claimed. He pasted loads of claims from Copilot which Dave said was incorrect. Dave countered with his own Copilot. I think Dave was right in the end but there was a lot of back and forth and it was hard to follow. Just ridiculous that we debate using different outputs of Copilot.

On Thursday, a new firewall rule blocked authentication so no work could be done because people could not log in.

VerbatimEcho have pushed out an update that has drastically increased the description detail. Where you have said loads of content, the consultations contain massive amounts of text. It’s way more verbose than we are used to. We are not sure what caused them to change this and why it wasn’t possible before. It was soon rolled back.

There was a discussion about what to do with silences. Do they show a warning so users can consider microphone issues? What about if it’s not a silence but lots of audio interference which makes the audio unclear and unprocessable? The concern people had is showing a warning when the user intentionally pauses can be very annoying or alarming to the user.

What I don’t understand is this: surely these are “solved problems” by VerbatimEcho with all their other customers. Unless they don’t actually have any. This idea seems more and more likely doesn’t it?

Mark pointed out that 6% of recorded consultations get wrongly rejected for not having Product-related content. He also sees the old processing version numbers in the JSON, so it’s either wrong, or we aren’t actually using VerbatimEcho’s new updates.

Week 39 – 25th-29th

Monday was a bank holiday. Dave (Lead Developer) has the whole week off. Lucy and James had the day off Tuesday.

I checked my User Story that I had written the handover document for. No one had looked at it. I was fuming. I spent hours writing that document, and I really didn’t want to look at this bug again.

Andrei said he would pick up Dave’s work that Dave had told the team to finish whilst he was off. It really just needed testing. However, Andrei then said he didn’t want to complete one of Dave’s PRs for a bug fix because I had already got a similar fix in the branch for my bug fix (that I may or may not include in my actual fix), yet Liam (Team Manager) had said Dave’s item was urgent to get in ASAP, so Andrei should just check it in.

Also, I had some updates so rebooted my computer, then WSL wouldn’t work. I rebooted and had more updates, so I rebooted and had more updates. Restarting took ages, then it was the end of the day. I definitely need Andrei to check in that fix if it is needed.

On Wednesday, Andrei asked to talk after the Daily Stand Up. He said he thinks it is important to get the bug fix in as soon as possible, so it shouldn’t be checked in with my changes. I tell him that’s exactly what I told him yesterday. He then asks me to do it, even though the work is assigned to him. Hours later he then says he hasn’t got the “Add-Product” repo building due to an PNPM error. He was supposed to have been working on this Monday, what has he been doing?

I ended up completing it by Wednesday lunchtime, then when Andrei was ready to check in the PR on our repo, I told him we needed to update the version number of the “Add-Product” package to actually get the bug fix that I checked in. He ended up typing loads of words about it being irrelevant or something. I noticed that Ivan also had a fix to check in for “Add-Product”, so I thought it would just get updated when Ivan completes his work. I don’t get why Andrei volunteered to finish Dave’s work then has spent more time typing meaningless words to not do the work.

Marek is working with Andrei to remove those CreatedBy and UpdatedBy fields. They keep talking about “Orphaned Tables” and “Self Referential Foreign Keys”. I didn’t know what they were talking about at first, but I think there’s a UserTable which has these CreatedBy/UpdatedBy columns and it references a UserId. So I think when the User uses the feature for the first time, then they get a User created plus these audit columns then refer to itself. Then if you deleted the row, it sounds like it throws a foreign key violation. Not sure if that is true though; I’ve never heard of a row referring to itself. You could only create that by inserting a row but with NULL in the CreatedBy column, then instantly update it to then populate it with its own ID. 

Regardless, this is extra work due to Andrei and Dave (Lead Developer) insisting we have these columns because “they might be useful, even though the Architect did the DB design and designed it to be useful to his Monitoring tool, and he didn’t have a need for these columns.

VerbatimEcho still seems inconsistent. Sometimes missing words, sometimes abbreviating words, but nearly always misunderstanding at least one word in each sentence. What happened to this new version we were promised?

Week 40 – 1st – 5th June

One of our managers had complained to VerbatimEcho that the transcript was randomly missing out words, and completely mishearing words, which is what I’d been saying for a while but no one else seemed to have noticed it, unless they have just been chilling, or ignoring it. 

The manager said he could record the audio, then reuse the same audio and expect the same result. However, he gets different transcripts and gets different consultations when processed; even in the cases where the transcript was very similar.

VerbatimEcho’s response was:

“Just to clarify, were these the exact same audios? If the audio was recreated slightly differently, then this would make sense which is the only assessment we’re able to come to”

I’ve got an idea, why don’t you test it out yourself? Record on your phone then compare the transcript. It took me a few minutes to complete my recreation. I checked my phone recorded and transcribed it perfectly, and then compared to VerbatimEcho which had various inaccuracies on every line. Then I used the same recording for 2 more consultations and got different results. 

Now, you could say each time I made the recording by playing my phone’s recording – that the recording wasn’t EXACTLY the same because of various background noises like cars driving past the house. However, you would think the audio processing would strip out background noise and would be analysing the words and tone which is EXACTLY the same because it’s a recording. They can probably just send in a pre-recorded file anyway to get an EXACT test.

It winds me up so much that they instantly deny our reported bugs, claim it doesn’t happen, or can’t happen, then later have to admit it does happen when they finally check it. They clearly haven’t bothered investigating or completing an “assessment”. They just lie all the time.

We’ve been discussing rolling back some of the UI changes. The removal of the delete button on each line has annoyed Alan (Head Architect). Then we were talking about rolling back the change we made to group together the text areas into one larger one per section. I said we shouldn’t make changes without approval of the UX designer, otherwise what is the point of having him assigned to the project? He had spent hours designing this. Anyway, the UX designer has been temporarily reassigned to one of those stupid ideas we have occasionally; where it’s a project to discuss a new process and becomes top priority and everyone is completely ringfenced. Under no circumstances can we contact him.

I realised the Customer API was broken, but couldn’t see anything posted in the Environment’s Team’s channels. This would affect everyone working on ProjectFutures. I asked my team about it. 30 mins later, Andrei says the integration tests are failing on PRs. I thought it makes sense if the Customer API is down because that is a prerequisite. 30 mins later, Dave (Lead Developer) says he’s re-run the tests and hoping for the best. But James says it’s most likely that an API is down. It’s almost like my entire team didn’t see my message.

The next day Dave says he’s noticed the API is down. Then other teams begin to complain about it too. The Customer API team admits they pushed out an update. 30 mins later it “is fixed” because they rolled it back. Except that it wasn’t fixed because you couldn’t SELECT a customer (only SEARCH for them).

What I’d like to know is – how people do so much work without using the app? Or is it that they are chilling so it’s always me that finds the issue first? Even though I’ve been massively chilling the entire project. I’ll call this the “Chill Paradox”.

Liam (Team Manager) said that they tried to set-up a new environment and although the app loads, it doesn’t transcribe. The animation plays like it is recording but no words show at all. I said I had seen the issue but then it started working later on. He had thought it was a problem with their Staging environment but I said I was using the Development environment. Liam informs VerbatimEcho of the problem but never mentioned I had seen it.

We had some kind of Sign-Off meeting for the app to go to the initial Pilot sites. What happened to the 18th May deadline!?

Just before the meeting, Alan (Head Architect) posts a recording. Everything he said was transcribed wrong. Words and sentences were missed out, numbers he said were transcribed as a different number. He didn’t complain about any of that though. He was angry that he has a weight in Stone and our app is supposed to convert to Kilograms but it showed as Stone so failed to file into SystemNow.

In the meeting, I find it weird how we are all pretending it is good enough to go live. It’s been a disaster. 

“How do we know VerbatimEcho won’t update something and make the solution worse”

Liam (Team Manager)

Me (to myself): “It can’t get worse than this

I get annoyed how I find problems with VerbatimEcho and I am the first one to rant about them but then others are like “yeah I have seen this before”. WHY IS EVERYONE PRETENDING IT IS OKAY? I also pointed out on the recording screen, the Transcript shows the accurate times. When the processed Consultation loads, the Transcript shows completely different times, presumably because it has trimmed the silences and then showing the new times. But the user does not have access to replay the audio. The only way they could do that is by recording it separately but now the times will not match.

Week 41 – 8th-12th June

Dave (Lead Developer) and Liam (Team Manager) log in at 7am or something daft for the site activation. But it’s actually turned on at 12:30. No users use it that day, or even the day after.

We have another Story Pointing session, mainly about reverting some of the UI changes to the text areas. Some of the stories for reverting are 3 points. Some tweaks to behaviour are 3 points. Similar tweaks to behaviour that could probably be fixed together, all at 3 points. No one really cares about my protests that these are 1 point stories, or a 2 at a push, and we don’t need to split them up so much.

Mark is trying to process files for his Monitoring tool. I still don’t know what it does or how it works but he claims that a 4 min file is stuck on processing status for 45 mins. VerbatimEcho say they have only just activated scaling on that environment. Mark reckons he is talking nonsense because it’s a single request, nothing to do with scale.

Andrei fixes one of the deletion stories but then I realise he has removed the behaviour for deleting the Product Code Badge. I point it out and he sends me links to the User Story. He messages me telling me to resolve the comment “as irrelevant“. I told him I understand the main issue and confirmed he fixed it, but he had also wrongly removed functionality for the Product Code Badge. He said “it’s in the user story” and pastes the entire Acceptance Criteria to me, but states “further improvements can be made in other user stories“. That doesn’t make sense to me because these “improvements” should be done now, or shown to actually be requirements in other User Stories; otherwise it won’t get done.

After reading the Acceptance Criteria again, I then noticed a requirement I had overlooked. It specifically calls out that “deletion of Product Code Badge should remain unchanged”. Andrei backs down and says I’m correct. Funny that he said “it’s in the user story” to do it, but it actually specifically says not to change the behaviour.

Dave (Lead Developer) runs out of GitHub Copilot credits. Andrei says “we should either reduce usage or request a higher limit.” Cheers Captain Obvious what would we ever do without you?

Andrei fixes quite a few small items. A mix of 2 and 3 Story Points but clearly just took a few hours like I thought they would. So my protests during the Story Pointing session were proved correct.

Week 42 – 15th-19th June

The upper management are annoyed at the metrics because they seem inaccurate and there’s not much data. Liam (Team Manager) had an example in Dynatrace where he looked at the last 7 days and there were 4 entries. He manually selects the 10th-15th which is just the previous 5 days; there were 80 entries! I had problems like this when we used Datadog. When it shows data that makes no sense, then I don’t know why we spend an insane amount of money using it.

Dave (Lead Developer) and James were trying to add extra info to get more logs, and of better quality. Seemed quite trial and error, but eventually they got some improvements in.

We seem to have basically run out of work but no one seems to be bothered. Marek and I were asking for work, and the rest of the team had nearly finished with theirs.

Marek was upgrading the DotNet version to 10. There were some code analysis errors that appeared, so he suppressed them. Andrei challenged why he didn’t fix them, and he seemed to make out it was a lot of work. It wasn’t a lot of work, but just needed to make small changes in maybe 20 places which would clutter the PR. So it did make sense to split it out across two PRs, but then he started asking to create a new User Story for it, but it was unnecessary. I challenged him on it, and the team agreed with me.

We eventually had a long refinement meeting but we were mainly saying how the old bugs people logged were contradictory and that’s why we had basically blocked them. Lucy says she has some new bugs to log. Why didn’t she just log them? They were quite simple things that were similar to previous issues we had raised like interacting with controls whilst the Product Coding Panel is open (it then closes and ignores what you clicked on).

They will be straightforward fixes but we probably spent longer talking about them. The main problem was that Jean (Product Owner) didn’t understand them and kept on trying to recreate them as we talked her through it over and over again. Then when the fix was debatable, we asked her to make a decision but she either didn’t understand it or was incapable of making the decision.

We had a couple of User Stories to change how the Product Coding Panel works on small resolutions. It usually opens when you click the Add Product icon, or just click into a row. On small resolutions, we will just open it when you click the button. Another User Story was to  overlay rather than squish the text fields. We will also move the Product Coding Panel to the right so it will cover the end of sentences rather than the start. I didn’t think that would make too much difference overall but that’s what the UX designer wants.

Lucy disables adding codes on small resolutions completely. I told her it was just to disable opening the Product Coding Panel when clicking the text field; but you can still open it by specifically clicking the icon. She then says: “the intent here was not to break small screen coding – it doesn’t seem to be readable”.

Well, you have broken adding codes, and the new design is still unreadable in my opinion because we still have limited space and are now masking the rest with an overlay. So I think we should have questioned the new design, rather than actually just doing it.

Lucy says Ivan will fix what she has intentionally broken in another User Story. Andrei says he agrees with Lucy’s approach. I don’t understand because what Ivan will have to do is just restore the logic she removed, but then add a condition to block specifically when clicking the text field. But that describes the exact requirements from Lucy’s item. So in my opinion there is no advantage to temporarily break the functionality, and it just moves the required work to another team member.

I finish the week with 5 items waiting to be reviewed. I don’t know why people are reluctant to do reviews and it frustrates me when I keep saying each day that they need reviewing and it still doesn’t get done. It’s more frustrating that people were saying they had nothing to do, and still didn’t review my changes.

There was some User Feedback shared from the pilot sites: “it’s a bit rubbish“. They also mention it often “fails to generate the summary so you lose all your work“. In order to keep using it, he “Doesn’t have the confidence so will have to record using another AI product at the same time as a backup”.

Remember my initial prediction at the start of the project?

“How easily can the user recover if they have recorded a 10 minute clip but haven’t filed the data due to an error? I’d imagine once that happens a single time, then the user will stop using the feature”.

Me

Week 43 – 22-26 June

There was a call arranged to discuss the possibility of releasing to 4 more Pilot sites. The meeting was cancelled and I think it was decided to not release.

On Tuesday, we had a meeting to discuss the remaining work and a new item about displaying a warning to the user that certain warnings won’t be displayed when saving when a consultation is created via the Scribe.

Jean (Product Owner) said that pilot users have been reluctant to use our software because they have seen crashes. It’s exactly what I feared. As soon as they see a failed consultation then their trust in it will be zero and they will no longer use it. If you have spoken for 10 minutes then it fails, it is maximum frustration.

As the discussion progressed, there was a suggestion that users did not like the Product Coding Panel which had caused us loads of problems to get working as it does.

Then there was talk about scrapping our data entry completely in favour of the existing Consultations module that has also been drastically improved recently. So that will mean the UI side could be completely replaced.

Then there was talk of another team attempting to recreate our own AI product so we can bin off VerbatimEcho.

So it currently sounds like the product we have worked on is going to be completely replaced.

James claimed he had been secretly investigating making his own Scribe. No one had asked him to do this, and it wasn’t clear what he had done because it would probably involve signing up to various tools/services to make it work.

Week 44 – 29 June-3rd July

We were shown the new Scribe, it was made by Alan (Head Architect) and Mark so I suppose that was no surprise.

They showed a complex consultation and it seemed 100% accurate with transcription but also generated the consultation notes in real time, and was suggesting actual Product Codes for each statement. It seemed very fast as well. So it seemed better in every aspect.

No idea if it was using any hacks or would scale well, but they have proved the idea is possible regardless. It seems like they got this working in 3 weeks too which is incredibly impressive when you compare to VerbatimEcho who are supposed to specialise in this.

Tuesday, Liam (Team Manager) confirmed that the VerbatimEcho contract will be cancelled. At the end of the day, it was suggested that the plan really was to get rid of our UI work too.

I’d love to be a “fly on the wall” at VerbatimEcho. This contract would have been absolutely massive for them, and to lose it could be potentially crippling to them.

Conclusion

Another project cancellation, and it was supposed to be the most exciting project for the company in recent years. 44 Weeks to decide it wasn’t good enough for users, and that’s after around 6 months of delays and internally declaring “”Scribe is far superior to anything else on the market”.

I think the following would be a good summary of the main failures. Some directly contributed to the cancellation, whereas others just contributed to the joke.

  1. Microsoft Copilot used to create the User Stories; sometimes invented irrelevant requirements.
  2. Splitting up work so it’s too small. Makes the refinement meetings too long, and creates blocking dependencies.
  3. Team size slightly too big which meant we needed to spend longer in planning meetings to get enough items for everyone.
  4. Planning sessions ended up including some refining and estimating which should have been separate meetings.
  5. No conviction when estimating: People instantly backing down on their vote. Choosing minority vote as the final score made voting often feeling pointless.
  6. Daily Stand Up delayed till 10AM so contractors are sat around for up to 3 hours.
  7. Liam, Team Manager not clamping down on James’ constant lateness.
  8. Liam or Dave not holding people (mainly Ivan) to account when they’d claim to fix items but were still obviously broken.
  9. Andrei often made up requirements.
  10. Lead developer, Dave, not doing work that is on the board.
  11. Project Manager wasn’t meeting with VerbatimEcho. Not holding them to account when their delivery was sub-par.
  12. Early product demos were a waste of time. Marketing don’t need a demo of a button or a tab control.
  13. Team not informed of other teams related to the project. The sudden declaration of Adam’s team, or the “Partner API” AI Scribe.
  14. Took 30 Weeks to see the application integrated, then we had a massive influx of discovered bugs.

What happened to the revolutionary software?

I work at a software company whose flagship product (which I’ll refer to as SystemNow) has been around for maybe 20 years now. However, even way back in 2016, the software architects began a project to look into what the next software would look like (ProjectFutures), and development really started ramping up around late 2018/early 2019

I reckon it took around 5 years of development for SystemNow to be initially released (then continuously enhanced and fixed), so maybe you would think 2023 could have been a good release date for ProjectFutures – its core features at least.

However, in 2025, as I began drafting out this blog. Despite the claim from managers that ProjectFutures has been “released” and is a “success”; in my opinion, it’s like 10% of the scope, and barely been spoken about. 2025-26 has seen little progress.

I think it’s been an absolute disaster and I do wonder where it stands among other high profile software disasters. So I thought I’d reminisce and go back through the many poor decisions and failures along the way. You could say there’s all kinds of failures, and you probably can’t point your finger at any one aspect/decision, but many intersect.

Why Rewrite It?

When we have a very successful software product, then why rewrite it? I had a quote from Cory House who explains some of the reasons for the initial drive:

“Each year, I work with a few teams that are basically doing the same thing: Rewriting old web apps to use React. The old apps use ASP NET Web Forms, JSP, jQuery, Cold Fusion, Perl, etc. Often, the requirements are simple: “Make it work like the old one”. 

This might seem silly. If it ain’t broke, don’t fix it, right? But there are good reasons:

  • They’re having a hard time hiring and keeping good help.
  • It’s harder for them to add new modern features compared to modern technology.
  • The old tech isn’t actively supported.”

Internally, I’ve heard various of our Software Developers complain about “Technical Debt” (or the perceived amount of it); which was the excuse for slowly getting features out, or an excuse for introducing more bugs as we fixed other bugs. Common excuses like “this code is messy and hard to read or change”, “there’s a lack of tests so if I change it, some requirement may break which I didn’t know about”. The “old tech” was often criticised for contributing to a slow deployment process. We did lose a few developers who wanted to go work on modern web technology using Cloud and other buzzwords.

So for a company with previous experience making a market-leading software product, and with a large team of passionate developers who think they know what great code looks like; it should be pretty easy to deliver, right?

Failure Reasons

Reason 1: Skills in the wrong areas

SystemNow was C# front end and SQL Server backend. The vision for ProjectFutures was that it would be React (Javascript) frontend, then using various Cloud aspects (Lamdas, API, DynamoDB). Some developers have the capacity to learn quickly and could instantly claim they are a Senior in the new language. However, most people basically go from a Senior in C# to Junior in React. If most people are Junior, then you end up writing code that is full of technical debt and so you cause the exact same problem you criticised the old SystemNow code for. (I think this was proven by the restarting or cancelling projects as explained later).

As a similar point, we also hired people too quickly. We have severely reduced hiring people in the UK and gone for hiring in India. Aside from some being poor communicators (and then having Indian English grammar and phrases which people have to get used to; (ie “do the needful”, “preponing meetings”); being Indian isn’t inherently bad. The problem is that as a business we have wanted to hire large amounts at once; which then leads to an “accept all” type of hiring. In addition to wanting to pay low wages as well; you end up attracting people that can’t get a job elsewhere. So you end up getting loads of Junior developers all starting at once, some with no experience of making software at all, and some only having basic understanding in a programming language we aren’t even using e.g. Python. There were some good hires but I think it would be better just to go with far fewer staff but higher quality engineers that can really drive the decision making. 

Reason 2: The Cloud

The current way of working is that the developers created software, then gave the build to the Deployment team to release. The clear separation means you can specialise your knowledge. 

This mindset to move to “the cloud” means that now the Developers have to have more understanding how their code is actually deployed.

Historically, over time, specialist “Frontend” developers and specialist “Backend” developers were replaced with more generalist “Full Stack” Developers. Now you are throwing servers and deployment processes into the mix (DevOps), so now it’s like “Full Stack plus DevOps”.

Due to this, you spend more time learning, more time investigating, and giving worse output because you don’t specialise in it.

The world of cloud computing is full of buzzwords, especially if you use multiple providers (Azure vs AWS naming is completely different). This is extremely daunting and gives you a massive list of things to learn before you can even begin to communicate with people.

No idea where I stole this from, but I think it sums up the attitude that managers had:

The company’s technical leadership thrives on keeping tabs on the rapidly growing technology industry and new innovations built on top of fully-managed services provided by cloud providers. Like many other technical leaders, they are keen on learning new buzzwords and leaving it up to their developers to do something useful with them. The hottest trend these days seems to be ‘serverless’. The promise of consumption-based pricing, where you only pay for what you use and nothing more, is enticing. Furthermore, they have heard many good things about how serverless platforms help you prototype and develop faster by reducing the amount of code and configuration required by more traditional web platforms. The cherry on top is the fact that serverless platforms also tend to manage scaling resources to meet demand automatically, giving them dreams of releasing a wildly popular new ride share app and enjoying near-instantaneous customer growth.

We were a massive company and had our own Data Centres. I think Cloud is vastly beneficial to small companies who cannot invest in the up-front cost of their own server room, but also can easily scale up if demand drastically increases. We already had the resources for large demand but then moved to the Cloud just for the sake. I think managers were so obsessed with this “serverless” buzzword that they demanded it was the focus, rather than designing a solution with an open-mind, and using what was necessary to achieve the objective.

Reason 3: Fail Fast, the problematic developer, and working on tools/process

When we begun development on ProjectFutures, managers kept on telling us that a “culture of innovation” means “there is no such thing as failure”: You can try new things and as long as you feel like you have learnt, then it’s not a bad thing because failure then leads to you doing the correct thing.

This flexibility of being able to choose our tools/approach was taken a bit too literally, or extremely. So you had multiple teams investigating the same ideas. You also had teams successfully implementing something, then rewriting it using something else just to compare.

There was one problematic Principal Developer that they hired called Liam who seemed to have massive influence. Liam always persuaded people to investigate a different tool to what we were currently using. Then once people had made progress, he would then recommend something else. He wasted so much time. He’d end up arguing his case using some strange analogies too.

They are the same as chocolate bar wrappers. You need it for the delivery of chocolate, but once used, you get rid, otherwise it’s just messy 😉  

Also I see a load of chocolate bar wrappers on a desk and I instantly check them all for chocolate.. Friends don’t let friends do this.

He’d often cause conflict, switch teams, then repeat his behaviour of changing all the tools and processes, then moving on once more. Instead of just cracking on and actually writing the software, we wasted months, even years switching between different tools which then got abandoned.

“these guys makes me wonder if I can even call myself a developer if I just don’t care about processes and tooling. To me right, I consider us to be like master carpenters building beautiful cabinets. And these guys are having a massive debate about the lockup out the back where we keep the wood. Another problem is people just getting excited over every different bit of tech 

grunt 

WTF IS GRUNT????????? 

gulp too 

I’m sure some of these are being made up just to piss me off. I bet a lot of people can’t even remember how to code any more. All they can do now is manage Nuget packages”

Dean (Senior Developer)

I’m sure most developers wouldn’t actually care how their code is deployed. Just that it is deployed and is easy to sort when things go awry. Most teams were using GitHub Actions, but Liam demanded teams he worked with switch to Jenkins, and even convinced many managers that this should eventually be pushed out to all teams. However, as teams began to switch over, managers realised that Jenkin’s self-hosted nature was costly in resources, and comes with even more overhead of actually maintaining its use. So then they had a change of plan.

“The current Jenkins solution is estimated to cost $2,126.83 a month just in AWS resources.”

“(By not using Jenkins) we can become a leaner outfit that can deliver value to the business quicker by focusing on our own strengths which is delivering software, not CI/CD software”

After exploring different options, they realised that GitHub Actions made the most sense to use after all because our code is in GitHub so there’s no cross-account security issues to worry about, and we already had some free-build minutes in our subscription.

 “So far we’ve been told to do ADO -> AWS CodePipeline -> Jenkins -> ADO. So we’re excited to try Github Actions next!” – Lead Developer

A month later, the manager who announced we should be using GitHub Actions then said his team had been exploring using Netlify for his next project. Facepalm.

When the problematic Developer Liam eventually did quit the business (or we think forced out), one manager seemed hell-bent on undoing everything he implemented. Another idea that Liam had was a Tech Radar. It was basically a decision log of sorts, listing all the software/tools we have tried, the pros and cons and why they were chosen/declined. If other teams looked at it and maintained it, then it should mean they don’t waste time exploring using tools that had already had a decision made.This was also binned off due to:

“The Tech Radar required a significant amount more administration and the rules around reviewing were not sustainable, we were not able to commit to the reviews when it was in full flow.”

Reason 4: Using other tools are expensive

If you asked me to come up with a plan to remake SystemNow, or similar existing large-scale complex software, I would try to limit the initial scope by reusing as much of it as possible. So you could just create a new user interface, but when it comes to saving the data, you could still call your current/old servers. So we could have replaced the UI to be a website using React, but still use our existing C# server code and still keep the SQL Server database.

I’d also look to basically outsource part of it too. If there is a company that specialises in something, it makes sense to pay them to do it, rather than making an inferior version yourself, and having the overhead of maintaining it. 

You can always decide to implement these yourself later if you have no other projects to do.

If you try to replace the entire system yourself, it will extend the timescales further and you run the risk of failing to deliver at all.

To me, authentication is an ideal candidate for this. Originally we used Okta, but then a few months later, a Software Architect decided to create a project to make our own authentication. So that’s several developers spending months of their time making their own security solution, and none of them are security experts. What can go wrong?

The reason I heard for this quick switch is that Okta was far too expensive. It was projected to cost around £15k per month to use. This sounds mad. However, when I mentioned this to one of our Architects, he said “that equates to around 1p per user per month”. I suppose when you look at it like that, then it does sound cheap.

I don’t know how much we have truly saved when we have to pay several developers for the length of time it took to build the solution. It’s not that simple though because you have to then hope that it works, and hope we never get fined for any security issue. Also there is the “opportunity cost” that they could have been working on some actual functionality and not just allowing the user to log-in. Surely it wasn’t a priority at that moment because we had Okta working and only Developers were using it to log in as we developed.

UI Suite

Another thing we made in-house was the “UI Suite”. So this refers to the basic components like text boxes, combo boxes, buttons, icons, and the styling. Now, what is the cost of using a third-party library? Well most of them are free, and it took YEARS for us to create something decent. Every time I heard about a basic bug we introduced; I was just facepalming since we wouldn’t have had any problems if we just used MaterialUI.

As the UI Suite was being built, teams were reluctant to use it because it barely had any components. It really needed to be feature-complete by the time any teams actually started their projects. When components did exist, the bugs slowed down all development teams which caused some teams to use something else as a stop-gap. But without many teams using it, then that stifles adoption by other teams. Whose idea was the “UI Suite” anyway? Yeah it was Liam’s again!

Within a few days of me using it, I reported that the combo box did not allow you to select an item, and the text box didn’t allow you to change text programmatically. Another team reported that the Table component didn’t display unless you manually called the Resize method as a workaround. The Table also was a fixed size due to a hardcoded value. Then, once that was fixed, the column headers were not resizing correctly. Another team reported that the List component’s itemSelected property didn’t work when set programmatically.

To me, it’s inexcusable that a combo box won’t allow you to select an item. With severe bugs like that, it just slows down your development. Then it’s the opportunity cost that the team could be assigned to a meaningful project, and we could have been using a popular UX library like Material UI that we know works.

On a Development Department Meeting, one angry developer asked:

“Is having a UI Suite team a pragmatic allocation of an entire team’s knowledge and resources?”

This question then triggered a 30 min meeting the following week to try to justify why the UI Suite was important. It was full of blagging from the manager because no one really could think it was a good idea. In my opinion; if you have to create a presentation after 3 years into a project to convince people it is a good idea – it probably isn’t a good idea. He acknowledged there was “growing concern” across the department that people “didn’t think it was a productive use of our developers and there are already ready-made solutions available”.

I’m not even sure the team that was making it believed they could actually complete it. 2 members had left which meant they were down to: an experienced Developer, another Developer who had spent most of his career in UX design (drawing not coding), and a Junior Developer who had just began her year off for maternity leave. Then they had a Product Owner, Technical Manager, then a Manager overseeing it which is inflating the costs and bureaucracy.

His main slides stated the following:

Why UI Suite?
Why not? We're not all the same.
• There are several design systems out there already such as Bootstrap and Material - They all have their pros and cons
• Someone else's idea of a design system may not always work for us; having our system gives us the flexibility to define our own style
• Creative freedom to ensure our products stand-out from the rest, and are easy to use
• Large organisations such as the NHS, Government, Atlassian and Uber have their own design systems because it is right for them.

“is that right for us? eeeeerm…………………..”

manager struggling to blag

My View: I think he is blagging justifications. MaterialUI has been around for years and you can apply your own theme so I don’t understand this “design system” nonsense. You could also make tweaks to it because it is open source so could deviate if there’s some things you don’t like.

He then implied they were having a reboot of sorts and changing direction, but I’m not sure what that entailed. But if the UI kit isn’t ready, then how can people develop their apps effectively?

As more teams used it, the backlog of requests grew, and other teams were asked to fix bugs themselves. The claim was that the project was always intended to be “open inner source” and all teams needed to contribute. In September 2024, the UI Suite team disbanded and now every single new feature or bug fix needs to be implemented by teams that desire it (or you could just abandon it and use Material UI). The messaging from the managers was that it was a ”lack of shared ownership” why UI Suite failed in its current form.

“This change is made with the best intentions… It’s also just the start of a journey. As we learn and identify challenges, we will adapt and improve the approach.”

More recently, I did notice that some of the components were now simple tweaks of another 3rd party UI library so I think they had binned off their original implementations in their last reboot. Now they are on a second reboot. “ It’s also just the start of a journey” What a waste of 5-6 years.

Reason 5: Deprecating unreleased functionality

Due to the idea of “microservices”, people went wild creating repositories for everything. It does make sense to have general shared functionality like “logging” for error logging which everyone can use. Some of the projects ended up consisting of multiple repositories because they took the idea too extreme. With the sheer volume of repositories under our organisation, it became difficult to see what was actually useful. Just like the UI Suite, we had rebooted projects multiple times so then there were a few repositories for “logging”. You’d see similar names like “logging-sdk”, “logging-sdk-typescript”, “logger”, “monitoring”. Did one replace the other? Are they for different scenarios? Are they poorly named?

Occasionally, someone would announce something like the following and you do wonder who was using it and why no one had deleted it earlier:

“Hello, the client-logging package exists within the logging-sdk-typescript. It hasn’t been updated in almost two years, and more importantly it offers no functionality to store logs so it’s not fit for purpose. This client-logging package was meant as a proof of concept. We have no more need of it and all it offers is a false sense of security, so we will be deleting this package at the end of the month”

Intermission: Q4 2021 – Q2 2022 – Hyping Up Basic Features: Powered By ProjectFutures (and the framework reboot)

“This week we activated <new feature> which is a new web based application, powered by ProjectFutures cloud technology, and integrated into SystemNow.”

“Powered by ProjectFutures” sounds like some jargon to sell to customers, but was repeated by the managers internally. It was like we were gaslit by what our current progress was. There was nothing noteworthy at this point. I got sick of hearing it and we all knew it didn’t mean anything. Even when they didn’t use that phrase, it was just the usual corporate buzzwords and pretentious tech jargon: 

“The teams working in this Application Composition Platform space are doing some amazing, innovative work focused on future technology that will allow us to respond rapidly to a changing market. Keep coming back to see how this develops and please ask any questions you might have.”

Check out this guff:

“I’ve worked here for nearly 20 years and have played a part in, or witnessed, a number of momentous achievements during that time. I’ve seen us adapt to a constantly changing market, grow as a business and continuously offer new and exciting challenges for our people. However, we have often struggled to move at the pace our users demand and this becomes more of a competitive challenge as new players move into the market. We have to continue evolving and never allow ourselves to become complacent about our position in the market.

Technology is a major enabler in allowing us to achieve business agility, giving us the ability to rapidly respond to market changes and user demand. We have recently taken an important step forward in using modern tech to our advantage with the first release of the Application Composition Platform (ACP), powered by ProjectFutures.

The ACP is a suite of technology enablers that allow us to rapidly build high quality cloud hosted web applications in a consistent design system. It is essentially a lego kit that gives Product, UX and Development the tools to quickly go from idea to design to implementation and then getting it into our users’ hands. It allows us to provide apps that are standalone or integrated/embedded within our existing product suite

Our first release provides a simple view of the SystemNow news feed in a standalone web app. This has been released to two sites so far and the rollout will continue once we've had a bit of feedback. Although this feature isn’t ground breaking, it allows us to prove the technology and confidently move forward with rapid app development. There are a number of dependencies to overcome, so that apps created in the ACP can easily access data through consistent APIs and this work is going on alongside development of the ACP.

This is the beginning of a journey to modernise our technology stack and take us to the next level of business agility. I will be providing further details this month on the next plans for the ACP during Q4 and into 2022. I have an incredibly talented team working in the app development space and I’m excited about what we can achieve.
So what does all this jargon mean?

When I worked on ProjectFutures during 2019, I was working on what we called the Application Shell. It seemed that this was rebooted and renamed the Application Composition Platform (ACP), (powered by ProjectFutures, of course). All it was back then was basically a Home Page with some “Context” so it could access the User Token to see what modules the user was allowed to access, and would populate the menu with the apps they could use. So a simple explanation was: it was just the basic framework to embed other applications in

The original idea was ProjectFutures was a separate application that only really would be used once all the major modules were available (what we were calling “the Big Bang”; one day the user would just completely switch over and stop using SystemNow). Now the plan is that ProjectFutures is a “Companion” app, so will run alongside SystemNow. We also have the option of embedding it inside SystemNow. Therefore if we actually make an amazing module, we can replace SystemNow’s version. So now it’s a gradual phasing out.

Note: In the intro, I said the core modules should be out by 2023 . At this point they have quickly pushed out an RSS news feed by January 2022.

Dean
Did they scrap your framework and do it again?

Me:
I think they scrapped everything we did. We called it Application Shell

Dean:
If you put it to your ear you can hear the distant sounds of developers crying.

In Summer 2022, our CEO was hyping up ProjectFutures to our customers. She was really fixated on the concepts of Cloud, and that it’s not a “big bang” approach. So she announced there is no longer a brand new product, we will now just migrate the existing product “module by module”. The phrase “Powered By ProjectFutures” was going strong. It’s still just a meaningless buzzword because the “technology” is just AWS. We haven’t got any innovative proprietary technology at all, but we just have to pretend. We do have the RSS feed though.

“We’ve got an interesting and enjoyable journey with ProjectFutures which has evolved over the last 2-3 years. The Key to ProjectFutures strategy is moving systems into the cloud but we will avoid disruption by doing things in a gradual way.”

Our CEO made an announcement which was available to view on YouTube. The gist was that COVID had created an extra demand on certain services which required companies to increase innovation in technology and processes. This change had to happen rapidly. This is evidence that software changes in today’s world need to happen faster. So actual development time needs to come down, but also delivery time to get the change to the end user.

“Companies had seen time scales that would have previously been thought impossible”

Most of it was nonsense, like she claimed we had evolved our existing software to use ProjectFutures’s “Cloud Infrastructure”.

“So now we are “using the latest, trusted secure technology… we are building new modular components powered by ProjectFutures to enhance existing applications in the cloud that can support improved performance and enhancements….our development to release cycle is reduced so we can bring innovation to our customers faster. We no longer need to have a big bang approach. Instead we can build cloud modules that will interface with our existing systems and also with other supplier systems using industry standards retaining the familiar look and feel and the workflows for our users but at the same time being able to deliver additional functionality without impacting performance. We can reduce the impact of change on our customers releasing enhancements in an incremental way rather than building the entire new systems”

After that, customers will surely expect the Companion (ACP) to be populated with features pretty consistently, right? I mean, we are bringing innovation to our customers faster, and delivering in an incremental way.

Q4 – 2022

The Internationalisation project for SystemNow was a massive one, lasting a couple of years. They had already assigned more people to it, putting on hold other projects for it. Then around October, they had temporarily assigned developers to do code reviews and help out on various tasks to get it complete. However, a few months later, it was announced to be scrapped. 

Instead ProjectFutures was the focus, and would initially target England only. Then the focus will be then on Internationalisation once more, but they would get ProjectFutures instead. 

Since SystemNow was the system bringing in money for the company, I imagine cancelling the contract was a massive loss. Surely there are financial penalties for the cancellation, then the loss of any future sales in other regions, then it was costly in terms of the number of developers working across all those years. They have really put faith in ProjectFutures bringing in the money years down the line.

Reason 6: The Big Restart: X2

In addition to the cancellation of the Internationalisation Project, there was some shuffling around with managers and teams which was announced in a Development Department meeting. You’d think managers would be sacked rather than moved around because surely only having a News Feed after 4 years is a shambles.

I do wonder if managers just blag each other. On the Department meeting, the newly promoted ProjectFutures director said “subsequent difficult market challenges that have led to attrition globally, this has led to delays in delivering the solution”. What is he on about? ProjectFutures hasn’t been impacted by any outside influences at all.

He then explained a new plan. It sounded like all work so far would be rebooted under a new internal moniker “ProjectFutures2”.

On the roadmap, launching straight away is a ProjectFutures product which is actually from a company we bought out last year, but we are slapping our branding on it so we can say it is Powered by ProjectFutures. Then there will be 3 small features embedded into SystemNow which are also Powered by ProjectFutures. 

In 2023, we will have 4 more inside SystemNow, as well as one that will actually run in the ProjectFutures framework alongside the News Feed; Instant Messaging.

In 2024, 3 massive core features will be delivered as well as some secondary modules.

By the end of 2025 we will have the remaining modules completed. So the start of 2026 will have the full system launch for new customers. 

Why will we succeed this time?
- Commercial driver to get it done
- Resourcing appropriately
- Focus on successful onboarding
- Well defined roadmap and features
- User research and design
- Mature technology choices
- Strong architecture input
- Proven approach with ACP and Companion

He said that with the extra Developers from the Internationalisation project plus a few new hires, there will be 134 people assigned to ProjectFutures.

“We also continued to work on our core UI capability which gives teams a consistent, modern suite of components built in React. These form the lego blocks of every app we’ve developed, and the integration between our UX designers and the team who looks after UI has been phenomenal” (as previously described, this “phenomenal” team disbanded in September 2024). 

Reason 7: LATENCY IS NOT A PROBLEM Q3 2023 

The original plan was that ProjectFutures would have its own data storage, but the obvious problem is “how do we get users to switch over to the new system?” There will be a period of time when they have to run them side-by-side in a training period and data needs to be available in both. 

Since we then had the philosophy of being able to migrate modules independently, we really needed ProjectFutures to write into the SystemNow database

I don’t understand the complexities involved, because using the same database sounds like a simple solution. However, the Database Experts then came up with the idea that ProjectFutures will write to the Primary database, but then that data is then copied to a read-only duplicate called a “Secondary”. 

When teams were developing and testing on internal development environments; it all seemed to work fine. They would update data and see it reflected straight away in the User Interface. However, when they tried it on a demo site, they found that the data didn’t update until you manually refreshed it. What was happening is that after the update (which goes into the Primary database), ProjectFutures was then requesting the new data from the readable Secondary database, but it hadn’t synced with the Primary database yet; so then retrieved the old data.

So the solution was to make sure that every page had a refresh button and the user had to click refresh after they saved any data. It should be available a second later, so there shouldn’t be the need to keep refreshing the same page.

What makes this situation funny is that ProjectFutures is supposed to be an improvement in every way, and not having the current data when the user has just changed it locally is a massive step backwards. Another reason it’s funny is that I was asking a Software Architect about this “readable Secondary” idea when they announced it because it sounded problematic to me. He said he was arguing with the other Architects about it because the latency would be an issue, and he was repeatedly told that the delay is only a few milliseconds and so wouldn’t be a problem.

Missing features and various quirks just keep adding up to make the new modules inferior to the current solutions.

Reason 8: Not prioritising the right projects

Due to the restarts, it means the basic prerequisites aren’t there ahead of time, so you end up needing teams to do work almost in parallel.

One significant module was released by August 2023. In the internal announcement, the Development Director said that 11 teams were involved, alongside auxiliary staff in UX, Product and Architecture. Changes were needed in the Users API, SystemNow, Tracking API, Person API, Product API, Documents API, ACP, and UI Suite.

The way I see it, the ACP changes should already be complete, and be linked with a working Users and Person API. The UI Suite controls should be available and working. The Tracking (monitoring and auditing) is another fundamental module that should already be available. 

Due to delays, restarts, and prioritising modules that aren’t important, you then get chaotic development to deliver one module. Hopefully now that the work is done, then other modules should be able to be delivered without as many changes to other aspects.

We’d barely got a few modules out before managers were then talking about planning brand new functionality. A couple of teams had been assigned to research how AI could be used in our products. Speech to text is cool, right? How about predicting what tasks you need to complete next and drafting them out?

Why would we be working on brand new features rather than converting all the existing modules over? Because “AI” is the cool buzzword. 

Isn’t it just “shiny object syndrome” again?  “oooh Jenkins let’s use that”

Reason 9: The Load Q1 2024

One reason why SystemNow is criticised is the poor performance seen by many customers. There can be various reasons for this. Sometimes it is caused by any change that causes more server calls, and it’s quite noticeable when it happens. 

Rather than architecting the Project Futures “Companion” to share data with SystemNow, Companion performs its own server calls. So if you log into SystemNow and select to view a User’s record, it makes a server call to get the data. The Companion then makes its own call to the server to get the same data so now the apps are in sync. If we enable the Companion to all users in England, then this is essentially going to essentially double the server load in most cases.

In 2022, the Companion was released with an RSS feed, but this was just to a few pilot users. Then Instant Messaging followed much later. At the start of 2024, the decision was made to release it nationally to all customers in England at once. There were a few other modules available, albeit in Read-Only mode. 

“ProjectFutures is behaving extremely well, however, there is an incident currently opened against Identity Service in SystemNow as it isn’t handling the load from all the sites.”

Who would have predicted that?

It wasn’t the first issue like that. 

As an aside, someone shared the AWS bill. It was $20k a day! Imagine the cost when everything goes live. There are modules that are finished but not enabled. Or are enabled but in Read-Only mode. When there’s more requests and more users, then that price is gonna jump significantly.

We hyped up the functionality to say that if you have two monitors, you can have SystemNow on one screen and the Companion on another screen to view information as you are working in SystemNow. What was even more amazing is that you can copy and paste information across! Wow!

“This is a hugely valuable milestone for the business – our customers love this new tech, this is what will allow us to retain our existing customers and go out to win new business across the UK. The Companion App is the proving ground for ProjectFutures2”

Reason 10: Cumbersome development set up

“for anyone wondering why ProjectFutures itself seems slow, this is our integration environment. It’s lightning fast in Production. Just thought I’d add that – can’t help being protective over it.” – Development Manager

Why don’t we get a good test system? Isn’t it costly to slow our developers and testers down?

I get frustrated that we have authentication enabled on our environments too. When I’m developing, I don’t want to constantly log in. I don’t want to get logged out if I leave it for a few minutes either. 

Also, instead of having a set-up where we can run changes in isolation, we end up running most of our changes on a shared environment. Some weeks it has been a daily occurrence that the environment is broken in some way. You can’t log in. You can log in, but cannot select a customer. You can select a customer but the module won’t load.

We are constantly hindering ourselves.

Conclusion

In “The Big Restart” the Development Manager said: “the start of 2026 will have the full system launch for new customers”.

It’s now Q2 2026, and there hasn’t been much progress. There’s still a few modules Read-Only, and some that I heard are finished but were never released. Maybe they will be released. Maybe they will be scrapped. Time will tell.

There are many reasons that are related and tie into each other. I think they can be summarised by the following:

  1. Skills in the wrong areas: too many juniors, not enough experts to drive decision making.
  2. Wanting to use certain technology ie Cloud, AI, rather than choosing technology based on the requirements.
  3. Developers taking the idea of “fail fast” too extreme. Spending time on tooling rather than making features. 
  4. Reinventing the wheel: not using out of the box features like Authentication, UI controls.
  5. Restarting projects.
  6. No manager accountability, so they can make mistakes and carry on making them.
  7. Changing fundamental ideas of architecture: big bang vs incremental. Performance issues: latency, plus high server load.
  8. Not prioritising the right projects, prerequisites blocking other projects, core modules not delivered to customers.
  9. Cumbersome development set up so development of any feature is slower than it should be.

Slowness Complaints

There was a time where our software was becoming infamous for being slow. Some managers wanted to actively attempt to address user’s concerns. Some changes were made; some with improvements to all users, and some that were situational – such as only affecting calls when the returned data was large.

Soon, managers were boasting about a graph they put together which showed the number of complaints made from users containing the word “slow”; it generally showed a negative trend.

I wasn’t sure I understood the graph too well. How many users call Support multiple times for the same complaint? because if you have complained about it, then you might not call back. So that means; after a week, all the complaints might have already come in so you expect a drop off. 

So if no fixes were produced, I would expect a downward trend because everyone that was willing to complain about it will have done so.

There were some spikes in the graph, but managers did not explain the increases.

There have been times where figures have been manipulated like the times where we would log new bug tickets rather than re-open the closed one we knew had been incorrectly closed. There was even a time where bugs were closed then re-logged just to restart the SLA (Service Level Agreement) timer.

It would be funny if Support were told they would be monitored on the word “slow“, so they logged all new complaints under “not fast“.

“In other news, cases mentioning “snail’s pace” or “never loads” have risen by 300%”.

Fake quote

Self-inflicted problems

Instead of reinventing the wheel, Software Developers like reusing code. When using Javascript, a common place to use such code is NPM; Node Package Manager.

The recent NPM incident caused malware to be shared via many NPM packages. As far as I understood, I believe Github security tokens were stolen which allowed impersonation to check in malware and propagate to more packages.

As a precaution, we were told to cease development so you had hundreds of developers sitting idle.

We knew our teams didn’t use these packages directly but I suppose investigation was needed for transitive dependencies, and there was always the risk of packages we did use suddenly being infected, but we could just stop upgrading to new versions.

We thought it would only take a day or two, so I took the day off and would come back over the weekend to normality.

However more investigation was needed, then we had to switch over to a different internal NPM server with only approved packages being available.

I had no idea what the criteria is for approved packages. How do you know if something is secure other than the currently known, published security issues? Typically, bugs and fixes are added all the time. 

I think there was some kind lead time before new versions were accepted. I suppose it prevents this quick publication of malware if you just have a lead time of only taking packages more than a month old.

Since we had a new NPM server, we needed to publish packages to the new one, but we weren’t allowed to use the old ones. So new versions had to be published which then means you need to update all your software, and it’s a massive chain of dependencies involving all teams in the department.

I wasn’t personally involved but it sounded horrendous to coordinate and we were delayed by around 3.5 weeks.

We weren’t even affected by malware. We have loads of sub-companies in the overall group and no real incidents between them. Hundreds of developers were idle, and it was self-inflicted.

KM to miles

We had a form where the user can search for certain types of businesses in the area, and it displayed the distance from your location in miles.

One day, a user was posting all kinds of angry abuse because they said the distance was wildly inaccurate.

We were using a 3rd party API that was supposed to return the distances to the businesses in KM. It seemed that at some point, without us knowing, the API had changed to return the distance in miles, and our current code was expecting KM then we had code to convert it to miles. So now it was coming in as miles but we were manipulating the value to be wrong.

My reaction was that we should just inform the 3rd party to change it back. If their documentation says it is KM then they can’t change it without informing all the providers. If we changed our code, and the 3rd Party then reverted without informing us again, then the values would be wrong again.

A manager decided to go against my advice and told a team they needed to fix it. Soon, a Junior developer contacts me to say he is doing the fix and wants me to explain the situation and be available to review the code.

It’s a simple change, and he adds some unit tests. I pointed out a few more scenarios that he could add since our code was formatting to 2 decimal places. He could add tests for 3 or more decimal places in the data, and include larger values like >10 so you have 2 values before the decimal point.

So as far as I was concerned, if we HAVE TO make a change, then this is the simplest change and he has improved the codebase with the unit tests.

I approved the changes, and 2 other Senior Developers approved too.

When it was ready to go into the Main branch, another Senior flagged some duplicate code. He was correct, but it wasn’t a big deal because it’s one line of code. To “fix” it, you would need to create a new file for one method with one line of code which seemed overkill.

Then another Senior Developer questioned why one class called a method just to delegate to another method; when it could go direct. That scenario happens a lot, especially with design patterns where you want strict degrees of responsibility so the UI shouldn’t have logic. This was a very opinionated change, but since a Senior Developer had said it, then the Junior felt like they should do it.

So after the initial simple change, and 3 developers requesting some very simple changes, he was finally ready to commit the changes. Then a Principal Developer saw the change and said it was definitely the wrong thing to do since we need to get the 3rd party to revert their change. 

That was exactly what I said initially.

Code Review Argument: “Why are you reviewing!?”

There was a code review submitted in a project branch. I had no reason to review it because I wasn’t assigned to the project, but I often like to be nosey and see what is going into the releases.

I noticed a few classic mistakes like server-only code placed in “common that gets installed to both client and server when deployed. There was also a caching problem where the first call will store the data in the cache, then a call from a different user will then go into the cache and grab the other user’s data! It’s the classic mistake of forgetting about how the app servers are shared between many users and many organisations.

For years I have flagged these problems up. Maybe we should have it as part of an induction process to go through common misunderstandings. Anyway, I send them on to some developers (Dean and Mark) that I have discussed issues with or joked about them in the past. Each developer then decided to also leave comments on the review even though they also weren’t assigned to it.

In a private chat, Dean said “why isn’t the lead developer spotting these mistakes and teaching them?“.

I assumed he might have actually then put an official complaint in, because Gary, the Senior Developer assigned to the project; then left an angry comment.

“why are you commenting on a project level change? I thought you were struggling for time and this is a project branch that I haven’t yet reviewed”

The thing is, he hadn’t said that to Dean and I, but to the other developer Mark. It’s like maybe they had some kind of previous arguments and now it’s flared up.

Mark rightly responded:

“You’d added comments. This isn’t the place to debate such things, please contact me by message if you have a problem”

I think it could be the case that Gary hadn’t fully reviewed it, just glanced at it, left some trivial comments, and meant to come back. In my opinion, if someone does the review for you, then doesn’t that save you a job? Many developers seem to hate code reviews since they would rather be writing code, not reading it. So really he should be grateful. But he has taken it like a personal attack like we didn’t trust Gary to point out these major flaws in the code.

It’s also beneficial to spot problems as early as possible. There’s nothing worse than aiming to get the project in a release, then when you want to merge it in, then the experts then look at the code and tell you that it has major flaws and cannot be released. At least we have flagged it early in the project and they have plenty of time to address it.

Secrets in code 

Recently, we received the following message sent to the entire Software Development department from a manager:

Over the last couple of days, we have witnessed multiple instances of sensitive credentials committed into GitHub. This has been noticed by chance whilst supporting teams / reviewing PRs. Instances have included an individual’s GitHub PAT & test user account password. 

The security team are likely to enable a secret scanning tool in GitHub to help identify instances of this in future. However, this isn’t guaranteed to spot all issues and by the time it does; we are already potentially at risk. 

Please ensure that you are vigilant in reviewing your own / other’s code before committing / merging code. If a sensitive credential is identified; please ensure that this is removed and revoked immediately to prevent misuse of the secret. 

I’m really surprised if multiple people have done this, because we keep talking about improving security, and improving processes. Adding private keys/credentials etc to your repository sounds like a common cliché and is like Security Lesson 1. From the very start of the project, we have talked about having security scanners on our code from the very start.

I thought GitHub automatically scanned for credentials but it might just be for public repositories, and ours are private.

Security keys/tokens can often easily be regenerated so it’s easily fixed. However, your mistake of committing them is in the history of the file. I suppose there’s technically ways to modify the history but at a massive inconvenience.

Remember when people used to know what they were doing?

Remember when people used to know what they were doing? those were the days.

“what concerns me the most is that there was a time where everything almost worked like clockwork and now it seems like more ruins every day”

Software Architect

“I am more surprised when something works”

Me

We used to be a company full of smart people, working effectively. Now we work slowly and people just cut corners and do incredibly dumb things. In more recent times, people now don’t think for themselves because they ask AI what code to write. Sometimes it’s absolute rubbish but they never reviewed it themselves; so it really is zero thought. You point it out to them that it’s not going to work, and they respond back with an overly polite message, clearly written by ChatGPT; which just adds insult to injury.

So it’s like developers don’t even develop because AI does it. Then they don’t do any dev-testing. Then the Testers don’t know what they are doing either.

Recently Testers have been installing our software on the application servers.

Even though one of the Lead Testers has been posting angry rants about it; it keeps on happening. The Lead Tester’s points were that it’s not representative of live, and how it takes up the RAM/processing time and lags out the app server for everyone else.

I don’t get why people got the idea to install the client on the app server, and remote on. You can’t think that is official. The servers were always configured to only allow 2 people on at once, so it’s not like the entire department can log on to test if it was the official process.

I just hate what this company has become. I feel like it’s just gonna keep getting worse with managers constantly encouraging people to use AI.

Let’s read the words, the words, the words, of the developer

Introduction

When working with Indian developers, their English skills can vary. You also need to be aware of certain words exclusive to Indian English; some of which I actually like. For example they have the word “prepone” which is the opposite of “postpone”, but in UK English, we don’t seem to have a single word for that.

Some phrases seem more like poor grammar. An example of that is “Can able” or “Can’t able” when we would say “I’m able/unable”.

  • “i think you can able to see the second image is it?”
  • “I can’t able to find any relationship between those two codes” 
  • “still we can’t able to recreate the issue”

“For the same” is an interesting phrase because it just refers to something earlier in the sentence without having much meaning. It’s similar to when they say “do the needful” which just means “do whatever is required” but often doesn’t really add anything to the instruction; if they have requested something from you, then surely you will do it if you can.

There’s a few strange greetings like saying “good noon” which I’d assume is just a shortened version of “good afternoon” rather than being appropriate for a very specific time period. There’s a few people that have a strange greeting of “Ho!”

“Ho!! Is it please can you share those knowledge with me…”

To take time off, they like to “avail”. As a bonus, here’s a strange requests:

Morning Team,
I have picked up fever and heavy cold. Availing AL today.
Please conduct stand up and end call.
Available over mobile for any urgent issues.
Thanks and Regards,
Jeeva

I’m glad you told me to end the call Jeeva, because I’d have stayed on it all day otherwise.

Indian Pull Requests

When it comes to the Code Review process aka Pull Requests (PRs), it can be hard to ask them why they are making certain changes. Sometimes asking questions can just lead to further confusion. Also, sometimes I’m sure some developers try to blag and hope you move on.

I was discussing this with a Lead Developer and he agreed that asking questions can either result in

  • Blagging
  • Revert the code and hope it works
  • Or you actually get a good answer. But then if it’s not clear why the code was written like that, then maybe it does need a code comment or some documentation so others don’t get confused in future.

Even though I often got frustrated with their comments, in recent times, a lot of them use AI like ChatGPT to rewrite their responses, or sometimes I get the impression they just put your question into the AI and hope it comes out with a good response. So instead of poorly written English, it’s all robotic and a blag of jargon. So you can’t win really.

Row

“Refresh on special while saving special note, row background, Radio button alignment based on include exclude” 

Blagging with Words on PRs

I questioned their pointless try/catch blocks which were catching an exception then rethrowing the exact same type of exception.

“Yes, as I couldnt use the dll in the resourcepicker project, so we can thrown the exception and catched it in resourcepicker class”

And

“The resources can be used due to filecahe, but no changes can be saved, when service is down. The above message is already used in Picker solution.”

Then when their project was being merged into the main branch, another developer questioned the same code. This time they said:

“To restrict that, have drilled up the ux tree and displayed the error message.”

Observation 

“Found an observation while testing 12602 in 9.3.6 branch”

what does that even mean? I assume “observation” means “bug” or “potential problem”.

Bad Refactoring

He refactors some existing codec but also changes the return type of the method, which means the caller’s logic will have to be changed so was causing cascading changes which weren’t really relevant to his main change. Also, the logic didn’t look equivalent so I wouldn’t call it refactoring:, more like introducing a bug. He then claims he hasn’t changed it…

Me: "is this equivalent? It was checking >1 not >=1"
Them: "Actually, I haven't attempted to modify that as the logic written working as per acceptance criteria, and it already tested"
Me: "I don't understand, this method has been changed in this PR"
Them: "Just used expression for methods as commented by Andy. Apart from that i haven't changed any logic around that."

Down Merge

Vignesh
Here after no comments fixed against assurance branch?
Just need information about down merge

Andy:
sorry I'm not sure what you mean?

Vignesh
Two comments pending for our side... if any one raise PR I will raise PR also. Because of down merge... Incase only I will raise PR again do down merge that's why I am asking

IsMobileEnabled 

IsMobileEnabled needs to return boolean value, so removed exception caused by null and also the GetResources during Trigger prompting needs to include Template also along with Protocols.

Didn’t Launch The Portal

me: “where is this used?”

developer: “This is used at TryLaunchPortal()…. At this point of time we never know the portal type to compare and verify the condition because the user didn’t launch any portal

walkie talkie comms going on here

This reminds me of walkie-talkies, stating “over” so you know it’s the end of the message.

Roshni 
give line break after method over

Shoban
Ok Roshni, Updated the changes

Shoban
Completed with the Changes

Roshni
give line break after method over not before the method over

Shoban
Thanks Roshni, Got your point. Made Changes

Roshni
and again please remove the empty line no 267

Shoban
Code changes completed as mentioned

Welsh 

PR: Updated the Walsh text

Description: Updated the resource file with Walesh text

Do you think the text is gonna be accurate if he can’t get the title correct in English? It should say “Welsh text” as in “the Welsh language”.

Customer

Merge from Curomer first branch to main

Accelerator Keys

To define an accelerator key (allows you to use Alt key to select it), you place an & character before the letter. So Export has E defined. Edit can’t use E because Export has taken it, so they have chosen D. Cancel seemed an odd choice of N.

btnBackup.Text = "&Export";
btnContinue.Text = "E&dit";
btnCancel.Text = "Ca&ncel";
btnBackup.DialogResult = DialogResult.None;

Me
can't C be used as an accelerator key?

Kalyanaraman
C for Continue

Me
what is the continue button? Isn't this it? btnContinue.Text = "E&dit"; that is using D

SQL is up to 10 times better

yes i have tried with mocked 10 lacks data in local
and while this query the data was well optimized.
For data, I ran sp thrice

I bet you can’t tell if this is from some old children’s folk tale or an Indian’s PR

Always Run SQL Code Analysis

Roshni has worked here several years, and when she started, I’m sure she made the same mistake several times. When making a database patch, we have a Patching Tool that not only applies the patch but runs some code analysis to make sure it conforms to coding standards.

Many times when developers have reviewed her code, Roshni has been told her patch would have been flagged by the tool if she had run it as part of her Developer Testing.

When I was a junior, once I was told by the Seniors; I never forgot to run it again. It’s like the embarrassment/shame makes you remember. Also I cared about quality and this was a simple process that ensured quality and standardisation of our SQL code.

Recently, she had merged her fix ready for release and a Tester, Mick pointed out there were patching errors so her SQL patch cannot have been run through the Patching Tool, or even tested.

She claimed it had been tested, and it was a problem between SQL versions. So her claim was that – both her local machine and the test server it was run on (by another tester in her team) was a different version to what was on the main test environment we use before releasing the software.

So Mick looked at the SQL patch and saw the error was about a missing namespace. The patch was inserting XML, and XML has a namespace attribute on the first line. So then he looked at what data is currently in the table, and saw that all the existing entries had a namespace declared, and this was missing from Roshni’s patch.

So Mick embarrassingly pointed this out. So she had lied about testing the patch locally, she must have lied about it being tested in her team, and lied that it was an SQL version issue.

She then submits a brand new patch which conditionally checks if the previous patch had created the entries. If it hasn’t then, this new patch would insert them, then if it had already added them, then her new patch would run an update statement instead.

Mick then points out that this is nonsense because the original patch had failed so would have just rolled back and stopped patching. What she needed to do was just to fix the original patch so it would run. So then she quickly deletes her new patch, and updates the original one.

Although it’s what we wanted, the speed that she did it makes me think she hadn’t run the Patching Tool because it can be very slow to run. So yet again, we have told her it is important to run it through the Patching Tool, and she hasn’t bothered.

Although I think nothing was actually wrong with her new change, another tester had pointed out that her changes were across two repositories and her changes in the other repository were also flagging errors in the Patching Tool. So it’s not like she just forgot to run it once, it’s just that no matter how many times in the past we have told her YOU MUST RUN PATCHING TOOL; she never does.

It’s just infuriating we keep employing people like that that don’t listen or care about the work they are doing.