Software Tech Jargon

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

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

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

.Net Nerd

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

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

DB Nerd

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

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

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

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

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

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

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

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

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

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

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

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

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

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

DB Nerd

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

SQL Server error

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

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

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

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

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

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

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

Daniel 11:35: 
nope

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

apparently its 1024 bytes whereas a kilobyte is 1000

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

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

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

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

Developer

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

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

Developer

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

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

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

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

Andrew with a joke

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

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

Developer question. Can you help him?

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

Developer question. Can you help him?

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

Developer

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

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

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

–parallel

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

$ lerna run watch –parallel

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

Lerna

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

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

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

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

Not gone to production

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

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

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

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

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

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

Me 16:19
Andy is writing code for the terrorists

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

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

The Phantom Bogey Wiper & Sub-human Antics

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

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

Dear Colleague,

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

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

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

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

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

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

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

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

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

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

Me  09:15
11 years ago :scream:

Sadiq Khan  09:16
Makes sense for that time

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

Can AI Make Computer Games?

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

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

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

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

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

David Jaffe

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

David Jaffe

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

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

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

David Jaffe

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

Employee of Choice: Culture

Intro

Last year, my employer announced an “Employee of Choice” scheme. It wasn’t clear if this was an official award or a self-awarded title. Essentially, they want to improve a few key aspects so that current employees would recommend working here.

I had previously written about the survey and the results.

There were a few key pillars: Culture, Leadership, Employee Rewards and Terms, Work Environment, Processes, and Branding. Many people were sceptical that there would be any meaningful improvements.

Discussion

I discussed the topic of Culture with a few colleagues. The discussion was triggered by me saying that: I was intrigued what they would come up with to improve culture – since the term is a vague concept. Is “culture” just a naturally-occurring subconscious thing that happens? Or is it something you consciously try to create?

One colleague said he perceived it to be more about the working environment. People always loved the job despite the lower comparative wages because of the perceived positive culture. He said most people worked closely, and that meant people went from colleagues to friends. The “breakout” room, where people can go have a break or have lunch, encourages people to talk as friends. The addition of the canteen had similar benefits and gave a great option to purchase good food. The office was located near a park which was also great to go for a lunchtime walk. So it seems his perception is about how you perceive your colleagues and your ability to relax.

However, he said now we work at home “All those have gone. All that’s left is the work friends but it is diluted.” (many have since left and you don’t get to see the remaining people without a lot of effort.)

Another colleague said “it’s hard to change the culture because it’s so ingrained“, which sounds like it’s more like emergent behaviour.

Culture Manager

After a few months, we heard from the manager who is leading the “Culture pillar”. He admitted that he has actually been thinking of what “culture” actually means. I think it might have been helpful for him to question that on Day 1, rather than after a few months. Better late than never, I suppose.

You hear about “toxic” cultures, and sometimes about inspiring cultures (sometimes you just hear of positive aspects of the big tech companies, like Google having a slide for a bit of fun). Culture is not a tangible thing like an employee benefit – culture is something that only lives in our heads.

Culture Manager

He goes on to say that what people perceive to be “culture” is “hard to quantify, evidence and even explain“. Some people may write it off as “corporate jargon“, yet others deem it as important. Since it can mean different things to different people, how can he even begin to improve it?

I guess another point is: if we did a survey scoring the culture, and people have wildly different interpretations – then how do you even interpret a rating out of 5, and can you trust it at all?

He then ends the post by asking us what we interpret as culture? but also shifts the perceived poor culture onto the general staff by saying

a positive and progressive culture is on us as individuals – our culture is what we make it and believe it to be.

Culture Manager

We were told that the managers of each of these key pillars of the “Employee of Choice” have been busy making meaningful changes, but this post really sounds like: after months of work, the Culture Manager has decided he has nothing to do; and if there is a poor culture – it is our fault.

Employee Responses

A few employees responded to his post.

