Harry Bailey

Harry Bailey is a technology and delivery leader who specialises in turning agency project chaos into clarity. With more than twenty years of experience as a developer, agency founder and fractional CTO, he helps digital and creative agencies build stronger engineering and delivery cultures and improve commercial outcomes. He focuses on practical, immediately actionable strategies, not theory, so teams can ship work on time and with less drama.

High-Impact Agile Stakeholders: Important Traits

person holding Coca-Cola bottle

Most of us are lucky enough to have worked with amazing clients during our agency careers. Those clients where your key stakeholder doesn’t just pass you a project and stand back. They sell you on it, buy into it, stay by your side for it and celebrate the success with you when it’s done.

But what exactly is it about those people that makes them different from the average stakeholder? How can we evaluate a client early to consider just what their team will bring to a project? Can we build them up to be more aligned before our project gets started?

Continue reading

Client expectations of the inspect and adapt process

Originally posted as a thread to Twitter (X) October 2023

Let’s compare a sports situation with software dev best practice. There was recently a huge failure in the refereeing of a football match. A decision was made that processes should have corrected. Gary Neville here is saying refereeing is difficult & sorry should be enough here.

[quote tweet from Gary Neville definding the referee]

In software development we do ‘inspect and adapt’. That is we look at our processes and find ways to improve. We’re transparent about failure and actively look for places we can evolve.

A ‘sorry but’ wouldn’t be acceptable. “Oh there is a demand for speed so we’ll fail occasionally” and “that’s just the way it is”

The least we’d offer is…
Sorry
…and here is why it failed
…and here is what we’ve done to improve the situation

When you don’t offer those things, people (clients or stakeholders) will go looking for the improvement / failure themselves

And that is exactly what has happened with the football VAR failure. Where no change is promised, a change is demanded. It’s a valid ask, and a basic expectation of the consumer of any service. Here that’s refereeing.

Check AWS Lightsail Bitnami WordPress PHP version

Before you spend time upgrading to a new lightsail instance in the hope of your PHP version meeting WordPress minimum requirements, it’s useful to know if the version available is high enough.

You can check which PHP version you’re going to end up with using the following steps:

  • Open your lightsail home page
  • Click the Create Instance button
  • Check the ‘Linux/Unix’ option is selected
  • Look for the ‘WordPress’ option and make a note of the number displayed underneath (Something like a.b.c-d)

Ok, next we’ll check the Bitnami WordPress changelog

  • Open the changelog file
  • Search for a matching number from your note above
  • Check for a bullet which begins Updated php to
  • If no match, keep reading down the file until you find the first match for Updated php to
  • That’s the current PHP version you’ll get if you spin up a new lightsail wordpress install

If it’s the same or higher than the message being shown inside WordPress you can go ahead. If it’s not then you need to set a reminder to check back regularly on the lightsail creation page to see when the version updates.

AWS don’t use the very latest version available from Bitnami.

The final thing to consider… strangely is if WordPress supports the PHP version you’ll be upgrading to. WordPress maintain a list of which versions of PHP they support (properly and in beta).

Helpful? Say thank you.

Help me keep these guides up to date by showing your apprechiates with a small donation. Scan the QR code below, or buy me a coffee here.


Work in a software agency where you struggle to delivery consistently to your unique clients and unique projects? I specialise in agency challenges.

WHM: List Largest Emails In An Account With Subject

I recently needed to find the largest emails in various email accounts and share the size and subject. Not if it was a single email account which I had access too there are likely much simpler options using webmail or an email client to get the same outcome.

It looks like this hasn’t been written about before so I pieced together various tutorials to end up with the final solution.

This guide assumes you know what you’re doing on the command line prompt and that you have the permissions to view the files and folders below. It also assumes you have the permissions to go poking around in people’s email accounts, so be sure to ask for that before you start outputing private email subjects from their accounts

The first step is to check you have the following results for a list of files in the chosen CPanel account’s mail folder:

$ls -a /home/[account]/mail

The above should show you a folder for each domain, but hopefully also a symlink for each account. In my case:

.email@example_com

The above actually points to example.com/email but we’ll be using it in our code.

This code also expects emails to be stored in files ending with ,Sab or ,RSab or ,S or ,RS so check that too.

So here is the full example which I’ll then break down below. You’ll need to update it to suit your needs:

find /home/[account]/mail/.email\@example_com/ -type f ( -iname "*,Sab" -or -iname "*,RSab" -or -iname "*,S" -or -iname "*,RS" ) -size +1M -exec grep "Subject: " {} \; -printf '%s B - ' | sort -nr | head -10

First we use the find command to list files which match our email file name (end with 4 options) and have a file size of greater than 1M:

find /home/[account]/mail/.email\@example_com/ -type f ( -iname "*,Sab" -or -iname "*,RSab" -or -iname "*,S" -or -iname "*,RS" ) -size +1M

We then trigger an exec on that which will eventually return their subject as part of the output, and also print their file size in bytes (%s) followed by a B and a hyphen with -printf

-exec grep "Subject: " {} \; -printf '%s B - '

We then sort the list:

sort -nr

and finally only return the first 10:

head -10