The Ultimate Software Gold Plating

Some developers love to gold plate their software. There are various shades of .. er, gold, I guess, but it's usually considered wasteful to fritter away time gold plating old code in the face of new features that need to be implemented, or old bugs that could be squashed.


This is a companion discussion topic for the original blog entry at: http://www.codinghorror.com/blog/2008/07/the-ultimate-software-gold-plating.html

Dude: The code lied dormant?

Goldplating is orthogonal to creating quality, extendable code. You should always think when coding, and thinking of how your code will exist in the future is part of coding for today.

Goldplating doesn’t even have to be big changes. It’s death by 1000 cuts. It’s any unused, unwanted code paths through the system. So what if you can code a method to count buttons on shirts. If nothing uses it, then what use is it anyways?

More code
Mode defects
More maintenance
Longer compile times
Bigger downloads
Larger working set
More memory required
faster processor required

All for something that nobody asked for. It’s irrelevant even if it’s done on your own time. To the security minded, it’s an exploit waiting to happen, because I’m sure those testers didn’t know to look for it to test it.

If, once you code something and you think there’s more value to be had, send an email to your team explaining the class / feature / whatever, and it’s other possibilities. Document the code and say ‘we could also do xyz’ because in the end if your idea is worth anything it’ll get put into use.

This is why I like the gist of the agile methodologies. You write tests for what needs to happen, and once your code works, you’re done. I don’t know how many times I’ve deleted cruft out of classes when refactoring because ‘I thought it was a good idea at the time’ when coding the class, but it was completely unused.

Seriously, I’m not the code I write. I don’t mind if a week later I’m rewriting something that I alerted someone we’ll need to change. Thing is, as smart as I am I’m only right 1/2 the time, and the client is happy enough with things being the way they wanted, and with everything being delivered predictably.

Not goldplating is also better for estimating, and for training your client. If you give them what they ask for, they get better at asking for the right functionality upfront, and you have better estimates.

Otherwise you should implement hashcodes, serialization, object equals, value equality, icomparable, iequitable, and everything else under the sun for every class you ever write to cover it being used anywhere.

That was a bit of gamble I suppose.
There is nothing great in the fact that it worked.
I mean what is the point?

The point was he was building in capability that didn’t exist, but could. It’s the same as planning your objects for behavior that is not part of the spec, but that you know will be asked for once your software is out in the wild.

I get critized regularly, by my boss no less, for writing an elegant solution when all he wants is something quick and practical. And yet, over and over, some user has wanted something down the road that the elegant solution could cover and the quick and practical would have needed to be completely refactored to produce.

Most of the time it’s just a matter of thinking about what you’re doing, and planning ahead a bit. There’s not that much extra work in doing it well, and a lot of work saved.

In Mintner’s case he may just have been bored with the whole thing that week and wanted a new challenge for fun, knowing it might be valuable someday. Boredom, not necessity, is the mother of invention.

@Karl von L.

I completed T2K on the Jag without cheating, opening up Beastly Mode. :sunglasses:

I’m pretty rubbish at most games, but played that to death when it first came out.

I bought AvP with the Jag and T2K from Silica Shop, which used to be in Sidcup, Kent, playing both every spare hour I had. :slight_smile:

Most games of T2K resulted in the imprint of the fire button embedded in my finger. :sunglasses:

I also liked the Jag controller, having very long fingers probably helped. :slight_smile:

