This has been posted a few times now, so I will invest the time on a full response.
FRA / Futures convexity has nothing to do with profits/losses being immediately recognised on the future through margin settlement, and potential reinvestment, whilst deferred on the FRA.
Although the opposite seems to be a very common belief amongst many practitioners (possibly due to bad wording in Hull:Options, Futures, Derivatives) it is not correct.
Let me characterise this with some different intuitive arguments:
FRAs and Futures have similar reinvestment patterns. If you own a future and it makes \$10000 on day 1 you will receive \$10000 margin, which you invest overnight at OIS and receive some interest, say \$1. On day 2 the future is worth \$10000 and you have \$1 in your pocket.
If you own an FRA and it makes \$10000 you will receive \$10000 collateral. You invest this overnight and receive \$1 OIS interest, but you owe \$1 in interest to the collateral poster. On day 2 the discount factors for the FRA cashflows are 1 day closer to expiry and discounted by 1-days OIS interest less. The FRA is valued at \$10001 and you have \$0 in your pocket.
Imagine that your future was instead a fixed CFD and settled on the same date as the FRA. But it was a collateralised CFD. This would result in exactly the same convexity value, but it is independent of having an immediate margin exchange of profits/gains and any reinvestment.
Assume that everyday the future closed at the same price so that no profit exchange was ever made (but this was coincidental). Then the reinvestment argument would not be able to make any gains since there is never any gain to reinvest. However there is an important difference if the intraday volatility is either zero, low, or high, and a portfolio continuously delta hedges, even if at the end of the day it remains at where it started.
FRA / Futures convexity is risk based and its value can be intuitively understood in a way similar to the replicating portfolio of an option, to determine its price.
What does this mean? First consider the formula for the settlement of a paid (bought) FRA:
$$ P = v N d \frac{r - R}{1+d r} $$
Where $v$ is the (ois) discount factor for the settlement date of the FRA, $r$ is the floating rate, $R$ the fixed rate and $d$ the day count fraction. The key here is the term $(1+dr)^{-1}$; when rates go up you make money on the position but this term discounts your contract settlement more heavily. In fact the settlement is paid upfront but is implicitly assumed to be discounted from the end of the FRA at the settled FRA rate, and this is the term that gives the product asymmetry.
So how is this risk related? Consider a portfolio where you have paid (bought) a FRA and hedged it by buying a future. The value of your portfolio is as follows:
$$ P = v N d\frac{r-R}{1+rd} - \tilde{N}d(F-r) $$
where $F$ is the equivalent futures rate at which you have traded a nominal amount, $\tilde{N}$ of futures to delta hedge. Your portfolio will satisfy two properties initially:
$$ P_{t=0} = 0, \quad \frac{\partial P}{\partial r}_{t=0} = 0 $$
So this means that you trade a specific amount of futures initially to be delta hedged:
$$ \tilde{N}|_0 = f(N, d, r, v)|_0 $$
But the issue now is what happens to the risk of your portfolio as rates change?
The risk of your futures always remains constant:
$$\frac{\partial P_{futures}}{\partial r} = \tilde{N} d $$
but the risk on your FRA changes to be dependent upon the prevailing rate, $r$:
$$\frac{\partial P_{fra}}{\partial r} = \frac{vNd}{1+dr} \left (1-\frac{d(r-R)}{(1+dr)} \right ) $$
In fact, more than that it actually depends on previous rates (and the OIS rate) that impacts the discount factor $v$, whilst the risk on the future always remains constant.
You end up with the scenario that when rates increase for this portfolio you need to buy more FRA to remain delta hedged, but you are buying at higher prices. If the price falls again then you sell it back to remain delta hedged costing yourself money. So this is a process that is entirely dependent upon the volatility.
Conversely if you sell a FRA then when rates fall you have too large a position and can pay the FRA back to lower your delta, since you are doing this at more favourable rates your continuous delta hedging is generating an arbitrage profit against the future.
Hence futures are always oversold relative to FRAs that are oversold. The rates on FRAs are naturally lower than those for futures and the difference is called the convexity bias.
Pactical Example with SOFR Futures (added 27 July 2023)
As of 27th July 2023 this is currently what I estimate are the convexity adjustments of SOFR futures to reprice the SOFR IRS:

