Avoid DRY for Product Development
blog.mathgladiator.com
blog.mathgladiator.com
As far as scrubs, he's referring to someone as doing a job which he thinks he is above when it would benefit his project if there where many eyes on the same thing instead. If he understood his libs and tools well enough, he wouldn't need a "Scrub." What use would they be anyway if they are new to the language? How are they going to spot that cross site scripting hole you've copied and pasted five times everywhere? Most people doing the job which he describes make a poor effort because it is well known that developers who are not adding new features are largely disinterested in their work.
My point is that if you learn properly how to write DRY code, you avoid large fixes that involve searching through the entire code for particular strings. If you use OO DRY techniques, your fixes are in one place and are made quickly. There is nothing slow about writing DRY code and very few real disadvantages (None of which he has pointed out.) So if you learn to write DRY code properly you should see your development time slashed by sometimes by as much as three quarters. You will also have considerably less code to maintain.
It's nothing personal. My experience tells me that he is yet to use DRY techniques correctly and if he needs a "Scrub," to tighten up the code, it is almost always faster to just re-write the entire project using DRY techniques instead. If you write code and then try to make it DRY, you have completely misunderstood the point of DRY.
However, you often get what you pay for, and that goes for both hiring inexperienced developers and offshore/contracted development.
If you do hire young/inexperienced, make sure they have a mentor that enforces good practices or have code review/are pairing and that these developers seem to be learning good practices.
There is a difference between bad and "good enough".
The key is not to just hire scrubs. The key is to build a company that has enough excellent programmers, "good enough" programmers, and enough scrubs to keep products moving at a good pace.
There are some deeper points that I failed to make, and I will write about them in the future.
The company I work for has been very much anti-DRY. They copy and paste pretty much everything and have quickly brought a working product to the table. Funnily enough the code base is HUGE. Me, however, new to the company and fresh out of University have been fighting the good fight and trying to introduce DRY. However this slows down development as I refactor, and can sometimes break existing stuff while merging two inconsistent branches.
So I have learnt to pick my battles. There is a balance. Don't fix what ain't broke and if copy/paste will get things moving along, do not hesitate.
In my admittedly limited experience, non-DRY code still has huge costs that are easy to gloss over at first and a benefit curve that curves down way faster than anyone would like to admit. In many cases people can't even see how fast the curve is trending down because they've never even seen a properly-done product.... and I don't even mean "a product done to the pitch of academic perfection", I just mean a decently done product that isn't perfect, but we still put significant time into staying DRY and fixing DRY violations.
YMMV, of course. I suppose ultimately people following this advice has certainly advanced my career, as I clean up behind them...
There are cases where we all violate the DRY principle... Sometimes it makes sense to subroutinize something the fourth or fifth time rather than the second time. But overall, DRY is good.
DRY is very engineering centric which works very well for systems (i.e. non visual things like MySQL or node.js).