The Antipattern of the MacGyver Programmer
livelongandprogram.com
livelongandprogram.com
MacGyver put eggs in the Jeep's radiator because it had bullet holes, and the drug lord's minions had a helicopter.
A shipping minimum viable product held together with bailing wire isn't so bad - even if vaporware provides the ultimate ease of maintenance.
Totally agree.
In general, Good grief. This contrarianism is a little unproductive.
If someone gets something done quick... oh, well, you're going to have to throw away the code.
If someone builds it the a little longer way.. oh, you're not using a rapid enough technology. They don't mention how your code won't work in 3 years because it might not be backwards compatible.
Be careful to take the opinions of those who aren't shipping anything regularly.
Can I do it? Yes. And if I have to, given time constraints, etc, I will; but would I rather do it the more compatible way? also yes.
I was speaking more generally to the attitude of contrarians that we come across. Hope that clarifies things.
If you have a small leak in your radiator, you can use black pepper to patch the holes. Use about 2-3 slightly heaping teaspoons and put it in the radiator cap (not the reservoir).
It works because black pepper will not burn at those temps in radiator fluid. When the pressure and heat squirt out small amounts of fluid, a grain or few get stuck and patch the hole temporarily. 2 spoons will solve your problems for a few months.
If you're doing messy work, lay out a tarp rather than labeling all messy work as an anti-pattern.
Sometimes there just isn't any runway, and loosing this deal, customer, etc, really isn't tenable for the company. Features need to be live today.
Did this suck for future me? Yes it did, and to some degree does still. But was it the right business decision? Absolutely.
The antithesis of this is the "Smart" guy who can design the "perfect system" upto and past the release date.
Yes, if you build features outside the scope of the system to meet unforeseen features it's just scope creep and a waste of time but if you take a few minutes to actually think before you code the actual implementation time is usually on par (assuming you're not working in system that has allowed bad programming practices to take place; isn't DRY, etc.).
I've worked with people that copy and pasted half of their code base on a few occasions. Whenever a change needed to be made to a few of the more complicated systems you had to give it to the original 'rockstar' developer because he was the only one who knew every location it was used in the system.
To me it's just a sign of laziness. The effort to introduce design patterns and keep your code DRY is trivial. Just keep scope in mind and don't build systems to anticipate unforeseen features.
I do get the whole MVP we need to get it out the door argument but usually if you hire people who know what they're doing and aren't just an inflated ego (we all know those sorts of developers) it's really not a problem because they'll take the few minutes to think before they implement.
Often with inexperienced developers they go through the extremes of overly complicating a solution, or overly simplifying it.
The middle way, I'd say is more architecting enough of the inner workings of the system, and only building out the bare essentials of it, leaving room to grow.
Is this post relevant to MVP's? :)
When your house is on fire, you want the guy with the hoses and axes. To keep the house from catching on fire in the first place, you want the fire marshal to tell you that your kerosene collection might not be a good idea so close to your wood stove.
The problem is often that whoever is calling the shots isn't a programmer themselves. I often run into the problem of something that LOOKS simple on the outside but is actually really complex being asked for with a "well I mean it can't be that hard" and explaining why it's actually hard to do and integrate would require explaining a whole pile of stuff that would definitely cause glaze-over.
This is why I find working with a technical person and keeping the marketing/business types far far away until I'M satisfied with the thing I've built to be much less rage inducing.