Start running at forty plus?

An older man and woman running in a park. They are talking to each other and smiling

Do you want to start running at forty plus? Before you start, please read this blog post. I made all the mistakes for you; please learn from them.

I’m not a trainer, I’m not a fitness expert, I’ve nothing fitness related to sell you. I’m a 45-year-old man who started running at the age of forty-two and started taking it more seriously at the age of forty-four.

I’ve learnt a lot in the last three and a half years, and I figured, why not write some of it down. I’ve a suspicion that over the next couple of decades there are going to be many more people who get into running or fitness in general once they reach forty plus.

Before we get into all my mistakes, a little background about me. I’m 177cm tall and when I started running in 2020, I weighed 86kg, these days I weigh 80kg. The weight didn’t start to drop off till 2022, more on that later.

I made many mistakes over the years; I’ve split them all up below by year. The hope is if you read this, you’ll not make the same mistakes or if you do, not make them for as long as I did.

Mistakes in 2020

2020 was my worst year, I’m incredibly surprised I didn’t quit. Things really didn’t go well but I’m grateful I kept at it.

Too fast

I’d ‘run’ 2.5-3km, stopping regularly because I thought I was dying. My heart would be beating at 180bpm and feel like it would jump out of my chest. I soon realised the problem. I was running too fast; you need to start slow. When they say slow, they really mean slow. If you follow the advice, you might need to walk rather than run, low heart rate training is hard.

Bad gear

As mentioned above, I’m on the heavier side for a runner, gear is important for everybody, but it is particularly important when you weigh a little bit more. Running is hard, the shoes cost the money they do for a reason, they help prevent injuries. Take your gear seriously, buy good shoes, this is especially important if you run too hard or too fast.

Not committed

Although I was running, I wasn’t committed. My running wasn’t consistent, I didn’t enjoy it and it was an awful experience I would put myself through it 1-2 times a week.

Mistakes in 2021

2021 wasn’t much better than 2020. I fixed my gear issues but other than that, it was business as usual and although I made progress, it was slow.

Still not committed

I still hadn’t committed to calling myself a runner. I was running but I didn’t feel like a runner. It wasn’t until the end of the year that I fixed this; I decided enough was enough, I’m a runner! This was why 2022 was so much better.

Diet

After two years of running, my weight was still hovering around 85kg. This isn’t because running isn’t good for weight loss. It’s because I hadn’t looked at the other side of the scale. I was doing a little more exercise, but I wasn’t reducing my intake. To lose weight you need to eat less and do more, the eating less is the part that matters, especially at the start.

Mistakes in 2022 and 2023

In 2022, I fully committed to running, I ran over 1200km, I lost 6kg in weight, my VO2Max improved, everything was great, or so I thought.

Wrong gear and old gear

For the majority of 2022, I had sore shins, all the time. My youngest son has an amazing superpower, no matter how much I do to protect my shins, his little feet always find a way to connect. I wasn’t too concerned about the pain; it would subside a little and generally it didn’t stop me running. Well, that was until February 2023.

At the time I had all the gear, New Balance 1080 road shoes, New Balance Hierro trail shoes; I was sorted. If I were running on the road, I’d wear my road shoes, if my run would include some trails, out come the trail shoes.

Randomly in February, I ran a half marathon, it wasn’t planned. I was out with my oldest, him cycling me running and before we knew it, I’d run 21km. I wore my trail shoes because I was running on a light trail, it wasn’t until I looked later that I realised 17km of the run was on the road and pavements.

My shins were sore but there was something else, I had an ache in my bones and walking became painful, running was impossible.

My self-diagnosis, shin splints, it is the only thing that makes any sense. I’d worn the wrong shoes and more importantly, my shoes were worn. As soon as the outsole on your running shoe wears, replace them.

It took me over two months to recover and when I started running again, I had to build up slowly. Altogether, it has taken me three months to get back to the running volume preinjury. I’m still working on getting back to the same fitness level although that is difficult to judge as I have slightly different goals to before I got injured.

Tips

If you managed to get this far, you have read about all my mistakes, now onto the tips.

Your gear

Buy the right gear and replace it when it wears out. Review the soles of your shoes after each run. Ideally have multiple pairs and rotate them. It is also worth tracking your runs, that way you can track your mileage in each shoe. You’ll start to get an idea about when you need to replace them. My shoes last anywhere between 400km and 650km, it depends on what you do.

Tech

If you can, buy the Tech. A running watch is good, a running watch and a heart rate monitor is better. As an older person, you have more commitments than the 20-year-old version of yourself. We need to be more efficient with our time and training. Training at the ‘correct’ pace for us is much easier with the Tech.

