The Ultimate Software Gold Plating

The point you should see is not about the code. The point you should see is that the original controller for the system did not match the game play.

It’s not about creating the best code; it’s all about the user. By having this foresight to predicate the user’s reaction created a successful product.

The code could have been a candidate for The Daily WTF, but the user doesn’t care because the got the feature that worked.

Maintainable and readable code is always one of our goals, but without the user, the code is worthless.

There is nothing great in the fact that it worked. I mean what is the point?

The point was that he was crafting the game that he wanted to play, and it was way better for him with the rotary controller. If you want to develop truly great (or even good) software, its best to become a user as much as possible. See http://www.codinghorror.com/blog/archives/001066.html

So if that’s what it took to keep him enthusiastic about the project, it was time well spent. It appears that the result was awesome. I doubt I’ll ever write any software in my lifetime that affects people so much (one can hope though).

Just like Jurassic Park:
… your scientists were so preoccupied with whether or not they could, they didn’t stop to think if they should.

Sometimes as programmers we need to weigh that decision.

Sure, you CAN use some cool ajax to have your search results pop up in an annoyingly small window (see http://asp.net) but did you stop to think whether it was something you really should do??

Does it add value?
Does the value outweigh the short term cost of development and the long term cost of support?

You’re into a different industry, where gold plating allows creative expression, something which is missing from the business side. I Started on the Vic20 had my first game released not long after playing Jeff’s Gridrunner. I spent the next 20+ years in the games industry (last title i worked on was Worms) before moving into business software. Goldplating is something which is feared in the business world but absolutely relished in the games industry. If a developer comes up with a really cool feature that makes the game better in someway, more saleable or playable but wasn’t on the feature list in the first place, more often than not its a bonus, regardless of all the other problems it causes like testing etc.
Business software and entertainment software live by different rules, even though they’re both called by the same name. Games developers gold plate because they’re passionate about what they’re creating. It’s difficult to get passionate about a SPROC that fetches stock prices, so if it take longer than the 20 minutes it’s scheduled for, you’re in trouble.

Cheers,
Rob

Forgot to mention, Jeff’s Game almost ended up delaying the jaguar title i was working on at the time…Soccer Kid. Tempest 2000 on the Jag is definately one of the most addictive shooters released IMO!
If only there was a port of Matrix :wink:

Woah, when did you get an editor? :wink:

Gold plating is fine. It’s when a developer is slipping the schedule to gold plate something that, at it’s core is just die-cast metal, that burns my buttocks.

Are easter eggs a form of gold plating?

How about AJAX? Is it just a case of whiz-bang features for their own sake, or does it cross into real utility?

I mean what is the point?

Nip over to the forum and ask him yourself :wink: (www.yakyak.org)

It’s not mentioned on the box, in the manual or anywhere. Consider it an Easter Egg. The Internet is full of ways of building them yourselves.

I think it was added because the original game was controlled with a spinner. Adding the code to make a spinner work probably didn’t take too long, certainly not as long as the testing cycle took!

Would Google’s 20% time be considered company sanctioned gold plating?

Sometimes it’s fun and satisfying to implement such features - just because you can, because it benefits you, because it’s different from the usual work, because it gives your software a little character, because you can do something cool maybe with very little effort/risk, because you can learn something, and so on. I’d never heard the term gold-plating before but I’ve done it - at least, I think the following would probably qualify:

  • Added automatic mic cut-off to my VoIP client when pushing the noisy shift paddles on my old ACT LABS steering wheel (only when speech was not already in progress).
  • Added LCD display output to my email client for the LCD displays of two Roland MIDI modules, one of which I didn’t own, and the other I rarely had connected.
  • Added automatic continuous spinning animation of all 3D objects in the scene when pressing a key to a commercial application that really didn’t need such a feature. (But some customers found creative uses for it!)

Certainly gold-plating could easily be a mistake in some situations. But sometimes, I think it can be a bit of harmless fun and even have surprising benefits.

Hmm, i don’t consider gold plating harmfull. That’s how advances are made. It’s like the evolutionary ladder for the both software developer skill set and for the product.

No one would argue that orange is gold plated CAPTCHA.

I don’t think that word means what you think that it means.

I don’t associate gold plating with adding fun forward-looking features (that actually got used by the author!). I associate it with editing and reediting finished products that lack nothing, because someone is not ready to say, Worse is better, this is not perfect but it’s good enough, ship it as it is.

For some reason I also associate it with messing endlessly with the front end when the back end has been done for months (and I don’t mean doing usability studies and improving the product, I mean change for the sake of employing do-nothing programmers).

You can save a lot of money if you concrete-plate your code and sink it to the bottom of the river.

And you can save some server space with not-blogging about fairly pants gadgets.

Writing in something like that is cool, but I’d get killed at work for doing that sort of thing. It’s developement time that goes toward functionality that’s not really important to the app and needlessly increases complexity of the app. Those are two things we try to avoid.

One important thing that is missing: If you only do what you should do, and optimize the process to really only do what is necessary you will be slower than expected. Very likely slower than when not being as strict.

Why? Because humans aren’t machines. It makes no fun to be restricted (or self restricted) all the time. You need some inspiration from time to time or you will not be productive and enthusiastic enough be more sluggish etc.

You may do only what you should, but much slower and with less devotion than before when you also did what you wanted, and relaxed by not only slavishly following the requirements.

People don’t like to follow rules, the stricter you make them the worse people will feel and perform. A key point that IMO isn’t taken enough into account in software engineering.

While I get my degree in CS, I am working in IT, and I have to say I gold plate all the time there. Sometimes I do it to documents, sometimes to designs for a system, or computer lab. I use my design skills to create nicer looking docs, and more user satisfying solutions. This is in spite of my boss emphasizing just getting it done. An example: while creating a lab image, I put the recycle bin in the lower right corner of the screen to make it look more like Macs which are very popular there.

My favorite plating has always been CLI options when they weren’t required (for a GUI program). I’ve had that save my butt a few times when someone wanted to automate or integrate a system.

If you are just talking about items not enumerated in specs, I also have fairly strong feelings about programmer tools. Sometimes creating an editor to generate XML, or parse a little mini-language to eliminate a bunch of repetitive data from your code can be the best and fastest way to solve the problem.

So although that’s technically not Gold Plating, I sure find a lot of programmers that resist it because nobody asked for it. They seem to have this illusion that to create an additional tool that isn’t asked for is almost criminal, when in my experience it often speeds overall development.

I do some of this high-level meta programming (programming to help my programming) on virtually every job I work on now.

I suspect that most of the really good/useful features in most software where born as Gold Plating.

Jeff i don’t think this is an example of gold plating.

The original used a spinner control. So in order to ease the migration process it makes sense to create a control to mimic the original, a spinner. Then use that spinner to test the changes for the new system. After the changes for the new console are in place and tested, then work on the new UI’s input.