20 Patterns to watch for in your engineering team

Pluralsight have a free book “20 Patterns to watch for in your engineering team

There’s no point in pasting the entire book in my blog, so I’ll just give the initial paragraph to highlight their ideas.

They are mostly negative ideas, or can be in certain situations. However, there are some positive ones such as “Bullseye Commits”.

PART 1 Work patterns exhibited on an individual level 

1. Domain champion

The Domain Champion is an expert in a particular area of the codebase. They know nearly everything there is to know about their domain: every class, every method, every algorithm and pattern. 

2. Hoarding the Code

This pattern refers to the work behavior of repeatedly working privately and hoarding all work in progress to deliver one giant pull request at the end of the sprint. 

3. Unusually High Churn

Churn is a natural and healthy part of the development process and varies from project to project. However, Unusually High Churn is often an early indicator that a team or a person may be struggling with an assignment. 

4. Bullseye Commits

This pattern is relatively common in most teams, but it often goes unrecognized: an engineer understands a problem, breaks down the project into smaller tasks, and submits code that has little room for improvement.

5. Heroing

Right before a release, the “Hero” finds some critical defect and makes a diving catch to save the day. More formally, Heroing is the reoccurring tendency to fix other people’s work at the last minute.

6. Over Helping

Collaboration among teammates is a natural and expected part of the development process. Over Helping is the pattern whereby one developer spends unnatural amounts of time helping another developer to get their work across the line.

7. Clean As You Go

A codebase is continuously evolving by nature, but it doesn’t evolve evenly across all aspects. A Clean As You Go engineer will notice and refine shortcomings even if it’s not essential to the task at hand. 

8. In the Zone

This pattern is exhibited by engineers whose work is, in a word, consistent. They have a knack for getting in the zone and shipping high quality work week in and week out. Their work is reliable and predictable in nearly every way. 

9. Bit Twiddling

Bit Twiddling is like working on jigsaw puzzle to the point where everything looks the same and you’re not making progress anymore. You might pick up the same piece, try it in a few places, rotate it, put down, only to pick it up a few minutes later. 

10. The Busy Body

The Busy Body is an engineer who skips all over the codebase: they’ll fix a front-end problem here, jump to some refactoring, then fiddle with the database over there.  

PART 2 Work patterns exhibited on a team-wide level 

11. Scope Creep

Intuitively, we all know what Scope Creep is — along with its associated risks. Still, there are plenty of different definitions for the issue so here’s what we’re focusing on:

Scope Creep (noun): a pattern
whereby the originally agreed upon
scope increases or changes after
implementation has begun. Often,
though not always, Scope Creep
happens incrementally and thus invisibly
 

12. Flaky Product Ownership

Miscommunications between Product and Engineering can easily lead to Scope Creep. Flaky Product Ownership, however, can show up slightly different in the data and also generally requires a different approach 

13. Expanding Refactor

Expanding refactors happen when a planned effort to improve or revise a section of code triggers a dramatic widening of scope. 

14. Just One More Thing

“Just One More Thing” refers to the pattern of late-arriving pull requests. A team submits work, but then—right before the deadline—they jump in and make additions to that work. 

15. Rubber Stamping

Rubber Stamping is the process by which an engineer approves their colleague’s PR without giving it a substantial review. 

16. Knowledge Silos

Knowledge Silos are usually experienced between departments in traditional organizational structures, but they also form within teams when information is not passing freely between individuals. 

17. Self-Merging PRs

This pattern refers to when an engineer opens a pull request and then approves it themselves. This means no one else reviewed the work and it’s headed to production! 

18. Long-Running PRs

Long-running pull requests are PRs that have been open for a very long time (more than a week). A PR that doesn’t close in a normal amount of time (within a day) can indicate uncertainty or disagreement about the code. 

19. A High Bus Factor

“Bus factor” is a thought experiment that asks what the consequence would be if an individual team member were hit by a bus. 

20. Sprint Retrospectives

Retrospectives are a common practice that offer an easy way to continuously improve: take time to reflect, as an individual or a team, on a project, action, or occurrence

My Thoughts

There’s some good observations here, and the book does go into how to spot these aspects and what you can do to counter the negatives.

Where I work, we used to focus on having “Domain Experts” which is the “Domain Champion” idea. In recent years, I think managers have drastically swung the other way which leads to “The Busy Body” who knows a bit about many things but doesn’t specialise; so now we have the opposite problem.

There are a few areas where we still have a “Domain Champion” and they tend to get work related to that area if they like it or not. Even when it does get initially assigned to someone else, they take too long and then say “the deadline is approaching, I think the Domain Champion should do it”.

