Many companies offer 401K matching up to some percentage of your salary to encourage saving for retirement. These are free money and you should definitely take advantage of it. However, to maximize it, you need to read your company policy carefully.

Some company offer feature like “true-up”, basically you set you contribution percentage, they will match up to a percentage (say 5%). If the total contribution in the middle of the year exceeds the $18000 limit, they will still give you 5% as if you contribute evenly over the year. If your company offer such policy, congratulations, you don’t need to worry anything. Just set to the maximum percentage allowed. It will get your account funded early in the year and let the compound work for you.

My company used to have that feature. But they changed the policy this year. Now they require me to contribute to the pay period to get the company matching. So if I funded the account too quickly (reaching the $18000 limit before year end), I will miss out some free money.

If you are in similar situation, then this post might be helpful to you. I have created a calculator using Matlab to figure out the best option for 401K contribution. You can plug in your own number to figure out yours.

Here are the source code with some bogus numbers in there.

  • 24 paychecks with each $6000 pre-tax
  • 15%¬† bonus payout at end of Feb and Aug.
  • Company matching up to 5%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 401K matching calculator
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
remain = 18000; % remaining quota
base = 6000; % base payment
pct = 15; % bonus percentage
max_match= 5 ; %matching percentage
next_idx = 1 ; % next pay check index (out of 24)

% set bonus and other one time payment here
b_schedule = zeros(1,24);
b_schedule(4)=1;
b_schedule(16)=1;
b = base * 24 * pct/100 / sum(b_schedule) * b_schedule ;

x = [2:0.1:10]; %percent

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

sum_cur = zeros(1, length(x));
match_sum = zeros(1, length(x));
match_end_idx = zeros(1, length(x));

match_detail = zeros(length(x), 24);
contrib_detail = zeros(length(x), 24);

for xi=1:length(x)
  sum_cur(xi) = 0 ;
  for idx=next_idx:24
    if x(xi) > 5
      match_pct = 5 ;
    else
      match_pct = x(xi);
    end

    match_cur = (base + b_schedule(idx)) * match_pct/100;
    contrib_cur = (base + b_schedule(idx)) * x(xi) / 100 ;

    if sum_cur(xi) + match_cur + contrib_cur >= remain
      match_cur = (remain - sum_cur(xi)) * match_pct / (match_pct + x(xi)) ;
      contrib_cur = (remain - sum_cur(xi)) * x(xi) / (match_pct + x(xi)) ;
      match_sum(xi) = match_sum(xi) + match_cur ;
      match_end_idx(xi) = idx ;
      sum_cur(xi) = sum_cur(xi) + match_cur + contrib_cur ;
      match_detail(xi, idx) = match_cur ;
      contrib_detail(xi, idx) = contrib_cur ;
      break ;
    else
      match_sum(xi) = match_sum(xi) + match_cur ;
      sum_cur(xi) = sum_cur(xi) + match_cur + contrib_cur ;
      match_detail(xi, idx) = match_cur ;
      contrib_detail(xi, idx) = contrib_cur ;
    end
  end
end

match_detail
contrib_detail

x
match_sum
match_end_idx

best_for_match_idx = find(match_sum == max(match_sum))
best_for_sum_idx = find(sum_cur == max(sum_cur))

figure(1);
subplot(2,1,1);
plot(x,match_sum, 'x-', x(best_for_match_idx), match_sum(best_for_match_idx), 'go');
title('Company Matching');
xlabel('Contrib Percent ');
grid on ;

subplot(2,1,2);
plot(x, sum_cur, 'x-', x(best_for_sum_idx), sum_cur(best_for_sum_idx), 'go');
title('Total contribution');
xlabel('Contrib Percent ');
grid on;

Here is the result from the program.

Basically to maximize company contribution you will need 5% to 7.5%, contributing more, you will actually get less matching. If you want to maximize the 401K contribution as well, then the 7.5% is the optimum option.

To run this script, you will need to install Matlab or its free counterpart Octave.


What is the best percentage for your 401K? Let me know if it is helpful.

How To Get The Maximum 401K Match From Your Company
Tagged on:

Please tell us what's in your mind ...

%d bloggers like this: