I made a simple model to help explore how people might interact with the Bitcoin blockchain in the future. It assumes that the number of users grows via a logistic function (common for population growth and diffusion of innovation modeling). For example:

And with log scaling:

It lets you set a desired number of blockchain transactions per month users should have access to on average, and gives you the block size limit required to achieve this. It compares this with the block size limit that grows at the same expected rate as bandwidth. For example:

This "natural" block size limit results in some number of blockchain transactions per month users will have access to on average:

Here's the MATLAB/Octave code if you want to play around with the parameters:

n = 2; % Target average number of txs per user per month.

P0 = 500E3; % Number of users today.

K = 2E9; % Expected number of users after full diffusion.

a = 0.5; % Current (exponential) annual growth rate of users.

b = 0.2; % Expected annual bandwidth growth rate.

s = 1000; % Average tx size in bytes.

t = 0:0.1:40;

% Number of users after t years assuming logistic growth function.

P = K*P0*(1+a).^t ./ (K + P0*((1+a).^t - 1));

% Target block size limit in MB.

B = n/(30*144)*s*P/1E6;

% Block size limit in MB assuming exponential growth alongside bandwidth.

Bnat = (1+b).^t;

% Average number of txs per user per month assuming exponential growth of

% block size limit alongside bandwidth.

nnat = 30*144*1E6*Bnat/s./P;

figure(1);

plot(t, P);

xlabel('Years from now')

ylabel('Expected number of users')

figure(2);

semilogy(t, P);

xlabel('Years from now')

ylabel('Expected number of users')

figure(3);

semilogy(t, B, t, Bnat);

legend([num2str(n), ' txs per user per month target'], 'Natural', 'Location','southeast');

xlabel('Years from now')

ylabel('Block size (MB)')

figure(4);

plot(t, nnat);

xlabel('Years from now')

title('Natural average number of txs per user per month')

Edit: My 2 cents on the block size limit is that we shouldn't be targeting bandwidth growth rate, but user growth rate, and the algorithm should follow a logistic function. Then we try to deal externally with whatever centralization might result from larger blocks, which are at least bounded in size going forward.

Also added the average tx size explicitly into the code.