I always complain we don’t have many developers that are willing to do Code Reviews, or at least; do them properly, so you end up getting “Rubber Stamping” which is like having no review at all.

I personally like to “Clean As You Go”. It’s not a good idea to go far out of your way to change code that didn’t need to be changed. Doing so can dramatically increase the risk of introducing a bug and is “Scope Creep” since more areas now need to be tested. I do some “Heroing” from time to time, mainly because I do the most Code Reviews so I spot more opportunities to improve things, or point out bugs in their code.

Recently, with people quitting or moving teams, the Bus Factor has been severely lowered. Currently, I am the only Developer on the team, so if I take time off; then no work at all is getting done.

False Advertising Jobs

Intro

I’ve never been involved in the recruitment process to hire someone else, but have applied to jobs and read many job adverts. It’s a process that’s intriguing though, and I don’t think many companies get it right.

I’ve criticised performance reviews in previous blogs, and have stated it is very difficult to accurately judge someone. However, job interviews seem even more impossible to me. You need to come up with a good job advert to bring in the correct people to assess. Then your interview and assessments need to judge the best applicants.

Finding the correct people to fill a job vacancy is probably hard. I think you need to clearly convey what the job entails so people know if they are qualified and interested. You want all these people to apply for the job, whilst not wasting your time with people who aren’t qualified or aren’t actually interested.

When someone applies, you need to make a judgement whether to call them in for an interview/assessment. Anyone you reject through the entire process – is time wasted. Employing someone and regretting it is lots of time and money wasted.

I’ve seen many people come and go over the years, some quietly leaving and not even lasting a few months.

Here’s a collection of Job Advert stories.

Apprenticeship Schemes

When I first started my job, we had a special type of apprentice role where you start off as a software tester but then eventually become a software developer.

It sounded like a great idea; you get technical people joining, they then learn how the system works as a Tester. When they have the required development skills after learning with a mentor over a period of time, they can move into a development role. They will show their quality mentality from their Testing role, but also understand the requirements much more than hiring a new developer.

However, they joined, were never assigned a developer mentor, and were stuck as a software tester until they threatened to quit. It was just a scam. The company got technical and ambitious people that did a great job at testing. Those that were allowed to move to the Development role all became great developers. However, some actually moved elsewhere so they lost these good people.

It’s a fantastic idea if it is implemented as promised.

More recently, we hired loads of Apprentices via boot camp companies. Just like before, they never really got assigned a proper mentor. They mostly got placed in teams which didn’t have any direction on how to use them. A few months later, presumably someone highlighted this to managers and they were then moved to another team but without anything else changing.

They also had the promise of “Apprentices spend 20 percent of their time learning new skills and the rest based in the work environment”. We even published stories in newspapers with this claim. Maybe you could say 100% of their time were learning new skills because they were kinda just left alone and not really integrated into the team. Some quit after being frustrated that they couldn’t produce any valuable work. The better ones quit to find another software developer role, and the rest just seem to be happily taking the pay cheque for little expectations.

Having a nice spread of abilities: Apprentice, Junior, Developer, Senior, Expert is great as long as you have a plan of how to integrate everyone in the team. If you don’t have a plan for short term and long term, then there’s no point in hiring them.

Women are likely to apply if the job is accurate

See Women In Tech blog.

“Women working at HP applied for a promotion only when they believed they met 100 percent of the qualifications listed for the job. Men were happy to apply when they thought they could meet 60 percent of the job requirements.”

Hewlett-Packard

I find this statement bizarre. Most job adverts are basically just keyword spam and it is hard to ascertain what the job actually involves when they are being vague. If it really does reduce the number of women applying for roles, then why does it keep happening?

I’ve seen job adverts that we put out which may say something like “experience with VMWare” when you don’t need to know anything about how it works – you just need to know how to open sofware and log in. Or you see job adverts like “experience with React, Vue, Svelte” when you know the job is only going to involve one of them… but which one? If you have experience in React and have no interest in using Vue or Svelte, are you going to apply to it?

lorem ipsum

On a few occasions, our HR have put out adverts where the full text was just “lorem ipsum”. This is ridiculous. I mean, they have 1 job to put out adverts, and they just copy and paste a template and don’t even fill it in.

If people see that in a job listing, are they really going to take our company seriously? The fact that it has happened on multiple occasions means that they should change their process so it doesn’t happen again.

Cycle to work 

We work at home now, but yet still heavily promote the cycle-to-work scheme as a benefit. Recently we have promoted other “green” ideas like discounts on electric cars. If we don’t drive to work, then really it’s just a potential employee discount. Additionally, it’s not as directly aligned to the company values as they make out – they are basically encouraging more cars on the road!

