Harry Bailey

Harry Bailey specialises in turning project chaos into clarity. With two decades of hands-on agency experience and agile-certified expertise, he offers practical, immediately actionable strategies, not just theory, to dramatically improve agency project delivery.

Supporting Manchester Metropolitan University

In 2007, when I was still pondering over what to do with the rest of my life, I was encouraged by family to become a resident of Manchester Metropolitan University’s business incubator.

At the time it was called Innospace and based near the coach station in the centre of the city centre. Although the space was pretty basic, the support was great, networking with other small exciting businesses was unavoidable and the rent was almost zero.

Fast forward ten years and after occasionally keeping in touch with the team who kept Innospace ticking over, I decided it was time to give something back for all the support I was given when first finding my feet in business.


So for a few years now I’ve been speaking to MMU business school students about my story and how I’ve managed to enjoy working for myself and running my own companies for so long. The first couple of years of talks I stuck to my own experiences and failings. In the last couple of years I’ve broadened my presentations to be about specific learnings or recommendations. Life skills and awareness. What a student’s expectations should be and what abilities they should nurture to support their own journey.

This year I’ve stepped my support up again. I’ve squeezed in two talks to students and also taken part in the yearly dragons’ den event.

My first talk was called “Doing Less”. As the title suggests it is about creating a successful business without burning yourself out. Retirement in its current form is unlikely to exist when these people reach retirement age, and a more balanced life, with flexibility, quality of life, and treating money as a tool rather than a target is required.

The second was on bootstrapping a business. Only a small percentage of new businesses are funded by banks and investors. This talk is about the opportunities, limitations, pitfalls and benefits of starting with nothing and building a business yourself.

The dragons’ den final was a pleasure to be a part of. Hosted at BManchester—a new banking concept from the group which includes Yorkshire Bank—on Market Street Manchester, it was a modern and relaxed feeling with various experienced and insightful judges at my side.

The 7 teams offered a range of business ideas. The quality of business strategy and presentation was high, and the judging was tough.

We finally agreed upon two highly commended businesses and a winner. We also commended three individuals on various aspects of their approach to the process.


I’ve enjoyed all aspects of the support I’ve been able to offer MMU in 2019. I see it as a personal responsibility to give back to those who’ve supported me, and to offer insight and knowledge which helps Manchester to continue to encourage small businesses to be founded and thrive.

I’m looking forward to supporting MMU again next year, and other institutions and organisations in the near future.

Remembering to Decompress

When it comes to how my brain works, there are a couple of related struggles that I’ve known about for many years and that I’m finally going to do something about.

Regularly I’ll stare at a computer screen for far longer than the task should require, making slight changes to a document, or an email draft, or some code, failing to fix the broken thing.

When working in a team I would likely find myself asking for support from others, or I would hope to be asked how I was getting on. I need to police this myself when working remotely and on a solo task.

I’ve previously tried making use of blocks or time. Pomodoro 25 minutes for example, which encourages breaks in focus to take a minute, a breath and a walk. Specific amounts of time haven’t worked for me, but prompts at regular intervals to consider a break have a more positive effect.

I see it as a three strikes rule. If I see a prompt once, I’ll happily keep plugging away. Two prompts and I start to justify to myself that I know how to get it resolved relatively quickly. When the third prompt appears I have to call my own bluff and take a break. The break needs to be a real break away from a screen thinking only with my brain and not with my eyes. Thinking in a different way, or maybe not thinking about it at all.

This change of focus, or bluring of focus, allows my brain to either solve it ready for my return to my computer, or when I do return to my work my brain is in a better place to make progress.

The other change I’ve made is how I handle the beginning and end of a day during which I don’t commute to a meeting or client.

A commute is a really useful tool when it comes to preparing for being in a work or home environment. On days where I’ll be at home in the morning preparing for work, and then suddenly find myself working, I stuggle to stay focused. On days where I’m working at home, and the only thing that happens between work and family time is a walk down the stairs, I struggle to switch off and engage with other humans.

I need the boundaries to be more defined.

For some I imagine this can be achieved by taking kids to school, walking the dog or even a short chunk of exercise. For me it can be as simple as walking slowly to the end of the road and back. It also helps with those still in the house to understand that on return I’m in work mode.

