For several years there were no new committers at all. In recent years the team has tried to be a little more intentional about adding new ones and culling those no longer involved.
About 15 years there was a phase of letting a lot of younger people earn their commit bit. I can recall 3 people by name that all got a commit bit before the age of 25, and they may have actually all been under 22. One of those three shortly after moved on to work outside of the Postgres community, another quietly was busy on other things for over 10 years before coming back, and the third was actively involved going forward. I suspect there was some unease of folks getting a commit bit and then sort of falling off a cliff so it slowed for a few years on adding new folks. Edit - sounds like it was less age driven but maybe still slightly related to some folks falling off that there was a slow down in new committers – tldr - you're not getting a commit bit right out of college for Postgres.
What to me would be interesting but likely hard to gather is what age to people become a committer to Postgres. It wouldn't surprise me if the average age of getting a commit bit is closer to 45 than not. Many folks contributing come to Postgres after other systems work or just don't consider contributing to they're a bit more seasoned because it feels intimidating–I mean patches sent on a mailing list who does that any more? Postgres thats who.
Maybe it was more approachable for a 22yo then, you could figure out more of it.
Also, C was a standard language back then, today the kids are more likely to program in Rust than in C.
I was curious as well and wrote a, very crude, script to measure it:
for t in $(git tag -l|grep -E 'REL.*_0$|REL[67]_[0-4]$'|grep -v REL2);do echo -ne "$t\t"; git ls-tree -r $t --object-only |xargs git show |grep -a -v '^\s+$'|wc -l;done
REL6_1 270033
REL6_2 320297
REL6_3 386532
REL7_0 630771
REL7_1 843219
REL7_2 986991
REL7_3 1363668
REL7_4 1492418
REL8_0_0 1649775
REL8_1_0 1702325
REL8_2_0 1806170
REL8_3_0 2017685
REL8_4_0 1924918
REL9_0_0 2011704
REL9_1_0 2225796
REL9_2_0 2290872
REL9_3_0 2405598
REL9_4_0 2487304
REL9_5_0 2527906
REL9_6_0 2632559
REL_10_0 2534653
REL_11_0 2771914
REL_12_0 2697892
REL_13_0 2822066
REL_14_0 2980221
REL_15_0 3054963
REL_16_0 3351147
This is counting non-empty lines. It's definitely not a good measure of overall code size, as it includes things like regression tests "expected" files. But as that's true for all versions, it should still allow for a decent comparison.8.3.0 was released 2008-02-01, with 2M non-empty lines, we're now at 3.4M.