Bad Impression

We are a tech company that makes various software products. However, our Job Vacancies page isn’t mobile-friendly – you have to use a PC to view them properly. Again, this is going to leave a bad impression and people won’t take our company seriously.

Conclusion

When it is hard to find the right people, and costly to recruit, it is important that you get every stage of the recruitment process correct. You need to get the right people applying, then your process has to accurately judge the best candidates.

Placing a “lorem ipsum” advert which doesn’t display correctly on a mobile device, and also promotes a cycle-to-work scheme on a home-working role – isn’t going to get many applicants.

Global Employee of the Year

Colin was instrumental

Director

Colin was a developer I originally wrote loads of stories about after he got unfairly promoted to Senior Developer. There was more injustice a few years later, when he found himself promoted to Principal Developer. Weirdly, his work best-friend always got promoted at the same time, or close to it, so he eventually found himself as a Technical Architect even though he is the shyest person that I know at work, and he has low productivity.

I’m not sure if Colin has some dirt on the Development Managers or the Directors but he seems to have so much influence now. My close colleagues also think it is farcical but laugh it off when I say he must have some dirt on the senior management. But how else can you explain these nonsensical decisions?

Colin had recently proactively tried to address issues that occur for users, and the CTO was impressed with him so gave him an interview at the monthly update presentation. Recently, he changed role from Principal Developer to Technical Manager, which I think is more a sideways move than a promotion but it’s interesting how he seems to get what he wants.

Near the end of last year, the Directors announced they would be hosting an Employee Awards event to celebrate people, or team’s achievements.

I’ve never been happy with these in the past because awards usually go to people whose managers are enthusiastic about such awards, or are charismatic enough to persuade the awards panel that their line-report/team deserves something. Or, it goes to a team that was assigned a project that was worth loads of money, regardless if it was actually a great success.

Anyway, our team (well, really it is a group of teams) got one of the awards even though I don’t think we have done anything particularly great, and many of the items Colin has been involved in have led to a few Major Incidents.

Furthermore, Colin got Global Employee of the Year.

Employee of the year!

Global!

HUGE impact on our customers through his amazing work following the issues we had earlier in the year, Colin was instrumental in most of the changes that have since been applied, and made such a difference. He led the team to ensure that everyone was able to contribute and fully felt supported and Colin’s high standards in “collaboration” demonstrate the best in our corporate values.

Director

So in multiple offices in the UK, India, and all those smaller companies we seem to buy out and then we don’t hear much from them – Colin is deemed to have contributed the best work last year. So he gets a promotion, a team award, and the highest-rated individual award.

Absolutely ridiculous. I think I have written this many times in the blog, but if I was someone reading it, and was familiar with previous blog entries about Colin – I certainly would not believe this was a real thing that happened.

I had a call with Colin and he said he has been really stressed this week. There were 3 Major Incidents, 4 people across the teams he is managing have resigned, and he has had to sack his work best-friend Technical Architect (no idea why this happened – it is rare that we sack people but it will be a blog entry if I find out).

You would think morale would be high if a team (or group of teams) were performing well enough to win an award. Yet we are 5 people down across these teams, another is on long-term illness, and I don’t think we were producing much when we were fully staffed. Colin sure has a job to do here.

Software Performance Tales

Looking through my draft blogs, I have quite a few to do with performance, so I have grouped them together to make a complete blog entry.

“the whirling circle thing is just whirling”

User annoyed at the slowness of our system

Do we care about performance?

I’ve listened to some Tech podcasts that have discussed Big O notation which is a way of classifying the performance of an algorithm such as O(n), O(n^2), but outside of studying Computer Science at university, I personally have never heard anyone else reference this. I think with some programming jobs, the efficiency of algorithms is crucial. For the most part, I don’t think people care unless you are doing something that turns out incredibly slow. In the age of Cloud Computing where you can be charged by the millisecond, then it will become increasingly important for server-side algorithms.

Where I work, we are very reactionary rather than proactive. Recently, we have had loads of complaints about our performance, so then we have identified the slowest areas and addressed them.

Thinking about performance upfront would mean the user gets the best experience and doesn’t complain. However, there’s plenty of examples of code which runs fine on your machine but runs poorly in live. This can be because you have a faster computer, the network speeds are faster, lower latency between the servers (when developing, the client and server is on the same computer so there is no latency), or you don’t have a database which represents live – you have 100s of rows rather than 100,000s. I think this last reason is often a cause for us, in addition to concurrency (thousands of live users simultaneously using the system, compared to a few testers using a test server).