“Culture is the sum of a number of things which are driven by actions and good decisions, both individually and also from managers. Individuals have to all travel in the same, right direction and leaders and managers have to set the direction clearly and drive everyone towards it.” 

Employee

Another employee stated that managers put the onus on individuals by reiterating the company’s “values”, but culture is mainly driven from the managers showing those values:

“The company’s values represent its ambition to have a positive culture, but don’t do much to enable it on their own. Even if individual employees want to behave in ways that represent those values, corporate culture has a lot of momentum which is almost impossible for individuals to affect much unless they’re in a position of power.”

Employee 2

I liked those 2 responses, because they are basically telling the Culture Manager “YOU ARE WRONG!”

Another gave a more modern, woke response:

“To me, a good, progressive and welcoming culture should be inclusive and celebrate diversity (of individuals, ideas and ways of working)”.

Employee 3

Jessie Marsch’s Spieler Rat

I came across the following quote from ex-Leeds United manager Jessie Marsch. 

Note: The “fine system” he mentions is when players have to pay a monetary fine for breaking some rule. Some of the rules can be humorous (wearing flip-flops in the shower) but others are important aspects like not being late to training. The fine system can set the standard for professionalism but also allow for a bit of fun too.

“I have a leadership council everywhere I go. In Germany it’s called the Spieler Rat, the leader group. I ask them things like, how do we want to travel? What do we want to wear? Have them make the fine system, you know. But then I go deeper. What do they think of our tactics? You know, I ask them about match plans. I’ll ask them about training, about video, about everything. And I want them to be fully engaged at all moments. And typically, if a player comes to me and has something important that he believes in, then I will almost always include it in what we do, almost always. Because if I really am asking them to commit themselves, and give of themselves, then I have to give room for that to take place. I mean, I could give you a lot of different examples of that.”

He is talking about his leadership style which I think sets the scene to what the culture is under his management. You could manage as an authoritarian or be more open like a democracy. It sounds like the greater vision is provided by Jessie, but instead of micro-managing, he delegates that to his leadership group. I think his approach will make the players feel valued and more open to contribute ideas.

Conclusion

I still think Culture is quite hard to define, but it does seem like it’s the collective mood; driven by managerial decisions, and the physical environment employees are in.

Bug: Identification number mismatch

Recently, a developer had fixed a bug with title similar to “Tax Number is not populating in Save Registration dialog”

The original code looked like this:

public CarIdentification CarIdentification1
{
   get { return _carIdentification1; }
}
 
public CarIdentification CarIdentification2
{
   get { return _carIdentification2; }
}

if (!string.IsNullOrEmpty(transaction.TaxNumber))
{
   _carIdentification1.Value = transaction.TaxNumber;
}
 
if (!string.IsNullOrEmpty(transaction.RegistrationNumber))
{
   _carIdentification1.Value = transaction.RegistrationNumber;
}
 
if (!string.IsNullOrEmpty(transaction.NewRegistrationNumber))
{
   _carIdentification1.Value = transaction.NewRegistrationNumber;
}
 
if (!string.IsNullOrEmpty(transaction.NewTaxNumber))
{
   _carIdentification2.Value = transaction.NewTaxNumber;
}

So a quick glance at the code and you see that 3 of the 4 statements are using “_carIdentification1” then the last one sets _carIdentification2. So without putting much thought into this, I would expect one of the first 3 should actually be using _carIdentification2. But what does 1 or 2 actually mean? Are they representing TaxNumber and RegistrationNumber, or is it representing Old and New?

If it is the former, I think _carIdentification2 would represent TaxNumber so the first one was wrong.

If the latter, then I think _carIdentification2 would represent New so the third one is wrong.

I do know that the concept of TaxNumber was added into the system later on, so most likely it would be: “_carIdentification2 would represent TaxNumber”

However, the developer, Govind had changed it to the following:

public CarIdentification CarIdentification1
{
get { return _taxNumber; }
}
 