I will demonstrate some qualitative estimations for the Red Jun 2025 value.
Suppose we have a (flat) interest rate curve like the current SOFR market with 2Y IRS at 4.75%.
from rateslib import *
sofr_curve = Curve({dt(2023, 7, 27): 1.0, dt(2025, 7, 27): 0.9}, id="sofr")
solver = Solver(
curves=[sofr_curve]
instruments=[IRS(dt(2023, 7, 27), "2Y", "A", curves="sofr")]
s=[4.75],
id="USD",
)
SUCCESS: `func_tol` reached after 2 iterations (gauss_newton) , `f_val`: 1.1e-13, `time`: 10ms
Now we will create a received Jun 2025 SOFR IMM SOFR swap with a notional, $N = 1,133,694,000$, and evaluate the delta risk exposure, $\frac{\partial P}{\partial r}$ of this swap.
red_jun = IRS(
dt(2025, 06, 18), dt(2025, 9, 17), "A",
notional=-1133694000, fixed_rate=4.666320863240951,
curves="sofr"
)
red_jun.npv(solver=solver) # <- precisely zero
red_jun.delta(solver=solver)

The delta risk of this swap is exactly 25k USD, so it can be exactly delta hedged by selling a notional of exactly, $\tilde{N}=1000 \; lots$ of Jun 25 CME 3M-SOFR future.
Thus at time 0, when the trade is entered, the delta is exactly zero. Why should there be a convexity adjustment?
Becuase this combination of trades owns gamma.
The futures lots will always have a delta risk of +25,000 USD but the swap deltas change in $r$.
red_jun.gamma(solver=solver)

We can numerically check that the delta of the swap changes by 12.2 USD if rates rally by 1 basis point.
solver.s = [4.74]
solver.iterate()
red_jun.delta(solver=solver)

Thus the question of 'what is the convexity adjustment of the Jun 25 SOFR' is equivalent (ignoring speed and 3rd order) to the question 'what is the value of a portfolio expiring in Sep 25 containing 12.2 USD units of pv01/bp gamma?'
This is related to volatility. If the market is not expected to move then there is no value. If there is huge volatility it is very valuable. So what is the volatility?
The current price of the SFRM5 contract is close to 96.40. If you look at the bloomberg instrument SFRM5C 96.375 COMB
this is a serial option with expiry in 13-Jun-2025 for the SFRM5 instrument. This is an excellent approximation for volatility over the term of this instrument. Its price is currently 75 bps.
Rateslib
doesn't yet have swaptions added so I will rely on traditional black scholes formula and just express that,
swaption_implied_vol(
price=0.75,
forward=3.6,
strike=3.625,
expiry=1.88,
ini_vol=50,
optional="payer",
distribution="normal",
)
139.3842498061857
So the ATM normal vol is 139bps annualised. Bloomberg also reports the implied volatily at 40.8% which at current rates (3.6%) is around 147bps.
If we assume annualised 140 bps measured over roughly two years then the expected PnL from 12.2 units of gamma is:
$$ \frac{(140 * \sqrt{2})^2}{2} * 12.2 = \; 240k USD $$
Which is worth 240/25 = 9.6bps of convexity.
This calculation is higher than the predicted market becuase we ignored speed and time. The amount of gamma does not remain constant at 12.2 USD over the life of the trade. After one year the amount of gamma will have reduced to about 7.0 pv01/bp, for example.
Therefore this should also be taken into account.
If you assume that the gamma decay is linear in time, which seems pretty close to the numerical simulations and we measure this by discretely slicing it into time windows then we get around 150k USD value for the 140bps annualised vol, or rather 6bps convexity.
So we are getting closer with some fairly rough numerical arguments.