An example of how we don’t often consider performance is as follows:

Example 1

I showed some initiative recently and essentially rewrote a project that was inefficient. 

  1. Some server calls had a check to see if a feature was enabled before attempting to retrieve data from the database, but some didn’t. Therefore these code paths ran queries against the database before returning no data. 
  2. When the feature was enabled, there were other parts of the code that were making the same server call twice in the same sequence of actions,
  3. and other places that made a server call even though the client already had the data from a previous call. 

It was a mess basically.

The functionality behaves correctly and the performance didn’t seem out of the ordinary, so the Software Testers never flagged it. We were probably talking an extra 50ms to 200ms in total when testing internally, although this would be worse when deployed live. It should have been obvious to the Development team that there were inefficiencies if they were thinking about possible improvements to their codebase, or if they were paying attention to the server calls and noticed their new server calls when the feature was switched off. 

Volume and Performance Testing

We have loads of test environments – virtual machines with databases and servers where the Software Testers can test our code changes. I would have thought these would be fine to do performance testing, and spam these test servers with calls, but a Test Environment Engineer once sent an angry email:

Our standard test environments are Absolutely not to be used for Volume and Performance testing. This can impact the whole devtest infrastructure, as well as some live services that share the same infrastructure. Doing this could cause a Major Incident.

Test Environment Engineer

This seems bizarre to me. Why would you share resources with the live production environment? Surely the Test Environment should be in its own isolated sandbox, where you can create, update, and delete with the safety and freedom. 

Example 2

We had another performance issue where a large amount of data was attempted to be retrieved. When the developer analysed it, we weren’t actually trying to retrieve a large amount of data afterall.

“There were 142,858 Id’s passed into the comma separated string, I found that there were only 64 distinct ID’s once I removed the duplicates. After the duplicates were removed it went from 76minutes duration to under 1 second”.

Software Developer

What a performance improvement! 

I wonder if passing the data in a form that isn’t a comma-separated string would also help. If you are passing in “12, 156, 201, 202, 284”, then, to get the ID’s, you need to remove the commas and place the numbers in a table. If you just pass it in as a table, then you are cutting out a step on the database layer.

Example 3: SQLite

One part of our system used a local file cache (loads of files were downloaded to the users machine, then our software would just load up these xml files rather than going to the server every time). It has worked fairly well, but overtime, the number of files has grown.

I think the performance issue comes from the fact that all the files are then loaded and are kept in memory, so it is a memory hog, and sometimes leading to “Out Of Memory” errors. Maybe the solution is to work out if we can dynamically load these files in full only when they are needed, while only having the “metadata” in memory at all times.

Colin came up with an idea to move the files into a local database using SQLite. This innovative idea impressed the managers and were eager to do it. I was sceptical because I think we would still end up loading all the files, just the place where they are stored has changed.

Day 1 of release, the following Major Incident was raised:

SQLite corruption. Out of memory

After that was fixed, I believe the changes caused 3 additional Major Incidents. Colin still swears by it. He thinks it was an amazing idea. I ain’t convinced.

User Feedback

It’s rare that I come across comments from users about our software, but they do often make me laugh. Part of the problem is that they use software, but aren’t really technical enough to use the correct terms, so when complaining about a performance issue, one user remarked:

“the whirling circle thing is just whirling”

User annoyed at the slowness of our system

Another thing about user complaints is that I tend to only hear about the real angry complaints and not just generic comments. I think Support had told a user there was a large amount of data on that particular record, and the more data on the record – the longer it is going to take to load.

“Regarding larger records, this is a predictable problem. What mitigations are being put in place to offset that? I still have 20 years of working life yet, don’t tell me that by 2035 I will have to wait 20 minutes to load a record???!”

Angry User

It’s a valid complaint. We need to come up with a different way of loading the record so they aren’t sitting around waiting for the full record to load.

Excuse: Performing “Analysis”

I think I have discovered a new excuse to use in order to buy time; “Performing Analysis”.

Example 1

There was a Major Incident on Friday which I debugged and suggested a simple fix. However, instead of me going ahead with this fix, the managers wanted the team responsible for introducing it; to take accountability for it.

After the manager sent the email and Cc’d me in, the team responded with “The Team is analysing this issue; will update you shortly”. Then, after the entire day has passed, they send a follow-up email “this will be ready by close of play Tuesday.”

It was currently Friday, and we wanted it released for Monday (since it was a Major Incident) – not released on Wednesday. So I had to sort it out.

Example 2