public CarIdentification CarIdentification2
{
get { return _registrationNumber; }
}
if (!string.IsNullOrEmpty(transaction.TaxNumber))
{
   _taxNumber.Value = transaction.TaxNumber;
}
 
if (!string.IsNullOrEmpty(transaction.RegistrationNumber))
{
   _registrationNumber.Value = transaction.RegistrationNumber;
}
 
if (!string.IsNullOrEmpty(transaction.NewRegistrationNumber))
{
   _registrationNumber.Value = transaction.NewRegistrationNumber;
}
 
if (!string.IsNullOrEmpty(transaction.NewTaxNumber))
{
   _taxNumber.Value = transaction.NewTaxNumber;
}

So they have named the fields _taxNumber and _registrationNumber which is much clearer. Notice though that they have deemed carIdentification1 to be _taxNumber which means they are saying the second, third, and fourth statements were wrong!

An additional thought: if a “transaction” comes into the system, what fields do you expect populated? if RegistrationNumber and NewRegistrationNumber are populated, then _registrationNumber will initially be set to RegistrationNumber, then instantly changed to NewRegistrationNumber! So I’d say this logic needs to be if/else so it only sets _registrationNumber once and _taxNumber once.

I point this out to the developer, but I find a large number of Indian developers just seem to respond with a sequence of meaningless words and you have no idea what they are thinking.

Me:

if NewTaxNumber and TaxNumber are specified, won't it just use NewTaxNumber?


Govind:

taxNumber identifier has to updated with new taxNumber value for transactions


Me:

if it is intentionally written this way, it should be if/else

and if it wasn't intended that way, then there is a bug here, similar to the one you are fixing

They ignored me and checked it in. I don’t know if just the original code was mad, or if this new code is mad too. Let’s hope it doesn’t cause more problems when it goes live.

90/10 rule of project management

The biggest thing that annoys me about software development is how projects really drag out near the end. It feels like you get so much done at the start, then progress really grinds to a halt. So early on, you think you are way ahead of schedule, then all of a sudden you feel like you are behind. Even when you get an extension, no matter how little is left, it seems to drag to take the allotted time.  

z 
z 
z 
•••naaHM -3HL NI S90Q 
sv saaaonanaa saas 
LN3W39VNVW MOH 
xnogv V Ll 
moua-uwoo SLI aod -3%V11VAV 
-3WlL -3HL OL 71äOM 
anox aNvaxa nox •svq v 
-3711 -3MHag saaaonanaa MONÄ I 
asnvoag 7SVL SIHL aaxogawlL 1 
anox aaqvrqvw v '-3QNO 
MVI S,NOSN17äVd

I do think I am terrible for dragging tasks out. It’s easy to look at the time and think “ah it is 3pm, may as well keep testing this rather than moving onto the next task”.

As well as Parkinson’s Law, I was reading that there is what is known as the “90/10 rule of project management”. This is where the first 90% is completed in 10% of the time, but the last 10% takes 90% of the time. So it seems it’s not just me that thinks this is a phenomenon.

So let’s think why this is: 

Putting off the unknown until the end

To maintain progress, it is much more tempting to pick up the work with the clearest requirements, and leave the uncertain ones to the end. Even when there is a Product Owner prioritising the work, they are often swayed by the Developer’s opinion. Also, there can be potential work you uncover when looking at what the code currently does and you think “I’ll investigate that later”. When you eventually get around to it, it turns out to be a “can of worms”. 

Last-minute changes:

No matter how much you plan, there will usually be some last-minute changes since the customer can change their mind. With “scope-creep”, that last batch of work has become larger. In a similar fashion, you could be implementing a feature but then discover there’s other features that need changing to be compatible – so over time, more requirements are discovered. 

“Resources”:

Over time, other projects or bug fixes suddenly increase in priority and you can find yourself with (at least temporarily) fewer team members. I also find that people may delay their annual leave during the time when they feel most excited about the project, then when it starts to drag, they then take it. Managers can also think “ah, that project is nearly finished, we can take a developer away and put them on a new project”.