Commit

Work out why you are running. I became a father at 36 and again at 41. When my sons are older, I want to be able to do all the activities with them, I don’t want to be sitting on a bench watching. Both my sons know what they are getting on their 18th birthdays, it is a whooping in a 50km race, I’m going to show them that age is just a number. I’ll be 54 when my eldest gets to 18 and 59 when his younger brother gets there, I’m hoping my decade of experience in ultramarathons (at that point) will mean I finish first, it is easy to mess up on your first ultra. I’m running my first ultramarathon in September; I’ll report after how it went.

I’ve always been driven, yes, I make mistakes, but the drive is there. If you want a little guidance, check out Atomic Habits by James Clear, it is an incredible book and it may just give you the shove you need.

Enjoy it

You need to enjoy running, if you don’t you will not be able to keep it up. My advice, try trail running, it is better for the ankles and far more interesting. I used to skip running on a Tuesday because it was bin day and I just couldn’t be bothered dodging them or jumping off the path, it was all too much effort. Now days, I walk to the canal and make my way towards our local greenery.

OAuth2 and Business Central

Authentication written in block text

Background

I started developing a B2B App for a client which initially needed to integrate with Sage. However, midway through development the client decided to move away from Sage and use Business Central (Dynamics 365), that means OAuth2.

The integration requirements increased significantly; we went from a system needing to occasionally pass some information to Sage to a system which was heavily integrated with BC (Business Central) and required an almost constant connection.

In this post we will ignore the feature creep and other issue and just discuss the integration.

App registration in Business Central

Like most developers, I understood OAuth2, or at least thought I understood it. I’d worked on Apps using OAuth2 and had had to make changes and tweaks, but I’d never had to roll my own client and more importantly connect it to another service. That ended up being the biggest problem.

If you need to integrate with Facebook, GitHub or any of the other large providers, there will be a well-supported package, the league has you sorted for most things. In my case I was connecting to a customer’s instance of BC.

I spent a long time reading all the Business Central documentation and finally came across this, I needed to create an App registration in Azure. Once we had created a valid registration and confirmed it was working (thanks Postman) I needed to get my App to talk to BC, for that I needed an OAuth2 client.

OAuth2 client

I didn’t find a client or integration anywhere that suited my purposes, so I decided to roll my own using the OAuth2 generic provider by the league – yes, they don’t recommend this.

I created a wrapper class with four public methods, hasToken(), token(), refresh() and authorize().

hasToken()

This method does as the name suggests, it lets us know if we have a valid token.

token()

This method returns the token, however, before trying to return the token it calls an internal method called fetchOrRefresh(). This method checks to see if we have a token and whether it is valid. If it has expired, or due to expire, we wait and create a new token using the refresh token. There are several long running tasks, so we decided it was best to ensure we know the life of the token before starting a long running task.

refresh() and authorize()

These are wrapper functions which contain all the code necessary to authorize the client and save a token or generate a new token using the refresh token,

Usage within the App

So far, the integration with BC has been almost flawless. We keep an eye on request limits and catch all API errors. To date, we have never had a problem with the OAuth2 system, every hour a new token is created using the refresh token and it all works wonderfully.

So, how does this work in the code?

If a class needs to connect to Business Central, the first thing we do is check to see if we have an active token.

$oauth = new OAuth();
if ($oauth->hasToken() === false) {
    // Handle error state,
    // Send notification
    // Exit task and retry again
}

Now, assuming we have a token which should always be the case after the initial authorisation, all we need to do it fetch the token and pass it along with our request.

$token = $oauth->token();

if ($token === null) {
    // Handle error state
    // Unable to fetch the token or 
    // Unable to generate a new token using the refresh token
    // Exit task and send notification
}

A failure at this point is unlikely and typically will only happen if a service is down. As previously mentioned, the token() method fetches the token and if necessary, ensures a new token is created, other than an outage it is unlikely this code will fail.

The code above is just a simplified example, in the real app we have much more error checking and state management and throttling. The client can retry any retriable request and see a full log of all interactions between our App and BC.

Conclusion

Was any of this fun?

No. When under serious time constraints working all of this out was a little stressful, especially when I couldn’t find any examples online

Was it worth it?

Yes. My understanding of OAuth2 and integrating with Azure increased no end, I went from thinking I understood OAuth2 to knowing I understood OAuth2.

This is the App that keeps on giving. You might be interested in my next blog post in the series, UI and UX is tough for B2B Apps.