Dave commented on a Code Review that he thought the Developer had changed too many files; and there was a simpler way of introducing their fix. They responded: “we need to perform some analysis” and took a day or so before coming up with new changes. It would have just taken 10 minutes to rewrite it; I didn’t see any scope for this so-called “analysis”.

I’ll keep an eye out for more examples of this.

Should Software Developer Job Titles Exist?

I was watching a YouTube video about Job Titles in Software Engineering and there was a comment:

“labels like senior, medior or junior are illusions companies make to pay you less… we can’t put labels on people – everyone is different. This approach also supports imposter syndrome”

The comment got the following response:

“This is certainly a valid opinion, but it doesn’t change the fact that putting these labels on developers is a standard practice in the industry. And if getting a different label means having more opportunities, more money, and arguably more fun, shouldn’t we discuss how to get there?”

This response is definitely correct. If it is standard practice, then it’s beneficial to follow. If you are advertising a job and just write “Developer”, Seniors and above may overlook this advert because they may interpret it as below them.

As for the original comment, I would have thought the opposite is true. If you have the same title, it is harder to justify higher pay. If you have a different title, it is much easier to justify higher pay and you will also obtain higher rises as you jump from one role band to the next.

As for imposter syndrome, having the same title as someone you perceive to be much better can easily dent your confidence. If they have a higher title, then it’s easier to aspire to be the same rank as them; and you will feel confident with your own title.

I definitely think a hierarchy makes sense.

Pointless Project Update Meeting

A couple of years ago, I was working on some new software but the management of it was an absolute disaster. Even though it was an absolutely massive project, I was often sat there not knowing what to do. Additionally, there were teams that were doing exactly the same work as each other. It was a mess, so eventually I moved back to work on our existing software.

This week, there was a project update demo by a team still working on this new software. I thought all the speakers were working on this feature, but it seems Jennifer might have been on annual leave or something because she didn’t understand what work was done.

After a few slides of their presentations, Jennifer interjects.

Jennifer : “How is this different from what Igor is doing?” 

(Igor is part of another team)

Luke: “I’ve had the conversation and I still don’t understand why this was brought in twice.”

Jennifer: “I don’t know what the use case is for the two versions.”

Mark: “We never got to the bottom of it, so we just cracked on and built what we got asked to do.”

Brilliant. So there’s multiple members of the team that were aware that another team was also making this functionality. Despite having conversations with managers, they still were none-the-wiser, so then they just made it anyway, despite knowing that one team’s work is going to be binned off.

I can’t believe a couple of years have gone by and they are still doing stuff like this.

Positive Discrimination

A few years ago, an “Employee Forum” was created to discuss Women’s issues at work. If there are issues like wage inequality, then I’m all for it, but I just didn’t understand why we formed this. I hadn’t heard any complaints, but I suppose they aren’t gonna complain to me. If anything, I think women are treated better at work.

I was thinking about this scenario recently which I’ve known to happen several times now. A woman is about to have a child, so they manage to take a full year off. 9 months for the actual maternity leave as a starting point. Apparently those 9 months accrue holiday allowance as if you were actually working, and any bank holidays during this time are also added to your holiday allowance too. So it ends up accumulating to around 4 weeks annual leave. Then they ask for 2 months unpaid leave and get it. May as well round it up to the nearest year, right?

Instead of worrying about returning to work and people being promoted ahead of them, they somehow manage to also pre-arrange a promotion, so they actually jump ahead of their team. They have 1 year less experience than their team, aren’t aware of things that happened at work in that year, yet get promoted ahead of them. Sometimes even going part-time too.

I’m not just saying this is unfair to men. There’s sometimes loads of women in their team, and yet they just have to work that year as normal, and might actually be denied a promotion because of this person that will return in the promoted role. It’s like we overcompensate because we don’t want to be accused of discrimination.

Now men cannot get pregnant, but what happens if they want a year off? One man wanted to see his family that lives in Australia, but he decided it would be nice to live with them for a year. He asks for a “Sabbatical” but gets denied. He is told that there will be positions available in his role in a year’s time, so he can just re-apply for his job. So as planned, he quits and goes to Australia. After a year, he returns to England, he comes in for the interview and gets rejected!

I don’t see how that is fair. He wanted 100% unpaid leave for a year, then to come back to his standard job. Yet, women get various pay for their time away: some full pay, half pay, and often a promotion with some scope for working less hours. Then they are taking time out of work to discuss “issues” in this Employee Forum.

I think both these reasons are fundamentally the same reason – you want time away for “family” and it’s much better for your mental health not to have to think about work. I’m not sure if it is the right thing to randomly decide these things, or seemingly decide based on gender.