If I’m not commuting then I need this line in the sand both in the morning and at the end of the day.

The context switching or decompression time between home and work tasks is vital to allow me to be engaged with the right thing.

Security of WHM backups to an AWS S3 bucket

When you give your Web Hosting Manager (WHM) the ability to send a copy of your backup to Amazon’s AWS S3 service, you have to hand it a Key and Secret that give it that permission.

The worst option is to hand over a Secret and Key related to your own log in.

The best is to:

  1. Create a policy which
    • Only gives access to a single bucket
    • Only allows the least access required for the task
    • Only allows connections from trusted IP addresses
  2. Create a Group to connect the policy to
  3. Create a user (for the WHM) to connect to the group

For validation of connection to S3 WHM currently requires the ability to write objects, list all objects in a bucket, delete objects. Now for some this is frustratingly more than you want to hand over. In theory WHM could make do with just the ability to write to the bucket, but at the moment we have to make all those abilities available.

Luckily, the fact we’re also limiting by IP and then Secret and Key—which WHM encrypts when you submit them—should make it highly unlikely anybody else will be able to abuse the ability to delete objects.

Here is the example policy that I have in place. Feel free to copy, personalise and use:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "WHMBackupAccess",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::YOUR_BUCKET_NAME",
                "arn:aws:s3:::YOUR_BUCKET_NAME/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "YOUR_SERVER_IP/32"
                }
            }
        }    
    ]
}

If you’re in need of help putting this all together, let me know and I might expand this post to include how to do the setup inside WHM and the AWS console.

.htaccess redirects based on date and time

A useful trick for implementing maintenance windows and redirects without having to use a php or similar script is to check date and time in .htaccess files or use it to build a redirect url.

Date and time values in .htaccess come in the form %{TIME_XXXX} where XXXX is the type of date or time you want.

So if you want to redirect a generic url to one which contains today’s date, you might use:

RewriteRule ^posts/today$ /posts/%{TIME_YEAR}-%{TIME_MON}-%{TIME_DAY}

That would result in /posts/today being redirected to something like /posts/2015-08-27

If you wanted redirect a page after a date (and time) is passed you could use something like the following, where if the date and time is passed 9am on 27th August 2015 the redirect will happen. We use a simple number comparison of turning the date into an integer and then comparing it.

RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY}%{TIME_HOUR} >2015082709
RewriteRule ^$ /destination/url.html [R=301,L]

The following would only redirect until a specific time (10.22am on 27th August 2015)

RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY}%{TIME_HOUR}%{TIME_MIN} <201508271022
RewriteRule ^$ /destination/url.html [R=301,L]

The following would only redirect between two specific dates (20th July 2015 and 27th August 2015)

RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} <20150828
RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY} >20150719
RewriteRule ^$ /destination/url.html [R=301,L]

The options you have for %{TIME_XXXX} values are:

TIME_YEAR // current four-digit year
TIME_MON // current month
TIME_DAY // current day of month
TIME_HOUR // current hour (24 hour clock) of day
TIME_MIN // current minute of hour
TIME_SEC // current second of minute
TIME_WDAY // current week-day
TIME // a formatted string representing the date and time down to seconds. e.g. 20150827112234

MySQL roughly random string generation for inserting or updating rows

Ever wanted to inject hashes into new or existing rows of a MySQL database?

Two slightly different methods, but the same result…

Insert

The code below allows you to generate a different hash for each row you’re inserting. You can tweak to choose the string’s length. No unique checks are done.

INSERT INTO table_name (
column_name
) VALUES (
    (SUBSTRING(MD5(RAND()) FROM 1 FOR 20))
)

Update columns and values to suit your needs

Update

The code below allows you to generate a different string for each row affected by the update and choose the random string’s length from 1 to 32 character.

I’m aware it’s not the most random of generators but for url hashes etc, it works well. Be sure to then check for duplicates, which are possible!

Change 20 to a length between 1 and 32 that suits your needs.

Update the WHERE condition to suit your needs

UPDATE table_name
SET column_name = (
    SELECT substring(MD5(RAND()), -20)
)
WHERE condition_column = 1;

Work in a software agency where you struggle to delivery consistently to your unique clients and unique projects? I specialise in that challenge!

Follow me on Bluesky for insights, or read about my agency focused workshops (UK only) for more information.