What can you really say about a guy whose major contributions to my childhood were llamas (a href=http://en.wikipedia.org/wiki/Llamatronhttp://en.wikipedia.org/wiki/Llamatron/a) and drugged up camels (a href=http://en.wikipedia.org/wiki/Revenge_of_the_Mutant_Camelshttp://en.wikipedia.org/wiki/Revenge_of_the_Mutant_Camels/a)?

I don’t know if this is gold plating as well, but for me as programmer it is less interesting to see what the final product looks and feels like to the enduser, than it is to take care how the programm is written.

Sometimes I change huge parts in a project, because the current implementation sucks. Don’t get me wrong, it works, but it’s badly designed, badly written… it’s just not good. If I replace one working implementation with another one, the user will not notice, the marketing will not notice, my bosses won’t notice. So what’s the point of doing it? Isn’t it a waste of time?

My boss certainly thinks so. I have a different point of view. I want to make high quality code. Code that is easy to understand, easy to extend, flexible, fast, etc. It’s not satisfying to code a piece of crap and just make it look good. Outside it’s great, inside it’s crap. That is almost cheating the user. It’s like having a totally crappy car, that almost breaks to pieces. You clean it, you give it a new finish and you make it look like new. Then you sell for a high price, but in reality the other person has bought a very old, crappy car that might go to hell in about 6 months.

Also if my boss one day comes around and tells me about a great feature, I might be able to implement it in 3 days thanks to the clean code. With the old code the same feature would have needed a whole week, would have led to more crappy code, may have never worked perfectly and so on.

Hey Jeff, your comment system changed my bare URLs into HTML tags when I misspelled the captcha - looks like those then got HTML-escaped as above :frowning:

the thing that strikes me is we dont know how much time was spent on producing code to implement the extension that was used 14 years later.

Did this functionaility cost the games company money?

aka gold plating is money in the software game - all the current wisdom is about shipping only what is required at the time…

As everything, this is a balance. Adding code that has to be tested, fixed, tested again, fixed again, ad nausea and then never used is not really a productive (or personally satisfying) use of my time.

On the other hand, taking pride in the quality of the code you produce is.

The best (or worst) example of gold plating causing problems in the years to come is realloc. The Swiss Army knife of memory management in C. Yuck!

That is just the exception. The rule still is that the overhead you write without a use case won’t be needed in the next version of your software. (At least not the way you coded it.) It is safe to live and code by the rules. Not doing it is either fun (this case above I guess) or a worthless risk (for a software company).

Agile methods are talking about the rule, about the general case.

Not living by the rules can be fun. It can be dangerous. It can put to much overhead to a software and slow the development process down. It can even bankrupt you. Or it can make fans happy years later. Cool story. :slight_smile:

maybe he just did it for his own benefit? did the game sell with this feature proudly on the packaging?

if it did, then certainly this is gold-plating, because it makes the product look better than it actually is. otherwise, its just some coder, doing what he wants with his code… and quite rightly. he’s allowed to enjoy the game he made, precisely how he wanted to right?

sure he could have spent the time coding something else… but what?

it took me a while to find this article, but I believe it is a clear example about how gold plating can save a project :]

http://thedailywtf.com/Articles/The-Cool-Cam.aspx

This is just to confirm that Tempest 2000 for Atari Jaguar is one of the most pleasant game I ever played ! Spent tons of hours with that mindblowing ol’school techno in my headset. Sometimes the screens becomes so crowded that you just navigate by sound and sixth sense - the jedi way !
If you did not try it, have a look, it’s still a good expedience 14 years later !

I always thought the Jaguar got a bad rap. I loved the Aliens vs. Predator game for it, and the overlays were extremely useful in that game. Kind of sucked if you lost them, though.

@coder;
This didn’t cost Atari anything since The Yak was an outside contractor working for his own company and would have taken time off whenever he wanted to look after his farm, walk in the hills or tend his great beard. Atari knew they would get a great product and was willing to support him to create it but if it wasn’t up to scratch he would have had to absorb the financial hit not them.

He really is one of the outsiders those few great individuals who despite (or perhaps because of) their own personal ethics and beliefs have left a massive impression on the lives they have touched.

In the certain gaming circles he is revered in exactly the same way as RMS is in the Free Software (with a capital F) community.

When you consider he never did anything original his whole career has been built on taking something somebody else has created and just putting a little sparkle into it the comparison to RMS grows even stronger.

My favourite project he is linked to is Nuon. The software that it’s developers wanted to see in all dvd players. He ported Tempest to it and some nice sound to light stuff (which is one of his favourite projects) only to see the Nuon system disappear without a trace. No problem let’s start porting all this stuff to the next system on the list, xbox 360 live.

Everybody who meets him likes him as long as they know what they are going to expect beforehand he might surprise a few guys who think the hippy has left software.

@sebastian:
cool article you found!
but I wouldn’t call it gold plated code. It’s a real feature. Not in the specs, but clearly a useful feature.

There is some value in building code like this for an application.

It provides a chance for a programmer to explore a new technique in an part of the application that’s not likely to get a lot of use or complaints if they screw it up. But it will still likely go through the QA process, so the programmer get’s important feedback in addition to the practice. Now for the next project they’ll have a better idea of what is possible and can plan to take better advantage of the platform. Finally, there’s a chance that this ‘extra’ feature becomes a real hit with customers.

Nice post. Gold plating is generally wasteful and not The Right Thing. But dammit, we’re programmers. This is not just our profession, it is our art. And the (good) artist should be appreciated for occasionally stretching himself and the work, for signing his piece with a bit of flourish.