Lines of code

If you imagine starting a new project from scratch, and think of a fairly straightforward feature like a dialog with several text boxes. You can quickly code the UI and the server code to save the data to the database. But then when you come to test it, you realise that resizing the dialog doesn’t scale. So you make a few tweaks. What about users that only use the keyboard? So you add the tab order, some accelerator keys etc. What about invalid data entry? So you add some extra checks and appropriate error messages. Ok, what about automated tests, so you do some refactoring and add some tests. The manual testers find a bug that a certain scenario doesn’t work. So with this example, it is easy to understand that the dialog can be 90% complete really quickly, but that extra 10% to perfect it took a long time, and maybe some delays occurred communicating  back and forth with the Testers and Product Owner in order to finalise the work.

But we can take this explanation further.

A few weeks later, you need to add a feature that interacts with this code. You might need to re-familiarise yourself with the code, re-reading several files, and your changes need to not break any existing feature. Now imagine this kind of sequence happening over many months. The codebase increases in size and complexity, and the constant refactoring might mean that files you remember with a certain name have now drastically changed, moved or been deleted. Development is far slower now for most features, and even bug fixes could involve stepping through more lines of code in order to diagnose and fix. So I’d say productivity drops proportional to the size of the codebase.

Acting like computer game characters

Conner Mather

Conner pretends to be a NPC (Non Playable Character) from a computer game. His rigid walking and limited gestures and speech are hilarious. His content is mainly under 1 minute long to qualify as a Youtube short.

Kommander Karl

I recently discovered Kommander Karl. He mainly does gun reload videos. He pretends household objects are guns in first-person-shooter computer games, and reloads them, often with the help of some great video editing and fancy effects. Here are some of my favourites so far:

Gun

Ragdolls

Game Glitches

NPC

Office tour, but it’s an adventure game

Learning Unity

Several years ago, I tried learning Unity (games development) but it took a long time to pick up the basics. I’ve been meaning to give it another go, and when Code Monkey (a Youtuber I did subscribe to) announced he was making a 10 hour free course, I thought it’s the perfect time to jump in.

Following along, rewatching and experimenting with what I was learning took ages. I ended up dedicating many weekends and a couple of hours each day to complete it.

It’s a basic Overcooked-style game. If you want to make it, you do need to sign-up to Code Monkey’s website https://unitycodemonkey.com/kitchenchaoscourse.php to download the assets (graphics and a bit of audio).

If you want to play it, you can get it on Steam for free. https://store.steampowered.com/app/2275820/Kitchen_Chaos__Learn_Game_Development/

A few days ago, Code Monkey released part 2 of his free course! This time he adds multiplayer. I haven’t watched that one, but have added it to my Watch List.

I have: many Youtube videos; websites; books from Humble Bundle to go through, so I’ll keep at it.

How Everything We’re Told About Website Identity Assurance is Wrong

Troy Hunt, the cyber security expert, has a great blog on website certificates (DV/EV) which is worth a read:

https://www.troyhunt.com/how-everything-were-told-about-website-identity-assurance-is-wrong/

The TLDR is as follows:

He discusses false advertising in regards to extended validation (EV) certificates. Websites which had it used to show the green URL bar, but now browsers don’t do this.

Now you are supposed to click the padlock icon and inspect the details, but different browsers show different things.

If it shows the name of the company that issued the certificate, how do you know you should trust them?

EV only works if people change their behaviour in its absence and clearly, that just doesn’t happen”

Troy Hunt

People now use mobile devices to browse the internet, and the security information is even more hidden in the browser. On iOS, you have to download a separate app!

Even “website checkers” are misleading.

A site seal is just an image, and therefore can be spoofed. Troy has registered digicert-secured.com to troll DigiCert and is still up a year later. It has a nice picture of a seal (animal).