When I was a child, I spake as a child, and my structs had not even a naming convention. Then I grew up and I put away childish ideas, for then I saw verily that every struct should have a type pointer, every module should be decoupled, and all Makefiles should have an 'all' rule. And then abided elegance, decoupling and repeatability, but the greatest of these three is elegance.
Then I became experienced, and did think, lo! For this job needs doing only once, and then did I implement in 200 lines of Perl what took 500 lines of Java.
And then did Shevek submit the 200 lines of Perl to management and there was much wailing and gnashing of $_, and they spake: Do it again in Java that we may understand what the bloody hell is going on, and cause the paycheck to shine its light upon thee.
Actually, it's a serious point. I did just do a huge piece of experimental mathematics in a huge mishmash Perl and shell, because it was quicker, and cheaper to throw lots of hardware at the job. And tomorrow, I must read the output, and write up the results in LaTeX so that the programming team can reimplement the best methods in Java. This even though I have a truly excellent mathematics platform in Java, just because ... sometimes it really is cheaper to do something ugly in Perl.
Also, don't write Perl at 3am.
 8 cores, 4Tb of disk and 8Gb of RAM, I think. Production should need Less(tm).